CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/special/src/HLTEcalTowerFilter.cc

Go to the documentation of this file.
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);