00001 #include "EventFilter/ESDigiToRaw/interface/ESDigiToRawTB.h" 00002 00003 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" 00004 #include "DataFormats/FEDRawData/interface/FEDRawData.h" 00005 #include "DataFormats/FEDRawData/interface/FEDNumbering.h" 00006 00007 #include "DataFormats/EcalDigi/interface/ESDataFrame.h" 00008 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" 00009 00010 ESDigiToRawTB::ESDigiToRawTB(const edm::ParameterSet& ps) 00011 { 00012 00013 label_ = ps.getParameter<string>("Label"); 00014 instanceName_ = ps.getParameter<string>("InstanceES"); 00015 debug_ = ps.getUntrackedParameter<bool>("debugMode", false); 00016 00017 counter_ = 0; 00018 00019 produces<FEDRawDataCollection>(); 00020 00021 ESDataFormatter_ = new ESDataFormatter(ps); 00022 00023 } 00024 00025 ESDigiToRawTB::~ESDigiToRawTB() { 00026 delete ESDataFormatter_; 00027 } 00028 00029 void ESDigiToRawTB::beginJob(const edm::EventSetup& es) { 00030 } 00031 00032 void ESDigiToRawTB::produce(edm::Event& ev, const edm::EventSetup& es) { 00033 00034 run_number_ = ev.id().run(); 00035 orbit_number_ = counter_ / BXMAX; 00036 bx_ = (counter_ % BXMAX); 00037 lv1_ = counter_; 00038 counter_++; 00039 00040 ESDataFormatter_->setRunNumber(run_number_); 00041 ESDataFormatter_->setOrbitNumber(orbit_number_); 00042 ESDataFormatter_->setBX(bx_); 00043 ESDataFormatter_->setLV1(lv1_); 00044 00045 pair<int,int> ESFEDIds = FEDNumbering::getPreShowerFEDIds(); 00046 00047 edm::Handle<ESDigiCollection> digis; 00048 ev.getByLabel(label_, instanceName_, digis); 00049 00050 ESDataFormatter::Digis Digis; 00051 Digis.clear(); 00052 00053 int dccId = 0; 00054 for (ESDigiCollection::const_iterator it=digis->begin(); it!=digis->end(); ++it) { 00055 00056 const ESDataFrame& df = *it; 00057 const ESDetId& detId = it->id(); 00058 00059 // Only select 19< iy < 22 and 30 < ix < 33 for TB for the time being 00060 if (detId.zside() == 1) { 00061 if (detId.six() >= 30 && detId.six() <= 33) { 00062 if (detId.siy() >= 19 && detId.siy() <= 22) { 00063 int fedId = ESFEDIds.first + dccId; 00064 Digis[fedId].push_back(df); 00065 00066 } 00067 } 00068 } 00069 00070 } 00071 00072 auto_ptr<FEDRawDataCollection> productRawData( new FEDRawDataCollection ); 00073 00074 int nFED = 0; 00075 for (int fId=ESFEDIds.first; fId<=ESFEDIds.second; ++fId) { 00076 if (nFED == 0) { 00077 FEDRawData *rawData = ESDataFormatter_->DigiToRawTB(fId, Digis); 00078 FEDRawData& fedRawData = productRawData->FEDData(fId); 00079 fedRawData = *rawData; 00080 if (debug_) cout<<"FED : "<<fId<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<endl; 00081 } 00082 nFED++; 00083 } 00084 00085 ev.put(productRawData); 00086 00087 return; 00088 } 00089 00090 void ESDigiToRawTB::endJob() { 00091 }