CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 #include "EventFilter/ESRawToDigi/interface/ESUnpackerWorker.h"
00002 
00003 #include "RecoLocalCalo/EcalRecProducers/interface/ESRecHitWorkerFactory.h"
00004 
00005 
00006 ESUnpackerWorker::ESUnpackerWorker(const edm::ParameterSet & conf){
00007   
00008   edm::ParameterSet DCCpset = conf.getParameter<edm::ParameterSet>("DCCDataUnpacker");
00009   ESUnpacker_ = new ESUnpacker(DCCpset);
00010   
00011   edm::ParameterSet  RH = conf.getParameter<edm::ParameterSet>("RHAlgo");
00012   std::string componentType =  RH.getParameter<std::string>("Type");
00013   RHWorker_ = ESRecHitWorkerFactory::get()->create(componentType, RH);
00014 
00015 }
00016 
00017 ESUnpackerWorker::~ESUnpackerWorker(){
00018   delete ESUnpacker_;
00019   delete RHWorker_;
00020 }
00021 
00022 void ESUnpackerWorker::setHandles(const EcalUnpackerWorkerRecord & iRecord) {
00023 
00024 }
00025 
00026 void ESUnpackerWorker::set(const edm::EventSetup & es) const {
00027   RHWorker_->set(es);
00028 }
00029 
00030 void ESUnpackerWorker::write(edm::Event & e) const{
00031 
00032 }
00033 
00034 void ESUnpackerWorker::update(const edm::Event & e)const{
00035 }
00036 
00037 
00038 std::auto_ptr< EcalRecHitCollection > ESUnpackerWorker::work(const uint32_t & index, const FEDRawDataCollection & rawdata)const{
00039 //  MyWatcher watcher("Worker");
00040   LogDebug("ESRawToRecHit|Worker")<<"is going to work on index: "<<index ;
00041 //                                <<watcher.lap();
00042 
00043   int fedIndex = EcalRegionCabling::esFedIndex(index);
00044 
00045 
00046   const FEDRawData & fedData = rawdata.FEDData(fedIndex);
00047 
00048   //###### get the digi #######
00049   ESRawDataCollection productDCC;
00050   ESLocalRawDataCollection productKCHIP;
00051   ESDigiCollection productdigis;
00052 
00053   ESUnpacker_->interpretRawData(fedIndex, fedData, productDCC, productKCHIP, productdigis);
00054   
00055   LogDebug("ESRawToRecHit|Worker")<<"unpacked "<<productdigis.size()<<" digis" ;
00056 //                                <<watcher.lap();
00057 
00058 
00059   //then make rechits
00060   ESDigiCollection::const_iterator beginDigiES = productdigis.begin();
00061   ESDigiCollection::const_iterator endDigiES = productdigis.end();
00062 
00063   std::auto_ptr< EcalRecHitCollection > ecalrechits( new EcalRecHitCollection );
00064 
00065   ecalrechits->reserve(productdigis.size());
00066   
00067   ESDigiCollection::const_iterator esIt=beginDigiES;
00068   for (;esIt!=endDigiES;++esIt){
00069     RHWorker_->run( esIt, *ecalrechits );
00070   }
00071 
00072   LogDebug("ESRawToRecHit|Worker")<<" made : "<<ecalrechits->size()<<" es rechits" ;
00073 //                                <<watcher.lap();
00074 
00075   return ecalrechits;
00076 }
00077 
00078