CMS 3D CMS Logo

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

#include <VertexAssociatorByPositionAndTracks.h>

Inheritance diagram for VertexAssociatorByPositionAndTracks:
reco::VertexToTrackingVertexAssociatorBaseImpl

Public Member Functions

reco::VertexRecoToSimCollection associateRecoToSim (const edm::Handle< edm::View< reco::Vertex > > &vCH, const edm::Handle< TrackingVertexCollection > &tVCH) const override
 compare reco to sim the handle of reco::Vertex and TrackingVertex collections More...
 
reco::VertexSimToRecoCollection associateSimToReco (const edm::Handle< edm::View< reco::Vertex > > &vCH, const edm::Handle< TrackingVertexCollection > &tVCH) const override
 compare reco to sim the handle of reco::Vertex and TrackingVertex collections More...
 
 VertexAssociatorByPositionAndTracks (const edm::EDProductGetter *productGetter, double absZ, double sigmaZ, double maxRecoZ, double absT, double sigmaT, double maxRecoT, double sharedTrackFraction, const reco::RecoToSimCollection *trackRecoToSimAssociation, const reco::SimToRecoCollection *trackSimToRecoAssociation)
 
 VertexAssociatorByPositionAndTracks (const edm::EDProductGetter *productGetter, double absZ, double sigmaZ, double maxRecoZ, double sharedTrackFraction, const reco::RecoToSimCollection *trackRecoToSimAssociation, const reco::SimToRecoCollection *trackSimToRecoAssociation)
 
 ~VertexAssociatorByPositionAndTracks () override
 
- Public Member Functions inherited from reco::VertexToTrackingVertexAssociatorBaseImpl
 VertexToTrackingVertexAssociatorBaseImpl ()
 Constructor. More...
 
virtual ~VertexToTrackingVertexAssociatorBaseImpl ()
 Destructor. More...
 

Private Attributes

const double absT_
 
const double absZ_
 
const double maxRecoT_
 
const double maxRecoZ_
 
const edm::EDProductGetterproductGetter_
 
const double sharedTrackFraction_
 
const double sigmaT_
 
const double sigmaZ_
 
const reco::RecoToSimCollectiontrackRecoToSimAssociation_
 
const reco::SimToRecoCollectiontrackSimToRecoAssociation_
 

Detailed Description

This class associates reco::Vertices and TrackingVertices by their position (maximum distance in Z should be smaller than absZ and sigmaZ*zError of reco::Vertex), and (optionally) by the fraction of tracks shared by reco::Vertex and TrackingVertex divided by the number of tracks in reco::Vertex. This fraction is always used as the quality in the association, i.e. multiple associations are sorted by it in descending order.

Definition at line 16 of file VertexAssociatorByPositionAndTracks.h.

Constructor & Destructor Documentation

VertexAssociatorByPositionAndTracks::VertexAssociatorByPositionAndTracks ( const edm::EDProductGetter productGetter,
double  absZ,
double  sigmaZ,
double  maxRecoZ,
double  absT,
double  sigmaT,
double  maxRecoT,
double  sharedTrackFraction,
const reco::RecoToSimCollection trackRecoToSimAssociation,
const reco::SimToRecoCollection trackSimToRecoAssociation 
)

Definition at line 7 of file VertexAssociatorByPositionAndTracks.cc.

16  :
17  productGetter_(productGetter),
18  absZ_(absZ),
19  sigmaZ_(sigmaZ),
20  maxRecoZ_(maxRecoZ),
21  absT_(absT),
22  sigmaT_(sigmaT),
23  maxRecoT_(maxRecoT),
24  sharedTrackFraction_(sharedTrackFraction),
25  trackRecoToSimAssociation_(trackRecoToSimAssociation),
26  trackSimToRecoAssociation_(trackSimToRecoAssociation)
27 {}
const reco::RecoToSimCollection * trackRecoToSimAssociation_
const reco::SimToRecoCollection * trackSimToRecoAssociation_
VertexAssociatorByPositionAndTracks::VertexAssociatorByPositionAndTracks ( const edm::EDProductGetter productGetter,
double  absZ,
double  sigmaZ,
double  maxRecoZ,
double  sharedTrackFraction,
const reco::RecoToSimCollection trackRecoToSimAssociation,
const reco::SimToRecoCollection trackSimToRecoAssociation 
)

Definition at line 29 of file VertexAssociatorByPositionAndTracks.cc.

