CMS 3D CMS Logo

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

#include <VertexFitterResult.h>

Public Types

typedef std::vector< reco::TransientTrackTTrackCont
 

Public Member Functions

const float * chi2Information () const
 
void fill (const TransientVertex &recv, const TrackingVertex *simv=0, reco::RecoToSimCollection *recSimColl=0, const float &time=0)
 
void fill (const TransientVertex &recVertex, const TTrackCont &recTrackV, const TrackingVertex *simv=0, reco::RecoToSimCollection *recSimColl=0, const float &time=0)
 
const int * numberRecTracks ()
 
const int * numberSimTracks ()
 
const float * recErrors (const int i) const
 
const float * recParameters (const int i) const
 
const int * recTrack_simIndex ()
 
const float * recTrackWeight ()
 
const float * recVertexErr () const
 
const float * recVertexPos () const
 
const float * refErrors (const int i) const
 
const float * refParameters (const int i) const
 
void reset ()
 
const float * simParameters (const int i) const
 
const int * simTrack_recIndex ()
 
const float * simVertexPos () const
 
const float * time () const
 
const int * trackInformation () const
 
 VertexFitterResult (const int maxTracks=100, const MagneticField *=0)
 
const int * vertexPresent () const
 
 ~VertexFitterResult ()
 

Private Member Functions

void fillErrors (const PerigeeTrajectoryError &pte, float *errors[5], int trackNumber)
 
void fillParameters (const reco::TrackBase::ParameterVector &perigee, float *params[5], int trackNumber)
 
void fillParameters (const PerigeeTrajectoryParameters &ptp, float *params[5], int trackNumber)
 

Private Attributes

float chi [3]
 
float fitTime
 
int numberOfRecTracks
 
int numberOfSimTracks
 
float recErr [3]
 
float * recErrs [5]
 
int * recIndex
 
float * recPars [5]
 
float recPos [3]
 
float * refErrs [5]
 
float * refPars [5]
 
int * simIndex
 
float * simPars [5]
 
float simPos [3]
 
const MagneticFieldtheMagField
 
int theMaxTracks
 
int tracks [3]
 
float * trackWeight
 
int vertex
 

Detailed Description

Very basic class containing only the positions of the simulated and reconstructed vertices, total chi**2, chi**2 probability and number of degrees of freedom. The only thing to be done is to call the method fill for each vertex.

Definition at line 25 of file VertexFitterResult.h.

Member Typedef Documentation

Definition at line 29 of file VertexFitterResult.h.

Constructor & Destructor Documentation

VertexFitterResult::VertexFitterResult ( const int  maxTracks = 100,
const MagneticField magField = 0 
)

Definition at line 9 of file VertexFitterResult.cc.

References mps_fire::i, RecoTauCombinatoricProducer_cfi::maxTracks, numberOfRecTracks, numberOfSimTracks, recErrs, recIndex, recPars, refErrs, refPars, reset(), simIndex, simPars, theMagField, theMaxTracks, and trackWeight.

10  : theMagField(magField)
11 {
13  if (theMagField==nullptr) theMaxTracks=0;
14  for ( int i=0; i<5; i++ ) {
15  if ( maxTracks>0 ) {
16  simPars[i] = new float[maxTracks];
17  recPars[i] = new float[maxTracks];
18  refPars[i] = new float[maxTracks];
19  recErrs[i] = new float[maxTracks];
20  refErrs[i] = new float[maxTracks];
21  }
22  else {
23  simPars[i] = nullptr;
24  recPars[i] = nullptr;
25  refPars[i] = nullptr;
26  recErrs[i] = nullptr;
27  refErrs[i] = nullptr;
28  }
29  }
30  trackWeight = new float[maxTracks];
31  simIndex = new int[maxTracks];
32  recIndex = new int[maxTracks];
35  reset();
36 }
const MagneticField * theMagField
VertexFitterResult::~VertexFitterResult ( )

Definition at line 38 of file VertexFitterResult.cc.

References mps_fire::i, recErrs, recIndex, recPars, refErrs, refPars, simIndex, simPars, and trackWeight.

39 {
40  //
41  // delete arrays
42  //
43  for ( int i=0; i<5; i++ ) {
44  delete [] simPars[i];
45  delete [] recPars[i];
46  delete [] refPars[i];
47  delete [] recErrs[i];
48  delete [] refErrs[i];
49  }
50  delete trackWeight;
51  delete simIndex;
52  delete recIndex;
53 }

Member Function Documentation

const float* VertexFitterResult::chi2Information ( ) const
inline

