00001 #include "SimCalorimetry/HcalZeroSuppressionProducers/src/HcalSimpleAmplitudeZS.h"
00002 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00003 #include "DataFormats/Common/interface/EDCollection.h"
00004 #include "DataFormats/Common/interface/Handle.h"
00005 #include "FWCore/Framework/interface/Selector.h"
00006 #include "FWCore/Framework/interface/ESHandle.h"
00007 #include "FWCore/Framework/interface/EventSetup.h"
00008 #include "CalibFormats/HcalObjects/interface/HcalCoderDb.h"
00009 #include "CalibFormats/HcalObjects/interface/HcalCalibrations.h"
00010 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
00011 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00013 #include "FWCore/Utilities/interface/Exception.h"
00014 using namespace std;
00015
00016 #include <iostream>
00017
00018 HcalSimpleAmplitudeZS::HcalSimpleAmplitudeZS(edm::ParameterSet const& conf):
00019 inputLabel_(conf.getParameter<edm::InputTag>("digiLabel"))
00020 {
00021 const edm::ParameterSet& psHBHE=conf.getParameter<edm::ParameterSet>("hbhe");
00022 int mode=psHBHE.getParameter<int>("mode");
00023 HcalZeroSuppressionAlgo::ZSMode zmode;
00024 switch (mode) {
00025 case(0): zmode=HcalZeroSuppressionAlgo::zs_SingleChannel; break;
00026 case(1): zmode=HcalZeroSuppressionAlgo::zs_TriggerTowerOR; break;
00027 case(2): zmode=HcalZeroSuppressionAlgo::zs_AllDepthsOR; break;
00028 default:
00029 edm::LogWarning("Hcal") << "Unknown zero suppression mode " << mode << " for HBHE. Using single-channel mode.";
00030 zmode=HcalZeroSuppressionAlgo::zs_SingleChannel;
00031 }
00032 hbhe_=std::auto_ptr<HcalZSAlgoEnergy>(new HcalZSAlgoEnergy(zmode,
00033 psHBHE.getParameter<int>("level"),
00034 psHBHE.getParameter<int>("firstSample"),
00035 psHBHE.getParameter<int>("samplesToAdd"),
00036 psHBHE.getParameter<bool>("twoSided")));
00037 produces<HBHEDigiCollection>();
00038
00039 const edm::ParameterSet& psHO=conf.getParameter<edm::ParameterSet>("ho");
00040 mode=psHO.getParameter<int>("mode");
00041 switch (mode) {
00042 case(0): zmode=HcalZeroSuppressionAlgo::zs_SingleChannel; break;
00043 case(1): zmode=HcalZeroSuppressionAlgo::zs_TriggerTowerOR; break;
00044 case(2): zmode=HcalZeroSuppressionAlgo::zs_AllDepthsOR; break;
00045 default:
00046 edm::LogWarning("Hcal") << "Unknown zero suppression mode " << mode << " for HO. Using single-channel mode.";
00047 zmode=HcalZeroSuppressionAlgo::zs_SingleChannel;
00048 }
00049 ho_=std::auto_ptr<HcalZSAlgoEnergy>(new HcalZSAlgoEnergy(zmode,
00050 psHO.getParameter<int>("level"),
00051 psHO.getParameter<int>("firstSample"),
00052 psHO.getParameter<int>("samplesToAdd"),
00053 psHO.getParameter<bool>("twoSided")));
00054 produces<HODigiCollection>();
00055
00056 const edm::ParameterSet& psHF=conf.getParameter<edm::ParameterSet>("hf");
00057 mode=psHF.getParameter<int>("mode");
00058 switch (mode) {
00059 case(0): zmode=HcalZeroSuppressionAlgo::zs_SingleChannel; break;
00060 case(1): zmode=HcalZeroSuppressionAlgo::zs_TriggerTowerOR; break;
00061 case(2): zmode=HcalZeroSuppressionAlgo::zs_AllDepthsOR; break;
00062 default:
00063 edm::LogWarning("Hcal") << "Unknown zero suppression mode " << mode << " for HF. Using single-channel mode.";
00064 zmode=HcalZeroSuppressionAlgo::zs_SingleChannel;
00065 }
00066 hf_=std::auto_ptr<HcalZSAlgoEnergy>(new HcalZSAlgoEnergy(zmode,
00067 psHF.getParameter<int>("level"),
00068 psHF.getParameter<int>("firstSample"),
00069 psHF.getParameter<int>("samplesToAdd"),
00070 psHF.getParameter<bool>("twoSided")));
00071 produces<HFDigiCollection>();
00072
00073 }
00074
00075 HcalSimpleAmplitudeZS::~HcalSimpleAmplitudeZS() {
00076 }
00077
00078 void HcalSimpleAmplitudeZS::produce(edm::Event& e, const edm::EventSetup& eventSetup)
00079 {
00080
00081 edm::ESHandle<HcalDbService> conditions;
00082 eventSetup.get<HcalDbRecord>().get(conditions);
00083
00084
00085 {
00086 hbhe_->prepare(&(*conditions));
00087 edm::Handle<HBHEDigiCollection> digi;
00088 e.getByLabel(inputLabel_,digi);
00089
00090
00091 std::auto_ptr<HBHEDigiCollection> zs(new HBHEDigiCollection);
00092
00093 hbhe_->suppress(*(digi.product()),*zs);
00094
00095 edm::LogInfo("HcalZeroSuppression") << "Suppression (HBHE) input " << digi->size() << " digis, output " << zs->size() << " digis";
00096
00097
00098 e.put(zs);
00099 hbhe_->done();
00100 }
00101 {
00102 ho_->prepare(&(*conditions));
00103 edm::Handle<HODigiCollection> digi;
00104 e.getByLabel(inputLabel_,digi);
00105
00106
00107 std::auto_ptr<HODigiCollection> zs(new HODigiCollection);
00108
00109 ho_->suppress(*(digi.product()),*zs);
00110
00111 edm::LogInfo("HcalZeroSuppression") << "Suppression (HO) input " << digi->size() << " digis, output " << zs->size() << " digis";
00112
00113
00114 e.put(zs);
00115 ho_->done();
00116 }
00117 {
00118 hf_->prepare(&(*conditions));
00119 edm::Handle<HFDigiCollection> digi;
00120 e.getByLabel(inputLabel_,digi);
00121
00122
00123 std::auto_ptr<HFDigiCollection> zs(new HFDigiCollection);
00124
00125 hf_->suppress(*(digi.product()),*zs);
00126
00127 edm::LogInfo("HcalZeroSuppression") << "Suppression (HF) input " << digi->size() << " digis, output " << zs->size() << " digis";
00128
00129
00130 e.put(zs);
00131 hf_->done();
00132 }
00133
00134 }