35  :
36  productGetter_(productGetter),
37  absZ_(absZ),
38  sigmaZ_(sigmaZ),
39  maxRecoZ_(maxRecoZ),
43  sharedTrackFraction_(sharedTrackFraction),
44  trackRecoToSimAssociation_(trackRecoToSimAssociation),
45  trackSimToRecoAssociation_(trackSimToRecoAssociation)
46 {}
const reco::RecoToSimCollection * trackRecoToSimAssociation_
const reco::SimToRecoCollection * trackSimToRecoAssociation_
VertexAssociatorByPositionAndTracks::~VertexAssociatorByPositionAndTracks ( )
override

Definition at line 48 of file VertexAssociatorByPositionAndTracks.cc.

48 {}

Member Function Documentation

reco::VertexRecoToSimCollection VertexAssociatorByPositionAndTracks::associateRecoToSim ( const edm::Handle< edm::View< reco::Vertex > > &  vCH,
const edm::Handle< TrackingVertexCollection > &  tVCH 
) const
overridevirtual

compare reco to sim the handle of reco::Vertex and TrackingVertex collections

Implements reco::VertexToTrackingVertexAssociatorBaseImpl.

Definition at line 50 of file VertexAssociatorByPositionAndTracks.cc.

References funct::abs(), absT_, absZ_, EncodedEventId::bunchCrossing(), calculateVertexSharedTracks(), EncodedEventId::event(), TrackingVertex::eventId(), dedxEstimators_cff::fraction, edm::AssociationMap< Tag >::insert(), reco::Vertex::isFake(), reco::Vertex::isValid(), LogDebug, LogTrace, SiStripPI::max, maxRecoZ_, TrackingVertex::nDaughterTracks(), reco::Vertex::ndof(), TrackingVertex::position(), edm::AssociationMap< Tag >::post_insert(), productGetter_, ecalDetailedTimeRecHit_cfi::recoVertex, edm::second(), sharedTrackFraction_, sigmaT_, sigmaZ_, ecalDetailedTimeRecHit_cfi::simVertex, edm::View< T >::size(), reco::Vertex::t(), reco::Vertex::tError(), trackRecoToSimAssociation_, reco::Vertex::tracksSize(), RecoVertex_cff::useTiming, reco::Vertex::z(), and reco::Vertex::zError().

51  {
53 
54  const edm::View<reco::Vertex>& recoVertices = *vCH;
55  const TrackingVertexCollection& simVertices = *tVCH;
56 
57  LogDebug("VertexAssociation") << "VertexAssociatorByPositionAndTracks::associateRecoToSim(): associating "
58  << recoVertices.size() << " reco::Vertices to" << simVertices.size() << " TrackingVertices";
59 
60  // filter sim PVs
61  std::vector<size_t> simPVindices;
62  simPVindices.reserve(recoVertices.size());
63  {
64  int current_event = -1;
65  for(size_t iSim=0; iSim != simVertices.size(); ++iSim) {
66  const TrackingVertex& simVertex = simVertices[iSim];
67 
68  // Associate only to primary vertices of the in-time pileup
69  // events (BX=0, first vertex in each of the events)
70  if(simVertex.eventId().bunchCrossing() != 0) continue;
71  if(simVertex.eventId().event() != current_event) {
72  current_event = simVertex.eventId().event();
73  simPVindices.push_back(iSim);
74  }
75  }
76  }
77 
78  for(size_t iReco=0; iReco != recoVertices.size(); ++iReco) {
79  const reco::Vertex& recoVertex = recoVertices[iReco];
80 
81  // skip fake vertices
82  if(std::abs(recoVertex.z()) > maxRecoZ_ || recoVertex.isFake() || !recoVertex.isValid() || recoVertex.ndof() < 0.)
83  continue;
84 
85  LogTrace("VertexAssociation") << " reco::Vertex at Z " << recoVertex.z();
86 
87  for(const size_t iSim: simPVindices) {
88  const TrackingVertex& simVertex = simVertices[iSim];
89  LogTrace("VertexAssociation") << " Considering TrackingVertex at Z " << simVertex.position().z();
90 
91  // recoVertex.t() == 0. is a special value
92  // need to change this to std::numeric_limits<double>::max() or something more clear
93  const bool useTiming = ( absT_ != std::numeric_limits<double>::max() && recoVertex.t() != 0. );
94  if( useTiming ) {
95  LogTrace("VertexAssociation") << " and T " << recoVertex.t()*CLHEP::second << std::endl;
96  }
97 
98  const double tdiff = std::abs(recoVertex.t() - simVertex.position().t()*CLHEP::second);
99  const double zdiff = std::abs(recoVertex.z() - simVertex.position().z());
100  if( zdiff < absZ_ && zdiff / recoVertex.zError() < sigmaZ_ &&
101  ( !useTiming || ( tdiff < absT_ && tdiff / recoVertex.tError() < sigmaT_ ) ) ) {
102  auto sharedTracks = calculateVertexSharedTracks(recoVertex, simVertex, *trackRecoToSimAssociation_);
103  auto fraction = double(sharedTracks)/recoVertex.tracksSize();
104  if(sharedTrackFraction_ < 0 || fraction > sharedTrackFraction_) {
105  LogTrace("VertexAssociation") << " Matched with significance " << zdiff/recoVertex.zError() << " " << tdiff/recoVertex.tError()
106  << " shared tracks " << sharedTracks << " reco Tracks " << recoVertex.tracksSize() << " TrackingParticles " << simVertex.nDaughterTracks();
107 
108  ret.insert(reco::VertexBaseRef(vCH, iReco), std::make_pair(TrackingVertexRef(tVCH, iSim), sharedTracks));
109  }
110  }
111  }
112  }
113 
114  ret.post_insert();
115 
116  LogDebug("VertexAssociation") << "VertexAssociatorByPositionAndTracks::associateRecoToSim(): finished";
117 
118  return ret;
119 }
#define LogDebug(id)
int event() const
get the contents of the subdetector field (should be protected?)
double zError() const
error on z
Definition: Vertex.h:123
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:68
size_type size() const
const reco::RecoToSimCollection * trackRecoToSimAssociation_
U second(std::pair< T, U > const &p)
int bunchCrossing() const
get the detector field from this detid
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double z() const
z coordinate
Definition: Vertex.h:115
#define LogTrace(id)
double ndof() const
Definition: Vertex.h:105
edm::Ref< TrackingVertexCollection > TrackingVertexRef
bool isFake() const
Definition: Vertex.h:72
unsigned int nDaughterTracks() const
std::vector< TrackingVertex > TrackingVertexCollection
const EncodedEventId & eventId() const
unsigned int calculateVertexSharedTracks(const reco::Vertex &recoV, const TrackingVertex &simV, const reco::RecoToSimCollection &trackRecoToSimAssociation)
double tError() const
error on t
Definition: Vertex.h:125
size_t tracksSize() const
number of tracks
Definition: Vertex.cc:71
double t() const
t coordinate
Definition: Vertex.h:117
const LorentzVector & position() const
reco::VertexSimToRecoCollection VertexAssociatorByPositionAndTracks::associateSimToReco ( const edm::Handle< edm::View< reco::Vertex > > &  vCH,
const edm::Handle< TrackingVertexCollection > &  tVCH 
) const
overridevirtual

