CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 
00013 #include "HLTrigger/HLTcore/interface/HLTFilter.h"
00014 
00015 //
00016 // class declaration
00017 //
00018 class HLTHcalTowerFilter : public HLTFilter 
00019 {
00020 public:
00021   explicit HLTHcalTowerFilter(const edm::ParameterSet &);
00022   ~HLTHcalTowerFilter();
00023   
00024 private:
00025   virtual bool filter(edm::Event &, const edm::EventSetup &);
00026   
00027   edm::InputTag inputTag_;    // input tag identifying product
00028   bool saveTag_;              // whether to save this tag
00029   double min_E_HB_;           // energy threshold for HB in GeV
00030   double min_E_HE_;           // energy threshold for HE in GeV
00031   double min_E_HF_;           // energy threshold for HF in GeV
00032   int max_N_HB_;              // maximum number for HB
00033   int max_N_HE_;              // maximum number for HB
00034   int max_N_HF_;              // maximum number for HB
00035 };
00036 
00037 #include <memory>
00038 
00039 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00040 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00041 #include "DataFormats/Common/interface/Handle.h"
00042 #include "DataFormats/Common/interface/Ref.h"
00043 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00044 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
00045 
00046 //
00047 // constructors and destructor
00048 //
00049 HLTHcalTowerFilter::HLTHcalTowerFilter(const edm::ParameterSet& config) :
00050   inputTag_ (config.getParameter<edm::InputTag>("inputTag")),
00051   saveTag_  (config.getUntrackedParameter<bool>("saveTag",false)),
00052   min_E_HB_ (config.getParameter<double>       ("MinE_HB")),
00053   min_E_HE_ (config.getParameter<double>       ("MinE_HE")),
00054   min_E_HF_ (config.getParameter<double>       ("MinE_HF")),
00055   max_N_HB_ (config.getParameter<int>          ("MaxN_HB")),
00056   max_N_HE_ (config.getParameter<int>          ("MaxN_HE")),
00057   max_N_HF_ (config.getParameter<int>          ("MaxN_HF"))
00058 {
00059   // register your products
00060   produces<trigger::TriggerFilterObjectWithRefs>();
00061 }
00062 
00063 HLTHcalTowerFilter::~HLTHcalTowerFilter()
00064 {
00065 }
00066 
00067 //
00068 // member functions
00069 //
00070 
00071 // ------------ method called to produce the data  ------------
00072 bool 
00073 HLTHcalTowerFilter::filter(edm::Event& event, const edm::EventSetup& setup)
00074 {
00075   using namespace std;
00076   using namespace edm;
00077   using namespace reco;
00078   using namespace trigger;
00079    
00080   // The filter object
00081   std::auto_ptr<TriggerFilterObjectWithRefs> filterobject (new TriggerFilterObjectWithRefs(path(),module()));
00082   if(saveTag_) filterobject->addCollectionTag(inputTag_);
00083 
00084   // get hold of collection of objects
00085   Handle<CaloTowerCollection> towers;
00086   event.getByLabel(inputTag_, towers);
00087 
00088   // look at all objects, check cuts and add to filter object
00089   int n_HB = 0;
00090   int n_HE = 0;
00091   int n_HF = 0;
00092   double abseta = 0;
00093   for(CaloTowerCollection::const_iterator i = towers->begin(); i != towers->end(); ++i) 
00094     {
00095       abseta = fabs(i->eta());
00096       if(abseta<1.305)
00097         {
00098           if(i->hadEnergy() >= min_E_HB_) 
00099             {
00100               n_HB++;
00101               //edm::Ref<CaloTowerCollection> ref(towers, std::distance(towers->begin(), i));
00102               //filterobject->addObject(TriggerJet, ref);
00103             }
00104         }
00105       else if(abseta>=1.305 && abseta<3)
00106         {
00107           if(i->hadEnergy() >= min_E_HE_)
00108             {
00109               n_HE++;
00110               //edm::Ref<CaloTowerCollection> ref(towers, std::distance(towers->begin(), i));
00111               //filterobject->addObject(TriggerJet, ref);
00112             }
00113         }
00114       else
00115         {
00116           if(i->hadEnergy() >= min_E_HF_) 
00117             {
00118               n_HF++;
00119               //edm::Ref<CaloTowerCollection> ref(towers, std::distance(towers->begin(), i));
00120               //filterobject->addObject(TriggerJet, ref);
00121             }
00122         }
00123     }
00124 
00125   // filter decision
00126   bool accept(n_HB<max_N_HB_ && n_HE<max_N_HE_ && n_HF<max_N_HF_ );
00127 
00128   // put filter object into the Event
00129   event.put(filterobject);
00130 
00131   return accept;
00132 }
00133 
00134 // define as a framework module
00135 #include "FWCore/Framework/interface/MakerMacros.h"
00136 DEFINE_FWK_MODULE(HLTHcalTowerFilter);
00137