CMS 3D CMS Logo

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

#include <HLTDisplacedtktktkFilter.h>

Inheritance diagram for HLTDisplacedtktktkFilter:
HLTFilter edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void beginJob () override
 
void endJob () override
 
 HLTDisplacedtktktkFilter (const edm::ParameterSet &)
 
bool hltFilter (edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
 
 ~HLTDisplacedtktktkFilter () override
 
- Public Member Functions inherited from HLTFilter
 HLTFilter (const edm::ParameterSet &config)
 
int module (edm::Event const &) const
 
const std::string * moduleLabel () const
 
int path (edm::Event const &) const
 
const std::string * pathName (edm::Event const &) const
 
std::pair< int, int > pmid (edm::Event const &) const
 
bool saveTags () const
 
 ~HLTFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from HLTFilter
static void makeHLTFilterDescription (edm::ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

edm::InputTag beamSpotTag_
 
edm::EDGetTokenT< reco::BeamSpotbeamSpotToken_
 
edm::InputTag DisplacedVertexTag_
 
edm::EDGetTokenT< reco::VertexCollectionDisplacedVertexToken_
 
bool fastAccept_
 
double maxLxySignificance_
 
double maxNormalisedChi2_
 
double minCosinePointingAngle_
 
double minLxySignificance_
 
double minVtxProbability_
 
edm::InputTag TrackTag_
 
edm::EDGetTokenT< reco::RecoChargedCandidateCollectionTrackToken_
 
const int triggerTypeDaughters_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 12 of file HLTDisplacedtktktkFilter.h.

Constructor & Destructor Documentation

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

Definition at line 36 of file HLTDisplacedtktktkFilter.cc.

References ~HLTDisplacedtktktkFilter().

36  :
37  HLTFilter(iConfig),
38  fastAccept_ (iConfig.getParameter<bool>("FastAccept")),
39  minLxySignificance_ (iConfig.getParameter<double>("MinLxySignificance")),
40  maxLxySignificance_ (iConfig.getParameter<double>("MaxLxySignificance")),
41  maxNormalisedChi2_ (iConfig.getParameter<double>("MaxNormalisedChi2")),
42  minVtxProbability_ (iConfig.getParameter<double>("MinVtxProbability")),
43  minCosinePointingAngle_ (iConfig.getParameter<double>("MinCosinePointingAngle")),
44  triggerTypeDaughters_(iConfig.getParameter<int>("triggerTypeDaughters")),
45  DisplacedVertexTag_(iConfig.getParameter<edm::InputTag>("DisplacedVertexTag")),
46  DisplacedVertexToken_(consumes<reco::VertexCollection>(DisplacedVertexTag_)),
47  beamSpotTag_ (iConfig.getParameter<edm::InputTag> ("BeamSpotTag")),
48  beamSpotToken_(consumes<reco::BeamSpot>(beamSpotTag_)),
49  TrackTag_ (iConfig.getParameter<edm::InputTag>("TrackTag")),
50  TrackToken_(consumes<reco::RecoChargedCandidateCollection>(TrackTag_))
51 {
52 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
HLTFilter(const edm::ParameterSet &config)
Definition: HLTFilter.cc:20
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > TrackToken_
edm::EDGetTokenT< reco::VertexCollection > DisplacedVertexToken_
HLTDisplacedtktktkFilter::~HLTDisplacedtktktkFilter ( )
overridedefault

Member Function Documentation

void HLTDisplacedtktktkFilter::beginJob ( void  )
overridevirtual

Reimplemented from edm::global::EDFilterBase.

Definition at line 74 of file HLTDisplacedtktktkFilter.cc.

75 {
76 
77 }
void HLTDisplacedtktktkFilter::endJob ( void  )
overridevirtual

Reimplemented from edm::global::EDFilterBase.

Definition at line 80 of file HLTDisplacedtktktkFilter.cc.

81 {
82 
83 }
void HLTDisplacedtktktkFilter::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 57 of file HLTDisplacedtktktkFilter.cc.

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

57  {
60  desc.add<bool>("FastAccept",false);
61  desc.add<double>("MinLxySignificance",0.0);
62  desc.add<double>("MaxLxySignificance",0.0);
63  desc.add<double>("MaxNormalisedChi2",10.0);
64  desc.add<double>("MinVtxProbability",0.0);
65  desc.add<double>("MinCosinePointingAngle",-2.0);
66  desc.add<int>("triggerTypeDaughters",0);
67  desc.add<edm::InputTag>("DisplacedVertexTag",edm::InputTag("hltDisplacedtktktkVtx"));
68  desc.add<edm::InputTag>("BeamSpotTag",edm::InputTag("hltOnlineBeamSpot"));
69  desc.add<edm::InputTag>("TrackTag",edm::InputTag("hltL3MuonCandidates"));
70  descriptions.add("hltDisplacedtktktkFilter", desc);
71 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool HLTDisplacedtktktkFilter::hltFilter ( edm::Event iEvent,
const edm::EventSetup iSetup,
trigger::TriggerFilterObjectWithRefs filterproduct 
) const
overridevirtual

Implements HLTFilter.

Definition at line 86 of file HLTDisplacedtktktkFilter.cc.

References trigger::TriggerFilterObjectWithRefs::addCollectionTag(), trigger::TriggerRefsCollections::addObject(), beamSpotToken_, DisplacedVertexToken_, SoftLeptonByDistance_cfi::distance, reco::BeamSpot::dxdz(), reco::BeamSpot::dydz(), edm::Event::getByToken(), LogDebug, maxLxySignificance_, maxNormalisedChi2_, minCosinePointingAngle_, minLxySignificance_, minVtxProbability_, HLTFilter::saveTags(), mathSSE::sqrt(), TrackTag_, TrackToken_, triggerTypeDaughters_, reco::BeamSpot::x0(), reco::BeamSpot::y0(), and reco::BeamSpot::z0().

87 {
88 
89 
90  // get beam spot
91  reco::BeamSpot vertexBeamSpot;
92  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
93  iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle);
94  vertexBeamSpot = *recoBeamSpotHandle;
95 
96 
97  // get displaced vertices
98  reco::VertexCollection displacedVertexColl;
99  edm::Handle<reco::VertexCollection> displacedVertexCollHandle;
100  bool foundVertexColl = iEvent.getByToken(DisplacedVertexToken_, displacedVertexCollHandle);
101  if(foundVertexColl) displacedVertexColl = *displacedVertexCollHandle;
102 
103 
104  // get track collection
106  iEvent.getByToken(TrackToken_,trackcands);
107 
108  // All HLT filters must create and fill an HLT filter object,
109  // recording any reconstructed physics objects satisfying (or not)
110  // this HLT filter, and place it in the Event.
111 
112 
113  if (saveTags()) filterproduct.addCollectionTag(TrackTag_);
114 
115  bool triggered = false;
116 
117  // loop over vertex collection
118  for(auto const &displacedVertex : displacedVertexColl){
119  // check if the vertex actually consists of exactly three track tracks, reject the event if not
120  if(displacedVertex.tracksSize() != 3){
121  edm::LogError("HLTDisplacedtktktkFilter") << "HLTDisplacedtktktkFilter: ERROR: the tktktk vertex must have exactly three tracks by definition. It now has n tracks = "<< displacedVertex.tracksSize() << std::endl;
122  return false;
123  }
124 
125  float normChi2 = displacedVertex.normalizedChi2();
126  if (normChi2 > maxNormalisedChi2_) continue;
127 
128  double vtxProb = 0.0;
129  if( (displacedVertex.chi2()>=0.0) && (displacedVertex.ndof()>0) ) vtxProb = TMath::Prob(displacedVertex.chi2(), displacedVertex.ndof() );
130  if (vtxProb < minVtxProbability_) continue;
131 
132  // get the three tracks from the vertex
133  auto trackIt = displacedVertex.tracks_begin();
134  reco::TrackRef vertextkRef1 = (*trackIt).castTo<reco::TrackRef>();
135  // the second one
136  trackIt++;
137  reco::TrackRef vertextkRef2 = (*trackIt).castTo<reco::TrackRef>();
138  // the third one
139  trackIt++;
140  reco::TrackRef vertextkRef3 = (*trackIt).castTo<reco::TrackRef>();
141 
142  // first find these three tracks in the track collection
143  reco::RecoChargedCandidateCollection::const_iterator cand1;
144  reco::RecoChargedCandidateCollection::const_iterator cand2;
145  reco::RecoChargedCandidateCollection::const_iterator cand3;
146 
147  int iFoundRefs = 0;
148  for (auto cand=trackcands->begin(); cand!=trackcands->end(); cand++) {
149  reco::TrackRef tkRef = cand->get<reco::TrackRef>();
150  if(tkRef == vertextkRef1) {cand1 = cand; iFoundRefs++;}
151  if(tkRef == vertextkRef2) {cand2 = cand; iFoundRefs++;}
152  if(tkRef == vertextkRef3) {cand3 = cand; iFoundRefs++;}
153  }
154 
155  if(iFoundRefs < 3){
156  edm::LogError("HLTDisplacedtktktkFilter") << "HLTDisplacedtktktkFilter: ERROR: the tracks matched with the tktktk vertex tracks should be at least three by definition." << std::endl;
157  return false;
158  }
159  // calculate three-track transverse momentum
160  math::XYZVector pperp(cand1->px() + cand2->px() + cand3->px(),
161  cand1->py() + cand2->py() + cand3->py(),
162  0.);
163 
164  const reco::Vertex::Point& vpoint=displacedVertex.position();
165  reco::Vertex::Error verr = displacedVertex.error();
166  // translate to global error, should be improved
167  GlobalError err(verr.At(0,0), verr.At(1,0), verr.At(1,1), verr.At(2,0), verr.At(2,1), verr.At(2,2) );
168 
169  GlobalPoint displacementFromBeamspot( -1*((vertexBeamSpot.x0() - vpoint.x()) + (vpoint.z() - vertexBeamSpot.z0()) * vertexBeamSpot.dxdz()),
170  -1*((vertexBeamSpot.y0() - vpoint.y())+ (vpoint.z() - vertexBeamSpot.z0()) * vertexBeamSpot.dydz()), 0);
171 
172  float lxy = displacementFromBeamspot.perp();
173  float lxyerr = sqrt(err.rerr(displacementFromBeamspot));
174 
175 
176  //calculate the angle between the decay length and the tktk momentum
177  reco::Vertex::Point vperp(displacementFromBeamspot.x(),displacementFromBeamspot.y(),0.);
178 
179  float cosAlpha = vperp.Dot(pperp)/(vperp.R()*pperp.R());
180 
181  // check thresholds
182  if (cosAlpha < minCosinePointingAngle_) continue;
183  if (minLxySignificance_ > 0. && lxy/lxyerr < minLxySignificance_) continue;
184  if (maxLxySignificance_ > 0. && lxy/lxyerr > maxLxySignificance_) continue;
185  triggered = true;
186 
187  // now add the tracks that passed to the filter object
188 
189  // Ref to Candidate object to be recorded in filter object
193 
194  ref1=reco::RecoChargedCandidateRef( edm::Ref<reco::RecoChargedCandidateCollection> (trackcands,distance(trackcands->begin(), cand1)));
195  filterproduct.addObject(triggerTypeDaughters_,ref1);
196 
197  ref2=reco::RecoChargedCandidateRef( edm::Ref<reco::RecoChargedCandidateCollection> (trackcands,distance(trackcands->begin(),cand2 )));
198  filterproduct.addObject(triggerTypeDaughters_,ref2);
199 
200  ref3=reco::RecoChargedCandidateRef( edm::Ref<reco::RecoChargedCandidateCollection> (trackcands,distance(trackcands->begin(),cand3 )));
201  filterproduct.addObject(triggerTypeDaughters_,ref3);
202  }
203 
204  LogDebug("HLTDisplacedtktktkFilter") << " >>>>> Result of HLTDisplacedtktktkFilter is "<< triggered <<std::endl;
205 
206  return triggered;
207 }
#define LogDebug(id)
double z0() const
z coordinate
Definition: BeamSpot.h:68
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
edm::Ref< RecoChargedCandidateCollection > RecoChargedCandidateRef
reference to an object in a collection of RecoChargedCandidate objects
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
double dydz() const
dydz slope
Definition: BeamSpot.h:84
T sqrt(T t)
Definition: SSEVec.h:18
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
double dxdz() const
dxdz slope
Definition: BeamSpot.h:82
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > TrackToken_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
bool saveTags() const
Definition: HLTFilter.h:45
double y0() const
y coordinate
Definition: BeamSpot.h:66
edm::EDGetTokenT< reco::VertexCollection > DisplacedVertexToken_
double x0() const
x coordinate
Definition: BeamSpot.h:64

Member Data Documentation

edm::InputTag HLTDisplacedtktktkFilter::beamSpotTag_
private

Definition at line 33 of file HLTDisplacedtktktkFilter.h.

edm::EDGetTokenT<reco::BeamSpot> HLTDisplacedtktktkFilter::beamSpotToken_
private

Definition at line 34 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

edm::InputTag HLTDisplacedtktktkFilter::DisplacedVertexTag_
private

Definition at line 31 of file HLTDisplacedtktktkFilter.h.

edm::EDGetTokenT<reco::VertexCollection> HLTDisplacedtktktkFilter::DisplacedVertexToken_
private

Definition at line 32 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

bool HLTDisplacedtktktkFilter::fastAccept_
private

Definition at line 23 of file HLTDisplacedtktktkFilter.h.

double HLTDisplacedtktktkFilter::maxLxySignificance_
private

Definition at line 25 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

double HLTDisplacedtktktkFilter::maxNormalisedChi2_
private

Definition at line 26 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

double HLTDisplacedtktktkFilter::minCosinePointingAngle_
private

Definition at line 28 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

double HLTDisplacedtktktkFilter::minLxySignificance_
private

Definition at line 24 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

double HLTDisplacedtktktkFilter::minVtxProbability_
private

Definition at line 27 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

edm::InputTag HLTDisplacedtktktkFilter::TrackTag_
private

Definition at line 35 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

edm::EDGetTokenT<reco::RecoChargedCandidateCollection> HLTDisplacedtktktkFilter::TrackToken_
private

Definition at line 36 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().

const int HLTDisplacedtktktkFilter::triggerTypeDaughters_
private

Definition at line 29 of file HLTDisplacedtktktkFilter.h.

Referenced by hltFilter().