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