Go to the documentation of this file.00001
00013 #include <FWCore/Framework/interface/EDAnalyzer.h>
00014 #include <FWCore/Framework/interface/Event.h>
00015 #include <FWCore/Framework/interface/MakerMacros.h>
00016 #include <FWCore/Framework/interface/ESHandle.h>
00017 #include <FWCore/MessageLogger/interface/MessageLogger.h>
00018
00019 #include "CaloOnlineTools/EcalTools/plugins/EcalDigiDisplay.h"
00020 #include "CaloOnlineTools/EcalTools/interface/EcalFedMap.h"
00021 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00022 #include "DataFormats/EcalDetId/interface/EcalDetIdCollections.h"
00023 #include "DataFormats/EcalRawData/interface/EcalRawDataCollections.h"
00024 #include "DataFormats/EcalRawData/interface/EcalDCCHeaderBlock.h"
00025
00026 #include "DataFormats/EcalDigi/interface/EcalTriggerPrimitiveDigi.h"
00027 #include "DataFormats/EcalDigi/interface/EcalTriggerPrimitiveSample.h"
00028
00029 #include <iostream>
00030 #include <vector>
00031 #include <set>
00032 #include <map>
00033
00034
00035 EcalDigiDisplay::EcalDigiDisplay(const edm::ParameterSet& ps) {
00036
00037
00038 ebDigiCollection_ = ps.getParameter<std::string>("ebDigiCollection");
00039 eeDigiCollection_ = ps.getParameter<std::string>("eeDigiCollection");
00040 digiProducer_ = ps.getParameter<std::string>("digiProducer");
00041
00042 requestedFeds_ = ps.getUntrackedParameter<std::vector<int> >("requestedFeds");
00043 requestedEbs_ = ps.getUntrackedParameter<std::vector<std::string> >("requestedEbs");
00044
00045 cryDigi = ps.getUntrackedParameter<bool>("cryDigi");
00046 ttDigi = ps.getUntrackedParameter<bool>("ttDigi");
00047 pnDigi = ps.getUntrackedParameter<bool>("pnDigi");
00048
00049 mode = ps.getUntrackedParameter<int>("mode");
00050 listChannels = ps.getUntrackedParameter<std::vector<int> >("listChannels");
00051 listTowers = ps.getUntrackedParameter<std::vector<int> >("listTowers");
00052 listPns = ps.getUntrackedParameter<std::vector<int> >("listPns");
00053
00054 std::vector<int> listDefaults;
00055 listDefaults.push_back(-1);
00056 requestedFeds_ = ps.getUntrackedParameter<std::vector<int> >("requestedFeds",listDefaults);
00057 bool fedIsGiven = false;
00058
00059 std::vector<std::string> ebDefaults;
00060 ebDefaults.push_back("none");
00061 requestedEbs_ = ps.getUntrackedParameter<std::vector<std::string> >("requestedEbs",ebDefaults);
00062
00063 if ( requestedFeds_[0] != -1 ) {
00064 edm::LogInfo("EcalDigiDisplay") << "FED id is given! Goining to beginRun! ";
00065 fedIsGiven = true;
00066 }else {
00067 if ( requestedEbs_[0] !="none" ) {
00068
00069 requestedFeds_.clear();
00070 fedMap = new EcalFedMap();
00071 for (std::vector<std::string>::const_iterator ebItr = requestedEbs_.begin();
00072 ebItr!= requestedEbs_.end(); ++ebItr) {
00073 requestedFeds_.push_back(fedMap->getFedFromSlice(*ebItr));
00074 }
00075 delete fedMap;
00076 } else {
00077
00078 for ( int i=601; i<655; ++i){
00079 requestedFeds_.push_back(i);
00080 }
00081 }
00082 }
00083
00084
00085 listChannels = ps.getUntrackedParameter<std::vector<int> >("listChannels",listDefaults);
00086
00087 listTowers = ps.getUntrackedParameter<std::vector<int> >("listTowers", listDefaults);
00088
00089
00090 std::vector<int>::iterator fedIter;
00091 std::vector<int>::iterator intIter;
00092 inputIsOk = true;
00093
00094 if ( fedIsGiven ) {
00095 for ( fedIter = requestedFeds_.begin(); fedIter!=requestedFeds_.end(); ++fedIter) {
00096 if ( (*fedIter) < 601 || (*fedIter) > 655 ) {
00097 edm::LogError("EcalDigiDisplay") << " FED value: " << (*fedIter) << " found in requetsedFeds. "
00098 << " Valid range is 601-654. Returning.";
00099 inputIsOk = false;
00100 return;
00101 }
00102 }
00103 }
00104 bool barrelSM = false;
00105
00106 for (fedIter = requestedFeds_.begin(); fedIter!=requestedFeds_.end(); ++fedIter) {
00107 if ( (*fedIter) > 609 && (*fedIter) < 646 && inputIsOk )
00108 barrelSM = true;
00109 }
00110
00111 if ( barrelSM ) {
00112 if ( cryDigi ) {
00113
00114 for (intIter = listChannels.begin(); intIter != listChannels.end(); intIter++) {
00115 if ( ((*intIter) < 1) || (1700 < (*intIter)) ) {
00116 edm::LogError("EcalDigiDisplay") << " ic value: " << (*intIter) << " found in listChannels. "
00117 << " Valid range is 1-1700. Returning.";
00118 inputIsOk = false;
00119 return;
00120 }
00121 }
00122 }
00123
00124 if ( ttDigi ) {
00125 for (intIter = listTowers.begin(); intIter != listTowers.end(); intIter++) {
00126
00127 if ( ((*intIter) < 1) || (70 < (*intIter)) ) {
00128 edm::LogError("EcalDigiDisplay") << " TT value: " << (*intIter) << " found in listTowers. "
00129 << " Valid range for EB SM is 1-70. Returning.";
00130 inputIsOk = false;
00131 return;
00132 }
00133 }
00134 }
00135 }else
00136 if (ttDigi) {
00137
00138 for (intIter = listTowers.begin(); intIter != listTowers.end(); intIter++) {
00139 if ( (*intIter) > 34 ) {
00140 edm::LogError("EcalDigiDisplay") << " TT value: " << (*intIter) << " found in listTowers. "
00141 << " Valid range for EE DCC is 1-34. Returning.";
00142 inputIsOk = false;
00143 return;
00144 }
00145 }
00146 }
00147
00148
00149 listPns = ps.getUntrackedParameter<std::vector<int> >("listPns",listDefaults);
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159 if ( pnDigi ) {
00160 for (intIter = listPns.begin(); intIter != listPns.end(); intIter++) {
00161 if ( ((*intIter) < 1) || (10 < (*intIter)) ) {
00162 edm::LogError("EcalDigiDisplay") << " Pn number : " << (*intIter) << " found in listPns. "
00163 << " Valid range is 1-10. Returning.";
00164 inputIsOk = false;
00165 return;
00166 }
00167 }
00168 }
00169 }
00170
00171 EcalDigiDisplay::~EcalDigiDisplay() {
00172
00173
00174 }
00175
00176
00177 void EcalDigiDisplay::beginRun(edm::Run const &, edm::EventSetup const& c) {
00178
00179 edm::LogInfo("EcalDigiDisplay") << "entering beginRun! ";
00180
00181 edm::ESHandle<EcalElectronicsMapping> elecHandle;
00182 c.get<EcalMappingRcd>().get(elecHandle);
00183 ecalElectronicsMap_ = elecHandle.product();
00184 }
00185
00186
00187 void EcalDigiDisplay::analyze( edm::Event const & e, edm::EventSetup const & c) {
00188
00189
00190 if (!inputIsOk) return;
00191
00192
00193 edm::Handle<EcalRawDataCollection> dccHeader;
00194 try {
00195 e.getByLabel(digiProducer_,dccHeader);
00196 } catch (cms::Exception& ex) {
00197 edm::LogError("EcalDigiUnpackerModule") << "Can't get DCC Headers!";
00198 }
00199
00200
00201 bool ebDigisFound = false;
00202 bool eeDigisFound = false;
00203 bool pnDigisFound = false;
00204
00205 edm::Handle<EBDigiCollection> eb_digis;
00206 try {
00207 e.getByLabel(digiProducer_,ebDigiCollection_, eb_digis);
00208 if ( eb_digis->size() != 0 )
00209 ebDigisFound = true;
00210 } catch (cms::Exception& ex) {
00211 edm::LogError("EcalDigiUnpackerModule") << "EB Digis were not found!";
00212 }
00213
00214
00215 edm::Handle<EEDigiCollection> ee_digis;
00216 try {
00217 e.getByLabel(digiProducer_,eeDigiCollection_, ee_digis);
00218 if ( ee_digis->size() != 0 )
00219 eeDigisFound = true;
00220 } catch (cms::Exception& ex) {
00221 edm::LogError("EcalDigiUnpackerModule") << "EE Digis were not found!";
00222 }
00223
00224
00225 edm::Handle<EcalPnDiodeDigiCollection> pn_digis;
00226 try {
00227 e.getByLabel(digiProducer_, pn_digis);
00228 if ( pn_digis->size() != 0)
00229 pnDigisFound = true;
00230 } catch (cms::Exception& ex) {
00231 edm::LogError("EcalDigiUnpackerModule") << "PNs were not found!";
00232 }
00233
00234
00235
00236
00237 if ( cryDigi || ttDigi ) {
00238 if ( ebDigisFound )
00239 readEBDigis(eb_digis, mode);
00240 if ( eeDigisFound )
00241 readEEDigis(ee_digis, mode);
00242 if ( !(ebDigisFound || eeDigisFound) ) {
00243 edm::LogWarning("EcalDigiUnpackerModule") << "No Digis were found! Returning..";
00244 return;
00245 }
00246 }
00247 if ( pnDigi ) {
00248 if (pnDigisFound )
00249 readPNDigis(pn_digis, mode);
00250 }
00251 }
00252
00254
00256
00257 void EcalDigiDisplay::readEBDigis (edm::Handle<EBDigiCollection> digis, int Mode) {
00258
00259 for ( EBDigiCollection::const_iterator digiItr= digis->begin();digiItr != digis->end();
00260 ++digiItr ) {
00261
00262 EBDetId detId = EBDetId((*digiItr).id());
00263 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(detId);
00264
00265 int FEDid = elecId.dccId() + 600;
00266 std::vector<int>::iterator fedIter = find(requestedFeds_.begin(), requestedFeds_.end(), FEDid);
00267 if (fedIter == requestedFeds_.end()) continue;
00268
00269 int ic = EBDetId((*digiItr).id()).ic();
00270 int tt = EBDetId((*digiItr).id()).tower().iTT();
00271
00272
00273 if ( Mode ==1 ) {
00274 edm::LogInfo("EcalDigiDisplay") << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDisplay] digi cry collection size " << digis->size();
00275 edm::LogInfo("EcalDigiDisplay") << " [EcalDigiDisplay] dumping first " << listChannels[0] << " crystals\n";
00276
00277 if( ic > listChannels[0]) continue;
00278 } else if ( Mode==2 ) {
00279
00280 std::vector<int>::iterator icIterCh;
00281 std::vector<int>::iterator icIterTt;
00282 icIterCh = find(listChannels.begin(), listChannels.end(), ic);
00283 icIterTt = find(listTowers.begin(), listTowers.end(), tt);
00284 if (icIterCh == listChannels.end() && icIterTt == listTowers.end() ) continue;
00285 edm::LogInfo("EcalDigiDisplay") << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDisplay] digi cry collection size " << digis->size();
00286 } else {
00287 edm::LogInfo("EcalDigiDisplay") << "[EcalDigiDisplay] parameter mode set to: " << Mode
00288 << ". Only mode 1 and 2 are allowed. Returning...";
00289 inputIsOk = false;
00290 return;
00291 }
00292 std::cout << "FEDID: " << FEDid << std::endl;
00293 std::cout << "Tower: " << EBDetId((*digiItr).id()).tower().iTT()
00294 <<" ic-cry: "
00295 << EBDetId((*digiItr).id()).ic() << " i-phi: "
00296 << EBDetId((*digiItr).id()).iphi() << " j-eta: "
00297 << EBDetId((*digiItr).id()).ieta() << std::endl;
00298
00299 for ( unsigned int i=0; i< (*digiItr).size() ; ++i ) {
00300 EBDataFrame df( *digiItr );
00301 if (!(i%3) ) std::cout << "\n\t";
00302 std::cout << "sId: " << (i+1) << " " << df.sample(i) << "\t";
00303 }
00304 std::cout << " " << std::endl;
00305 }
00306 }
00307
00308
00309 void EcalDigiDisplay::readEEDigis (edm::Handle<EEDigiCollection> digis, int Mode) {
00310
00311
00312 if ( Mode!=2 ) {
00313 std::cout << "For Endcap mode needs to be set to 2" << std::endl;
00314 return;
00315 }
00316
00317 for ( EEDigiCollection::const_iterator digiItr= digis->begin();digiItr != digis->end();
00318 ++digiItr ) {
00319
00320
00321 EEDetId detId = EEDetId((*digiItr).id());
00322 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(detId);
00323
00324 int FEDid = elecId.dccId() + 600;
00325 std::vector<int>::iterator fedIter = find(requestedFeds_.begin(), requestedFeds_.end(), FEDid);
00326 if (fedIter == requestedFeds_.end()) continue;
00327
00328 edm::LogInfo("EcalDigiDisplay") << "\n\n^^^^^^^^^^^^^^^^^^ [EcalDigiDisplay] digi cry collection size " << digis->size();
00329
00330 int crystalId = 10000 * FEDid + 100 * elecId.towerId() + 5 * (elecId.stripId()-1)+elecId.xtalId();
00331 int chId = elecId.towerId();
00332
00333 std::vector<int>::iterator icIterCh;
00334 std::vector<int>::iterator icIterTt;
00335 icIterCh = find(listChannels.begin(), listChannels.end(), crystalId);
00336 icIterTt = find(listTowers.begin(), listTowers.end(), chId);
00337 if ( icIterCh == listChannels.end() && icIterTt == listTowers.end() ) continue;
00338
00339 std::cout << "FEDID: " << FEDid << std::endl;
00340 std::cout << "Tower: " << elecId.towerId()
00341 << "crystalId: "
00342 << crystalId << " i-x: "
00343 << EEDetId((*digiItr).id()).ix() << " j-y: "
00344 << EEDetId((*digiItr).id()).iy() << std::endl;
00345
00346
00347 for ( unsigned int i=0; i< (*digiItr).size() ; ++i ) {
00348 EEDataFrame df( *digiItr );
00349 if (!(i%3) ) std::cout << "\n\t";
00350 std::cout << "sId: " << (i+1) << " " << df.sample(i) << "\t";
00351 }
00352 std::cout << " " << std::endl;
00353 }
00354 }
00355
00356 void EcalDigiDisplay::readPNDigis(edm::Handle<EcalPnDiodeDigiCollection> PNs, int Mode) {
00357
00358 int pnDigiCounter = 0;
00359
00360
00361 for ( EcalPnDiodeDigiCollection::const_iterator pnItr = PNs->begin(); pnItr != PNs->end(); ++pnItr ) {
00362 EcalPnDiodeDetId pnDetId = EcalPnDiodeDetId((*pnItr).id());
00363
00364 int FEDid = pnDetId.iDCCId() + 600;
00365 std::vector<int>::iterator fedIter = find(requestedFeds_.begin(), requestedFeds_.end(), FEDid);
00366 if (fedIter == requestedFeds_.end()) continue;
00367 int pnNum = (*pnItr).id().iPnId();
00368
00369 if ( Mode == 1) {
00370 edm::LogInfo("EcalDigiDisplay") << "\n\n^^^^^^^^^^^^^^^^^^ EcalDigiDisplay digi PN collection. Size: " << PNs->size();
00371 edm::LogInfo("EcalDigiDisplay") << " [EcalDigiDisplay] dumping first " << listPns[0] << " PNs ";
00372
00373 if ( (pnDigiCounter++) >= listPns[0] ) break;
00374 } else if ( Mode == 2) {
00375 edm::LogInfo("EcalDigiDisplay") << "\n\n^^^^^^^^^^^^^^^^^^ EcalDigiDisplay digi PN collection. Size: " << PNs->size();
00376
00377
00378 std::vector<int>::iterator pnIter;
00379 pnIter = find(listPns.begin(), listPns.end(), pnNum);
00380 if (pnIter == listPns.end()) continue;
00381 } else {
00382 edm::LogError("EcalDigiDisplay")<< "[EcalDigiDisplay] parameter mode set to: " << Mode
00383 << ". Only mode 1 and 2 are allowed. Returning...";
00384 inputIsOk = false;
00385 return;
00386 }
00387
00388 std::cout << "DCCID: " << pnDetId.iDCCId() << std::endl;
00389 std::cout << "\nPN num: " << (*pnItr).id().iPnId();
00390 for ( int samId=0; samId < (*pnItr).size() ; samId++ ) {
00391 if (!(samId%3) ) std::cout << "\n\t";
00392 std::cout << "sId: " << (samId+1) << " "
00393 << (*pnItr).sample(samId)
00394 << "\t";
00395 }
00396 }
00397 }
00398
00399
00400 void EcalDigiDisplay::endJob() {
00401
00402 edm::LogInfo("EcalDigiDisplay") << "DONE!.... " ;
00403 }
00404
00405