Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:34

0001 // -*- C++ -*-
0002 //
0003 // Package:     TrackingTools/PatternTools
0004 // Class  :     trackingParametersAtClosestApproachToBeamSpot
0005 //
0006 // Implementation:
0007 //     [Notes on implementation]
0008 //
0009 // Original Author:  Christopher Jones
0010 //         Created:  Fri, 02 Jan 2015 19:32:37 GMT
0011 //
0012 
0013 // system include files
0014 
0015 // user include files
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);  //as in TrackProducerAlgorithm
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 }