00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <EventFilter/EcalTBRawToDigi/interface/EcalDCCUnpackingModule.h>
00012 #include <EventFilter/EcalTBRawToDigi/src/EcalTBDaqFormatter.h>
00013 #include <EventFilter/EcalTBRawToDigi/src/EcalSupervisorDataFormatter.h>
00014 #include <EventFilter/EcalTBRawToDigi/src/CamacTBDataFormatter.h>
00015 #include <EventFilter/EcalTBRawToDigi/src/TableDataFormatter.h>
00016 #include <EventFilter/EcalTBRawToDigi/src/MatacqDataFormatter.h>
00017 #include <EventFilter/EcalTBRawToDigi/src/ECALParserException.h>
00018 #include <EventFilter/EcalTBRawToDigi/src/ECALParserBlockException.h>
00019 #include <DataFormats/FEDRawData/interface/FEDRawData.h>
00020 #include <DataFormats/FEDRawData/interface/FEDNumbering.h>
00021 #include <DataFormats/FEDRawData/interface/FEDRawDataCollection.h>
00022 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
00023 #include <DataFormats/EcalRawData/interface/EcalRawDataCollections.h>
00024 #include <TBDataFormats/EcalTBObjects/interface/EcalTBCollections.h>
00025 #include <DataFormats/Common/interface/Handle.h>
00026 #include <FWCore/Framework/interface/Event.h>
00027
00028
00029
00030 #include <iostream>
00031 #include <iomanip>
00032
00033
00034 #define BEG_DCC_FED_ID 0
00035 #define END_DCC_FED_ID 35
00036 #define BEG_DCC_FED_ID_GLOBAL 600
00037 #define END_DCC_FED_ID_GLOBAL 670
00038
00039 #define ECAL_SUPERVISOR_FED_ID 40
00040 #define TBCAMAC_FED_ID 41
00041 #define TABLE_FED_ID 42
00042 #define MATACQ_FED_ID 43
00043
00044 EcalDCCTBUnpackingModule::EcalDCCTBUnpackingModule(const edm::ParameterSet& pset){
00045
00046 formatter_ = new EcalTBDaqFormatter();
00047 ecalSupervisorFormatter_ = new EcalSupervisorTBDataFormatter();
00048 camacTBformatter_ = new CamacTBDataFormatter();
00049 tableFormatter_ = new TableDataFormatter();
00050 matacqFormatter_ = new MatacqTBDataFormatter();
00051
00052
00053 produces<EBDigiCollection>("ebDigis");
00054 produces<EcalMatacqDigiCollection>();
00055 produces<EcalPnDiodeDigiCollection>();
00056 produces<EcalRawDataCollection>();
00057 produces<EcalTrigPrimDigiCollection>("EBTT");
00058
00059
00060 produces<EcalTBHodoscopeRawInfo>();
00061 produces<EcalTBTDCRawInfo>();
00062 produces<EcalTBEventHeader>();
00063
00064
00065 produces<EBDetIdCollection>("EcalIntegrityDCCSizeErrors");
00066 produces<EcalElectronicsIdCollection>("EcalIntegrityTTIdErrors");
00067 produces<EcalElectronicsIdCollection>("EcalIntegrityBlockSizeErrors");
00068 produces<EBDetIdCollection>("EcalIntegrityChIdErrors");
00069 produces<EBDetIdCollection>("EcalIntegrityGainErrors");
00070 produces<EBDetIdCollection>("EcalIntegrityGainSwitchErrors");
00071 produces<EBDetIdCollection>("EcalIntegrityGainSwitchStayErrors");
00072 produces<EBDetIdCollection>("EcalIntegrityGainSwitchStayErrors");
00073
00074
00075 produces<EcalElectronicsIdCollection>("EcalIntegrityMemTtIdErrors");
00076 produces<EcalElectronicsIdCollection>("EcalIntegrityMemBlockSize");
00077 produces<EcalElectronicsIdCollection>("EcalIntegrityMemChIdErrors");
00078 produces<EcalElectronicsIdCollection>("EcalIntegrityMemGainErrors");
00079 }
00080
00081
00082 EcalDCCTBUnpackingModule::~EcalDCCTBUnpackingModule(){
00083
00084 delete formatter_;
00085
00086 }
00087
00088 void EcalDCCTBUnpackingModule::beginJob(const edm::EventSetup& c){
00089
00090 }
00091
00092 void EcalDCCTBUnpackingModule::endJob(){
00093
00094 }
00095
00096 void EcalDCCTBUnpackingModule::produce(edm::Event & e, const edm::EventSetup& c){
00097
00098 edm::Handle<FEDRawDataCollection> rawdata;
00099 e.getByType(rawdata);
00100
00101
00102
00103 std::auto_ptr<EBDigiCollection> productEb(new EBDigiCollection);
00104
00105
00106 std::auto_ptr<EcalMatacqDigiCollection> productMatacq(new EcalMatacqDigiCollection());
00107
00108
00109 std::auto_ptr<EcalPnDiodeDigiCollection> productPN(new EcalPnDiodeDigiCollection);
00110
00111
00112 std::auto_ptr<EcalRawDataCollection> productDCCHeader(new EcalRawDataCollection);
00113
00114
00115 std::auto_ptr<EcalTrigPrimDigiCollection> productTriggerPrimitives(new EcalTrigPrimDigiCollection);
00116
00117
00118 std::auto_ptr<EBDetIdCollection> productDCCSize(new EBDetIdCollection);
00119
00120
00121 std::auto_ptr<EcalElectronicsIdCollection> productTTId(new EcalElectronicsIdCollection);
00122
00123
00124 std::auto_ptr<EcalElectronicsIdCollection> productBlockSize(new EcalElectronicsIdCollection);
00125
00126
00127 std::auto_ptr<EBDetIdCollection> productChId(new EBDetIdCollection);
00128
00129
00130 std::auto_ptr<EBDetIdCollection> productGain(new EBDetIdCollection);
00131
00132
00133 std::auto_ptr<EBDetIdCollection> productGainSwitch(new EBDetIdCollection);
00134
00135
00136 std::auto_ptr<EBDetIdCollection> productGainSwitchStay(new EBDetIdCollection);
00137
00138
00139 std::auto_ptr<EcalElectronicsIdCollection> productMemTtId(new EcalElectronicsIdCollection);
00140
00141
00142 std::auto_ptr< EcalElectronicsIdCollection> productMemBlockSize(new EcalElectronicsIdCollection);
00143
00144
00145 std::auto_ptr< EcalElectronicsIdCollection> productMemGain(new EcalElectronicsIdCollection);
00146
00147
00148 std::auto_ptr<EcalElectronicsIdCollection> productMemChIdErrors(new EcalElectronicsIdCollection);
00149
00150
00151 std::auto_ptr<EcalTBHodoscopeRawInfo> productHodo(new EcalTBHodoscopeRawInfo());
00152 std::auto_ptr<EcalTBTDCRawInfo> productTdc(new EcalTBTDCRawInfo());
00153 std::auto_ptr<EcalTBEventHeader> productHeader(new EcalTBEventHeader());
00154
00155
00156 try {
00157
00158 for (int id= 0; id<=FEDNumbering::lastFEDId(); ++id){
00159
00160
00161 const FEDRawData& data = rawdata->FEDData(id);
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 if (data.size()>16){
00177
00178 if ( (id >= BEG_DCC_FED_ID && id <= END_DCC_FED_ID) ||
00179 (id >= BEG_DCC_FED_ID_GLOBAL && id <= END_DCC_FED_ID_GLOBAL)
00180 )
00181 {
00182
00183 (*productHeader).setSmInBeam(id);
00184 formatter_->interpretRawData(data, *productEb, *productPN,
00185 *productDCCHeader,
00186 *productDCCSize,
00187 *productTTId, *productBlockSize,
00188 *productChId, *productGain, *productGainSwitch, *productGainSwitchStay,
00189 *productMemTtId, *productMemBlockSize,
00190 *productMemGain, *productMemChIdErrors,
00191 *productTriggerPrimitives);
00192 int runType = (*productDCCHeader)[0].getRunType();
00193 if ( runType == EcalDCCHeaderBlock::COSMIC || runType == EcalDCCHeaderBlock::BEAMH4 )
00194 (*productHeader).setTriggerMask(0x1);
00195 else if ( runType == 4 || runType == 5 || runType == 6 )
00196 (*productHeader).setTriggerMask(0x2000);
00197 else if ( runType == 9 || runType == 10 || runType == 11 )
00198 (*productHeader).setTriggerMask(0x800);
00199 LogDebug("EcalDCCTBUnpackingModule") << "Event type is " << (*productHeader).eventType() << " dbEventType " << (*productHeader).dbEventType();
00200 }
00201 else if ( id == ECAL_SUPERVISOR_FED_ID )
00202 ecalSupervisorFormatter_->interpretRawData(data, *productHeader);
00203 else if ( id == TBCAMAC_FED_ID )
00204 camacTBformatter_->interpretRawData(data, *productHeader,*productHodo, *productTdc );
00205 else if ( id == TABLE_FED_ID )
00206 tableFormatter_->interpretRawData(data, *productHeader);
00207 else if ( id == MATACQ_FED_ID )
00208 matacqFormatter_->interpretRawData(data, *productMatacq);
00209 }
00210 }
00211
00212
00213
00214 e.put(productPN);
00215 e.put(productEb,"ebDigis");
00216 e.put(productMatacq);
00217 e.put(productDCCHeader);
00218 e.put(productTriggerPrimitives,"EBTT");
00219
00220 e.put(productDCCSize,"EcalIntegrityDCCSizeErrors");
00221 e.put(productTTId,"EcalIntegrityTTIdErrors");
00222 e.put(productBlockSize,"EcalIntegrityBlockSizeErrors");
00223 e.put(productChId,"EcalIntegrityChIdErrors");
00224 e.put(productGain,"EcalIntegrityGainErrors");
00225 e.put(productGainSwitch,"EcalIntegrityGainSwitchErrors");
00226 e.put(productGainSwitchStay,"EcalIntegrityGainSwitchStayErrors");
00227
00228 e.put(productMemTtId,"EcalIntegrityMemTtIdErrors");
00229 e.put(productMemBlockSize,"EcalIntegrityMemBlockSize");
00230 e.put(productMemChIdErrors,"EcalIntegrityMemChIdErrors");
00231 e.put(productMemGain,"EcalIntegrityMemGainErrors");
00232
00233 e.put(productHodo);
00234 e.put(productTdc);
00235 e.put(productHeader);
00236
00237 } catch (ECALTBParserException &e) {
00238 std::cout << "[EcalDCCTBUnpackingModule] " << e.what() << std::endl;
00239 } catch (ECALTBParserBlockException &e) {
00240 std::cout << "[EcalDCCTBUnpackingModule] " << e.what() << std::endl;
00241 } catch (cms::Exception &e) {
00242 std::cout << "[EcalDCCTBUnpackingModule] " << e.what() << std::endl;
00243 } catch (...) {
00244 std::cout << "[EcalDCCTBUnpackingModule] Unknown exception ..." << std::endl;
00245 }
00246
00247 }