compare reco to sim the handle of reco::Vertex and TrackingVertex collections

Implements reco::VertexToTrackingVertexAssociatorBaseImpl.

Definition at line 121 of file VertexAssociatorByPositionAndTracks.cc.

References funct::abs(), absT_, absZ_, EncodedEventId::bunchCrossing(), calculateVertexSharedTracks(), EncodedEventId::event(), TrackingVertex::eventId(), dedxEstimators_cff::fraction, edm::AssociationMap< Tag >::insert(), reco::Vertex::isFake(), reco::Vertex::isValid(), LogDebug, LogTrace, SiStripPI::max, maxRecoZ_, TrackingVertex::nDaughterTracks(), reco::Vertex::ndof(), TrackingVertex::position(), edm::AssociationMap< Tag >::post_insert(), productGetter_, ecalDetailedTimeRecHit_cfi::recoVertex, edm::second(), sharedTrackFraction_, sigmaT_, sigmaZ_, ecalDetailedTimeRecHit_cfi::simVertex, edm::View< T >::size(), reco::Vertex::t(), reco::Vertex::tError(), trackSimToRecoAssociation_, reco::Vertex::tracksSize(), RecoVertex_cff::useTiming, reco::Vertex::z(), and reco::Vertex::zError().

122  {
124 
125  const edm::View<reco::Vertex>& recoVertices = *vCH;
126  const TrackingVertexCollection& simVertices = *tVCH;
127 
128  LogDebug("VertexAssociation") << "VertexAssociatorByPositionAndTracks::associateSimToReco(): associating "
129  << simVertices.size() << " TrackingVertices to " << recoVertices.size() << " reco::Vertices";
130 
131  int current_event = -1;
132  for(size_t iSim=0; iSim != simVertices.size(); ++iSim) {
133  const TrackingVertex& simVertex = simVertices[iSim];
134 
135  // Associate only primary vertices of the in-time pileup
136  // events (BX=0, first vertex in each of the events)
137  if(simVertex.eventId().bunchCrossing() != 0) continue;
138  if(simVertex.eventId().event() != current_event) {
139  current_event = simVertex.eventId().event();
140  }
141  else {
142  continue;
143  }
144 
145  LogTrace("VertexAssociation") << " TrackingVertex at Z " << simVertex.position().z();
146 
147  for(size_t iReco=0; iReco != recoVertices.size(); ++iReco) {
148  const reco::Vertex& recoVertex = recoVertices[iReco];
149 
150  // skip fake vertices
151  if(std::abs(recoVertex.z()) > maxRecoZ_ || recoVertex.isFake() || !recoVertex.isValid() || recoVertex.ndof() < 0.)
152  continue;
153 
154  LogTrace("VertexAssociation") << " Considering reco::Vertex at Z " << recoVertex.z();
155  const bool useTiming = ( absT_ != std::numeric_limits<double>::max() && recoVertex.t() != 0. );
156  if( useTiming ) {
157  LogTrace("VertexAssociation") << " and T " << recoVertex.t()*CLHEP::second << std::endl;
158  }
159 
160  const double tdiff = std::abs(recoVertex.t() - simVertex.position().t()*CLHEP::second);
161  const double zdiff = std::abs(recoVertex.z() - simVertex.position().z());
162  if( zdiff < absZ_ && zdiff / recoVertex.zError() < sigmaZ_ &&
163  ( !useTiming || ( tdiff < absT_ && tdiff / recoVertex.tError() < sigmaT_ ) ) ) {
164  auto sharedTracks = calculateVertexSharedTracks(simVertex, recoVertex, *trackSimToRecoAssociation_);
165  auto fraction = double(sharedTracks)/recoVertex.tracksSize();
166  if(sharedTrackFraction_ < 0 || fraction > sharedTrackFraction_) {
167  LogTrace("VertexAssociation") << " Matched with significance " << zdiff/recoVertex.zError() << " " << tdiff/recoVertex.tError()
168  << " shared tracks " << sharedTracks << " reco Tracks " << recoVertex.tracksSize() << " TrackingParticles " << simVertex.nDaughterTracks();
169 
170  ret.insert(TrackingVertexRef(tVCH, iSim), std::make_pair(reco::VertexBaseRef(vCH, iReco), sharedTracks));
171  }
172  }
173  }
174  }
175 
176  ret.post_insert();
177 
178  LogDebug("VertexAssociation") << "VertexAssociatorByPositionAndTracks::associateSimToReco(): finished";
179 
180  return ret;
181 }
#define LogDebug(id)
int event() const
get the contents of the subdetector field (should be protected?)
double zError() const
error on z
Definition: Vertex.h:123
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:68
size_type size() const
U second(std::pair< T, U > const &p)
int bunchCrossing() const
get the detector field from this detid
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double z() const
z coordinate
Definition: Vertex.h:115
#define LogTrace(id)
double ndof() const
Definition: Vertex.h:105
edm::Ref< TrackingVertexCollection > TrackingVertexRef
bool isFake() const
Definition: Vertex.h:72
unsigned int nDaughterTracks() const
std::vector< TrackingVertex > TrackingVertexCollection
const EncodedEventId & eventId() const
unsigned int calculateVertexSharedTracks(const reco::Vertex &recoV, const TrackingVertex &simV, const reco::RecoToSimCollection &trackRecoToSimAssociation)
const reco::SimToRecoCollection * trackSimToRecoAssociation_
double tError() const
error on t
Definition: Vertex.h:125
size_t tracksSize() const
number of tracks
Definition: Vertex.cc:71
double t() const
t coordinate
Definition: Vertex.h:117
const LorentzVector & position() const

