CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/RecoEgamma/EgammaPhotonAlgos/interface/InOutConversionSeedFinder.h

Go to the documentation of this file.
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 #include "TrackingTools/DetLayers/interface/DetLayer.h"
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 "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h" 
00028 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
00029 #include <string>
00030 #include <vector>
00031 
00032 
00033 
00034 class MagneticField;
00035 class FreeTrajectoryState;
00036 class TrajectoryStateOnSurface;
00037 class TrajectoryMeasurement;
00038 
00039 class InOutConversionSeedFinder : public ConversionSeedFinder {
00040   
00041   
00042  private:
00043   
00044   typedef FreeTrajectoryState FTS;
00045   typedef TrajectoryStateOnSurface TSOS;
00046   
00047   
00048   public :
00049     
00050     
00051     
00052     InOutConversionSeedFinder( const edm::ParameterSet& config );
00053   
00054   
00055   
00056   virtual ~InOutConversionSeedFinder();
00057   
00058   
00059   virtual void  makeSeeds(  const edm::Handle<edm::View<reco::CaloCluster> > & allBc) const;
00060   
00061   
00062   
00063   void setTracks(std::vector<Trajectory> const & in) { theOutInTracks_ = in;}
00064   
00065   
00066   private :
00067 
00068   edm::ParameterSet conf_;
00069   virtual void fillClusterSeeds(  ) const ;
00070   void startSeed(FreeTrajectoryState * fts, const TrajectoryStateOnSurface & stateAtPreviousLayer, int charge, int layer) const ;
00071   virtual void findSeeds(const TrajectoryStateOnSurface & startingState,
00072                          float signedpt, unsigned int startingLayer) const ;
00073   
00074   std::vector<const reco::CaloCluster*> getSecondCaloClusters(const GlobalPoint & conversionPosition, float charge) const;
00075   void completeSeed(const TrajectoryMeasurement & m1,FreeTrajectoryState & fts, const Propagator* propagator, int ilayer) const;
00076   void createSeed(const TrajectoryMeasurement & m1,  const TrajectoryMeasurement & m2) const ;
00077 
00078 
00079  private:
00080   float  the2ndHitdphi_;
00081   float  the2ndHitdzConst_;    
00082   float  the2ndHitdznSigma_;
00083   mutable int track2Charge_;
00084   mutable GlobalVector track2InitialMomentum_; 
00085   mutable int nSeedsPerInputTrack_;
00086   int maxNumberOfInOutSeedsPerInputTrack_;
00087      
00088 
00089   mutable TrajectoryMeasurement* myPointer;
00090 
00091   mutable std::vector<Trajectory> inputTracks_;
00092   mutable std::vector<Trajectory> theOutInTracks_;
00093   mutable std::vector<TrajectoryMeasurement> theFirstMeasurements_;
00094 
00095   mutable reco::CaloCluster theSecondBC_;
00096   mutable edm::Handle<edm::View<reco::CaloCluster> >  bcCollection_;
00097 
00098   
00099 };
00100 
00101 #endif