00001 #ifndef TrackAssociator_TrackDetectorAssociator_h
00002 #define TrackAssociator_TrackDetectorAssociator_h 1
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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