![]() |
![]() |
00001 #include "SimCalorimetry/EcalZeroSuppressionProducers/interface/ESZeroSuppressionProducer.h" 00002 #include "Geometry/Records/interface/IdealGeometryRecord.h" 00003 00004 ESZeroSuppressionProducer::ESZeroSuppressionProducer(const edm::ParameterSet& ps) 00005 { 00006 digiProducer_ = ps.getParameter<std::string>("digiProducer"); 00007 ESdigiCollection_ = ps.getParameter<std::string>("ESdigiCollection"); 00008 ESZSdigiCollection_ = ps.getParameter<std::string>("ESZSdigiCollection"); 00009 00010 ESGain = ps.getUntrackedParameter<int>("ESGain", 1); 00011 ESBaseline = ps.getUntrackedParameter<int>("ESBaseline", 1000); 00012 ESMIPADC = ps.getUntrackedParameter<double>("ESMIPADC", 9); 00013 ESMIPkeV = ps.getUntrackedParameter<double>("ESMIPkeV", 81.08); 00014 ESNoiseSigma = ps.getUntrackedParameter<double>("ESNoiseSigma", 3); 00015 00016 if (ESGain == 0) 00017 ESThreshold = 3.*1.45*ESNoiseSigma*ESMIPkeV/ESMIPADC/1000000.; 00018 else if (ESGain == 1) 00019 ESThreshold = 3.*0.9066*ESNoiseSigma*ESMIPkeV/ESMIPADC/1000000.; 00020 else if (ESGain == 2) 00021 ESThreshold = 3.*0.8815*ESNoiseSigma*ESMIPkeV/ESMIPADC/1000000.; 00022 00023 algo_ = new ESRecHitSimAlgo(ESGain, ESBaseline, ESMIPADC, ESMIPkeV); 00024 00025 produces<ESDigiCollection>(ESZSdigiCollection_); 00026 } 00027 00028 ESZeroSuppressionProducer::~ESZeroSuppressionProducer() 00029 { 00030 delete algo_; 00031 } 00032 00033 void ESZeroSuppressionProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup) 00034 { 00035 edm::Handle<ESDigiCollection> ESDigis; 00036 00037 bool fullESDigis = true; 00038 event.getByLabel(digiProducer_, ESDigis); 00039 if (!ESDigis.isValid()) { 00040 edm::LogError("ZeroSuppressionError") << "Error! can't get the product " << ESdigiCollection_.c_str() ; 00041 fullESDigis = false; 00042 } 00043 00044 std::auto_ptr<ESDigiCollection> ESZSDigis(new ESDigiCollection()); 00045 00046 if (fullESDigis) { 00047 ESDigiCollection::const_iterator i; 00048 for (i=ESDigis->begin(); i!=ESDigis->end(); i++) { 00049 if (algo_->EvalAmplitude(*i) > ESThreshold) (*ESZSDigis).push_back(*i); 00050 } 00051 } 00052 00053 event.put(ESZSDigis, ESZSdigiCollection_); 00054 } 00055