CMS 3D CMS Logo

PF_PU_AssoMapAlgos.h
Go to the documentation of this file.
1 #ifndef PF_PU_AssoMapAlgos_h
2 #define PF_PU_AssoMapAlgos_h
3 
8 //
9 // Original Author: Matthias Geisler,32 4-B20,+41227676487,
10 // $Id: PF_PU_AssoMapAlgos.h,v 1.7 2012/11/21 09:45:04 mgeisler Exp $
11 //
12 //
13 
14 #include <string>
15 
20 
22 
26 
29 
34 
37 
40 
44 
46 
49 
50 //
51 // constants, enums and typedefs
52 //
53 
54 const double kMass = 0.49765;
55 const double lamMass = 1.11568;
56 
57 /*limits for the quality criteria*/
58 
59 const double tw_90 = 1.e-2;
60 const double tw_70 = 1.e-1;
61 const double tw_50 = 2.e-1;
62 
63 const double sec_70 = 5.;
64 const double sec_50 = 19.;
65 
66 const double fin_70 = 1.e-1;
67 const double fin_50 = 3.e-1;
68 
73 
74 typedef std::pair<reco::TrackRef, int> TrackQualityPair;
75 typedef std::vector<TrackQualityPair> TrackQualityPairVector;
76 
77 typedef std::pair<reco::VertexRef, int> VertexStepPair;
78 
79 typedef std::pair<reco::VertexRef, TrackQualityPair> VertexTrackQuality;
80 
81 typedef std::pair<reco::VertexRef, float> VertexPtsumPair;
82 typedef std::vector<VertexPtsumPair> VertexPtsumVector;
83 
85 public:
86  //dedicated constructor for the algorithms
89  // virtual destructor needed when virtual functions declared
90  virtual ~PF_PU_AssoMapAlgos() noexcept(false){};
91 
92  //get all needed collections at the beginning
93  virtual void GetInputCollections(edm::Event&, const edm::EventSetup&);
94 
95  //create the track-to-vertex and vertex-to-track maps in one go
96  std::pair<std::unique_ptr<TrackToVertexAssMap>, std::unique_ptr<VertexToTrackAssMap>> createMappings(
98 
99  //create the track to vertex association map
100  std::unique_ptr<TrackToVertexAssMap> CreateTrackToVertexMap(edm::Handle<reco::TrackCollection>);
101 
102  //create the vertex to track association map
103  std::unique_ptr<VertexToTrackAssMap> CreateVertexToTrackMap(edm::Handle<reco::TrackCollection>);
104 
105  //function to sort the vertices in the AssociationMap by the sum of (pT - pT_Error)**2
106  std::unique_ptr<TrackToVertexAssMap> SortAssociationMap(TrackToVertexAssMap*, edm::Handle<reco::TrackCollection>);
107 
108 protected:
109  //protected functions
110 
111  //create helping vertex vector to remove associated vertices
112  std::vector<reco::VertexRef> CreateVertexVector(edm::Handle<reco::VertexCollection>);
113 
114  //erase one vertex from the vertex vector
115  void EraseVertex(std::vector<reco::VertexRef>&, reco::VertexRef);
116 
117  //find an association for a certain track
119  const std::vector<reco::VertexRef>&,
123  int);
124 
125  //get the quality for a certain association
126  int DefineQuality(int, int, double);
127 
128 private:
129  // private methods for internal usage
130 
131  //function to find the closest vertex in z for a certain track
132  static reco::VertexRef FindClosestZ(const reco::TrackRef, const std::vector<reco::VertexRef>&, double tWeight = 0.);
133 
134  //function to find the closest vertex in 3D for a certain track
135  static reco::VertexRef FindClosest3D(reco::TransientTrack, const std::vector<reco::VertexRef>&, double tWeight = 0.);
136 
137  //function to calculate the deltaR between a vector and a vector connecting two points
138  static double dR(const math::XYZPoint&, const math::XYZVector&, edm::Handle<reco::BeamSpot>);
139 
140  //function to filter the conversion collection
141  static std::unique_ptr<reco::ConversionCollection> GetCleanedConversions(edm::Handle<reco::ConversionCollection>,
143  bool);
144 
145  //function to find out if the track comes from a gamma conversion
147 
149  const reco::Conversion&,
153  const std::vector<reco::VertexRef>&,
154  double);
155 
156  //function to filter the Kshort collection
157  static std::unique_ptr<reco::VertexCompositeCandidateCollection> GetCleanedKshort(
159 
160  //function to filter the Lambda collection
161  static std::unique_ptr<reco::VertexCompositeCandidateCollection> GetCleanedLambda(
163 
164  //function to find out if the track comes from a V0 decay
165  static bool ComesFromV0Decay(const reco::TrackRef,
169 
175  const std::vector<reco::VertexRef>&,
176  double);
177 
178  //function to filter the nuclear interaction collection
179  static std::unique_ptr<reco::PFDisplacedVertexCollection> GetCleanedNI(edm::Handle<reco::PFDisplacedVertexCollection>,
181  bool);
182 
183  //function to find out if the track comes from a nuclear interaction
185 
191  const std::vector<reco::VertexRef>&,
192  double);
193 
194  //function to find the vertex with the highest TrackWeight for a certain track
195  template <typename TREF>
196  static reco::VertexRef TrackWeightAssociation(const TREF&, const std::vector<reco::VertexRef>&);
197 
198  // ----------member data ---------------------------
199 
201 
204 
207 
212 
215 
218  std::unique_ptr<reco::ConversionCollection> cleanedConvCollP;
219 
222  std::unique_ptr<reco::VertexCompositeCandidateCollection> cleanedKshortCollP;
223 
226  std::unique_ptr<reco::VertexCompositeCandidateCollection> cleanedLambdaCollP;
227 
230  std::unique_ptr<reco::PFDisplacedVertexCollection> cleanedNICollP;
231 
233 
235  bool missingColls; // is true if there is a diplaced vertex collection in the event
236 
238 
239  int maxNumWarnings_; // CV: print Warning if TrackExtra objects don't exist in input file,
240  int numWarnings_; // but only a few times
241 };
242 
243 #endif
PF_PU_AssoMapAlgos::maxNumWarnings_
int maxNumWarnings_
Definition: PF_PU_AssoMapAlgos.h:239
PF_PU_AssoMapAlgos::CreateVertexVector
std::vector< reco::VertexRef > CreateVertexVector(edm::Handle< reco::VertexCollection >)
Definition: PF_PU_AssoMapAlgos.cc:256
PF_PU_AssoMapAlgos::displVertexCollH
edm::Handle< reco::PFDisplacedVertexCollection > displVertexCollH
Definition: PF_PU_AssoMapAlgos.h:229
PFDisplacedVertexFwd.h
reco::Conversion
Definition: Conversion.h:23
Handle.h
funct::false
false
Definition: Factorize.h:29
PF_PU_AssoMapAlgos::numWarnings_
int numWarnings_
Definition: PF_PU_AssoMapAlgos.h:240
PF_PU_AssoMapAlgos::createMappings
std::pair< std::unique_ptr< TrackToVertexAssMap >, std::unique_ptr< VertexToTrackAssMap > > createMappings(edm::Handle< reco::TrackCollection > trkcollH)
Definition: PF_PU_AssoMapAlgos.cc:109
sec_50
const double sec_50
Definition: PF_PU_AssoMapAlgos.h:64
PF_PU_AssoMapAlgos::token_TrackingGeometry_
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > token_TrackingGeometry_
Definition: PF_PU_AssoMapAlgos.h:210
PF_PU_AssoMapAlgos
Definition: PF_PU_AssoMapAlgos.h:84
edm::EDGetTokenT< reco::VertexCollection >
TrackBase.h
PF_PU_AssoMapAlgos::GetInputCollections
virtual void GetInputCollections(edm::Event &, const edm::EventSetup &)
Definition: PF_PU_AssoMapAlgos.cc:65
AssociationMap.h
VertexToTrackAssMap
edm::AssociationMap< edm::OneToManyWithQuality< reco::TrackCollection, reco::VertexCollection, int > > VertexToTrackAssMap
Definition: PF_PU_AssoMapAlgos.h:72
PF_PU_AssoMapAlgos::GetCleanedConversions
static std::unique_ptr< reco::ConversionCollection > GetCleanedConversions(edm::Handle< reco::ConversionCollection >, edm::Handle< reco::BeamSpot >, bool)
Definition: PF_PU_AssoMapAlgos.cc:375
PF_PU_AssoMapAlgos::FindV0Vertex
static reco::VertexRef FindV0Vertex(const reco::TrackRef, const reco::VertexCompositeCandidate &, edm::ESHandle< MagneticField >, edm::ESHandle< GlobalTrackingGeometry >, edm::Handle< reco::BeamSpot >, const std::vector< reco::VertexRef > &, double)
Definition: PF_PU_AssoMapAlgos.cc:573
PF_PU_AssoMapAlgos::token_VertexCollection_
edm::EDGetTokenT< reco::VertexCollection > token_VertexCollection_
Definition: PF_PU_AssoMapAlgos.h:202
TrackQualityPairVector
std::vector< TrackQualityPair > TrackQualityPairVector
Definition: PF_PU_AssoMapAlgos.h:75
TrackQualityPair
std::pair< reco::TrackRef, int > TrackQualityPair
Definition: PF_PU_AssoMapAlgos.h:74
PF_PU_AssoMapAlgos::dR
static double dR(const math::XYZPoint &, const math::XYZVector &, edm::Handle< reco::BeamSpot >)
Definition: PF_PU_AssoMapAlgos.cc:351
reco::VertexCompositeCandidate
Definition: VertexCompositeCandidate.h:16
PF_PU_AssoMapAlgos::vtxcollH
edm::Handle< reco::VertexCollection > vtxcollH
Definition: PF_PU_AssoMapAlgos.h:203
TransientTrack.h
ConversionFwd.h
edm::Handle< reco::TrackCollection >
reco::PFDisplacedVertexCollection
std::vector< PFDisplacedVertex > PFDisplacedVertexCollection
collection of PFDisplacedVertex objects
Definition: PFDisplacedVertexFwd.h:10
VertexPtsumVector
std::vector< VertexPtsumPair > VertexPtsumVector
Definition: PF_PU_AssoMapAlgos.h:82
PF_PU_AssoMapAlgos::convCollH
edm::Handle< reco::ConversionCollection > convCollH
Definition: PF_PU_AssoMapAlgos.h:217
edm::Ref< VertexCollection >
reco::ConversionCollection
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
fin_50
const double fin_50
Definition: PF_PU_AssoMapAlgos.h:67
PF_PU_AssoMapAlgos::input_nTrack_
double input_nTrack_
Definition: PF_PU_AssoMapAlgos.h:237
PF_PU_AssoMapAlgos::ConversionsCollectionToken_
edm::EDGetTokenT< reco::ConversionCollection > ConversionsCollectionToken_
Definition: PF_PU_AssoMapAlgos.h:216
Track.h
TrackFwd.h
OneToManyWithQuality.h
BeamSpot.h
VertexCompositeCandidate.h
PF_PU_AssoMapAlgos::EraseVertex
void EraseVertex(std::vector< reco::VertexRef > &, reco::VertexRef)
Definition: PF_PU_AssoMapAlgos.cc:270
PF_PU_AssoMapAlgos::vertCompCandCollKshortH
edm::Handle< reco::VertexCompositeCandidateCollection > vertCompCandCollKshortH
Definition: PF_PU_AssoMapAlgos.h:221
IdealMagneticFieldRecord.h
edm::ESHandle< MagneticField >
PF_PU_AssoMapAlgos::FindClosestZ
static reco::VertexRef FindClosestZ(const reco::TrackRef, const std::vector< reco::VertexRef > &, double tWeight=0.)
Definition: PF_PU_AssoMapAlgos.cc:285
PF_PU_AssoMapAlgos::KshortCollectionToken_
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > KshortCollectionToken_
Definition: PF_PU_AssoMapAlgos.h:220
PF_PU_AssoMapAlgos::ComesFromConversion
static bool ComesFromConversion(const reco::TrackRef, const reco::ConversionCollection &, reco::Conversion *)
Definition: PF_PU_AssoMapAlgos.cc:399
sec_70
const double sec_70
Definition: PF_PU_AssoMapAlgos.h:63
PF_PU_AssoMapAlgos::cleanedConvCollP
std::unique_ptr< reco::ConversionCollection > cleanedConvCollP
Definition: PF_PU_AssoMapAlgos.h:218
PF_PU_AssoMapAlgos::token_bField_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > token_bField_
Definition: PF_PU_AssoMapAlgos.h:208
GlobalTrackingGeometryRecord.h
PF_PU_AssoMapAlgos::cleanedKshortCollP
std::unique_ptr< reco::VertexCompositeCandidateCollection > cleanedKshortCollP
Definition: PF_PU_AssoMapAlgos.h:222
PF_PU_AssoMapAlgos::FindNIVertex
static reco::VertexRef FindNIVertex(const reco::TrackRef, const reco::PFDisplacedVertex &, edm::ESHandle< MagneticField >, edm::ESHandle< GlobalTrackingGeometry >, edm::Handle< reco::BeamSpot >, const std::vector< reco::VertexRef > &, double)
Definition: PF_PU_AssoMapAlgos.cc:656
PF_PU_AssoMapAlgos::GetCleanedNI
static std::unique_ptr< reco::PFDisplacedVertexCollection > GetCleanedNI(edm::Handle< reco::PFDisplacedVertexCollection >, edm::Handle< reco::BeamSpot >, bool)
Definition: PF_PU_AssoMapAlgos.cc:597
PF_PU_AssoMapAlgos::input_FinalAssociation_
int input_FinalAssociation_
Definition: PF_PU_AssoMapAlgos.h:232
PF_PU_AssoMapAlgos::token_BeamSpot_
edm::EDGetTokenT< reco::BeamSpot > token_BeamSpot_
Definition: PF_PU_AssoMapAlgos.h:205
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
reco::PFDisplacedVertex
Block of elements.
Definition: PFDisplacedVertex.h:23
Event.h
PFDisplacedVertex.h
edm::AssociationMap
Definition: AssociationMap.h:48
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
PF_PU_AssoMapAlgos::bFieldH
edm::ESHandle< MagneticField > bFieldH
Definition: PF_PU_AssoMapAlgos.h:209
PF_PU_AssoMapAlgos::CreateVertexToTrackMap
std::unique_ptr< VertexToTrackAssMap > CreateVertexToTrackMap(edm::Handle< reco::TrackCollection >)
Definition: PF_PU_AssoMapAlgos.cc:169
PF_PU_AssoMapAlgos::GetCleanedKshort
static std::unique_ptr< reco::VertexCompositeCandidateCollection > GetCleanedKshort(edm::Handle< reco::VertexCompositeCandidateCollection >, edm::Handle< reco::BeamSpot >, bool)
Definition: PF_PU_AssoMapAlgos.cc:441
PF_PU_AssoMapAlgos::DefineQuality
int DefineQuality(int, int, double)
Definition: PF_PU_AssoMapAlgos.cc:819
OneToManyWithQualityGeneric.h
PF_PU_AssoMapAlgos::beamspotH
edm::Handle< reco::BeamSpot > beamspotH
Definition: PF_PU_AssoMapAlgos.h:206
PF_PU_AssoMapAlgos::~PF_PU_AssoMapAlgos
virtual ~PF_PU_AssoMapAlgos() noexcept(false)
Definition: PF_PU_AssoMapAlgos.h:90
PF_PU_AssoMapAlgos::LambdaCollectionToken_
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > LambdaCollectionToken_
Definition: PF_PU_AssoMapAlgos.h:224
edm::EventSetup
Definition: EventSetup.h:58
PF_PU_AssoMapAlgos::cleanedLambdaCollP
std::unique_ptr< reco::VertexCompositeCandidateCollection > cleanedLambdaCollP
Definition: PF_PU_AssoMapAlgos.h:226
PF_PU_AssoMapAlgos::GetCleanedLambda
static std::unique_ptr< reco::VertexCompositeCandidateCollection > GetCleanedLambda(edm::Handle< reco::VertexCompositeCandidateCollection >, edm::Handle< reco::BeamSpot >, bool)
Definition: PF_PU_AssoMapAlgos.cc:487
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord >
PF_PU_AssoMapAlgos::SortAssociationMap
std::unique_ptr< TrackToVertexAssMap > SortAssociationMap(TrackToVertexAssMap *, edm::Handle< reco::TrackCollection >)
Definition: PF_PU_AssoMapAlgos.cc:178
InputTag.h
reco::VertexCompositeCandidateCollection
std::vector< VertexCompositeCandidate > VertexCompositeCandidateCollection
collection of Candidate objects
Definition: VertexCompositeCandidateFwd.h:19
VertexFwd.h
PF_PU_AssoMapAlgos::NIVertexCollectionToken_
edm::EDGetTokenT< reco::PFDisplacedVertexCollection > NIVertexCollectionToken_
Definition: PF_PU_AssoMapAlgos.h:228
TrackToVertexAssMap
edm::AssociationMap< edm::OneToManyWithQuality< reco::VertexCollection, reco::TrackCollection, int > > TrackToVertexAssMap
Definition: PF_PU_AssoMapAlgos.h:70
PF_PU_AssoMapAlgos::ignoremissingpfcollection_
bool ignoremissingpfcollection_
Definition: PF_PU_AssoMapAlgos.h:234
reco::TransientTrack
Definition: TransientTrack.h:19
PF_PU_AssoMapAlgos::CreateTrackToVertexMap
std::unique_ptr< TrackToVertexAssMap > CreateTrackToVertexMap(edm::Handle< reco::TrackCollection >)
Definition: PF_PU_AssoMapAlgos.cc:160
Vertex.h
PF_PU_AssoMapAlgos::ComesFromNI
static bool ComesFromNI(const reco::TrackRef, const reco::PFDisplacedVertexCollection &, reco::PFDisplacedVertex *)
Definition: PF_PU_AssoMapAlgos.cc:638
PF_PU_AssoMapAlgos::FindConversionVertex
static reco::VertexRef FindConversionVertex(const reco::TrackRef, const reco::Conversion &, edm::ESHandle< MagneticField >, edm::ESHandle< GlobalTrackingGeometry >, edm::Handle< reco::BeamSpot >, const std::vector< reco::VertexRef > &, double)
Definition: PF_PU_AssoMapAlgos.cc:416
lamMass
const double lamMass
Definition: PF_PU_AssoMapAlgos.h:55
fin_70
const double fin_70
Definition: PF_PU_AssoMapAlgos.h:66
VertexTrackQuality
std::pair< reco::VertexRef, TrackQualityPair > VertexTrackQuality
Definition: PF_PU_AssoMapAlgos.h:79
Point3D.h
PF_PU_AssoMapAlgos::FindAssociation
VertexStepPair FindAssociation(const reco::TrackRef &, const std::vector< reco::VertexRef > &, edm::ESHandle< MagneticField >, edm::ESHandle< GlobalTrackingGeometry >, edm::Handle< reco::BeamSpot >, int)
Definition: PF_PU_AssoMapAlgos.cc:726
PF_PU_AssoMapAlgos::cleanedNICollP
std::unique_ptr< reco::PFDisplacedVertexCollection > cleanedNICollP
Definition: PF_PU_AssoMapAlgos.h:230
PF_PU_AssoMapAlgos::vertCompCandCollLambdaH
edm::Handle< reco::VertexCompositeCandidateCollection > vertCompCandCollLambdaH
Definition: PF_PU_AssoMapAlgos.h:225
VertexPtsumPair
std::pair< reco::VertexRef, float > VertexPtsumPair
Definition: PF_PU_AssoMapAlgos.h:81
PF_PU_AssoMapAlgos::trackingGeometryH
edm::ESHandle< GlobalTrackingGeometry > trackingGeometryH
Definition: PF_PU_AssoMapAlgos.h:211
ConsumesCollector.h
PF_PU_AssoMapAlgos::FindClosest3D
static reco::VertexRef FindClosest3D(reco::TransientTrack, const std::vector< reco::VertexRef > &, double tWeight=0.)
Definition: PF_PU_AssoMapAlgos.cc:317
tw_70
const double tw_70
Definition: PF_PU_AssoMapAlgos.h:60
View.h
ParameterSet.h
PF_PU_AssoMapAlgos::PF_PU_AssoMapAlgos
PF_PU_AssoMapAlgos(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
Definition: PF_PU_AssoMapAlgos.h:87
PF_PU_AssoMapAlgos::ComesFromV0Decay
static bool ComesFromV0Decay(const reco::TrackRef, const reco::VertexCompositeCandidateCollection &, const reco::VertexCompositeCandidateCollection &, reco::VertexCompositeCandidate *)
Definition: PF_PU_AssoMapAlgos.cc:533
PF_PU_AssoMapAlgos::TrackWeightAssociation
static reco::VertexRef TrackWeightAssociation(const TREF &, const std::vector< reco::VertexRef > &)
VertexStepPair
std::pair< reco::VertexRef, int > VertexStepPair
Definition: PF_PU_AssoMapAlgos.h:77
PF_PU_AssoMapAlgos::input_MaxNumAssociations_
int input_MaxNumAssociations_
Definition: PF_PU_AssoMapAlgos.h:200
edm::Event
Definition: Event.h:73
PF_PU_AssoMapAlgos::input_doReassociation_
bool input_doReassociation_
Definition: PF_PU_AssoMapAlgos.h:213
PF_PU_AssoMapAlgos::missingColls
bool missingColls
Definition: PF_PU_AssoMapAlgos.h:235
tw_50
const double tw_50
Definition: PF_PU_AssoMapAlgos.h:61
tw_90
const double tw_90
Definition: PF_PU_AssoMapAlgos.h:59
kMass
const double kMass
Definition: PF_PU_AssoMapAlgos.h:54
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
PF_PU_AssoMapAlgos::cleanedColls_
bool cleanedColls_
Definition: PF_PU_AssoMapAlgos.h:214
Conversion.h