CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc

Go to the documentation of this file.
00001 #include "SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.h"
00002 #include "DataFormats/Common/interface/EDProduct.h"
00003 #include "FWCore/Framework/interface/Event.h"
00004 #include "FWCore/Framework/interface/EventSetup.h"
00005 #include "DataFormats/Common/interface/Handle.h"
00006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00009 #include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
00010 #include "DataFormats/HcalDigi/interface/HFDataFrame.h"
00011 #include "DataFormats/HcalDigi/interface/HcalTriggerPrimitiveDigi.h"
00012 #include "FWCore/Framework/interface/MakerMacros.h"
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014 #include "CalibFormats/HcalObjects/interface/HcalTPGRecord.h"
00015 #include "CalibFormats/HcalObjects/interface/HcalTPGCoder.h"
00016 #include "CalibFormats/CaloTPG/interface/HcalTPGCompressor.h"
00017 #include "CalibFormats/CaloTPG/interface/CaloTPGRecord.h"
00018 #include "CalibFormats/CaloTPG/interface/CaloTPGTranscoder.h"
00019 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
00020 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00021 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00022 #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
00023 #include "CondFormats/HcalObjects/interface/HcalLutMetadata.h"
00024 
00025 #include <algorithm>
00026 
00027 HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps)
00028 : 
00029   theAlgo(ps.getParameter<bool>("peakFilter"),
00030           ps.getParameter<std::vector<double> >("weights"),
00031           ps.getParameter<int>("latency"),
00032           ps.getParameter<uint32_t>("FG_threshold"),
00033      ps.getParameter<uint32_t>("ZS_threshold"),
00034           ps.getParameter<int>("numberOfSamples"),
00035           ps.getParameter<int>("numberOfPresamples"),
00036      ps.getParameter<uint32_t>("MinSignalThreshold"),
00037      ps.getParameter<uint32_t>("PMTNoiseThreshold")
00038    ),
00039   inputLabel_(ps.getParameter<std::vector<edm::InputTag> >("inputLabel"))
00040 {
00041    runZS = ps.getUntrackedParameter<bool>("RunZS", false);
00042    runFrontEndFormatError = ps.getUntrackedParameter<bool>("FrontEndFormatError", false);
00043    produces<HcalTrigPrimDigiCollection>();
00044    theAlgo.setPeakFinderAlgorithm(ps.getUntrackedParameter<int>("PeakFinderAlgorithm", 2));
00045 }
00046 
00047 
00048 void HcalTrigPrimDigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) {
00049   edm::Handle<HBHEDigiCollection> hbheDigis;
00050   edm::Handle<HFDigiCollection>   hfDigis;
00051 
00052   e.getByLabel(inputLabel_[0],hbheDigis);
00053   e.getByLabel(inputLabel_[1],hfDigis);
00054 
00055   // Step A: get the conditions, for the decoding
00056   edm::ESHandle<HcalTPGCoder> inputCoder;
00057   eventSetup.get<HcalTPGRecord>().get(inputCoder);
00058 
00059   edm::ESHandle<CaloTPGTranscoder> outTranscoder;
00060   eventSetup.get<CaloTPGRecord>().get(outTranscoder);
00061   outTranscoder->setup(eventSetup,CaloTPGTranscoder::HcalTPG);
00062 
00063   edm::ESHandle<HcalLutMetadata> lutMetadata;
00064   eventSetup.get<HcalLutMetadataRcd>().get(lutMetadata);
00065   float rctlsb = lutMetadata->getRctLsb();
00066 
00067   // Step B: Create empty output
00068   std::auto_ptr<HcalTrigPrimDigiCollection> result(new HcalTrigPrimDigiCollection());
00069 
00070   // Step C: Invoke the algorithm, passing in inputs and getting back outputs.
00071   theAlgo.run(inputCoder.product(),outTranscoder->getHcalCompressor().get(),
00072               *hbheDigis,  *hfDigis, *result, rctlsb);
00073 
00074   // Step C.1: Run FE Format Error / ZS for real data.
00075   if (runFrontEndFormatError){
00076     edm::ESHandle<HcalDbService> pSetup;
00077     eventSetup.get<HcalDbRecord>().get( pSetup );
00078     const HcalElectronicsMap *emap = pSetup->getHcalMapping();
00079 
00080     edm::Handle<FEDRawDataCollection> fedraw; 
00081     e.getByType(fedraw);
00082 
00083     if (fedraw.isValid() && emap != 0) 
00084       theAlgo.runFEFormatError(fedraw.product(), emap, *result);
00085   }
00086 
00087   if (runZS) theAlgo.runZS(*result);
00088 
00089   //  edm::LogInfo("HcalTrigPrimDigiProducer") << "HcalTrigPrims: " << result->size();
00090 
00091   // Step D: Put outputs into event
00092   e.put(result);
00093 
00094   outTranscoder->releaseSetup();
00095 }
00096 
00097