Go to the documentation of this file.00001
00002 #include "SimCalorimetry/EcalZeroSuppressionProducers/interface/EcalZeroSuppressionProducer.h"
00003
00004 EcalZeroSuppressionProducer::EcalZeroSuppressionProducer(const edm::ParameterSet& params)
00005 {
00006 digiProducer_ = params.getParameter<std::string>("digiProducer");
00007 EBdigiCollection_ = params.getParameter<std::string>("EBdigiCollection");
00008 EEdigiCollection_ = params.getParameter<std::string>("EEdigiCollection");
00009 EBZSdigiCollection_ = params.getParameter<std::string>("EBZSdigiCollection");
00010 EEZSdigiCollection_ = params.getParameter<std::string>("EEZSdigiCollection");
00011
00012
00013
00014 glbBarrelThreshold_ = params.getUntrackedParameter<double>("glbBarrelThreshold",0.2);
00015 glbEndcapThreshold_ = params.getUntrackedParameter<double>("glbEndcapThreshold",0.4);
00016
00017 produces<EBDigiCollection>(EBZSdigiCollection_);
00018 produces<EEDigiCollection>(EEZSdigiCollection_);
00019
00020 }
00021
00022
00023 EcalZeroSuppressionProducer::~EcalZeroSuppressionProducer()
00024 { }
00025
00026
00027 void EcalZeroSuppressionProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup)
00028 {
00029
00030
00031
00032 initCalibrations(eventSetup);
00033
00034 edm::Handle< EBDigiCollection > pEBDigis;
00035 edm::Handle< EEDigiCollection > pEEDigis;
00036
00037 const EBDigiCollection* fullBarrelDigis =0;
00038 const EEDigiCollection* fullEndcapDigis =0;
00039
00040 event.getByLabel( digiProducer_, pEBDigis);
00041 if (pEBDigis.isValid()){
00042 fullBarrelDigis = pEBDigis.product();
00043 edm::LogInfo("ZeroSuppressionInfo") << "total # fullBarrelDigis: " << fullBarrelDigis->size() ;
00044 } else {
00045 edm::LogError("ZeroSuppressionError") << "Error! can't get the product " << EBdigiCollection_.c_str() ;
00046 }
00047
00048 event.getByLabel( digiProducer_, pEEDigis);
00049 if (pEEDigis.isValid()){
00050 fullEndcapDigis = pEEDigis.product();
00051 edm::LogInfo("ZeroSuppressionInfo") << "total # fullEndcapDigis: " << fullEndcapDigis->size() ;
00052 } else {
00053 edm::LogError("ZeroSuppressionError") << "Error! can't get the product " << EEdigiCollection_.c_str() ;
00054 }
00055
00056
00057
00058 std::auto_ptr< EBDigiCollection > gzsBarrelDigis(new EBDigiCollection());
00059 std::auto_ptr< EEDigiCollection > gzsEndcapDigis(new EEDigiCollection());
00060
00061 CaloDigiCollectionSorter sorter(5);
00062
00063
00064
00065 if (fullBarrelDigis) {
00066
00067 for(EBDigiCollection::const_iterator digiItr = (*fullBarrelDigis).begin();
00068 digiItr != (*fullBarrelDigis).end(); ++digiItr)
00069 {
00070
00071 bool isAccepted = theBarrelZeroSuppressor_.accept(*digiItr, glbBarrelThreshold_);
00072 if (isAccepted) {
00073 (*gzsBarrelDigis).push_back(digiItr->id(), digiItr->begin());
00074 }
00075
00076 }
00077 edm::LogInfo("ZeroSuppressionInfo") << "EB Digis: " << gzsBarrelDigis->size();
00078
00079
00080
00081
00082
00083
00084
00085
00086 }
00087
00088
00089
00090 if (fullEndcapDigis) {
00091
00092 for(EEDigiCollection::const_iterator digiItr = (*fullEndcapDigis).begin();
00093 digiItr != (*fullEndcapDigis).end(); ++digiItr)
00094 {
00095
00096 bool isAccepted = theEndcapZeroSuppressor_.accept(*digiItr, glbEndcapThreshold_);
00097 if (isAccepted) {
00098 (*gzsEndcapDigis).push_back(digiItr->id(), digiItr->begin());
00099 }
00100
00101 }
00102 edm::LogInfo("ZeroSuppressionInfo") << "EB Digis: " << gzsBarrelDigis->size();
00103
00104
00105
00106
00107
00108
00109
00110
00111 }
00112
00113 event.put(gzsBarrelDigis, EBZSdigiCollection_);
00114 event.put(gzsEndcapDigis, EEZSdigiCollection_);
00115
00116 }
00117
00118
00119 void EcalZeroSuppressionProducer::initCalibrations(const edm::EventSetup & eventSetup) {
00120
00121
00122
00123 edm::ESHandle<EcalPedestals> dbPed;
00124 eventSetup.get<EcalPedestalsRcd>().get( dbPed );
00125 const EcalPedestals * thePedestals=dbPed.product();
00126
00127 theBarrelZeroSuppressor_.setPedestals( thePedestals );
00128 theEndcapZeroSuppressor_.setPedestals( thePedestals );
00129
00130 }