File indexing completed on 2024-10-04 22:54:55
0001 #ifndef MuonAnalysis_MuonAssociators_interface_PropagateToMuon_h
0002 #define MuonAnalysis_MuonAssociators_interface_PropagateToMuon_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "DataFormats/Candidate/interface/Candidate.h"
0014 #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
0015 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
0016 #include "DataFormats/TrackReco/interface/Track.h"
0017 #include "FWCore/Framework/interface/ESHandle.h"
0018 #include "FWCore/Framework/interface/ConsumesCollector.h"
0019 #include "MagneticField/Engine/interface/MagneticField.h"
0020 #include "RecoMuon/DetLayers/interface/MuonDetLayerGeometry.h"
0021 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0022 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0023 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0024 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
0025 #include "MuonAnalysis/MuonAssociators/interface/trackStateEnums.h"
0026
0027 class IdealMagneticFieldRecord;
0028 class TrackingComponentsRecord;
0029 class MuonRecoGeometryRecord;
0030
0031 class PropagateToMuon {
0032 public:
0033 explicit PropagateToMuon() {}
0034 explicit PropagateToMuon(edm::ESHandle<MagneticField>,
0035 edm::ESHandle<Propagator>,
0036 edm::ESHandle<Propagator>,
0037 edm::ESHandle<Propagator>,
0038 edm::ESHandle<MuonDetLayerGeometry>,
0039 bool,
0040 bool,
0041 bool,
0042 WhichTrack,
0043 WhichState,
0044 bool,
0045 bool);
0046 ~PropagateToMuon() {}
0047
0048
0049 TrajectoryStateOnSurface extrapolate(const reco::Track &tk) const { return extrapolate(startingState(tk)); }
0050
0051
0052 TrajectoryStateOnSurface extrapolate(const reco::Candidate &tk) const { return extrapolate(startingState(tk)); }
0053
0054
0055
0056
0057 TrajectoryStateOnSurface extrapolate(const SimTrack &tk, const edm::SimVertexContainer &vtxs) const {
0058 return extrapolate(startingState(tk, vtxs));
0059 }
0060
0061
0062 TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState &state) const;
0063
0064 private:
0065
0066 edm::ESHandle<MagneticField> magfield_;
0067 edm::ESHandle<Propagator> propagator_, propagatorAny_, propagatorOpposite_;
0068 edm::ESHandle<MuonDetLayerGeometry> muonGeometry_;
0069
0070 bool useSimpleGeometry_ = false;
0071
0072 bool useMB2_ = false;
0073
0074
0075 bool fallbackToME1_ = false;
0076
0077
0078 WhichTrack whichTrack_ = None;
0079 WhichState whichState_ = AtVertex;
0080
0081
0082 bool cosmicPropagation_ = false;
0083
0084 bool useMB2InOverlap_ = false;
0085
0086
0087 const BoundCylinder *barrelCylinder_ = nullptr;
0088 const BoundDisk *endcapDiskPos_[3] = {nullptr, nullptr, nullptr};
0089 const BoundDisk *endcapDiskNeg_[3] = {nullptr, nullptr, nullptr};
0090 double barrelHalfLength_ = 0.;
0091 std::pair<float, float> endcapRadii_[3] = {{0.f, 0.f}, {0.f, 0.f}, {0.f, 0.f}};
0092
0093
0094 FreeTrajectoryState startingState(const reco::Candidate &reco) const;
0095
0096
0097 FreeTrajectoryState startingState(const reco::Track &tk) const;
0098
0099
0100 FreeTrajectoryState startingState(const SimTrack &tk, const edm::SimVertexContainer &vtxs) const;
0101
0102
0103 TrajectoryStateOnSurface getBestDet(const TrajectoryStateOnSurface &tsos, const DetLayer *station) const;
0104 };
0105
0106 #endif