CMS 3D CMS Logo

EcalDCCTB07UnpackingModule Class Reference

#include <EventFilter/EcalTBRawToDigi/interface/EcalDCC07UnpackingModule.h>

Inheritance diagram for EcalDCCTB07UnpackingModule:

edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

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

CamacTBDataFormattercamacTBformatter_
EcalSupervisorTBDataFormatterecalSupervisorFormatter_
EcalTB07DaqFormatterformatter_
MatacqTBDataFormattermatacqFormatter_
bool ProduceEBDigis_
bool ProduceEEDigis_
TableDataFormattertableFormatter_


Detailed Description

Definition at line 27 of file EcalDCC07UnpackingModule.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

void EcalDCCTB07UnpackingModule::beginJob ( const edm::EventSetup c  )  [virtual]

Reimplemented from edm::EDProducer.

Definition at line 170 of file EcalDCC07UnpackingModule.cc.

00170                                                                {
00171 
00172 }

void EcalDCCTB07UnpackingModule::endJob ( void   )  [virtual]

Reimplemented from edm::EDProducer.

Definition at line 174 of file EcalDCC07UnpackingModule.cc.

00174                                        {
00175 
00176 }

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 }


Member Data Documentation

CamacTBDataFormatter* EcalDCCTB07UnpackingModule::camacTBformatter_ [private]

Definition at line 48 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().

EcalSupervisorTBDataFormatter* EcalDCCTB07UnpackingModule::ecalSupervisorFormatter_ [private]

Definition at line 47 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().

EcalTB07DaqFormatter* EcalDCCTB07UnpackingModule::formatter_ [private]

Definition at line 46 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), produce(), and ~EcalDCCTB07UnpackingModule().

MatacqTBDataFormatter* EcalDCCTB07UnpackingModule::matacqFormatter_ [private]

Definition at line 50 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().

bool EcalDCCTB07UnpackingModule::ProduceEBDigis_ [private]

Definition at line 53 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().

bool EcalDCCTB07UnpackingModule::ProduceEEDigis_ [private]

Definition at line 52 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().

TableDataFormatter* EcalDCCTB07UnpackingModule::tableFormatter_ [private]

Definition at line 49 of file EcalDCC07UnpackingModule.h.

Referenced by EcalDCCTB07UnpackingModule(), and produce().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:19:28 2009 for CMSSW by  doxygen 1.5.4