CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/EventFilter/ESRawToDigi/src/ESRawToDigi.cc

Go to the documentation of this file.
00001 #include "EventFilter/ESRawToDigi/interface/ESRawToDigi.h"
00002 
00003 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00004 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00005 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00006 #include "DataFormats/EcalRawData/interface/ESListOfFEDS.h"
00007 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" 
00008 #include "DataFormats/EcalRawData/interface/ESDCCHeaderBlock.h"
00009 #include "DataFormats/EcalRawData/interface/ESKCHIPBlock.h"
00010 
00011 #include <iostream>
00012 
00013 ESRawToDigi::ESRawToDigi(edm::ParameterSet const& ps) 
00014 {
00015   sourceTag_        = ps.getParameter<edm::InputTag>("sourceTag");
00016   ESdigiCollection_ = ps.getParameter<std::string>("ESdigiCollection");
00017   regional_         = ps.getUntrackedParameter<bool>("DoRegional",false);
00018   fedsListLabel_    = ps.getUntrackedParameter<edm::InputTag>("ESFedsListLabel", edm::InputTag(":esfedslist"));
00019   debug_            = ps.getUntrackedParameter<bool>("debugMode", false);
00020 
00021   ESUnpacker_ = new ESUnpacker(ps);
00022 
00023   produces<ESRawDataCollection>();
00024   produces<ESLocalRawDataCollection>();
00025   produces<ESDigiCollection>();
00026 }
00027 
00028 ESRawToDigi::~ESRawToDigi(){
00029 
00030   delete ESUnpacker_;
00031 
00032 }
00033 
00034 void ESRawToDigi::produce(edm::Event& e, const edm::EventSetup& es) {
00035 
00036   // Input
00037   edm::Handle<FEDRawDataCollection> rawdata;
00038   e.getByLabel(sourceTag_, rawdata);
00039   if (!rawdata.isValid()) {
00040     LogDebug("") << "ESRawToDigi : Error! can't get rawdata!" << std::endl;
00041   }
00042   
00043   std::vector<int> esFeds_to_unpack;
00044   if (regional_) {
00045     edm::Handle<ESListOfFEDS> fedslist;
00046     e.getByLabel(fedsListLabel_, fedslist);
00047     esFeds_to_unpack = fedslist->GetList();
00048   }
00049 
00050   // Output
00051   std::auto_ptr<ESRawDataCollection> productDCC(new ESRawDataCollection);
00052   std::auto_ptr<ESLocalRawDataCollection> productKCHIP(new ESLocalRawDataCollection);
00053   std::auto_ptr<ESDigiCollection> productDigis(new ESDigiCollection);  
00054   
00055   ESDigiCollection digis;
00056 
00057   if (regional_) {
00058     for (unsigned int i=0; i<esFeds_to_unpack.size(); ++i) {
00059       
00060       const FEDRawData& fedRawData = rawdata->FEDData(esFeds_to_unpack[i]);
00061       ESUnpacker_->interpretRawData(esFeds_to_unpack[i], fedRawData, *productDCC, *productKCHIP, *productDigis);
00062       
00063       if (debug_) std::cout<<"FED : "<<esFeds_to_unpack[i]<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<std::endl;
00064     }   
00065   } else {
00066     for (int fedId=FEDNumbering::MINPreShowerFEDID; fedId<=FEDNumbering::MAXPreShowerFEDID; ++fedId) {
00067       
00068       const FEDRawData& fedRawData = rawdata->FEDData(fedId);
00069       ESUnpacker_->interpretRawData(fedId, fedRawData, *productDCC, *productKCHIP, *productDigis);
00070       
00071       if (debug_) std::cout<<"FED : "<<fedId<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<std::endl;
00072     }   
00073   }
00074 
00075   e.put(productDCC);
00076   e.put(productKCHIP);
00077   e.put(productDigis, ESdigiCollection_);
00078 }
00079