CMS 3D CMS Logo

GlobalTrajectoryBuilderBase.h

Go to the documentation of this file.
00001 #ifndef RecoMuon_GlobalTrackingTools_GlobalTrajectoryBuilderBase_H
00002 #define RecoMuon_GlobalTrackingTools_GlobalTrajectoryBuilderBase_H
00003 
00025 #include "FWCore/Framework/interface/ESHandle.h"
00026 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00027 #include "RecoMuon/TrackingTools/interface/MuonTrajectoryBuilder.h"
00028 #include "RecoMuon/TransientTrackingRecHit/interface/MuonTransientTrackingRecHit.h"
00029 
00030 class RectangularEtaPhiTrackingRegion;
00031 class TrajectoryStateOnSurface;
00032 class GlobalMuonTrackMatcher;
00033 class MuonDetLayerMeasurements;
00034 class MuonServiceProxy;
00035 class Trajectory;
00036 class TrackTransformer;
00037 class TrajectoryFitter;
00038 class MuonTrackingRegionBuilder;
00039 class TransientTrackingRecHitBuilder;
00040 
00041 namespace edm {class ParameterSet; class Event;}
00042 namespace reco {class TransientTrack;}
00043 
00044 //              ---------------------
00045 //              -- Class Interface --
00046 //              ---------------------
00047 
00048 class GlobalTrajectoryBuilderBase : public MuonTrajectoryBuilder {
00049 
00050   public:
00051 
00052     typedef TransientTrackingRecHit::RecHitContainer RecHitContainer;
00053     typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer;
00054     typedef TransientTrackingRecHit::RecHitPointer RecHitPointer;
00055     typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer;
00056 
00057     typedef MuonTransientTrackingRecHit::MuonRecHitPointer MuonRecHitPointer;
00058     typedef MuonTransientTrackingRecHit::ConstMuonRecHitPointer ConstMuonRecHitPointer;
00059     typedef MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer;
00060     typedef MuonTransientTrackingRecHit::ConstMuonRecHitContainer ConstMuonRecHitContainer;
00061 
00062     typedef std::vector<Trajectory> TC;
00063     typedef TC::const_iterator TI;
00064 
00065   public:
00066 
00068     GlobalTrajectoryBuilderBase(const edm::ParameterSet&, const MuonServiceProxy*);
00069           
00071     virtual ~GlobalTrajectoryBuilderBase();
00072 
00074     MuonTrajectoryBuilder::TrajectoryContainer trajectories(const TrajectorySeed&) { return MuonTrajectoryBuilder::TrajectoryContainer(); }
00075 
00077     virtual void setEvent(const edm::Event&);
00078 
00079   protected:
00080 
00081     enum RefitDirection{inToOut,outToIn,undetermined};
00082 
00084     MuonTrajectoryBuilder::CandidateContainer build(const TrackCand&,
00085                                                     MuonTrajectoryBuilder::CandidateContainer&) const;
00086 
00088     virtual std::vector<TrackCand> makeTkCandCollection(const TrackCand&) = 0;
00089 
00091     std::vector<TrackCand> chooseRegionalTrackerTracks(const TrackCand&, 
00092                                                        const std::vector<TrackCand>&);
00093 
00095     RectangularEtaPhiTrackingRegion defineRegionOfInterest(const reco::TrackRef&) const;
00096 
00098     void checkMuonHits(const reco::Track&, 
00099                        ConstRecHitContainer&, 
00100                        ConstRecHitContainer&, 
00101                        std::vector<int>&) const;
00102  
00104     ConstRecHitContainer selectMuonHits(const Trajectory&, 
00105                                         const std::vector<int>&) const;
00106 
00108     ConstRecHitContainer selectTrackerHits(const ConstRecHitContainer&) const;
00109  
00111     const Trajectory* chooseTrajectory(const std::vector<Trajectory*>&, int) const;
00112 
00114     double trackProbability(const Trajectory&) const;
00115 
00117     void printHits(const ConstRecHitContainer&) const;
00118 
00120     void addTraj(TrackCand&);
00121 
00123     RefitDirection checkRecHitsOrdering(const ConstRecHitContainer&) const;
00124 
00126     std::vector<Trajectory> refitTrajectory(const Trajectory&) const;
00127 
00129     std::vector<Trajectory> glbTrajectory(const TrajectorySeed& seed,
00130                                           const ConstRecHitContainer& trackerhits,
00131                                           const ConstRecHitContainer& muonhits,
00132                                           const TrajectoryStateOnSurface& firstPredTsos) const;
00133 
00135     GlobalMuonTrackMatcher* trackMatcher() const { return theTrackMatcher; }
00136 
00138     const MuonServiceProxy* service() const { return theService; }
00139 
00140   TransientTrackingRecHit::ConstRecHitContainer
00141     getTransientRecHits(const reco::TransientTrack& track) const;
00142 
00144     struct RadiusComparatorInOut{
00145       bool operator()(const TransientTrackingRecHit::ConstRecHitPointer &a,
00146                       const TransientTrackingRecHit::ConstRecHitPointer &b) const{ 
00147         return a->det()->surface().position().perp() < b->det()->surface().position().perp(); 
00148       }
00149     };
00150 
00152     struct ZedComparatorInOut{  
00153       bool operator()( const TransientTrackingRecHit::ConstRecHitPointer &a, 
00154                        const TransientTrackingRecHit::ConstRecHitPointer &b) const{ 
00155         return fabs(a->globalPosition().z()) < fabs(b->globalPosition().z()); 
00156       }
00157     };
00158 
00160     struct ComparatorInOut{
00161       bool operator()(const TransientTrackingRecHit::ConstRecHitPointer &a,
00162                       const TransientTrackingRecHit::ConstRecHitPointer &b) const{ 
00163         bool barrel_a = ( a->det()->subDetector() == GeomDetEnumerators::DT ||
00164                           a->det()->subDetector() == GeomDetEnumerators::RPCBarrel );
00165         
00166         bool barrel_b = ( b->det()->subDetector() == GeomDetEnumerators::DT ||
00167                           b->det()->subDetector() == GeomDetEnumerators::RPCBarrel );
00168         
00169         //      if ( barrel_a && barrel_b )      return  a->det()->surface().position().perp() < b->det()->surface().position().perp(); 
00170         if ( barrel_a && barrel_b )      return  a->globalPosition().perp() < b->globalPosition().perp(); 
00171         else if ( !barrel_a && !barrel_b )      return  fabs(a->globalPosition().z()) < fabs(b->globalPosition().z());
00172         else if ( barrel_a && !barrel_b  )  return true;
00173         else if ( !barrel_a && barrel_b  )  return false;
00174       }
00175     };
00176 
00177   protected:
00178 
00179     std::string theCategory;
00180     bool theTkTrajsAvailableFlag;
00181     float thePtCut;
00182 
00183   private:
00184 
00185     GlobalMuonTrackMatcher* theTrackMatcher;
00186     MuonDetLayerMeasurements* theLayerMeasurements;
00187     TrackTransformer* theTrackTransformer;
00188     MuonTrackingRegionBuilder* theRegionBuilder;
00189     const MuonServiceProxy* theService;
00190     edm::ESHandle<TrajectoryFitter> theKFFitter;
00191 
00192     unsigned long long theCacheId_TRH;
00193     bool theRPCInTheFit;
00194   
00195     int   theMuonHitsOption;
00196     float theProbCut;
00197     int   theHitThreshold;
00198     float theDTChi2Cut;
00199     float theCSCChi2Cut;
00200     float theRPCChi2Cut;
00201     std::string theKFFitterName;
00202     std::string theTrackerPropagatorName;
00203  
00204     const edm::Event* theEvent;
00205 
00206     std::string theTrackerRecHitBuilderName;
00207     edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
00208     
00209     std::string theMuonRecHitBuilderName;
00210     edm::ESHandle<TransientTrackingRecHitBuilder> theMuonRecHitBuilder;
00211     
00212 };
00213 #endif

Generated on Tue Jun 9 17:44:14 2009 for CMSSW by  doxygen 1.5.4