Member Data Documentation

const double VertexAssociatorByPositionAndTracks::absT_
private

Definition at line 53 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const double VertexAssociatorByPositionAndTracks::absZ_
private

Definition at line 50 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const double VertexAssociatorByPositionAndTracks::maxRecoT_
private

Definition at line 55 of file VertexAssociatorByPositionAndTracks.h.

const double VertexAssociatorByPositionAndTracks::maxRecoZ_
private

Definition at line 52 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const edm::EDProductGetter* VertexAssociatorByPositionAndTracks::productGetter_
private

Definition at line 48 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const double VertexAssociatorByPositionAndTracks::sharedTrackFraction_
private

Definition at line 56 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const double VertexAssociatorByPositionAndTracks::sigmaT_
private

Definition at line 54 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const double VertexAssociatorByPositionAndTracks::sigmaZ_
private

Definition at line 51 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim(), and associateSimToReco().

const reco::RecoToSimCollection* VertexAssociatorByPositionAndTracks::trackRecoToSimAssociation_
private

Definition at line 58 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateRecoToSim().

const reco::SimToRecoCollection* VertexAssociatorByPositionAndTracks::trackSimToRecoAssociation_
private

Definition at line 59 of file VertexAssociatorByPositionAndTracks.h.

Referenced by associateSimToReco().