Definition at line 47 of file VertexFitterResult.h.

References chi.

Referenced by SimpleVertexTree::SimpleVertexTree().

47 {return chi;}
void VertexFitterResult::fill ( const TransientVertex recv,
const TrackingVertex simv = 0,
reco::RecoToSimCollection recSimColl = 0,
const float &  time = 0 
)

Definition at line 55 of file VertexFitterResult.cc.

References TransientVertex::isValid(), and TransientVertex::originalTracks().

Referenced by SimpleVertexTree::fill().

58 {
59  TTrackCont recTrackV;
60  if (recVertex.isValid()) recTrackV = recVertex.originalTracks();
61  fill(recVertex, recTrackV, simv, recSimColl, time);
62 }
std::vector< reco::TransientTrack > TTrackCont
void fill(const TransientVertex &recv, const TrackingVertex *simv=0, reco::RecoToSimCollection *recSimColl=0, const float &time=0)
const float * time() const
void VertexFitterResult::fill ( const TransientVertex recVertex,
const TTrackCont recTrackV,
const TrackingVertex simv = 0,
reco::RecoToSimCollection recSimColl = 0,
const float &  time = 0 
)

Definition at line 64 of file VertexFitterResult.cc.

References edm::RefVector< C, T, F >::begin(), chi, ChiSquaredProbability(), GlobalErrorBase< T, ErrorWeightType >::cxx(), GlobalErrorBase< T, ErrorWeightType >::cyy(), GlobalErrorBase< T, ErrorWeightType >::czz(), TrackingVertex::daughterTracks(), TrackingVertex::daughterTracks_begin(), TrackingVertex::daughterTracks_end(), TransientVertex::degreesOfFreedom(), MillePedeFileConverter_cfg::e, edm::RefVector< C, T, F >::end(), fillErrors(), fillParameters(), spr::find(), fitTime, TransientVertex::isValid(), numberOfRecTracks, numberOfSimTracks, TransientVertex::originalTracks(), TrajectoryStateClosestToPoint::perigeeError(), TrackingVertex::position(), TransientVertex::position(), TransientVertex::positionError(), recErr, recErrs, recIndex, recPars, recPos, simIndex, simPars, simPos, simTrackMatching_cfi::simTrack, mathSSE::sqrt(), theMagField, theMaxTracks, time(), TransientVertex::totalChiSquared(), reco::TrackTransientTrack::trackBaseRef(), reco::trackingParametersAtClosestApproachToBeamSpot(), tracks, vertex, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

