#include <EventFilter/EcalTBRawToDigi/interface/EcalDCC07UnpackingModule.h>
Public Member Functions | |
void | beginJob (const edm::EventSetup &c) |
EcalDCCTB07UnpackingModule (const edm::ParameterSet &pset) | |
Constructor. | |
void | endJob (void) |
void | produce (edm::Event &e, const edm::EventSetup &c) |
Produce digis out of raw data. | |
virtual | ~EcalDCCTB07UnpackingModule () |
Destructor. | |
Private Attributes | |
CamacTBDataFormatter * | camacTBformatter_ |
EcalSupervisorTBDataFormatter * | ecalSupervisorFormatter_ |
EcalTB07DaqFormatter * | formatter_ |
MatacqTBDataFormatter * | matacqFormatter_ |
bool | ProduceEBDigis_ |
bool | ProduceEEDigis_ |
TableDataFormatter * | tableFormatter_ |
Definition at line 27 of file EcalDCC07UnpackingModule.h.
EcalDCCTB07UnpackingModule::EcalDCCTB07UnpackingModule | ( | const edm::ParameterSet & | pset | ) |
Constructor.
Definition at line 43 of file EcalDCC07UnpackingModule.cc.
References camacTBformatter_, python::h4_mapping_cfi::ccuIDs, python::h4_mapping_cfi::channelIDs, ecalSupervisorFormatter_, false, formatter_, edm::ParameterSet::getUntrackedParameter(), i, python::h4_mapping_cfi::ics, it, matacqFormatter_, python::h4_mapping_cfi::positionIDs, ProduceEBDigis_, ProduceEEDigis_, python::h4_mapping_cfi::statusIDs, strip(), python::h4_mapping_cfi::stripIDs, tableFormatter_, python::h4_mapping_cfi::towerIDs, and true.
00043 { 00044 00045 std::string tbName = pset.getUntrackedParameter<std::string >("tbName", std::string("h2") ); 00046 00047 ProduceEEDigis_ = pset.getUntrackedParameter<bool >("produceEEdigi", true ); 00048 ProduceEBDigis_ = pset.getUntrackedParameter<bool >("produceEBdigi", false ); 00049 00050 // index of crystal <-> tower ID (DQM plots) position <-> stripIDs <-> channelIDs for the test beam (2007) 00051 std::vector<int> ics = pset.getUntrackedParameter<std::vector<int> >("ics", std::vector<int>()); 00052 std::vector<int> towerIDs = pset.getUntrackedParameter<std::vector<int> >("towerIDs", std::vector<int>()); 00053 std::vector<int> stripIDs = pset.getUntrackedParameter<std::vector<int> >("stripIDs", std::vector<int>()); 00054 std::vector<int> channelIDs = pset.getUntrackedParameter<std::vector<int> >("channelIDs", std::vector<int>()); 00055 00056 // status id <-> tower CCU ID <-> DQM plots position mapping for the test beam (2007) 00057 std::vector<int> statusIDs = pset.getUntrackedParameter<std::vector<int> >("statusIDs", std::vector<int>()); 00058 std::vector<int> ccuIDs = pset.getUntrackedParameter<std::vector<int> >("ccuIDs", std::vector<int>()); 00059 std::vector<int> positionIDs = pset.getUntrackedParameter<std::vector<int> >("positionIDs", std::vector<int>()); 00060 00061 // check if vectors are filled 00062 if ( ics.size() == 0 || towerIDs.size() == 0 || stripIDs.size() == 0 || channelIDs.size() == 0 ){ 00063 edm::LogError("EcalDCCTB07UnpackingModule") << "Some of the mapping info is missing! Check config files! " << 00064 " Size of IC vector is " << ics.size() << 00065 " Size of Tower ID vector is " << towerIDs.size() << 00066 " Size of Strip ID vector is " << stripIDs.size() << 00067 " Size of Channel ID vector is " << channelIDs.size(); 00068 } 00069 if ( statusIDs.size() == 0 || ccuIDs.size() == 0 || positionIDs.size() == 0 ) { 00070 edm::LogError("EcalDCCTB07UnpackingModule") << "Some of the mapping info is missing! Check config files! " << 00071 " Size of status ID vector is " << statusIDs.size() << 00072 " Size of ccu ID vector is " << ccuIDs.size() << 00073 " positionIDs size is " << positionIDs.size(); 00074 } 00075 00076 // check if vectors have the same size 00077 if ( ics.size() != towerIDs.size() || ics.size() != stripIDs.size() || ics.size() != channelIDs.size() || 00078 towerIDs.size() != stripIDs.size() || towerIDs.size() != channelIDs.size() || 00079 stripIDs.size() != channelIDs.size() ) 00080 edm::LogError("EcalDCCTB07UnpackingModule") << "Mapping information is corrupted. " << 00081 "Tower/DQM position/strip/channel vectors are of different size! Check cfi files! \n" << 00082 " Size of IC vector is " << ics.size() << 00083 " Size of Tower ID vector is " << towerIDs.size() << 00084 " Size of Strip ID vector is " << stripIDs.size() << 00085 " Size of Channel ID vector is " << channelIDs.size(); 00086 00087 if ( statusIDs.size() != ccuIDs.size() || statusIDs.size() != positionIDs.size() || 00088 ccuIDs.size() != positionIDs.size() ) 00089 edm::LogError("EcalDCCTB07UnpackingModule") << "Mapping information is corrupted. " << 00090 "Status/CCU ID/DQM position vectors are of different size! Check cfi files! \n" << 00091 " Size of status ID vector is " << statusIDs.size() << 00092 " Size of ccu ID vector is " << ccuIDs.size() << 00093 " positionIDs size is " << positionIDs.size(); 00094 00095 int cryIcMap[68][5][5]; 00096 int tbStatusToLocation[71]; 00097 int tbTowerIDToLocation[201]; 00098 for (unsigned it=1; it <= 68; ++it ) 00099 for (unsigned is=1; is <=5; ++is ) 00100 for (unsigned ic=1; ic <=5; ++ic) 00101 cryIcMap[it-1][is-1][ic-1] = 1700; 00102 00103 for (unsigned it=1; it <=71; ++it) 00104 tbStatusToLocation[it-1] = it - 1; 00105 00106 for (unsigned it=1; it <= 201; ++it) 00107 tbTowerIDToLocation[it-1] = it - 1; 00108 00109 // Fill the cry IC map 00110 for(unsigned int i=0; i < ics.size(); ++i) { 00111 int tower = towerIDs[i]; 00112 int strip = stripIDs[i]; 00113 int channel = channelIDs[i]; 00114 int ic = ics[i]; 00115 cryIcMap[tower-1][strip-1][channel-1] = ic; 00116 } 00117 for(unsigned int i = 0; i < statusIDs.size(); ++i) { 00118 int is = statusIDs[i]; 00119 int it = ccuIDs[i]; 00120 int itEB = positionIDs[i]; 00121 00122 tbStatusToLocation[is] = itEB; 00123 tbTowerIDToLocation[it] = itEB; 00124 } 00125 00126 formatter_ = new EcalTB07DaqFormatter(tbName, cryIcMap, tbStatusToLocation, tbTowerIDToLocation); 00127 ecalSupervisorFormatter_ = new EcalSupervisorTBDataFormatter(); 00128 camacTBformatter_ = new CamacTBDataFormatter(); 00129 tableFormatter_ = new TableDataFormatter(); 00130 matacqFormatter_ = new MatacqTBDataFormatter(); 00131 00132 00133 // digis 00134 produces<EBDigiCollection>("ebDigis"); 00135 produces<EEDigiCollection>("eeDigis"); 00136 produces<EcalMatacqDigiCollection>(); 00137 produces<EcalPnDiodeDigiCollection>(); 00138 produces<EcalRawDataCollection>(); 00139 produces<EcalTrigPrimDigiCollection>("EBTT"); 00140 00141 //TB specifics data 00142 produces<EcalTBHodoscopeRawInfo>(); 00143 produces<EcalTBTDCRawInfo>(); 00144 produces<EcalTBEventHeader>(); 00145 00146 // crystals' integrity 00147 produces<EBDetIdCollection>("EcalIntegrityDCCSizeErrors"); 00148 produces<EcalElectronicsIdCollection>("EcalIntegrityTTIdErrors"); 00149 produces<EcalElectronicsIdCollection>("EcalIntegrityBlockSizeErrors"); 00150 produces<EBDetIdCollection>("EcalIntegrityChIdErrors"); 00151 produces<EBDetIdCollection>("EcalIntegrityGainErrors"); 00152 produces<EBDetIdCollection>("EcalIntegrityGainSwitchErrors"); 00153 produces<EBDetIdCollection>("EcalIntegrityGainSwitchStayErrors"); 00154 produces<EBDetIdCollection>("EcalIntegrityGainSwitchStayErrors"); 00155 00156 // mem channels' integrity 00157 produces<EcalElectronicsIdCollection>("EcalIntegrityMemTtIdErrors"); 00158 produces<EcalElectronicsIdCollection>("EcalIntegrityMemBlockSize"); 00159 produces<EcalElectronicsIdCollection>("EcalIntegrityMemChIdErrors"); 00160 produces<EcalElectronicsIdCollection>("EcalIntegrityMemGainErrors"); 00161 }
EcalDCCTB07UnpackingModule::~EcalDCCTB07UnpackingModule | ( | ) | [virtual] |
Destructor.
Definition at line 164 of file EcalDCC07UnpackingModule.cc.
References formatter_.
00164 { 00165 00166 delete formatter_; 00167 00168 }
void EcalDCCTB07UnpackingModule::beginJob | ( | const edm::EventSetup & | c | ) | [virtual] |
void EcalDCCTB07UnpackingModule::produce | ( | edm::Event & | e, | |
const edm::EventSetup & | c | |||
) | [virtual] |
Produce digis out of raw data.
Implements edm::EDProducer.
Definition at line 178 of file EcalDCC07UnpackingModule.cc.
References EcalDCCHeaderBlock::BEAMH4, BEG_DCC_FED_ID, BEG_DCC_FED_ID_GLOBAL, camacTBformatter_, EcalDCCHeaderBlock::COSMIC, GenMuonPlsPt100GeV_cfg::cout, data, ECAL_SUPERVISOR_FED_ID, ecalSupervisorFormatter_, END_DCC_FED_ID, END_DCC_FED_ID_GLOBAL, lat::endl(), formatter_, edm::Event::getByType(), id, MatacqTBDataFormatter::interpretRawData(), EcalTB07DaqFormatter::interpretRawData(), TableDataFormatter::interpretRawData(), EcalSupervisorTBDataFormatter::interpretRawData(), CamacTBDataFormatter::interpretRawData(), FEDNumbering::lastFEDId(), LogDebug, MATACQ_FED_ID, matacqFormatter_, ProduceEBDigis_, ProduceEEDigis_, edm::Event::put(), FEDRawData::size(), TABLE_FED_ID, tableFormatter_, TBCAMAC_FED_ID, cms::Exception::what(), ECALTBParserException::what(), and ECALTBParserBlockException::what().
00178 { 00179 00180 edm::Handle<FEDRawDataCollection> rawdata; 00181 e.getByType(rawdata); 00182 00183 00184 // create the collection of Ecal Digis 00185 std::auto_ptr<EBDigiCollection> productEb(new EBDigiCollection); 00186 00187 // YM create the collection of Ecal Endcap Digis 00188 std::auto_ptr<EEDigiCollection> productEe(new EEDigiCollection); 00189 00190 // create the collection of Matacq Digi 00191 std::auto_ptr<EcalMatacqDigiCollection> productMatacq(new EcalMatacqDigiCollection()); 00192 00193 // create the collection of Ecal PN's 00194 std::auto_ptr<EcalPnDiodeDigiCollection> productPN(new EcalPnDiodeDigiCollection); 00195 00196 //create the collection of Ecal DCC Header 00197 std::auto_ptr<EcalRawDataCollection> productDCCHeader(new EcalRawDataCollection); 00198 00199 // create the collection with trigger primitives, bits and flags 00200 std::auto_ptr<EcalTrigPrimDigiCollection> productTriggerPrimitives(new EcalTrigPrimDigiCollection); 00201 00202 // create the collection of Ecal Integrity DCC Size 00203 std::auto_ptr<EBDetIdCollection> productDCCSize(new EBDetIdCollection); 00204 00205 // create the collection of Ecal Integrity TT Id 00206 std::auto_ptr<EcalElectronicsIdCollection> productTTId(new EcalElectronicsIdCollection); 00207 00208 // create the collection of Ecal Integrity TT Block Size 00209 std::auto_ptr<EcalElectronicsIdCollection> productBlockSize(new EcalElectronicsIdCollection); 00210 00211 // create the collection of Ecal Integrity Ch Id 00212 std::auto_ptr<EBDetIdCollection> productChId(new EBDetIdCollection); 00213 00214 // create the collection of Ecal Integrity Gain 00215 std::auto_ptr<EBDetIdCollection> productGain(new EBDetIdCollection); 00216 00217 // create the collection of Ecal Integrity Gain Switch 00218 std::auto_ptr<EBDetIdCollection> productGainSwitch(new EBDetIdCollection); 00219 00220 // create the collection of Ecal Integrity Gain Switch Stay 00221 std::auto_ptr<EBDetIdCollection> productGainSwitchStay(new EBDetIdCollection); 00222 00223 // create the collection of Ecal Integrity Mem towerBlock_id errors 00224 std::auto_ptr<EcalElectronicsIdCollection> productMemTtId(new EcalElectronicsIdCollection); 00225 00226 // create the collection of Ecal Integrity Mem gain errors 00227 std::auto_ptr< EcalElectronicsIdCollection> productMemBlockSize(new EcalElectronicsIdCollection); 00228 00229 // create the collection of Ecal Integrity Mem gain errors 00230 std::auto_ptr< EcalElectronicsIdCollection> productMemGain(new EcalElectronicsIdCollection); 00231 00232 // create the collection of Ecal Integrity Mem ch_id errors 00233 std::auto_ptr<EcalElectronicsIdCollection> productMemChIdErrors(new EcalElectronicsIdCollection); 00234 00235 // create the collection of TB specifics data 00236 std::auto_ptr<EcalTBHodoscopeRawInfo> productHodo(new EcalTBHodoscopeRawInfo()); 00237 std::auto_ptr<EcalTBTDCRawInfo> productTdc(new EcalTBTDCRawInfo()); 00238 std::auto_ptr<EcalTBEventHeader> productHeader(new EcalTBEventHeader()); 00239 00240 00241 try { 00242 00243 for (int id= 0; id<=FEDNumbering::lastFEDId(); ++id){ 00244 00245 // edm::LogInfo("EcalDCCTB07UnpackingModule") << "EcalDCCTB07UnpackingModule::Got FED ID "<< id <<" "; 00246 const FEDRawData& data = rawdata->FEDData(id); 00247 // edm::LogInfo("EcalDCCTB07UnpackingModule") << " Fed data size " << data.size() ; 00248 00249 //std::cout <<"1 Fed id: "<<dec<<id<< " Fed data size: " <<data.size() << std::endl; 00250 // const unsigned char * pData = data.data(); 00251 // int length = data.size(); 00252 // if(length >0 ){ 00253 // if(length >= 40){length = 40;} 00254 // std::cout<<"##############################################################"<<std::endl; 00255 // for( int i=0; i<length; i++ ) { 00256 // std::cout << std::hex << std::setw(8) << int(pData[i]) << " "; 00257 // if( (i+1)%8 == 0 ) std::cout << std::endl; 00258 // } 00259 // std::cout<<"##############################################################"<<std::endl; 00260 // } 00261 if (data.size()>16){ 00262 00263 if ( (id >= BEG_DCC_FED_ID && id <= END_DCC_FED_ID) || 00264 ( BEG_DCC_FED_ID_GLOBAL <= id && id <= END_DCC_FED_ID_GLOBAL ) 00265 ) 00266 { // do the DCC data unpacking and fill the collections 00267 00268 (*productHeader).setSmInBeam(id); 00269 // YM add productEe to the list of arguments of the formatter 00270 formatter_->interpretRawData(data, *productEb, *productEe, *productPN, 00271 *productDCCHeader, 00272 *productDCCSize, 00273 *productTTId, *productBlockSize, 00274 *productChId, *productGain, *productGainSwitch, *productGainSwitchStay, 00275 *productMemTtId, *productMemBlockSize, 00276 *productMemGain, *productMemChIdErrors, 00277 *productTriggerPrimitives); 00278 int runType = (*productDCCHeader)[0].getRunType(); 00279 if ( runType == EcalDCCHeaderBlock::COSMIC || runType == EcalDCCHeaderBlock::BEAMH4 ) 00280 (*productHeader).setTriggerMask(0x1); 00281 else if ( runType == 4 || runType == 5 || runType == 6 ) //laser runs 00282 (*productHeader).setTriggerMask(0x2000); 00283 else if ( runType == 9 || runType == 10 || runType == 11 ) //pedestal runs 00284 (*productHeader).setTriggerMask(0x800); 00285 LogDebug("EcalDCCTB07UnpackingModule") << "Event type is " << (*productHeader).eventType() << " dbEventType " << (*productHeader).dbEventType(); 00286 } 00287 else if ( id == ECAL_SUPERVISOR_FED_ID ) 00288 ecalSupervisorFormatter_->interpretRawData(data, *productHeader); 00289 else if ( id == TBCAMAC_FED_ID ) 00290 camacTBformatter_->interpretRawData(data, *productHeader,*productHodo, *productTdc ); 00291 else if ( id == TABLE_FED_ID ) 00292 tableFormatter_->interpretRawData(data, *productHeader); 00293 else if ( id == MATACQ_FED_ID ) 00294 matacqFormatter_->interpretRawData(data, *productMatacq); 00295 }// endif 00296 }//endfor 00297 00298 00299 // commit to the event 00300 e.put(productPN); 00301 if (ProduceEBDigis_) e.put(productEb,"ebDigis"); 00302 if (ProduceEEDigis_) e.put(productEe,"eeDigis"); 00303 e.put(productMatacq); 00304 e.put(productDCCHeader); 00305 e.put(productTriggerPrimitives, "EBTT"); 00306 00307 if (ProduceEBDigis_) e.put(productDCCSize,"EcalIntegrityDCCSizeErrors"); 00308 if (ProduceEBDigis_) e.put(productTTId,"EcalIntegrityTTIdErrors"); 00309 if (ProduceEBDigis_) e.put(productBlockSize,"EcalIntegrityBlockSizeErrors"); 00310 if (ProduceEBDigis_) e.put(productChId,"EcalIntegrityChIdErrors"); 00311 if (ProduceEBDigis_) e.put(productGain,"EcalIntegrityGainErrors"); 00312 if (ProduceEBDigis_) e.put(productGainSwitch,"EcalIntegrityGainSwitchErrors"); 00313 if (ProduceEBDigis_) e.put(productGainSwitchStay,"EcalIntegrityGainSwitchStayErrors"); 00314 00315 if (ProduceEBDigis_) e.put(productMemTtId,"EcalIntegrityMemTtIdErrors"); 00316 if (ProduceEBDigis_) e.put(productMemBlockSize,"EcalIntegrityMemBlockSize"); 00317 if (ProduceEBDigis_) e.put(productMemChIdErrors,"EcalIntegrityMemChIdErrors"); 00318 if (ProduceEBDigis_) e.put(productMemGain,"EcalIntegrityMemGainErrors"); 00319 00320 e.put(productHodo); 00321 e.put(productTdc); 00322 e.put(productHeader); 00323 00324 } catch (ECALTBParserException &e) { 00325 std::cout << "[EcalDCCTB07UnpackingModule] " << e.what() << std::endl; 00326 } catch (ECALTBParserBlockException &e) { 00327 std::cout << "[EcalDCCTB07UnpackingModule] " << e.what() << std::endl; 00328 } catch (cms::Exception &e) { 00329 std::cout << "[EcalDCCTB07UnpackingModule] " << e.what() << std::endl; 00330 } catch (...) { 00331 std::cout << "[EcalDCCTB07UnpackingModule] Unknown exception ..." << std::endl; 00332 } 00333 00334 }
Definition at line 48 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().
Definition at line 47 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().
Definition at line 46 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), produce(), and ~EcalDCCTB07UnpackingModule().
Definition at line 50 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().
Definition at line 53 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().
Definition at line 52 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().
Definition at line 49 of file EcalDCC07UnpackingModule.h.
Referenced by EcalDCCTB07UnpackingModule(), and produce().