![]() |
![]() |
00001 00014 #include "HLTrigger/HLTcore/interface/HLTFilter.h" 00015 00016 // 00017 // class declaration 00018 // 00019 00020 class HLTEcalTowerFilter : public HLTFilter { 00021 public: 00022 explicit HLTEcalTowerFilter(const edm::ParameterSet &); 00023 ~HLTEcalTowerFilter(); 00024 00025 private: 00026 virtual bool filter(edm::Event &, const edm::EventSetup &); 00027 00028 edm::InputTag inputTag_; // input tag identifying product 00029 bool saveTag_; // whether to save this tag 00030 double min_E_; // energy threshold in GeV 00031 double max_Eta_; // maximum eta 00032 int min_N_; // minimum number 00033 00034 }; 00035 00036 #include <memory> 00037 00038 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00039 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00040 #include "DataFormats/Common/interface/Handle.h" 00041 #include "DataFormats/Common/interface/Ref.h" 00042 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" 00043 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" 00044 00045 // 00046 // constructors and destructor 00047 // 00048 HLTEcalTowerFilter::HLTEcalTowerFilter(const edm::ParameterSet& config) : 00049 inputTag_ (config.getParameter<edm::InputTag>("inputTag")), 00050 saveTag_ (config.getUntrackedParameter<bool>("saveTag", false)), 00051 min_E_ (config.getParameter<double> ("MinE" )), 00052 max_Eta_ (config.getParameter<double> ("MaxEta" )), 00053 min_N_ (config.getParameter<int> ("MinN" )) 00054 { 00055 LogDebug("") << "Input/ecut/etacut/ncut : " 00056 << inputTag_.encode() << " " 00057 << min_E_ << " " 00058 << max_Eta_ << " " 00059 << min_N_ ; 00060 00061 // register your products 00062 produces<trigger::TriggerFilterObjectWithRefs>(); 00063 } 00064 00065 HLTEcalTowerFilter::~HLTEcalTowerFilter() 00066 { 00067 } 00068 00069 // 00070 // member functions 00071 // 00072 00073 // ------------ method called to produce the data ------------ 00074 bool 00075 HLTEcalTowerFilter::filter(edm::Event& event, const edm::EventSetup& setup) 00076 { 00077 using namespace std; 00078 using namespace edm; 00079 using namespace reco; 00080 using namespace trigger; 00081 00082 // All HLT filters must create and fill an HLT filter object, 00083 // recording any reconstructed physics objects satisfying (or not) 00084 // this HLT filter, and place it in the Event. 00085 00086 // The filter object 00087 std::auto_ptr<TriggerFilterObjectWithRefs> filterobject (new TriggerFilterObjectWithRefs(path(),module())); 00088 if (saveTag_) filterobject->addCollectionTag(inputTag_); 00089 00090 // get hold of collection of objects 00091 Handle<CaloTowerCollection> towers; 00092 event.getByLabel(inputTag_, towers); 00093 00094 LogDebug("HLTEcalTowerFilter") << "Number of towers: " << towers->size(); 00095 00096 // look at all objects, check cuts and add to filter object 00097 int n = 0; 00098 for (CaloTowerCollection::const_iterator i = towers->begin(); i != towers->end(); ++i) { 00099 if (i->emEnergy() >= min_E_ and fabs(i->eta()) <= max_Eta_) { 00100 ++n; 00101 //edm::Ref<CaloTowerCollection> ref(towers, std::distance(towers->begin(), i)); 00102 //filterobject->addObject(TriggerJet, ref); 00103 } 00104 } 00105 00106 LogDebug("HLTEcalTowerFilter") << "Number of towers with eta < " << max_Eta_ << " and energy > " << min_E_ << ": " << n; 00107 00108 // filter decision 00109 bool accept(n>=min_N_); 00110 00111 // put filter object into the Event 00112 event.put(filterobject); 00113 00114 return accept; 00115 } 00116 00117 // define as a framework module 00118 #include "FWCore/Framework/interface/MakerMacros.h" 00119 DEFINE_FWK_MODULE(HLTEcalTowerFilter);