67 {
68  TrackingParticleRefVector simTrackV;
69 
71  if (recVertex.isValid()) {
72  recPos[0] = recVertex.position().x();
73  recPos[1] = recVertex.position().y();
74  recPos[2] = recVertex.position().z();
75 
76  recErr[0] = sqrt(recVertex.positionError().cxx());
77  recErr[1] = sqrt(recVertex.positionError().cyy());
78  recErr[2] = sqrt(recVertex.positionError().czz());
79  vert = (Basic3DVector<double>) recVertex.position();
80 
81  chi[0] = recVertex.totalChiSquared();
82  chi[1] = recVertex.degreesOfFreedom();
83  chi[2] = ChiSquaredProbability(recVertex.totalChiSquared(),
84  recVertex.degreesOfFreedom());
85  vertex = 2;
86  fitTime = time;
87  tracks[1] = recVertex.originalTracks().size();
88  }
89 
90  if (simv!=nullptr) {
91  simPos[0] = simv->position().x();
92  simPos[1] = simv->position().y();
93  simPos[2] = simv->position().z();
94 
95  simTrackV = simv->daughterTracks();
96  vertex += 1;
99  simTrack++) {
100 
101  Basic3DVector<double> momAtVtx((**simTrack).momentum());
102 
103  std::pair<bool, reco::TrackBase::ParameterVector> paramPair =
105  (float) (**simTrack).charge(),
106  *theMagField,
107  recTrackV.front().stateAtBeamLine().beamSpot());
108  if (paramPair.first) {
109  fillParameters(paramPair.second, simPars, numberOfSimTracks);
112  }
113  }
115  }
116 
117 
118  // now store all the recTrack...
119 
120  for(TTrackCont::const_iterator recTrack =recTrackV.begin();
121  (recTrack != recTrackV.end()
123  recTrack++) {
124  // std::cout << "Input; 1/Pt " << 1./(*recTrack).momentumAtVertex().transverse() << std::endl;
125 
126  //looking for sim tracks corresponding to our reconstructed tracks:
128 
129  std::vector<std::pair<TrackingParticleRef, double> > simFound;
130  try {
131  const TrackTransientTrack* ttt = dynamic_cast<const TrackTransientTrack*>(recTrack->basicTransientTrack());
132  if ((ttt!=nullptr) && (recSimColl!=nullptr)) simFound = (*recSimColl)[ttt->trackBaseRef()];
133 // if (recSimColl!=0) simFound = (*recSimColl)[recTrack->persistentTrackRef()];
134 // if (recSimColl!=0) simFound = (*recSimColl)[recTrack];
135 
136  } catch (cms::Exception e) {
137 // LogDebug("TrackValidator") << "reco::Track #" << rT << " with pt=" << track->pt()
138 // << " NOT associated to any TrackingParticle" << "\n";
139 // edm::LogError("TrackValidator") << e.what() << "\n";
140  }
141 
142  if(!simFound.empty()) {
143  //OK, it was associated, so get the state on the same surface as the 'SimState'
145  find(simTrackV.begin(), simTrackV.end(), simFound[0].first);
146  if (simTrackI!=simTrackV.end()) ++tracks[2];
147  int simTrackIndex = simTrackI-simTrackV.begin();
148  if (simTrackIndex<numberOfSimTracks) {
149  simIndex[numberOfRecTracks] = simTrackIndex;
150  recIndex[simTrackIndex] = numberOfRecTracks;
151  // cout << "Assoc; 1/Pt " << 1./(*recTrack).momentumAtVertex().transverse() << std::endl;
152  }
153  }
154 
155  TrajectoryStateClosestToPoint tscp = recTrack->trajectoryStateClosestToPoint(recVertex.position());
156  fillParameters(recTrack->track().parameters(), recPars, numberOfRecTracks);
158 // trackWeight[numberOfRecTracks] = recVertex.trackWeight(*recTrack);
159 //
160 // if ((recVertex.isValid())&&(recVertex.hasRefittedTracks())) {
161 // //looking for corresponding refitted tracks:
162 // TrajectoryStateOnSurface refip;
163 // RecTrackCont::iterator refTrackI =
164 // find_if(refTracks.begin(), refTracks.end(), RecTrackMatch(*recTrack));
165 // if (refTrackI!=refTracks.end()) {
166 // // If it was not found, it would mean that it was not used in the fit,
167 // // or with a low weight such that the track was then discarded.
168 // if(simFound.size() != 0) {
169 // refip = refTrackI->stateOnSurface(simFound[0]->impactPointStateOnSurface().surface());
170 // } else {
171 // refip = refTrackI->innermostState();
172 // }
173 //
174 // fillParameters(refip, refPars, numberOfRecTracks);
175 // fillErrors(refip, refErrs, numberOfRecTracks);
176 // }
177 // }
178 //
180  }
181 
182 }
GlobalError positionError() const
tp_iterator daughterTracks_begin() const
const MagneticField * theMagField
void fillErrors(const PerigeeTrajectoryError &pte, float *errors[5], int trackNumber)
const PerigeeTrajectoryError & perigeeError() const
float totalChiSquared() const
T y() const
Definition: PV3DBase.h:63
void fillParameters(const reco::TrackBase::ParameterVector &perigee, float *params[5], int trackNumber)
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:253
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:248
std::vector< reco::TransientTrack > const & originalTracks() const
float degreesOfFreedom() const
simTrack
per collection params
T sqrt(T t)
Definition: SSEVec.h:18
GlobalPoint position() const
T z() const
Definition: PV3DBase.h:64
TrackBaseRef trackBaseRef() const override
float ChiSquaredProbability(double chiSquared, double nrDOF)
tp_iterator daughterTracks_end() const
std::pair< bool, reco::TrackBase::ParameterVector > trackingParametersAtClosestApproachToBeamSpot(const Basic3DVector< double > &vertex, const Basic3DVector< double > &momAtVtx, float charge, const MagneticField &magField, const BeamSpot &bs)
const TrackingParticleRefVector & daughterTracks() const
const float * time() const
T x() const
Definition: PV3DBase.h:62
bool isValid() const
const LorentzVector & position() const
void VertexFitterResult::fillErrors ( const PerigeeTrajectoryError pte,
float *  errors[5],
int  trackNumber 
)
private
void VertexFitterResult::fillParameters ( const reco::TrackBase::ParameterVector perigee,
float *  params[5],
int  trackNumber 
)
private

Definition at line 184 of file VertexFitterResult.cc.

Referenced by fill(), and refErrors().

