CMS 3D CMS Logo

ESDigiToRaw.cc

Go to the documentation of this file.
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 }

Generated on Tue Jun 9 17:34:40 2009 for CMSSW by  doxygen 1.5.4