CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h

Go to the documentation of this file.
00001 #ifndef TrackAssociator_TrackDetectorAssociator_h
00002 #define TrackAssociator_TrackDetectorAssociator_h 1
00003 
00004 // -*- C++ -*-
00005 //
00006 // Package:    TrackAssociator
00007 // Class:      TrackDetectorAssociator
00008 // 
00009 /*
00010 
00011  Description: main class of tools to associate a track to calorimeter and muon detectors
00012 
00013 */
00014 //
00015 // Original Author:  Dmytro Kovalskyi
00016 //         Created:  Fri Apr 21 10:59:41 PDT 2006
00017 // $Id: TrackDetectorAssociator.h,v 1.17 2010/03/12 13:51:28 gpetrucc Exp $
00018 //
00019 //
00020 
00021 #include "FWCore/Framework/interface/Event.h"
00022 #include "FWCore/Framework/interface/EventSetup.h"
00023 #include "DataFormats/Common/interface/Handle.h"
00024 #include "FWCore/Framework/interface/ESHandle.h"
00025 #include "FWCore/Framework/interface/ESWatcher.h"
00026 #include "DataFormats/Common/interface/OrphanHandle.h"
00027 
00028 #include "DataFormats/TrackReco/interface/TrackBase.h"
00029 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00030 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00031 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00032 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00033 
00034 #include "TrackingTools/TrackAssociator/interface/CaloDetIdAssociator.h"
00035 #include "TrackingTools/TrackAssociator/interface/EcalDetIdAssociator.h"
00036 #include "TrackingTools/TrackAssociator/interface/MuonDetIdAssociator.h"
00037 #include "TrackingTools/TrackAssociator/interface/HcalDetIdAssociator.h"
00038 #include "TrackingTools/TrackAssociator/interface/HODetIdAssociator.h"
00039 
00040 #include "TrackingTools/TrackAssociator/interface/TrackDetMatchInfo.h"
00041 #include "TrackingTools/TrackAssociator/interface/CachedTrajectory.h"
00042 
00043 #include "DataFormats/CaloTowers/interface/CaloTower.h"
00044 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
00045 #include "DataFormats/TrackReco/interface/Track.h"
00046 #include "DataFormats/TrackingRecHit/interface/RecSegment.h"
00047 
00048 #include "SimDataFormats/Track/interface/SimTrack.h"
00049 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00050 
00051 #include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h"
00052 
00053 class TrackDetectorAssociator {
00054  public:
00055    TrackDetectorAssociator();
00056    ~TrackDetectorAssociator();
00057    
00058    typedef TrackAssociatorParameters AssociatorParameters;
00059    enum Direction { Any, InsideOut, OutsideIn };
00060    
00074    TrackDetMatchInfo            associate( const edm::Event&,
00075                                            const edm::EventSetup&,
00076                                            const FreeTrajectoryState&,
00077                                            const AssociatorParameters& );
00080    TrackDetMatchInfo            associate( const edm::Event& iEvent,
00081                                            const edm::EventSetup& iSetup,
00082                                            const AssociatorParameters& parameters,
00083                                            const FreeTrajectoryState* innerState,
00084                                            const FreeTrajectoryState* outerState=0);
00086    TrackDetMatchInfo            associate( const edm::Event&,
00087                                            const edm::EventSetup&,
00088                                            const reco::Track&,
00089                                            const AssociatorParameters&,
00090                                            Direction direction = Any );
00092    TrackDetMatchInfo            associate( const edm::Event&,
00093                                            const edm::EventSetup&,
00094                                            const SimTrack&,
00095                                            const SimVertex&,
00096                                            const AssociatorParameters& );
00098    TrackDetMatchInfo            associate( const edm::Event&,
00099                                            const edm::EventSetup&,
00100                                            const GlobalVector&,
00101                                            const GlobalPoint&,
00102                                            const int,
00103                                            const AssociatorParameters& );
00104    
00106    void setPropagator( const Propagator* );
00107    
00109    void useDefaultPropagator();
00110    
00112    static FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&, 
00113                                                       const reco::Track& );
00114    static FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&, 
00115                                                       const SimTrack&, 
00116                                                       const SimVertex& );
00117    static FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&,
00118                                                       const GlobalVector&,
00119                                                       const GlobalPoint&,
00120                                                       const int);
00121         
00122    static bool                crossedIP(const reco::Track& track);
00123 
00124  private:
00125    DetIdAssociator::MapRange getMapRange( const std::pair<float,float>& delta,
00126                                           const float dR );
00127 
00128    void fillEcal(       const edm::Event&,
00129                         TrackDetMatchInfo&, 
00130                         const AssociatorParameters&);
00131    
00132    void fillCaloTowers( const edm::Event&,
00133                         TrackDetMatchInfo&,
00134                         const AssociatorParameters&);
00135    
00136    void fillHcal(       const edm::Event&,
00137                         TrackDetMatchInfo&,
00138                         const AssociatorParameters&);
00139    
00140    void fillHO(         const edm::Event&,
00141                         TrackDetMatchInfo&,
00142                         const AssociatorParameters&);
00143   
00144    void fillPreshower(  const edm::Event& iEvent,
00145                         TrackDetMatchInfo& info,
00146                         const AssociatorParameters&);
00147    
00148    void fillMuon(       const edm::Event&,
00149                         TrackDetMatchInfo&,
00150                         const AssociatorParameters&);
00151    
00152    void fillCaloTruth(  const edm::Event&,
00153                         TrackDetMatchInfo&,
00154                         const AssociatorParameters&);
00155    
00156    bool addTAMuonSegmentMatch(TAMuonChamberMatch&,
00157                             const RecSegment*,
00158                             const AssociatorParameters&);
00159    
00160    void getTAMuonChamberMatches(std::vector<TAMuonChamberMatch>& matches,
00161                               const AssociatorParameters& parameters);
00162   
00163    void           init( const edm::EventSetup&);
00164    
00165    math::XYZPoint getPoint( const GlobalPoint& point)
00166      {
00167         return math::XYZPoint(point.x(),point.y(),point.z());
00168      }
00169    
00170    math::XYZPoint getPoint( const LocalPoint& point)
00171      {
00172         return math::XYZPoint(point.x(),point.y(),point.z());
00173      }
00174    
00175    math::XYZVector getVector( const GlobalVector& vec)
00176      {
00177         return math::XYZVector(vec.x(),vec.y(),vec.z());
00178      }
00179    
00180    math::XYZVector getVector( const LocalVector& vec)
00181      {
00182         return math::XYZVector(vec.x(),vec.y(),vec.z());
00183      }
00184    
00185    const Propagator* ivProp_;
00186    Propagator* defProp_;
00187    CachedTrajectory cachedTrajectory_;
00188    bool useDefaultPropagator_;
00189    
00190    edm::ESHandle<DetIdAssociator> ecalDetIdAssociator_;
00191    edm::ESHandle<DetIdAssociator> hcalDetIdAssociator_;
00192    edm::ESHandle<DetIdAssociator>   hoDetIdAssociator_;
00193    edm::ESHandle<DetIdAssociator> caloDetIdAssociator_;
00194    edm::ESHandle<DetIdAssociator> muonDetIdAssociator_;
00195    edm::ESHandle<DetIdAssociator> preshowerDetIdAssociator_;
00196    
00197    edm::ESHandle<CaloGeometry> theCaloGeometry_;
00198    edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry_;
00199    
00200    edm::ESWatcher<IdealMagneticFieldRecord>     theMagneticFeildWatcher_;
00201 };
00202 #endif