![]() |
![]() |
00001 #ifndef RecoEGAMMA_ConversionSeed_InOutConversionSeedFinder_h 00002 #define RecoEGAMMA_ConversionSeed_InOutConversionSeedFinder_h 00003 00013 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00014 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h" 00015 #include "DataFormats/Common/interface/View.h" 00016 00017 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h" 00018 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" 00019 00020 #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionSeedFinder.h" 00021 00022 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h" 00023 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" 00024 #include "TrackingTools/PatternTools/interface/MeasurementEstimator.h" 00025 #include "TrackingTools/PatternTools/interface/Trajectory.h" 00026 #include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h" 00027 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" 00028 #include <string> 00029 #include <vector> 00030 00031 00032 00033 class MagneticField; 00034 class FreeTrajectoryState; 00035 class TrajectoryStateOnSurface; 00036 class TrajectoryMeasurement; 00037 00038 class InOutConversionSeedFinder : public ConversionSeedFinder { 00039 00040 00041 private: 00042 00043 typedef FreeTrajectoryState FTS; 00044 typedef TrajectoryStateOnSurface TSOS; 00045 00046 00047 public : 00048 00049 00050 00051 InOutConversionSeedFinder( const edm::ParameterSet& config ); 00052 00053 00054 00055 virtual ~InOutConversionSeedFinder(); 00056 00057 00058 virtual void makeSeeds( const edm::Handle<edm::View<reco::CaloCluster> > & allBc) const; 00059 00060 00061 00062 void setTracks(std::vector<Trajectory> in) { theOutInTracks_.clear(); theOutInTracks_ = in;} 00063 00064 00065 private : 00066 00067 edm::ParameterSet conf_; 00068 virtual void fillClusterSeeds( ) const ; 00069 void startSeed(FreeTrajectoryState * fts, const TrajectoryStateOnSurface & stateAtPreviousLayer, int charge, int layer) const ; 00070 virtual void findSeeds(const TrajectoryStateOnSurface & startingState, 00071 float signedpt, unsigned int startingLayer) const ; 00072 00073 std::vector<const reco::CaloCluster*> getSecondCaloClusters(const GlobalPoint & conversionPosition, float charge) const; 00074 void completeSeed(const TrajectoryMeasurement & m1,FreeTrajectoryState & fts, const Propagator* propagator, int ilayer) const; 00075 void createSeed(const TrajectoryMeasurement & m1, const TrajectoryMeasurement & m2) const ; 00076 00077 00078 private: 00079 float the2ndHitdphi_; 00080 float the2ndHitdzConst_; 00081 float the2ndHitdznSigma_; 00082 mutable int track2Charge_; 00083 mutable GlobalVector track2InitialMomentum_; 00084 mutable int nSeedsPerInputTrack_; 00085 int maxNumberOfInOutSeedsPerInputTrack_; 00086 00087 00088 00089 00090 std::vector<Trajectory> inputTracks_; 00091 std::vector<Trajectory> theOutInTracks_; 00092 mutable std::vector<TrajectoryMeasurement> theFirstMeasurements_; 00093 00094 mutable reco::CaloCluster theSecondBC_; 00095 mutable edm::Handle<edm::View<reco::CaloCluster> > bcCollection_; 00096 00097 00098 }; 00099 00100 #endif