CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
HLTDisplacedtktktkVtxProducer Class Reference

#include <HLTDisplacedtktktkVtxProducer.h>

Inheritance diagram for HLTDisplacedtktktkVtxProducer:
edm::stream::EDProducer<>

Public Member Functions

virtual void beginJob ()
 
virtual void endJob ()
 
 HLTDisplacedtktktkVtxProducer (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~HLTDisplacedtktktkVtxProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

bool checkPreviousCand (const reco::TrackRef &trackref, std::vector< reco::RecoChargedCandidateRef > &ref2)
 

Private Attributes

const int chargeOpt_
 
double firstTrackMass
 
double firstTrackMass2
 
double firstTrackPt
 
const double massParticle1_
 
const double massParticle2_
 
const double massParticle3_
 
const double maxEta_
 
const double maxInvMass_
 
const double maxInvMassRes_
 
const double minInvMass_
 
const double minInvMassRes_
 
const double minPtRes_
 
const double minPtTk1_
 
const double minPtTk2_
 
const double minPtTk3_
 
const double minPtTri_
 
const edm::InputTag previousCandTag_
 
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefspreviousCandToken_
 
const int resOpt_
 
double secondTrackMass
 
double secondTrackMass2
 
double secondTrackPt
 
const edm::InputTag srcTag_
 
const edm::EDGetTokenT< reco::RecoChargedCandidateCollectionsrcToken_
 
double thirdTrackMass
 
double thirdTrackMass2
 
double thirdTrackPt
 
const int triggerTypeDaughters_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 35 of file HLTDisplacedtktktkVtxProducer.h.

Constructor & Destructor Documentation

HLTDisplacedtktktkVtxProducer::HLTDisplacedtktktkVtxProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 35 of file HLTDisplacedtktktkVtxProducer.cc.

References firstTrackMass, firstTrackMass2, firstTrackPt, massParticle1_, massParticle2_, massParticle3_, minPtTk1_, minPtTk2_, minPtTk3_, resOpt_, secondTrackMass, secondTrackMass2, secondTrackPt, std::swap(), thirdTrackMass, thirdTrackMass2, thirdTrackPt, and ~HLTDisplacedtktktkVtxProducer().

35  :
36  srcTag_ (iConfig.getParameter<edm::InputTag>("Src")),
37  srcToken_(consumes<reco::RecoChargedCandidateCollection>(srcTag_)),
38  previousCandTag_(iConfig.getParameter<edm::InputTag>("PreviousCandTag")),
39  previousCandToken_(consumes<trigger::TriggerFilterObjectWithRefs>(previousCandTag_)),
40  maxEta_ (iConfig.getParameter<double>("MaxEtaTk")),
41  minPtTk1_ (iConfig.getParameter<double>("MinPtResTk1")),
42  minPtTk2_ (iConfig.getParameter<double>("MinPtResTk2")),
43  minPtTk3_ (iConfig.getParameter<double>("MinPtThirdTk")),
44  minPtRes_ (iConfig.getParameter<double>("MinPtRes")),
45  minPtTri_ (iConfig.getParameter<double>("MinPtTri")),
46  minInvMassRes_ (iConfig.getParameter<double>("MinInvMassRes")),
47  maxInvMassRes_ (iConfig.getParameter<double>("MaxInvMassRes")),
48  minInvMass_ (iConfig.getParameter<double>("MinInvMass")),
49  maxInvMass_ (iConfig.getParameter<double>("MaxInvMass")),
50  massParticle1_ (iConfig.getParameter<double>("massParticleRes1")),
51  massParticle2_ (iConfig.getParameter<double>("massParticleRes2")),
52  massParticle3_ (iConfig.getParameter<double>("massParticle3")),
53  chargeOpt_ (iConfig.getParameter<int>("ChargeOpt")),
54  resOpt_ (iConfig.getParameter<int>("ResOpt")),
55  triggerTypeDaughters_(iConfig.getParameter<int>("triggerTypeDaughters"))
56 
57 {
58  produces<VertexCollection>();
59 
67  {
69  {
72  }
74  {
75  std::swap(firstTrackMass, thirdTrackMass);
77  }
78  }
79  firstTrackMass2 = firstTrackMass*firstTrackMass;
82 }
T getParameter(std::string const &) const
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > srcToken_
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
HLTDisplacedtktktkVtxProducer::~HLTDisplacedtktktkVtxProducer ( )
overridedefault

Member Function Documentation

void HLTDisplacedtktktkVtxProducer::beginJob ( void  )
virtual

Definition at line 112 of file HLTDisplacedtktktkVtxProducer.cc.

113 {
114 
115 }
bool HLTDisplacedtktktkVtxProducer::checkPreviousCand ( const reco::TrackRef trackref,
std::vector< reco::RecoChargedCandidateRef > &  ref2 
)
private

Definition at line 266 of file HLTDisplacedtktktkVtxProducer.cc.

References mps_fire::i, and convertSQLiteXML::ok.

Referenced by produce().

266  {
267  bool ok=false;
268  for (auto & i : refVect) {
269  if ( i->get<TrackRef>() == trackref ) {
270  ok=true;
271  break;
272  }
273  }
274  return ok;
275 }
void HLTDisplacedtktktkVtxProducer::endJob ( void  )
virtual

Definition at line 118 of file HLTDisplacedtktktkVtxProducer.cc.

119 {
120 
121 }
void HLTDisplacedtktktkVtxProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 87 of file HLTDisplacedtktktkVtxProducer.cc.

References edm::ConfigurationDescriptions::add(), and edm::ParameterSetDescription::add().

87  {
89  desc.add<edm::InputTag>("Src",edm::InputTag("hltL3MuonCandidates"));
90  desc.add<edm::InputTag>("PreviousCandTag",edm::InputTag(""));
91  desc.add<double>("MaxEtaTk",2.5);
92  desc.add<double>("MinPtResTk1",0.0);
93  desc.add<double>("MinPtResTk2",0.0);
94  desc.add<double>("MinPtThirdTk",0.0);
95  desc.add<double>("MinPtRes",0.0);
96  desc.add<double>("MinPtTri",0.0);
97  desc.add<double>("MinInvMassRes",1.0);
98  desc.add<double>("MaxInvMassRes",20.0);
99  desc.add<double>("MinInvMass",1.0);
100  desc.add<double>("MaxInvMass",20.0);
101  desc.add<double>("massParticleRes1",0.4937);
102  desc.add<double>("massParticleRes2",0.4937);
103  desc.add<double>("massParticle3",0.1396);
104  desc.add<int>("ChargeOpt",-1);
105  desc.add<int>("ResOpt",1);
106  desc.add<int>("triggerTypeDaughters",0);
107 
108  descriptions.add("hltDisplacedtktktkVtxProducer", desc);
109 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void HLTDisplacedtktktkVtxProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 124 of file HLTDisplacedtktktkVtxProducer.cc.

References funct::abs(), chargeOpt_, checkPreviousCand(), reco::e1, reco::e2, SiPixelPhase1TrackClustersV_cfi::e3, firstTrackMass, firstTrackMass2, firstTrackPt, edm::EventSetup::get(), edm::Ref< C, T, F >::get(), edm::Event::getByToken(), trigger::TriggerRefsCollections::getObjects(), TransientVertex::isValid(), LogDebug, maxEta_, maxInvMass_, maxInvMassRes_, minInvMass_, minInvMassRes_, minPtRes_, minPtTri_, eostools::move(), AlCaHLTBitMon_ParallelJobs::p, previousCandToken_, edm::Event::put(), resOpt_, secondTrackMass, secondTrackMass2, secondTrackPt, mathSSE::sqrt(), srcToken_, thirdTrackMass, thirdTrackMass2, thirdTrackPt, triggerTypeDaughters_, KalmanVertexFitter::vertex(), and particleFlowSuperClusterECAL_cfi::vertexCollection.

125 {
126  // get hold of track trks
128  iEvent.getByToken(srcToken_,trackcands);
129  if ( trackcands->size() < 3 ) return;
130 
131  //get the transient track builder:
133  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
134 
135  std::unique_ptr<VertexCollection> vertexCollection(new VertexCollection());
136 
137  // look at all trackcands, check cuts and make vertices
138  double e1,e2,e3;
140 
141  RecoChargedCandidateCollection::const_iterator cand1;
142  RecoChargedCandidateCollection::const_iterator cand2;
143  RecoChargedCandidateCollection::const_iterator cand3;
144 
145  // get the objects passing the previous filter
147  iEvent.getByToken(previousCandToken_,previousCands);
148 
149  vector<RecoChargedCandidateRef> vPrevCands;
150  previousCands->getObjects(triggerTypeDaughters_,vPrevCands);
151 
152  std::vector<bool> candComp;
153  for (cand1=trackcands->begin(); cand1!=trackcands->end(); cand1++)
154  candComp.push_back(checkPreviousCand( cand1->get<TrackRef>(), vPrevCands));
155 
156  for (cand1=trackcands->begin(); cand1!=trackcands->end(); cand1++) {
157 
158  TrackRef tk1 = cand1->get<TrackRef>();
159  LogDebug("HLTDisplacedtktktkVtxProducer") << " 1st track in loop: q*pt= " << cand1->charge()*cand1->pt() << ", eta= " << cand1->eta() << ", hits= " << tk1->numberOfValidHits();
160 
161  //first check if this track passed the previous filter
162  if (!candComp[cand1-trackcands->begin()]) continue;
163  // if( ! checkPreviousCand( tk1, vPrevCands) ) continue;
164 
165  // cuts
166  if (std::abs(cand1->eta())>maxEta_) continue;
167  if (cand1->pt() < firstTrackPt) continue;
168 
169  cand2=trackcands->begin();
170  if(firstTrackMass==secondTrackMass){cand2 = cand1+1;}
171 
172  for (; cand2!=trackcands->end(); cand2++) {
173 
174  TrackRef tk2 = cand2->get<TrackRef>();
175  if(tk1==tk2) continue;
176  LogDebug("HLTDisplacedtktktkVtxProducer") << " 2nd track in loop: q*pt= " << cand2->charge()*cand2->pt() << ", eta= " << cand2->eta() << ", hits= " << tk2->numberOfValidHits() << ", d0= " << tk2->d0();
177 
178  //first check if this track passed the previous filter
179  if (!candComp[cand2-trackcands->begin()]) continue;
180  // if( ! checkPreviousCand( tk2, vPrevCands) ) continue;
181 
182  // cuts
183  if (std::abs(cand2->eta()) > maxEta_) continue;
184  if (cand2->pt() < secondTrackPt) continue;
185 
186  // opposite sign or same sign for resonance
187  if(resOpt_>0)
188  {
189  if (chargeOpt_<0) {
190  if (cand1->charge()*cand2->charge()>0) continue;
191  } else if (chargeOpt_>0) {
192  if (cand1->charge()*cand2->charge()<0) continue;
193  }
194  }
195 
196  //
197  // Combined ditrack system
198  e1 = sqrt(cand1->momentum().Mag2()+firstTrackMass2);
199  e2 = sqrt(cand2->momentum().Mag2()+secondTrackMass2);
200  pres = Particle::LorentzVector(cand1->px(),cand1->py(),cand1->pz(),e1)+Particle::LorentzVector(cand2->px(),cand2->py(),cand2->pz(),e2);
201 
202  if(resOpt_>0)
203  {
204  if (pres.pt()<minPtRes_) continue;
205  double invmassRes = std::abs(pres.mass());
206  LogDebug("HLTDisplacedtktktkVtxProducer") << " ... 1-2 invmass= " << invmassRes;
207  if (invmassRes<minInvMassRes_) continue;
208  if (invmassRes>maxInvMassRes_) continue;
209  }
210 
211  cand3=trackcands->begin();
212  if(firstTrackMass==secondTrackMass && firstTrackMass==thirdTrackMass && resOpt_<=0){cand3 = cand2+1;}
213 
214  for (; cand3!=trackcands->end(); cand3++) {
215 
216  TrackRef tk3 = cand3->get<TrackRef>();
217  if(tk1==tk3 || tk2==tk3) continue;
218  LogDebug("HLTDisplacedtktktkVtxProducer") << " 3rd track in loop: q*pt= " << cand3->charge()*cand3->pt() << ", eta= " << cand3->eta() << ", hits= " << tk3->numberOfValidHits();
219 
220  //first check if this track passed the previous filter
221  if (!candComp[cand3-trackcands->begin()]) continue;
222  // if( ! checkPreviousCand( tk3, vPrevCands) ) continue;
223 
224  // cuts
225  if (std::abs(cand3->eta())>maxEta_) continue;
226  if (cand3->pt() < thirdTrackPt) continue;
227 
228  e3 = sqrt(cand3->momentum().Mag2()+thirdTrackMass2);
229  p = Particle::LorentzVector(cand1->px(),cand1->py(),cand1->pz(),e1)+Particle::LorentzVector(cand2->px(),cand2->py(),cand2->pz(),e2)+Particle::LorentzVector(cand3->px(),cand3->py(),cand3->pz(),e3);
230 
231  if (p.pt()<minPtTri_) continue;
232  double invmass = std::abs(p.mass());
233  LogDebug("HLTDisplacedtktktkVtxProducer") << " ... 1-2-3 invmass= " << invmass;
234  if (invmass<minInvMass_) continue;
235  if (invmass>maxInvMass_) continue;
236 
237  // do the vertex fit
238  vector<TransientTrack> t_tks;
239  TransientTrack ttkp1 = (*theB).build(&tk1);
240  TransientTrack ttkp2 = (*theB).build(&tk2);
241  TransientTrack ttkp3 = (*theB).build(&tk3);
242 
243  t_tks.push_back(ttkp1);
244  t_tks.push_back(ttkp2);
245  t_tks.push_back(ttkp3);
246 
247  if (t_tks.size()!=3) continue;
248 
249  KalmanVertexFitter kvf;
250  TransientVertex tv = kvf.vertex(t_tks);
251 
252  if (!tv.isValid()) continue;
253 
254  Vertex vertex = tv;
255 
256  // put vertex in the event
257  vertexCollection->push_back(vertex);
258  }
259  }
260  }
261  iEvent.put(std::move(vertexCollection));
262 }
#define LogDebug(id)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
bool checkPreviousCand(const reco::TrackRef &trackref, std::vector< reco::RecoChargedCandidateRef > &ref2)
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
const edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
const edm::EDGetTokenT< reco::RecoChargedCandidateCollection > srcToken_
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:245
Float e1
Definition: deltaR.h:20
const T & get() const
Definition: EventSetup.h:59
Float e2
Definition: deltaR.h:21
bool isValid() const
def move(src, dest)
Definition: eostools.py:510
math::PtEtaPhiELorentzVectorF LorentzVector

Member Data Documentation

const int HLTDisplacedtktktkVtxProducer::chargeOpt_
private

Definition at line 64 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

double HLTDisplacedtktktkVtxProducer::firstTrackMass
private

Definition at line 68 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::firstTrackMass2
private

Definition at line 74 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::firstTrackPt
private

Definition at line 71 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

const double HLTDisplacedtktktkVtxProducer::massParticle1_
private

Definition at line 61 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::massParticle2_
private

Definition at line 62 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::massParticle3_
private

Definition at line 63 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::maxEta_
private

Definition at line 51 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::maxInvMass_
private

Definition at line 60 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::maxInvMassRes_
private

Definition at line 58 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::minInvMass_
private

Definition at line 59 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::minInvMassRes_
private

Definition at line 57 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::minPtRes_
private

Definition at line 55 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const double HLTDisplacedtktktkVtxProducer::minPtTk1_
private

Definition at line 52 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::minPtTk2_
private

Definition at line 53 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::minPtTk3_
private

Definition at line 54 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer().

const double HLTDisplacedtktktkVtxProducer::minPtTri_
private

Definition at line 56 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const edm::InputTag HLTDisplacedtktktkVtxProducer::previousCandTag_
private

Definition at line 49 of file HLTDisplacedtktktkVtxProducer.h.

const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> HLTDisplacedtktktkVtxProducer::previousCandToken_
private

Definition at line 50 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

const int HLTDisplacedtktktkVtxProducer::resOpt_
private

Definition at line 65 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::secondTrackMass
private

Definition at line 69 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::secondTrackMass2
private

Definition at line 75 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::secondTrackPt
private

Definition at line 72 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

const edm::InputTag HLTDisplacedtktktkVtxProducer::srcTag_
private

Definition at line 47 of file HLTDisplacedtktktkVtxProducer.h.

const edm::EDGetTokenT<reco::RecoChargedCandidateCollection> HLTDisplacedtktktkVtxProducer::srcToken_
private

Definition at line 48 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().

double HLTDisplacedtktktkVtxProducer::thirdTrackMass
private

Definition at line 70 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::thirdTrackMass2
private

Definition at line 76 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

double HLTDisplacedtktktkVtxProducer::thirdTrackPt
private

Definition at line 73 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by HLTDisplacedtktktkVtxProducer(), and produce().

const int HLTDisplacedtktktkVtxProducer::triggerTypeDaughters_
private

Definition at line 66 of file HLTDisplacedtktktkVtxProducer.h.

Referenced by produce().