File indexing completed on 2024-09-07 04:36:10
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <FWCore/Framework/interface/one/EDAnalyzer.h>
0012 #include <FWCore/Framework/interface/Event.h>
0013 #include <FWCore/Framework/interface/MakerMacros.h>
0014 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
0015 #include <DataFormats/EcalDetId/interface/EcalDetIdCollections.h>
0016
0017 #include <iostream>
0018 #include <vector>
0019
0020 class EcalDigiDumperModule : public edm::one::EDAnalyzer<> {
0021 public:
0022 EcalDigiDumperModule(const edm::ParameterSet& ps) {
0023 verbosity = ps.getUntrackedParameter<int>("verbosity", 1);
0024
0025 ieb_id = ps.getUntrackedParameter<int>("ieb_id", -1);
0026
0027 memErrors = ps.getUntrackedParameter<bool>("memErrors", true);
0028 cryDigi = ps.getUntrackedParameter<bool>("cryDigi", true);
0029 pnDigi = ps.getUntrackedParameter<bool>("pnDigi", true);
0030 tpDigi = ps.getUntrackedParameter<bool>("tpDigi", true);
0031
0032 mode = ps.getUntrackedParameter<int>("mode", 2);
0033
0034 numChannel = ps.getUntrackedParameter<int>("numChannel", 10);
0035 numPN = ps.getUntrackedParameter<int>("numPN", 2);
0036
0037 listChannels = ps.getUntrackedParameter<std::vector<int> >("listChannels", std::vector<int>());
0038 listTowers = ps.getUntrackedParameter<std::vector<int> >("listTowers", std::vector<int>());
0039 listPns = ps.getUntrackedParameter<std::vector<int> >("listPns", std::vector<int>());
0040
0041 inputIsOk = true;
0042
0043
0044 if ((!(mode == 1)) && (!(mode == 2))) {
0045 std::cout << "[EcalDigiDumperModule] parameter mode set to: " << mode
0046 << ". Only mode 1 and 2 are allowed, returning." << std::endl;
0047 inputIsOk = false;
0048 return;
0049 }
0050
0051 std::vector<int>::iterator intIter;
0052
0053 for (intIter = listChannels.begin(); intIter != listChannels.end(); intIter++) {
0054 if (((*intIter) < 1) || (1700 < (*intIter))) {
0055 std::cout << "[EcalDigiDumperModule] ic value: " << (*intIter) << " found in listChannels. "
0056 << " Valid range is 1-1700. Returning." << std::endl;
0057 inputIsOk = false;
0058 return;
0059 }
0060 }
0061
0062 for (intIter = listTowers.begin(); intIter != listTowers.end(); intIter++) {
0063 if (((*intIter) < 1) || (70 < (*intIter))) {
0064 std::cout << "[EcalDigiDumperModule] ic value: " << (*intIter) << " found in listTowers. "
0065 << " Valid range is 1-70. Returning." << std::endl;
0066 inputIsOk = false;
0067 return;
0068 }
0069 }
0070
0071 for (intIter = listPns.begin(); intIter != listPns.end(); intIter++) {
0072 if (((*intIter) < 1) || (10 < (*intIter))) {
0073 std::cout << "[EcalDigiDumperModule] pn number : " << (*intIter) << " found in listPns. "
0074 << " Valid range is 1-10. Returning." << std::endl;
0075 inputIsOk = false;
0076 return;
0077 }
0078 }
0079 }
0080
0081 protected:
0082 int verbosity;
0083 bool memErrors;
0084 bool cryDigi;
0085 bool pnDigi;
0086 bool tpDigi;
0087
0088 bool inputIsOk;
0089
0090 int ieb_id;
0091
0092 int mode;
0093
0094 int numChannel;
0095 int numPN;
0096
0097 std::vector<int> listChannels;
0098 std::vector<int> listTowers;
0099 std::vector<int> listPns;
0100
0101 void analyze(const edm::Event& e, const edm::EventSetup& c) {
0102 if (!inputIsOk)
0103 return;
0104
0105
0106 edm::Handle<EBDigiCollection> digis;
0107 e.getByLabel("ecalEBunpacker", "ebDigis", digis);
0108
0109
0110 edm::Handle<EcalPnDiodeDigiCollection> PNs;
0111 e.getByLabel("ecalEBunpacker", PNs);
0112
0113
0114 edm::Handle<EcalElectronicsIdCollection> gainMem;
0115 e.getByLabel("ecalEBunpacker", "EcalIntegrityMemChIdErrors", gainMem);
0116
0117
0118 edm::Handle<EcalElectronicsIdCollection> MemId;
0119 e.getByLabel("ecalEBunpacker", "EcalIntegrityMemTtIdErrors", MemId);
0120
0121 std::cout << "\n\n";
0122
0123 if (gainMem->size() && memErrors) {
0124 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDumperModule] Size of collection of mem gain errors is: "
0125 << gainMem->size() << std::endl;
0126 std::cout << " [EcalDigiDumperModule] dumping the bit gain errors\n"
0127 << std::endl;
0128 for (EcalElectronicsIdCollection::const_iterator errItr = gainMem->begin(); errItr != gainMem->end(); ++errItr) {
0129 EcalElectronicsId id = (*errItr);
0130 std::cout << "channel: dccNum= " << id.dccId() << "\t tower= " << id.towerId()
0131 << "\t channelNum= " << id.channelId() << " has problems in the gain bits" << std::endl;
0132 }
0133 }
0134
0135 if (MemId->size() && memErrors) {
0136 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDumperModule] Size of collection of mem tt_block_id errors is: "
0137 << MemId->size() << std::endl;
0138 std::cout << " [EcalDigiDumperModule] dumping the mem tt_block_idb errors\n"
0139 << std::endl;
0140 for (EcalElectronicsIdCollection::const_iterator errItr = MemId->begin(); errItr != MemId->end(); ++errItr) {
0141 EcalElectronicsId id = (*errItr);
0142 std::cout << "tower_block: dccNum= " << id.dccId() << "\t tower= " << id.towerId() << " has ID problems "
0143 << std::endl;
0144 }
0145 }
0146
0147 short dumpCounter = 0;
0148
0149 if (verbosity > 0 && cryDigi && (mode == 1)) {
0150 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDumperModule] digi cry collection size " << digis->size()
0151 << std::endl;
0152 std::cout << " [EcalDigiDumperModule] dumping first " << numChannel
0153 << " crystals\n";
0154 dumpCounter = 0;
0155 for (EBDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr) {
0156 {
0157 if ((dumpCounter++) >= numChannel)
0158 break;
0159 if (!((EBDetId((*digiItr).id()).ism() == ieb_id) || (ieb_id == -1)))
0160 continue;
0161
0162 std::cout << "ic-cry: " << EBDetId((*digiItr).id()).ic() << " i-phi: " << EBDetId((*digiItr).id()).iphi()
0163 << " j-eta: " << EBDetId((*digiItr).id()).ieta();
0164
0165 for (unsigned int i = 0; i < (*digiItr).size(); ++i) {
0166 EBDataFrame df(*digiItr);
0167 if (!(i % 3))
0168 std::cout << "\n\t";
0169 std::cout << "sId: " << (i + 1) << " " << df.sample(i) << "\t";
0170 }
0171 std::cout << " " << std::endl;
0172 }
0173 }
0174 }
0175
0176 if (verbosity > 0 && cryDigi && (mode == 2)) {
0177 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDumperModule] digi cry collection size " << digis->size()
0178 << std::endl;
0179 for (EBDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr) {
0180 {
0181 int ic = EBDetId((*digiItr).id()).ic();
0182 int tt = EBDetId((*digiItr).id()).tower().iTT();
0183
0184 if (!((EBDetId((*digiItr).id()).ism() == ieb_id) || (ieb_id == -1)))
0185 continue;
0186
0187 std::vector<int>::iterator icIterCh;
0188 std::vector<int>::iterator icIterTt;
0189 icIterCh = find(listChannels.begin(), listChannels.end(), ic);
0190 icIterTt = find(listTowers.begin(), listTowers.end(), tt);
0191 if (icIterCh == listChannels.end() && icIterTt == listTowers.end()) {
0192 continue;
0193 }
0194
0195 std::cout << "ic-cry: " << ic << " i-phi: " << EBDetId((*digiItr).id()).iphi()
0196 << " j-eta: " << EBDetId((*digiItr).id()).ieta() << " tower: " << tt;
0197
0198 for (unsigned int i = 0; i < (*digiItr).size(); ++i) {
0199 EBDataFrame df(*digiItr);
0200 if (!(i % 3))
0201 std::cout << "\n\t";
0202 std::cout << "sId: " << (i + 1) << " " << df.sample(i) << "\t";
0203 }
0204 std::cout << " " << std::endl;
0205 }
0206 }
0207 }
0208
0209 if (verbosity > 0 && pnDigi && (mode == 1)) {
0210 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ EcalDigiDumperModule digi PN collection. Size: " << PNs->size()
0211 << std::endl;
0212 std::cout << " [EcalDigiDumperModule] dumping first " << numPN << " PNs ";
0213 dumpCounter = 0;
0214 for (EcalPnDiodeDigiCollection::const_iterator pnItr = PNs->begin(); pnItr != PNs->end(); ++pnItr) {
0215 if ((dumpCounter++) >= numPN)
0216 break;
0217 if (!((EcalPnDiodeDetId((*pnItr).id()).iDCCId() == ieb_id) || (ieb_id == -1)))
0218 continue;
0219
0220 std::cout << "\nPN num: " << (*pnItr).id().iPnId();
0221
0222 for (int samId = 0; samId < (*pnItr).size(); samId++) {
0223 if (!(samId % 3))
0224 std::cout << "\n\t";
0225 std::cout << "sId: " << (samId + 1) << " " << (*pnItr).sample(samId) << "\t";
0226 }
0227
0228 }
0229 }
0230
0231 if (verbosity > 0 && pnDigi && (mode == 2)) {
0232 std::cout << "\n\n^^^^^^^^^^^^^^^^^^ EcalDigiDumperModule digi PN collection. Size: " << PNs->size()
0233 << std::endl;
0234
0235 for (EcalPnDiodeDigiCollection::const_iterator pnItr = PNs->begin(); pnItr != PNs->end(); ++pnItr) {
0236 int pnNum = (*pnItr).id().iPnId();
0237
0238 if (!((EcalPnDiodeDetId((*pnItr).id()).iDCCId() == ieb_id) || (ieb_id == -1)))
0239 continue;
0240
0241 std::vector<int>::iterator pnIter;
0242 pnIter = find(listPns.begin(), listPns.end(), pnNum);
0243 if (pnIter == listPns.end()) {
0244 continue;
0245 }
0246
0247 std::cout << "\nPN num: " << (*pnItr).id().iPnId();
0248 for (int samId = 0; samId < (*pnItr).size(); samId++) {
0249 if (!(samId % 3))
0250 std::cout << "\n\t";
0251 std::cout << "sId: " << (samId + 1) << " " << (*pnItr).sample(samId) << "\t";
0252 }
0253
0254 }
0255 }
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276 }
0277
0278 };
0279
0280 DEFINE_FWK_MODULE(EcalDigiDumperModule);