CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_1/src/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h

Go to the documentation of this file.
00001 #ifndef Alignment_ReferenceTrajectories_TrajectoryFactoryBase_h
00002 #define Alignment_ReferenceTrajectories_TrajectoryFactoryBase_h
00003 
00004 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h"
00005 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectoryBase.h"
00006 
00007 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00008 
00009 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00010 
00011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00012 
00015 
00016 
00017 namespace reco { class BeamSpot;}
00018 
00019 class TrajectoryFactoryBase
00020 {
00021 
00022 public:
00023 
00024   typedef ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr;
00025   typedef ReferenceTrajectoryBase::MaterialEffects MaterialEffects;
00026   typedef AlignmentAlgorithmBase::ConstTrajTrackPair ConstTrajTrackPair;
00027   typedef AlignmentAlgorithmBase::ConstTrajTrackPairCollection ConstTrajTrackPairCollection;
00028   typedef std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection;
00029   typedef std::pair< TrajectoryStateOnSurface, TransientTrackingRecHit::ConstRecHitContainer > TrajectoryInput;
00030   typedef std::vector< TrajectoryStateOnSurface > ExternalPredictionCollection;
00031 
00032   TrajectoryFactoryBase( const edm::ParameterSet & config );
00033   virtual ~TrajectoryFactoryBase( void );
00034 
00035   virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup,
00036                                                            const ConstTrajTrackPairCollection &tracks,
00037                                                            const reco::BeamSpot &beamSpot) const = 0;
00038 
00039   virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup,
00040                                                            const ConstTrajTrackPairCollection &tracks,
00041                                                            const ExternalPredictionCollection &external,
00042                                                            const reco::BeamSpot &beamSpot) const = 0;
00043 
00044   virtual TrajectoryFactoryBase* clone( void ) const = 0;
00045 
00046   inline MaterialEffects materialEffects( void ) const { return theMaterialEffects; }
00047   inline PropagationDirection propagationDirection( void ) const { return thePropDir; }
00048   inline const edm::ParameterSet &configuration() const { return theConfig; }
00049 
00050 protected:
00051 
00052   virtual const TrajectoryInput innermostStateAndRecHits( const ConstTrajTrackPair & track ) const;
00053   virtual const Trajectory::DataContainer orderedTrajectoryMeasurements( const Trajectory & trajectory ) const;
00054   bool sameSurface( const Surface& s1, const Surface& s2 ) const;
00055   bool useRecHit( const TransientTrackingRecHit::ConstRecHitPointer& hitPtr ) const;
00056 
00057 private:
00058 
00059   MaterialEffects materialEffects( const std::string & strME ) const;
00060   PropagationDirection propagationDirection( const std::string & strPD ) const;
00061 
00062   MaterialEffects theMaterialEffects;
00063   PropagationDirection thePropDir;
00064   const edm::ParameterSet theConfig; // need to keep for possible re-use after constructor... :-(
00065 
00066   bool theUseWithoutDet;
00067   bool theUseInvalidHits;
00068   bool theUseProjectedHits;
00069   
00070 protected:
00071 
00072   bool theUseBeamSpot;
00073 };
00074 
00075 
00076 #endif