![]() |
![]() |
00001 #include "EventFilter/ESDigiToRaw/interface/ESDigiToRaw.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 ESDigiToRaw::ESDigiToRaw(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 ESDigiToRaw::~ESDigiToRaw() { 00026 delete ESDataFormatter_; 00027 } 00028 00029 void ESDigiToRaw::beginJob(const edm::EventSetup& es) { 00030 } 00031 00032 void ESDigiToRaw::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 lv1_ = ev.id().event(); 00039 counter_++; 00040 00041 ESDataFormatter_->setRunNumber(run_number_); 00042 ESDataFormatter_->setOrbitNumber(orbit_number_); 00043 ESDataFormatter_->setBX(bx_); 00044 ESDataFormatter_->setLV1(lv1_); 00045 00046 pair<int,int> ESFEDIds = FEDNumbering::getPreShowerFEDIds(); 00047 00048 edm::Handle<ESDigiCollection> digis; 00049 ev.getByLabel(label_, instanceName_, digis); 00050 00051 ESDataFormatter::Digis Digis; 00052 Digis.clear(); 00053 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 // Fake DCC-fed map, for the time being 00060 int dccId = 0; 00061 if (detId.zside() == 1) { 00062 if (detId.plane() == 1) { 00063 if (detId.six()<=20 && detId.siy()<=20) { 00064 dccId = 0; 00065 } else if (detId.six()>=20 && detId.siy()<=20) { 00066 dccId = 1; 00067 } else if (detId.six()<=20 && detId.siy()>=20) { 00068 dccId = 2; 00069 } else if (detId.six()>=20 && detId.siy()>=20) { 00070 dccId = 3; 00071 } 00072 } else if (detId.plane() == 2) { 00073 if (detId.six()<=20 && detId.siy()<=20) { 00074 dccId = 4; 00075 } else if (detId.six()>=20 && detId.siy()<=20) { 00076 dccId = 5; 00077 } else if (detId.six()<=20 && detId.siy()>=20) { 00078 dccId = 6; 00079 } else if (detId.six()>=20 && detId.siy()>=20) { 00080 dccId = 7; 00081 } 00082 } 00083 } else if (detId.zside() == -1) { 00084 if (detId.plane() == 1) { 00085 if (detId.six()<=20 && detId.siy()<=20) { 00086 dccId = 8; 00087 } else if (detId.six()>=20 && detId.siy()<=20) { 00088 dccId = 9; 00089 } else if (detId.six()<=20 && detId.siy()>=20) { 00090 dccId = 10; 00091 } else if (detId.six()>=20 && detId.siy()>=20) { 00092 dccId = 11; 00093 } 00094 } else if (detId.plane() == 2) { 00095 if (detId.six()<=20 && detId.siy()<=20) { 00096 dccId = 12; 00097 } else if (detId.six()>=20 && detId.siy()<=20) { 00098 dccId = 13; 00099 } else if (detId.six()<=20 && detId.siy()>=20) { 00100 dccId = 14; 00101 } else if (detId.six()>=20 && detId.siy()>=20) { 00102 dccId = 15; 00103 } 00104 } 00105 } 00106 00107 int fedId = ESFEDIds.first + dccId; 00108 00109 Digis[fedId].push_back(df); 00110 } 00111 00112 auto_ptr<FEDRawDataCollection> productRawData( new FEDRawDataCollection ); 00113 00114 for (int fId=ESFEDIds.first; fId<=ESFEDIds.second; ++fId) { 00115 FEDRawData *rawData = ESDataFormatter_->DigiToRaw(fId, Digis); 00116 FEDRawData& fedRawData = productRawData->FEDData(fId); 00117 fedRawData = *rawData; 00118 if (debug_) cout<<"FED : "<<fId<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<endl; 00119 } 00120 00121 ev.put(productRawData); 00122 00123 return; 00124 } 00125 00126 void ESDigiToRaw::endJob() { 00127 }