File indexing completed on 2023-03-17 11:17:44
0001 #ifndef RecoEGAMMA_ConversionSeed_ConversionSeedFinder_h
0002 #define RecoEGAMMA_ConversionSeed_ConversionSeedFinder_h
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/Framework/interface/EventSetup.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0012 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
0013 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
0014 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
0015 #include "DataFormats/Common/interface/View.h"
0016 #include "DataFormats/Common/interface/Handle.h"
0017 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
0018 #include "TrackingTools/GeomPropagators/interface/StraightLinePropagator.h"
0019 #include "TrackingTools/KalmanUpdators/interface/KFUpdator.h"
0020 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0021 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0022 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
0023 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
0024 #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h"
0025 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0026
0027 #include "DataFormats/Math/interface/Vector3D.h"
0028 #include "DataFormats/Math/interface/Point3D.h"
0029
0030 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0031 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0032
0033
0034 #include <string>
0035 #include <vector>
0036
0037
0038 namespace edm {
0039 class ConsumesCollector;
0040 }
0041
0042 class DetLayer;
0043 class FreeTrajectoryState;
0044 class TrajectoryStateOnSurface;
0045 class NavigationSchool;
0046 class TrackingGeometry;
0047 class IdealMagneticFieldRecord;
0048 class TrackerRecoGeometryRecord;
0049 class CkfComponentsRecord;
0050 class TrackingComponentsRecord;
0051
0052 class ConversionSeedFinder {
0053 public:
0054 ConversionSeedFinder();
0055 ConversionSeedFinder(const edm::ParameterSet& config, edm::ConsumesCollector& iC);
0056
0057 virtual ~ConversionSeedFinder() {}
0058
0059 virtual void makeSeeds(const edm::Handle<edm::View<reco::CaloCluster> >& allBc) = 0;
0060
0061 TrajectorySeedCollection& seeds() { return theSeeds_; }
0062 virtual void setCandidate(float e, GlobalPoint pos) {
0063 theSCenergy_ = e;
0064 theSCPosition_ = pos;
0065 }
0066 std::vector<const DetLayer*> const& layerList() const { return theLayerList_; }
0067
0068 void setMeasurementTracker(const MeasurementTracker* tracker) const { ; }
0069 const MeasurementTracker* getMeasurementTracker() const { return theMeasurementTracker_; }
0070
0071
0072 void setEventSetup(const edm::EventSetup& es);
0073 void setNavigationSchool(const NavigationSchool* navigation) { theNavigationSchool_ = navigation; }
0074 void setEvent(const edm::Event& e);
0075
0076 void clear() { theSeeds_.clear(); }
0077
0078 protected:
0079
0080 void findLayers();
0081 void findLayers(const FreeTrajectoryState& fts);
0082
0083 FreeTrajectoryState trackStateFromClusters(int aCharge,
0084 const GlobalPoint& gpOrigine,
0085 PropagationDirection dir,
0086 float scaleFactor) const;
0087
0088 void printLayer(int i) const;
0089
0090 TrajectorySeedCollection theSeeds_;
0091 GlobalPoint theSCPosition_;
0092
0093 const MeasurementTracker* theMeasurementTracker_;
0094 const TrackingGeometry* theTrackerGeom_;
0095 const NavigationSchool* theNavigationSchool_ = nullptr;
0096
0097 edm::ESHandle<MagneticField> theMF_;
0098 edm::ESHandle<GeometricSearchTracker> theGeomSearchTracker_;
0099
0100 edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> theMFToken_;
0101 edm::ESGetToken<GeometricSearchTracker, TrackerRecoGeometryRecord> theGeomSearchTrackerToken_;
0102 edm::ESGetToken<MeasurementTracker, CkfComponentsRecord> theMeasurementTrackerToken_;
0103 edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropagatorAlongMomentumToken_;
0104 edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropagatorOppositeToMomentumToken_;
0105
0106 edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0107 edm::EDGetTokenT<MeasurementTrackerEvent> measurementTrkToken_;
0108
0109 KFUpdator theUpdator_;
0110 PropagationDirection dir_;
0111 reco::CaloCluster* theSC_;
0112 float theSCenergy_;
0113
0114 std::vector<const DetLayer*> theLayerList_;
0115
0116 GlobalPoint theBCPosition_;
0117 float theBCEnergy_;
0118
0119 const Propagator* thePropagatorAlongMomentum_;
0120 const Propagator* thePropagatorOppositeToMomentum_;
0121
0122 reco::BeamSpot theBeamSpot_;
0123 edm::Handle<MeasurementTrackerEvent> theTrackerData_;
0124 };
0125
0126 #endif