File indexing completed on 2024-04-06 12:10:38
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <FWCore/Framework/interface/one/EDAnalyzer.h>
0013 #include <FWCore/Framework/interface/Event.h>
0014 #include <FWCore/Framework/interface/MakerMacros.h>
0015 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
0016 #include <DataFormats/EcalDetId/interface/EcalDetIdCollections.h>
0017
0018 #include <DataFormats/EcalDigi/interface/EcalTriggerPrimitiveDigi.h>
0019 #include <DataFormats/EcalDigi/interface/EcalTriggerPrimitiveSample.h>
0020
0021 #include <iostream>
0022 #include <vector>
0023
0024 #include "TFile.h"
0025 #include "TGraph.h"
0026
0027 class EcalPnGraphDumperModule : public edm::one::EDAnalyzer<> {
0028 public:
0029 EcalPnGraphDumperModule(const edm::ParameterSet& ps);
0030 ~EcalPnGraphDumperModule();
0031
0032 std::string intToString(int num);
0033
0034 void analyze(const edm::Event& e, const edm::EventSetup& c);
0035
0036 protected:
0037 int verbosity;
0038 int eventCounter;
0039
0040 int ieb_id;
0041 int first_Pn;
0042
0043 bool inputIsOk;
0044
0045 std::string fileName;
0046
0047 std::vector<int> listChannels;
0048 std::vector<int> listAllChannels;
0049 std::vector<int> listPns;
0050 std::vector<int> listAllPns;
0051
0052 int numPn;
0053
0054 int abscissa[50];
0055 int ordinate[50];
0056
0057 std::vector<TGraph> graphs;
0058
0059 TFile* root_file;
0060 };
0061
0062 EcalPnGraphDumperModule::EcalPnGraphDumperModule(const edm::ParameterSet& ps) {
0063 fileName = ps.getUntrackedParameter<std::string>("fileName", std::string("toto"));
0064
0065 ieb_id = ps.getUntrackedParameter<int>("ieb_id", 1);
0066 first_Pn = 0;
0067
0068 listPns = ps.getUntrackedParameter<std::vector<int> >("listPns", std::vector<int>());
0069
0070 numPn = ps.getUntrackedParameter<int>("numPn", 9);
0071
0072
0073 inputIsOk = true;
0074
0075 std::vector<int>::iterator intIter;
0076
0077 for (intIter = listPns.begin(); intIter != listPns.end(); intIter++) {
0078 if (((*intIter) < 1) || (10 < (*intIter))) {
0079 std::cout << "[EcalPnGraphDumperModule] pn number : " << (*intIter) << " found in listPns. "
0080 << " Valid range is 1-10. Returning." << std::endl;
0081 inputIsOk = false;
0082 return;
0083 }
0084 if (!first_Pn)
0085 first_Pn = (*intIter);
0086 }
0087
0088
0089 for (int i = 0; i < 50; i++)
0090 abscissa[i] = i;
0091
0092
0093 eventCounter = 0;
0094 }
0095
0096 EcalPnGraphDumperModule::~EcalPnGraphDumperModule() {
0097 fileName += (std::string("_iEB") + intToString(ieb_id));
0098 fileName += (std::string("_Pn") + intToString(first_Pn));
0099 fileName += ".graph.root";
0100
0101 root_file = new TFile(fileName.c_str(), "RECREATE");
0102 std::vector<TGraph>::iterator gr_it;
0103 for (gr_it = graphs.begin(); gr_it != graphs.end(); gr_it++)
0104 (*gr_it).Write();
0105 root_file->Close();
0106 }
0107
0108 std::string EcalPnGraphDumperModule::intToString(int num) {
0109
0110
0111
0112
0113 std::ostringstream myStream;
0114 myStream << num << std::flush;
0115
0116 return (myStream.str());
0117 }
0118
0119 void EcalPnGraphDumperModule::analyze(const edm::Event& e, const edm::EventSetup& c) {
0120 eventCounter++;
0121 if (!inputIsOk)
0122 return;
0123
0124
0125 edm::Handle<EcalPnDiodeDigiCollection> PNs;
0126 e.getByLabel("ecalEBunpacker", PNs);
0127
0128
0129
0130
0131 std::vector<int>::iterator pn_it;
0132 for (pn_it = listPns.begin(); pn_it != listPns.end(); pn_it++) {
0133 int ipn = (*pn_it);
0134 int hpn = (numPn / 2);
0135
0136 for (int u = (-hpn); u <= hpn; u++) {
0137 int ipn_c = ipn + u;
0138 if (ipn_c < 1 || ipn_c > 10)
0139 continue;
0140 listAllPns.push_back(ipn_c);
0141 }
0142 }
0143
0144
0145 for (EcalPnDiodeDigiCollection::const_iterator pnItr = PNs->begin(); pnItr != PNs->end(); ++pnItr) {
0146 {
0147 int ipn = (*pnItr).id().iPnId();
0148 int ieb = EcalPnDiodeDetId((*pnItr).id()).iDCCId();
0149
0150
0151 if (ieb != ieb_id)
0152 return;
0153
0154
0155 std::vector<int>::iterator iPnIter;
0156 iPnIter = find(listAllPns.begin(), listAllPns.end(), ipn);
0157 if (iPnIter == listAllPns.end()) {
0158 continue;
0159 }
0160
0161 for (int i = 0; i < (*pnItr).size() && i < 50; ++i) {
0162 ordinate[i] = (*pnItr).sample(i).adc();
0163 }
0164
0165 TGraph oneGraph(50, abscissa, ordinate);
0166 std::string title;
0167 title = "Graph_ev" + intToString(eventCounter) + "_ipn" + intToString(ipn);
0168 oneGraph.SetTitle(title.c_str());
0169 oneGraph.SetName(title.c_str());
0170 graphs.push_back(oneGraph);
0171
0172 }
0173 }
0174 }
0175
0176 DEFINE_FWK_MODULE(EcalPnGraphDumperModule);