CMS 3D CMS Logo

ESDigiToRawTB.cc

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

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