CMS 3D CMS Logo

HLTDisplacedEgammaFilter.cc
Go to the documentation of this file.
1 
9 
11 
13 
18 
19 //
20 // constructors and destructor
21 //
23 {
24  inputTag_ = iConfig.getParameter< edm::InputTag > ("inputTag");
25  ncandcut_ = iConfig.getParameter<int> ("ncandcut");
26  l1EGTag_ = iConfig.getParameter< edm::InputTag > ("l1EGCand");
27 
28  inputTrk = iConfig.getParameter< edm::InputTag > ("inputTrack");
29  trkPtCut = iConfig.getParameter<double> ("trackPtCut");
30  trkdRCut = iConfig.getParameter<double> ("trackdRCut");
31  maxTrkCut = iConfig.getParameter<int> ("maxTrackCut");
32 
33  rechitsEB = iConfig.getParameter< edm::InputTag > ("RecHitsEB");
34  rechitsEE = iConfig.getParameter< edm::InputTag > ("RecHitsEE");
35 
36  EBOnly = iConfig.getParameter<bool> ("EBOnly") ;
37  sMin_min = iConfig.getParameter<double> ("sMin_min");
38  sMin_max = iConfig.getParameter<double> ("sMin_max");
39  sMaj_min = iConfig.getParameter<double> ("sMaj_min");
40  sMaj_max = iConfig.getParameter<double> ("sMaj_max");
41  seedTimeMin = iConfig.getParameter<double> ("seedTimeMin");
42  seedTimeMax = iConfig.getParameter<double> ("seedTimeMax");
43 
44  inputToken_ = consumes<trigger::TriggerFilterObjectWithRefs> (inputTag_);
45  rechitsEBToken_ = consumes<EcalRecHitCollection>(rechitsEB);
46  rechitsEEToken_ = consumes<EcalRecHitCollection>(rechitsEE);
47  inputTrkToken_ = consumes<reco::TrackCollection>(inputTrk);
48 
49 }
50 
52 
53 void
57  desc.add<edm::InputTag>("inputTag", edm::InputTag("hltEGRegionalL1SingleEG22"));
58  desc.add<edm::InputTag>("l1EGCand", edm::InputTag("hltL1IsoRecoEcalCandidate"));
59  desc.add<edm::InputTag>("RecHitsEB", edm::InputTag("hltEcalRecHit", "EcalRecHitsEB"));
60  desc.add<edm::InputTag>("RecHitsEE", edm::InputTag("hltEcalRecHit", "EcalRecHitsEE"));
61  desc.add<edm::InputTag>("inputTrack", edm::InputTag("hltL1SeededEgammaRegionalCTFFinalFitWithMaterial"));
62  desc.add<int>("ncandcut", 1);
63  desc.add<bool>("EBOnly", false);
64  desc.add<double>("sMin_min", 0.1);
65  desc.add<double>("sMin_max", 0.4);
66  desc.add<double>("sMaj_min", 0.0);
67  desc.add<double>("sMaj_max", 999.0);
68  desc.add<double>("seedTimeMin", -25.0);
69  desc.add<double>("seedTimeMax", 25.0);
70  desc.add<int>("maxTrackCut", 0);
71  desc.add<double>("trackPtCut", 3.0);
72  desc.add<double>("trackdRCut", 0.5);
73  descriptions.add("hltDisplacedEgammaFilter", desc);
74 }
75 
76 // ------------ method called to produce the data ------------
77 
78 bool
80 {
81  using namespace trigger;
82 
83  // The filter object
84  if (saveTags()) {
85  filterproduct.addCollectionTag(l1EGTag_);
86  }
87 
88  // get hold of filtered candidates
89  //edm::Handle<reco::HLTFilterObjectWithRefs> recoecalcands;
91  iEvent.getByToken (inputToken_,PrevFilterOutput);
92 
93  // get hold of collection of objects
95  iEvent.getByToken( inputTrkToken_ , tracks);
96 
97  // get the EcalRecHit
100  iEvent.getByToken( rechitsEBToken_, rechitsEB_ );
101  iEvent.getByToken( rechitsEEToken_, rechitsEE_ );
102 
103  std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
104  PrevFilterOutput->getObjects(TriggerCluster, recoecalcands);
105  if(recoecalcands.empty()) PrevFilterOutput->getObjects(TriggerPhoton, recoecalcands);
106 
107  // look at all candidates, check cuts and add to filter object
108  int n(0);
109 
110  for (auto const & ref : recoecalcands) {
111 
112  if ( EBOnly && std::abs( ref->eta() ) >= 1.479 ) continue ;
113 
114 
115  // S_Minor Cuts from the seed cluster
116  reco::CaloClusterPtr SCseed = ref->superCluster()->seed() ;
117  const EcalRecHitCollection* rechits = ( std::abs( ref->eta() ) < 1.479 ) ? rechitsEB_.product() : rechitsEE_.product() ;
118 
119  Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
120  float sMin = moments.sMin ;
121  float sMaj = moments.sMaj ;
122  if ( sMin < sMin_min || sMin > sMin_max ) continue ;
123  if ( sMaj < sMaj_min || sMaj > sMaj_max ) continue ;
124 
125  // seed Time
126  std::pair<DetId, float> maxRH = EcalClusterTools::getMaximum( *SCseed, rechits );
127  DetId seedCrystalId = maxRH.first;
128  auto seedRH = rechits->find(seedCrystalId);
129  float seedTime = (float)seedRH->time();
130  if ( seedTime < seedTimeMin || seedTime > seedTimeMax ) continue ;
131 
132  //Track Veto
133 
134  int nTrk = 0 ;
135  for (auto const & it : *tracks) {
136  if ( it.pt() < trkPtCut ) continue ;
137  LorentzVector trkP4( it.px(), it.py(), it.pz(), it.p() ) ;
138  double dR = ROOT::Math::VectorUtil::DeltaR( trkP4 , ref->p4() ) ;
139  if ( dR < trkdRCut ) nTrk++ ;
140  if ( nTrk > maxTrkCut ) break ;
141  }
142  if ( nTrk > maxTrkCut ) continue ;
143 
144 
145  n++;
146  // std::cout << "Passed eta: " << ref->eta() << std::endl;
147  filterproduct.addObject(TriggerCluster, ref);
148  }
149 
150 
151  // filter decision
152  bool accept(n>=ncandcut_);
153 
154  return accept;
155 }
156 
157 // declare this class as a framework plugin
T getParameter(std::string const &) const
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > inputToken_
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
edm::EDGetTokenT< EcalRecHitCollection > rechitsEBToken_
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
edm::EDGetTokenT< EcalRecHitCollection > rechitsEEToken_
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
~HLTDisplacedEgammaFilter() override
HLTDisplacedEgammaFilter(const edm::ParameterSet &)
edm::EDGetTokenT< reco::TrackCollection > inputTrkToken_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZTLorentzVector LorentzVector
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: DetId.h:18
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
T const * product() const
Definition: Handle.h:74
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
iterator find(key_type k)
bool saveTags() const
Definition: HLTFilter.h:45