File indexing completed on 2023-03-17 11:25:44
0001 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0002 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "MagneticField/Engine/interface/MagneticField.h"
0005 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0006 #include "SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h"
0007 #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h"
0008 #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h"
0009 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0010 class TrajectoryStateClosestToBeamLineBuilder;
0011
0012 ParametersDefinerForTP::ParametersDefinerForTP(const edm::InputTag &beamspot, edm::ConsumesCollector iC)
0013 : bsToken_(iC.consumes(beamspot)), mfToken_(iC.esConsumes()) {}
0014
0015 ParametersDefinerForTP::~ParametersDefinerForTP() = default;
0016
0017 TrackingParticle::Vector ParametersDefinerForTP::momentum(const edm::Event &iEvent,
0018 const edm::EventSetup &iSetup,
0019 const Charge charge,
0020 const Point &vtx,
0021 const LorentzVector &lv) const {
0022
0023
0024
0025 using namespace edm;
0026
0027 auto const &bs = iEvent.get(bsToken_);
0028 auto const &mf = iSetup.getData(mfToken_);
0029
0030 TrackingParticle::Vector momentum(0, 0, 0);
0031
0032 FreeTrajectoryState ftsAtProduction(
0033 GlobalPoint(vtx.x(), vtx.y(), vtx.z()), GlobalVector(lv.x(), lv.y(), lv.z()), TrackCharge(charge), &mf);
0034
0035 TSCBLBuilderNoMaterial tscblBuilder;
0036 TrajectoryStateClosestToBeamLine tsAtClosestApproach =
0037 tscblBuilder(ftsAtProduction, bs);
0038 if (tsAtClosestApproach.isValid()) {
0039 GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
0040 momentum = TrackingParticle::Vector(p.x(), p.y(), p.z());
0041 }
0042 return momentum;
0043 }
0044
0045 TrackingParticle::Point ParametersDefinerForTP::vertex(const edm::Event &iEvent,
0046 const edm::EventSetup &iSetup,
0047 const Charge charge,
0048 const Point &vtx,
0049 const LorentzVector &lv) const {
0050
0051
0052 using namespace edm;
0053
0054 auto const &bs = iEvent.get(bsToken_);
0055 auto const &mf = iSetup.getData(mfToken_);
0056
0057 TrackingParticle::Point vertex(0, 0, 0);
0058
0059 FreeTrajectoryState ftsAtProduction(
0060 GlobalPoint(vtx.x(), vtx.y(), vtx.z()), GlobalVector(lv.x(), lv.y(), lv.z()), TrackCharge(charge), &mf);
0061
0062 TSCBLBuilderNoMaterial tscblBuilder;
0063 TrajectoryStateClosestToBeamLine tsAtClosestApproach =
0064 tscblBuilder(ftsAtProduction, bs);
0065 if (tsAtClosestApproach.isValid()) {
0066 GlobalPoint v = tsAtClosestApproach.trackStateAtPCA().position();
0067 vertex = TrackingParticle::Point(v.x(), v.y(), v.z());
0068 } else {
0069
0070
0071 vertex = TrackingParticle::Point(bs.x0(), bs.y0(), bs.z0());
0072 }
0073 return vertex;
0074 }
0075
0076 std::tuple<TrackingParticle::Vector, TrackingParticle::Point> ParametersDefinerForTP::momentumAndVertex(
0077 const edm::Event &iEvent,
0078 const edm::EventSetup &iSetup,
0079 const Charge charge,
0080 const Point &vtx,
0081 const LorentzVector &lv) const {
0082 using namespace edm;
0083
0084 auto const &bs = iEvent.get(bsToken_);
0085 auto const &mf = iSetup.getData(mfToken_);
0086
0087 TrackingParticle::Point vertex(bs.x0(), bs.y0(), bs.z0());
0088 TrackingParticle::Vector momentum(0, 0, 0);
0089
0090 FreeTrajectoryState ftsAtProduction(
0091 GlobalPoint(vtx.x(), vtx.y(), vtx.z()), GlobalVector(lv.x(), lv.y(), lv.z()), TrackCharge(charge), &mf);
0092
0093 TSCBLBuilderNoMaterial tscblBuilder;
0094 TrajectoryStateClosestToBeamLine tsAtClosestApproach =
0095 tscblBuilder(ftsAtProduction, bs);
0096 if (tsAtClosestApproach.isValid()) {
0097 GlobalPoint v = tsAtClosestApproach.trackStateAtPCA().position();
0098 vertex = TrackingParticle::Point(v.x(), v.y(), v.z());
0099 GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
0100 momentum = TrackingParticle::Vector(p.x(), p.y(), p.z());
0101 ;
0102 }
0103
0104 return std::make_tuple(momentum, vertex);
0105 }