186 {
187  params[0][trackNumber] = perigee[0];
188  params[1][trackNumber] = perigee[1];
189  params[2][trackNumber] = perigee[2];
190  params[3][trackNumber] = perigee[3];
191  params[4][trackNumber] = perigee[4];
192 }
void VertexFitterResult::fillParameters ( const PerigeeTrajectoryParameters ptp,
float *  params[5],
int  trackNumber 
)
private

Definition at line 194 of file VertexFitterResult.cc.

References PerigeeTrajectoryParameters::vector().

196 {
197  const AlgebraicVector5 & perigee = ptp.vector();
198  params[0][trackNumber] = perigee[0];
199  params[1][trackNumber] = perigee[1];
200  params[2][trackNumber] = perigee[2];
201  params[3][trackNumber] = perigee[3];
202  params[4][trackNumber] = perigee[4];
203 }
const AlgebraicVector5 & vector() const
ROOT::Math::SVector< double, 5 > AlgebraicVector5
const int* VertexFitterResult::numberRecTracks ( )
inline

Definition at line 52 of file VertexFitterResult.h.

References numberOfRecTracks.

Referenced by SimpleVertexTree::SimpleVertexTree().

const int* VertexFitterResult::numberSimTracks ( )
inline

Definition at line 51 of file VertexFitterResult.h.

References numberOfSimTracks.

Referenced by SimpleVertexTree::SimpleVertexTree().

const float* VertexFitterResult::recErrors ( const int  i) const
inline

Definition at line 73 of file VertexFitterResult.h.

References mps_fire::i, and recErrs.

Referenced by SimpleVertexTree::SimpleVertexTree().

74  {
75  if ( i<0 || i>=5 ) return nullptr;
76  return recErrs[i];
77  }
const float* VertexFitterResult::recParameters ( const int  i) const
inline

Definition at line 58 of file VertexFitterResult.h.

References mps_fire::i, and recPars.

Referenced by SimpleVertexTree::SimpleVertexTree().

59  {
60  if ( i<0 || i>=5 ) return nullptr;
61  return recPars[i];
62  }
const int* VertexFitterResult::recTrack_simIndex ( )
inline

Definition at line 56 of file VertexFitterResult.h.

References simIndex.

Referenced by SimpleVertexTree::SimpleVertexTree().

56 {return simIndex;}
const float* VertexFitterResult::recTrackWeight ( )
inline

Definition at line 57 of file VertexFitterResult.h.

References trackWeight.

Referenced by SimpleVertexTree::SimpleVertexTree().

57 {return trackWeight;}
const float* VertexFitterResult::recVertexErr ( ) const
inline

Definition at line 45 of file VertexFitterResult.h.

References recErr.

Referenced by SimpleVertexTree::SimpleVertexTree().

45 {return recErr;}
const float* VertexFitterResult::recVertexPos ( ) const
inline

Definition at line 44 of file VertexFitterResult.h.

References recPos.

Referenced by SimpleVertexTree::SimpleVertexTree().

44 {return recPos;}
const float* VertexFitterResult::refErrors ( const int  i) const
inline

Definition at line 78 of file VertexFitterResult.h.

References fillErrors(), fillParameters(), mps_fire::i, and refErrs.

Referenced by SimpleVertexTree::SimpleVertexTree().

79  {
80  if ( i<0 || i>=5 ) return nullptr;
81  return refErrs[i];
82  }
const float* VertexFitterResult::refParameters ( const int  i) const
inline

Definition at line 63 of file VertexFitterResult.h.

References mps_fire::i, and refPars.

Referenced by SimpleVertexTree::SimpleVertexTree().

64  {
65  if ( i<0 || i>=5 ) return nullptr;
66  return refPars[i];
67  }
void VertexFitterResult::reset ( void  )

Definition at line 215 of file VertexFitterResult.cc.

References chi, fitTime, mps_fire::i, numberOfRecTracks, numberOfSimTracks, recErr, recErrs, recIndex, recPars, recPos, refErrs, refPars, simIndex, simPars, simPos, tracks, trackWeight, and vertex.

Referenced by SimpleVertexTree::fill(), time(), and VertexFitterResult().

