Go to the documentation of this file.00001
00002
00003 #include <FWCore/Framework/interface/Event.h>
00004 #include <FWCore/Framework/interface/EventSetup.h>
00005 #include <FWCore/Framework/interface/ESHandle.h>
00006
00007 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00008 #include "RecoEgamma/EgammaHLTProducers/interface/EcalRecHitsMerger.h"
00009
00010 #include "FWCore/Utilities/interface/Exception.h"
00011
00012
00013 using namespace edm;
00014 using namespace std;
00015
00016
00017 EcalRecHitsMerger::EcalRecHitsMerger(const edm::ParameterSet& pset) {
00018
00019 debug_ = pset.getUntrackedParameter<bool>("debug");
00020
00021 EgammaSourceEB_ = pset.getUntrackedParameter<edm::InputTag>("EgammaSource_EB");
00022 MuonsSourceEB_ = pset.getUntrackedParameter<edm::InputTag>("MuonsSource_EB");
00023 TausSourceEB_ = pset.getUntrackedParameter<edm::InputTag>("TausSource_EB");
00024 JetsSourceEB_ = pset.getUntrackedParameter<edm::InputTag>("JetsSource_EB");
00025 RestSourceEB_ = pset.getUntrackedParameter<edm::InputTag>("RestSource_EB");
00026 Pi0SourceEB_ = pset.getUntrackedParameter<edm::InputTag>("Pi0Source_EB",edm::InputTag("dummyPi0"));
00027
00028 EgammaSourceEE_ = pset.getUntrackedParameter<edm::InputTag>("EgammaSource_EE");
00029 MuonsSourceEE_ = pset.getUntrackedParameter<edm::InputTag>("MuonsSource_EE");
00030 TausSourceEE_ = pset.getUntrackedParameter<edm::InputTag>("TausSource_EE");
00031 JetsSourceEE_ = pset.getUntrackedParameter<edm::InputTag>("JetsSource_EE");
00032 RestSourceEE_ = pset.getUntrackedParameter<edm::InputTag>("RestSource_EE");
00033 Pi0SourceEE_ = pset.getUntrackedParameter<edm::InputTag>("Pi0Source_EE",edm::InputTag("dummyPi0"));
00034
00035 OutputLabelEB_ = pset.getUntrackedParameter<std::string>("OutputLabel_EB");
00036 OutputLabelEE_ = pset.getUntrackedParameter<std::string>("OutputLabel_EE");
00037
00038 InputRecHitEB_ = pset.getUntrackedParameter<std::string>("EcalRecHitCollectionEB");
00039 InputRecHitEE_ = pset.getUntrackedParameter<std::string>("EcalRecHitCollectionEE");
00040
00041 produces<EcalRecHitCollection>(OutputLabelEB_);
00042 produces<EcalRecHitCollection>(OutputLabelEE_);
00043
00044 }
00045
00046
00047
00048 EcalRecHitsMerger::~EcalRecHitsMerger() {
00049 }
00050
00051
00052 void EcalRecHitsMerger::beginJob(){
00053 }
00054
00055 void EcalRecHitsMerger::endJob(){
00056 }
00057
00058 void EcalRecHitsMerger::produce(edm::Event & e, const edm::EventSetup& iSetup){
00059
00060 if (debug_) std::cout << " EcalRecHitMerger : Run " << e.id().run() << " Event " << e.id().event() << std::endl;
00061
00062 std::vector< edm::Handle<EcalRecHitCollection> > EcalRecHits_done;
00063 e.getManyByType(EcalRecHits_done);
00064
00065 std::auto_ptr<EcalRecHitCollection> EBMergedRecHits(new EcalRecHitCollection);
00066 std::auto_ptr<EcalRecHitCollection> EEMergedRecHits(new EcalRecHitCollection);
00067
00068 unsigned int nColl = EcalRecHits_done.size();
00069
00070 int nEB = 0;
00071 int nEE = 0;
00072
00073
00074 for (unsigned int i=0; i < nColl; i++) {
00075
00076 std::string instance = EcalRecHits_done[i].provenance()->productInstanceName();
00077 std::string module_label = EcalRecHits_done[i].provenance()->moduleLabel();
00078
00079 if ( module_label != EgammaSourceEB_.label() &&
00080 module_label != MuonsSourceEB_.label() &&
00081 module_label != JetsSourceEB_.label() &&
00082 module_label != TausSourceEB_.label() &&
00083 module_label != RestSourceEB_.label() &&
00084 module_label != Pi0SourceEB_.label() ) continue;
00085
00086 if (instance == InputRecHitEB_) {
00087 nEB += EcalRecHits_done[i] -> size();
00088 }
00089 else if (instance == InputRecHitEE_) {
00090 nEE += EcalRecHits_done[i] -> size();
00091 }
00092
00093 }
00094
00095 EBMergedRecHits -> reserve(nEB);
00096 EEMergedRecHits -> reserve(nEE);
00097 if (debug_) std::cout << " Number of EB Rechits to merge = " << nEB << std::endl;
00098 if (debug_) std::cout << " Number of EE Rechits to merge = " << nEE << std::endl;
00099
00100 for (unsigned int i=0; i < nColl; i++) {
00101 std::string instance = EcalRecHits_done[i].provenance()->productInstanceName();
00102
00103 std::string module_label = EcalRecHits_done[i].provenance()->moduleLabel();
00104 if ( module_label != EgammaSourceEB_.label() &&
00105 module_label != MuonsSourceEB_.label() &&
00106 module_label != JetsSourceEB_.label() &&
00107 module_label != TausSourceEB_.label() &&
00108 module_label != RestSourceEB_.label() &&
00109 module_label != Pi0SourceEB_.label() ) continue;
00110
00111 if (instance == InputRecHitEB_) {
00112 for (EcalRecHitCollection::const_iterator it=EcalRecHits_done[i]->begin(); it !=EcalRecHits_done[i]->end(); it++) {
00113 EBMergedRecHits -> push_back(*it);
00114 }
00115 }
00116 else if (instance == InputRecHitEE_) {
00117 for (EcalRecHitCollection::const_iterator it=EcalRecHits_done[i]->begin(); it !=EcalRecHits_done[i]->end(); it++) {
00118 EEMergedRecHits -> push_back(*it);
00119 }
00120 }
00121
00122 }
00123
00124
00125
00126 e.put(EBMergedRecHits,OutputLabelEB_);
00127 e.put(EEMergedRecHits,OutputLabelEE_);
00128
00129
00130 }
00131