File indexing completed on 2024-04-06 12:31:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "TrackingTools/PatternTools/interface/trackingParametersAtClosestApproachToBeamSpot.h"
0017 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0018 #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h"
0019 #include "DataFormats/GeometryVector/interface/Pi.h"
0020
0021 std::pair<bool, reco::TrackBase::ParameterVector> reco::trackingParametersAtClosestApproachToBeamSpot(
0022 const Basic3DVector<double>& vertex,
0023 const Basic3DVector<double>& momAtVtx,
0024 float charge,
0025 const MagneticField& magField,
0026 const BeamSpot& bs) {
0027 TrackBase::ParameterVector sParameters;
0028 try {
0029 FreeTrajectoryState ftsAtProduction(GlobalPoint(vertex.x(), vertex.y(), vertex.z()),
0030 GlobalVector(momAtVtx.x(), momAtVtx.y(), momAtVtx.z()),
0031 TrackCharge(charge),
0032 &magField);
0033 TSCBLBuilderNoMaterial tscblBuilder;
0034 TrajectoryStateClosestToBeamLine tsAtClosestApproach =
0035 tscblBuilder(ftsAtProduction, bs);
0036
0037 GlobalPoint v = tsAtClosestApproach.trackStateAtPCA().position();
0038 GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
0039 sParameters[0] = tsAtClosestApproach.trackStateAtPCA().charge() / p.mag();
0040 sParameters[1] = Geom::halfPi() - p.theta();
0041 sParameters[2] = p.phi();
0042 sParameters[3] = (-v.x() * sin(p.phi()) + v.y() * cos(p.phi()));
0043 sParameters[4] = v.z() * p.perp() / p.mag() - (v.x() * p.x() + v.y() * p.y()) / p.perp() * p.z() / p.mag();
0044
0045 return std::make_pair(true, sParameters);
0046 } catch (cms::Exception const&) {
0047 return std::make_pair(false, sParameters);
0048 }
0049 }