CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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  relaxed_ = iConfig.getParameter<bool> ("relaxed") ;
27  L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1IsoCand");
28  L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1NonIsoCand");
29 
30  inputTrk = iConfig.getParameter< edm::InputTag > ("inputTrack");
31  trkPtCut = iConfig.getParameter<double> ("trackPtCut");
32  trkdRCut = iConfig.getParameter<double> ("trackdRCut");
33  maxTrkCut = iConfig.getParameter<int> ("maxTrackCut");
34 
35  rechitsEB = iConfig.getParameter< edm::InputTag > ("RecHitsEB");
36  rechitsEE = iConfig.getParameter< edm::InputTag > ("RecHitsEE");
37 
38  EBOnly = iConfig.getParameter<bool> ("EBOnly") ;
39  sMin_min = iConfig.getParameter<double> ("sMin_min");
40  sMin_max = iConfig.getParameter<double> ("sMin_max");
41  sMaj_min = iConfig.getParameter<double> ("sMaj_min");
42  sMaj_max = iConfig.getParameter<double> ("sMaj_max");
43  seedTimeMin = iConfig.getParameter<double> ("seedTimeMin");
44  seedTimeMax = iConfig.getParameter<double> ("seedTimeMax");
45 
46  inputToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(inputTag_);
47  rechitsEBToken_ = consumes<EcalRecHitCollection>(rechitsEB);
48  rechitsEEToken_ = consumes<EcalRecHitCollection>(rechitsEE);
49  inputTrkToken_ = consumes<reco::TrackCollection>(inputTrk);
50 
51 }
52 
54 
55 void
59  desc.add<edm::InputTag>("inputTag",edm::InputTag("hltEGRegionalL1SingleEG22"));
60  desc.add<edm::InputTag>("L1IsoCand",edm::InputTag("hltL1IsoRecoEcalCandidate"));
61  desc.add<edm::InputTag>("L1NonIsoCand",edm::InputTag("hltL1NonIsoRecoEcalCandidate"));
62  desc.add<edm::InputTag>("RecHitsEB",edm::InputTag("hltEcalRecHit", "EcalRecHitsEB"));
63  desc.add<edm::InputTag>("RecHitsEE",edm::InputTag("hltEcalRecHit", "EcalRecHitsEE"));
64  desc.add<edm::InputTag>("inputTrack",edm::InputTag("hltL1SeededEgammaRegionalCTFFinalFitWithMaterial"));
65  desc.add<bool>("relaxed",false);
66  desc.add<int>("ncandcut",1);
67  desc.add<bool>("EBOnly",false);
68  desc.add<double>("sMin_min",0.1);
69  desc.add<double>("sMin_max",0.4);
70  desc.add<double>("sMaj_min",0.0);
71  desc.add<double>("sMaj_max",999.0);
72  desc.add<double>("seedTimeMin", -25.0);
73  desc.add<double>("seedTimeMax", 25.0);
74  desc.add<int>("maxTrackCut", 0);
75  desc.add<double>("trackPtCut", 3.0);
76  desc.add<double>("trackdRCut", 0.5);
77  descriptions.add("hltDisplacedEgammaFilter",desc);
78 }
79 
80 // ------------ method called to produce the data ------------
81 
82 bool
84 {
85  using namespace trigger;
86 
87  // The filter object
88  if (saveTags()) {
89  filterproduct.addCollectionTag(L1IsoCollTag_);
90  if (relaxed_) filterproduct.addCollectionTag(L1NonIsoCollTag_);
91  }
92 
93  // Ref to Candidate object to be recorded in filter object
95 
96  // get hold of filtered candidates
97  //edm::Handle<reco::HLTFilterObjectWithRefs> recoecalcands;
99  iEvent.getByToken (inputToken_,PrevFilterOutput);
100 
101  // get hold of collection of objects
103  iEvent.getByToken( inputTrkToken_ , tracks);
104 
105  // get the EcalRecHit
108  iEvent.getByToken( rechitsEBToken_, rechitsEB_ );
109  iEvent.getByToken( rechitsEEToken_, rechitsEE_ );
110 
111  std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
112  PrevFilterOutput->getObjects(TriggerCluster, recoecalcands);
113  if(recoecalcands.empty()) PrevFilterOutput->getObjects(TriggerPhoton, recoecalcands);
114 
115  // look at all candidates, check cuts and add to filter object
116  int n(0);
117 
118  for (unsigned int i=0; i<recoecalcands.size(); i++) {
119 
120  ref = recoecalcands[i] ;
121  if ( EBOnly && std::abs( ref->eta() ) >= 1.479 ) continue ;
122 
123 
124  // S_Minor Cuts from the seed cluster
125  reco::CaloClusterPtr SCseed = ref->superCluster()->seed() ;
126  const EcalRecHitCollection* rechits = ( std::abs( ref->eta() ) < 1.479 ) ? rechitsEB_.product() : rechitsEE_.product() ;
127 
128  Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
129  float sMin = moments.sMin ;
130  float sMaj = moments.sMaj ;
131  if ( sMin < sMin_min || sMin > sMin_max ) continue ;
132  if ( sMaj < sMaj_min || sMaj > sMaj_max ) continue ;
133 
134  // seed Time
135  std::pair<DetId, float> maxRH = EcalClusterTools::getMaximum( *SCseed, rechits );
136  DetId seedCrystalId = maxRH.first;
137  EcalRecHitCollection::const_iterator seedRH = rechits->find(seedCrystalId);
138  float seedTime = (float)seedRH->time();
139  if ( seedTime < seedTimeMin || seedTime > seedTimeMax ) continue ;
140 
141  //Track Veto
142 
143  int nTrk = 0 ;
144  for (reco::TrackCollection::const_iterator it = tracks->begin(); it != tracks->end(); it++ ) {
145  if ( it->pt() < trkPtCut ) continue ;
146  LorentzVector trkP4( it->px(), it->py(), it->pz(), it->p() ) ;
147  double dR = ROOT::Math::VectorUtil::DeltaR( trkP4 , ref->p4() ) ;
148  if ( dR < trkdRCut ) nTrk++ ;
149  if ( nTrk > maxTrkCut ) break ;
150  }
151  if ( nTrk > maxTrkCut ) continue ;
152 
153 
154  n++;
155  // std::cout << "Passed eta: " << ref->eta() << std::endl;
156  filterproduct.addObject(TriggerCluster, ref);
157  }
158 
159 
160  // filter decision
161  bool accept(n>=ncandcut_);
162 
163  return accept;
164 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > inputToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
math::XYZTLorentzVector LorentzVector
std::vector< EcalRecHit >::const_iterator const_iterator
edm::EDGetTokenT< EcalRecHitCollection > rechitsEBToken_
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:24
edm::EDGetTokenT< EcalRecHitCollection > rechitsEEToken_
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref&lt;C&gt;)
int iEvent
Definition: GenABIO.cc:230
HLTDisplacedEgammaFilter(const edm::ParameterSet &)
edm::EDGetTokenT< reco::TrackCollection > inputTrkToken_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
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
tuple tracks
Definition: testEve_cfg.py:39
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