18 double dLim=thePositionMinimumDistance;
23 std::vector<PSimHit> ::const_iterator start=pSimHit.begin();
24 std::vector<PSimHit> ::const_iterator
end=pSimHit.end();
25 LogDebug(
"TrackAssociatorByPosition")<<pSimHit.size()<<
" PSimHits.";
28 for (std::vector<PSimHit> ::const_iterator psit=start;psit!=
end;++psit){
31 LogDebug(
"TrackAssociatorByPosition")<<count++<<
"] PSimHit on: "<<
dd.rawId();
33 const GeomDet * gd=theGeometry->idToDet(
dd);
34 if (!gd){
edm::LogError(
"TrackAssociatorByPosition")<<
"no geomdet for: "<<
dd.rawId()<<
". will skip.";
44 if (psimhit && plane){
61 return transformer. initialFreeState(track,thePropagator->magneticField());
70 int ierr = !
m.Invert();
71 if (ierr!=0)
edm::LogInfo(
"TrackAssociatorByPosition")<<
"error inverting the error matrix:\n"<<
m;
72 double est = ROOT::Math::Similarity(
v,
m);
95 edm::LogError(
"TrackAssociatorByPosition")<<
"option: "<<theMethod<<
" has not been recognized. association has no meaning.";
106 std::pair<unsigned int,unsigned int> minPair;
107 const double dQmin_default=1542543;
108 double dQmin=dQmin_default;
109 for (
unsigned int Ti=0; Ti!=tCH.
size();++Ti){
113 bool atLeastOne=
false;
115 for (
unsigned int TPi=0;TPi!=tPCH.
size();++TPi) {
118 if (!simReferenceState.
isValid())
continue;
122 if (!trackReferenceState.
isValid())
continue;
125 double dQ= quality(trackReferenceState,simReferenceState);
128 outputCollection.
insert(tCH[Ti],
131 <<
" associated with dQ: "<<dQ
132 <<
" to TrackingParticle number: " <<TPi;}
135 minPair = std::make_pair(Ti,TPi);}
137 if (theMinIfNoMatch && !atLeastOne && dQmin!=dQmin_default){
138 outputCollection.
insert(tCH[minPair.first],
142 return outputCollection;
154 std::pair<unsigned int,unsigned int> minPair;
155 const double dQmin_default=1542543;
156 double dQmin=dQmin_default;
157 for (
unsigned int TPi=0;TPi!=tPCH.
size();++TPi){
161 if (!simReferenceState.
isValid())
continue;
162 bool atLeastOne=
false;
165 for (
unsigned int Ti=0; Ti!=tCH.
size();++Ti){
171 if (!trackReferenceState.
isValid())
continue;
174 double dQ= quality(trackReferenceState, simReferenceState);
178 std::make_pair(tCH[Ti],-dQ));
179 edm::LogVerbatim(
"TrackAssociatorByPosition")<<
"TrackingParticle number: "<<TPi
180 <<
" associated with dQ: "<<dQ
181 <<
" to track number: "<<Ti;}
184 minPair = std::make_pair(TPi,Ti);}
186 if (theMinIfNoMatch && !atLeastOne && dQmin!=dQmin_default){
188 std::make_pair(tCH[minPair.second],-dQmin));}
192 return outputCollection;
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
double quality(const TrajectoryStateOnSurface &, const TrajectoryStateOnSurface &) const
const LocalTrajectoryParameters & localParameters() const
LocalVector momentumAtEntry() const
The momentum of the track that produced the hit, at entry point.
const std::vector< PSimHit > & trackPSimHit() const
Geom::Phi< T > phi() const
GlobalPoint globalPosition() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
AlgebraicVector5 vector() const
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Local3DPoint localPosition() const
void post_insert()
post insert action
reco::SimToRecoCollection associateSimToReco(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
ROOT::Math::SVector< double, 5 > AlgebraicVector5
void insert(const key_type &k, const data_type &v)
insert an association
const Surface & surface() const
size_type size() const
Size of the RefVector.
reco::RecoToSimCollection associateRecoToSim(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
FreeTrajectoryState getState(const reco::Track &) const
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
GlobalVector globalDirection() const