216 {
217  for ( int i=0; i<3; ++i ) {
218  simPos[i] = 0.;
219  recPos[i] = 0.;
220  recErr[i] = 0.;
221  chi[i] = 0.;
222  tracks[i] = 0;
223  }
224  vertex =0;
225  fitTime = 0;
226 
227  for ( int j=0; j<numberOfRecTracks; ++j ) {
228  for ( int i=0; i<5; ++i ) {
229  recPars[i][j] = 0;
230  refPars[i][j] = 0;
231  recErrs[i][j] = 0;
232  refErrs[i][j] = 0;
233  }
234  trackWeight[j] = 0;
235  simIndex[j] = -1;
236  }
237  for ( int j=0; j<numberOfSimTracks; ++j ) {
238  for ( int i=0; i<5; ++i ) {
239  simPars[i][j] = 0;
240  }
241  recIndex[j] = -1;
242  }
243 
244  numberOfRecTracks=0;
245  numberOfSimTracks=0;
246 }
const float* VertexFitterResult::simParameters ( const int  i) const
inline

Definition at line 68 of file VertexFitterResult.h.

References mps_fire::i, and simPars.

Referenced by SimpleVertexTree::SimpleVertexTree().

69  {
70  if ( i<0 || i>=5 ) return nullptr;
71  return simPars[i];
72  }
const int* VertexFitterResult::simTrack_recIndex ( )
inline

Definition at line 54 of file VertexFitterResult.h.

References recIndex.

Referenced by SimpleVertexTree::SimpleVertexTree().

54 {return recIndex;}
const float* VertexFitterResult::simVertexPos ( ) const
inline

Definition at line 43 of file VertexFitterResult.h.

References simPos.

Referenced by SimpleVertexTree::SimpleVertexTree().

43 {return simPos;}
const float* VertexFitterResult::time ( ) const
inline

Definition at line 49 of file VertexFitterResult.h.

References fitTime, and reset().

Referenced by fill(), and SimpleVertexTree::SimpleVertexTree().

49 {return &fitTime;}
const int* VertexFitterResult::trackInformation ( ) const
inline

Definition at line 46 of file VertexFitterResult.h.

References tracks.

Referenced by SimpleVertexTree::SimpleVertexTree().

46 {return tracks;}
const int* VertexFitterResult::vertexPresent ( ) const
inline

Definition at line 48 of file VertexFitterResult.h.

References vertex.

Referenced by SimpleVertexTree::SimpleVertexTree().

48 {return &vertex;}

Member Data Documentation

float VertexFitterResult::chi[3]
private

Definition at line 120 of file VertexFitterResult.h.

Referenced by chi2Information(), fill(), and reset().

float VertexFitterResult::fitTime
private

Definition at line 123 of file VertexFitterResult.h.

Referenced by fill(), reset(), and time().

int VertexFitterResult::numberOfRecTracks
private

Definition at line 131 of file VertexFitterResult.h.

Referenced by fill(), numberRecTracks(), reset(), and VertexFitterResult().

int VertexFitterResult::numberOfSimTracks
private

Definition at line 131 of file VertexFitterResult.h.

Referenced by fill(), numberSimTracks(), reset(), and VertexFitterResult().

float VertexFitterResult::recErr[3]
private

Definition at line 119 of file VertexFitterResult.h.

Referenced by fill(), recVertexErr(), and reset().

float* VertexFitterResult::recErrs[5]
private

Definition at line 129 of file VertexFitterResult.h.

Referenced by fill(), recErrors(), reset(), VertexFitterResult(), and ~VertexFitterResult().

int * VertexFitterResult::recIndex
private
float* VertexFitterResult::recPars[5]
private
float VertexFitterResult::recPos[3]
private

Definition at line 118 of file VertexFitterResult.h.

Referenced by fill(), recVertexPos(), and reset().

float* VertexFitterResult::refErrs[5]
private

Definition at line 130 of file VertexFitterResult.h.

Referenced by refErrors(), reset(), VertexFitterResult(), and ~VertexFitterResult().

float* VertexFitterResult::refPars[5]
private
int* VertexFitterResult::simIndex
private
float* VertexFitterResult::simPars[5]
private
float VertexFitterResult::simPos[3]
private

Definition at line 117 of file VertexFitterResult.h.

Referenced by fill(), reset(), and simVertexPos().

const MagneticField* VertexFitterResult::theMagField
private

Definition at line 115 of file VertexFitterResult.h.

Referenced by fill(), and VertexFitterResult().

int VertexFitterResult::theMaxTracks
private

Definition at line 125 of file VertexFitterResult.h.

Referenced by fill(), and VertexFitterResult().

int VertexFitterResult::tracks[3]
private

Definition at line 121 of file VertexFitterResult.h.

Referenced by fill(), reset(), and trackInformation().

float* VertexFitterResult::trackWeight
private
int VertexFitterResult::vertex
private

Definition at line 122 of file VertexFitterResult.h.

Referenced by Tau.Tau::dxy(), fill(), reset(), and vertexPresent().