00001 #ifndef HTrackAssociator_HTrackAssociator_h
00002 #define HTrackAssociator_HTrackAssociator_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 "DataFormats/Common/interface/OrphanHandle.h"
00026
00027 #include "DataFormats/TrackReco/interface/TrackBase.h"
00028 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00029 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00030
00031 #include "Calibration/Tools/interface/CaloDetIdAssociator.h"
00032 #include "Calibration/Tools/interface/EcalDetIdAssociator.h"
00033 #include "Calibration/Tools/interface/HcalDetIdAssociator.h"
00034 #include "Calibration/Tools/interface/TrackDetMatchInfo.h"
00035
00036 #include "DataFormats/CaloTowers/interface/CaloTower.h"
00037 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
00038 #include "DataFormats/HcalRecHit/interface/HBHERecHit.h"
00039 #include "DataFormats/TrackReco/interface/Track.h"
00040 #include "DataFormats/Math/interface/Vector3D.h"
00041 #include "DataFormats/Math/interface/Point3D.h"
00042
00043 #include "SimDataFormats/Track/interface/SimTrack.h"
00044 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00045
00046
00047 class HTrackAssociator {
00048 public:
00049 HTrackAssociator();
00050 ~HTrackAssociator();
00051
00052 class HAssociatorParameters {
00053 public:
00054 HAssociatorParameters() {
00055
00056
00057 dREcal = 0.03;
00058 dRHcal = 0.07;
00059 dRCalo = 0.07;
00060
00061 idREcal = 1;
00062 idRHcal = 4;
00063 idRCalo = 4;
00064
00065
00066 useEcal = true;
00067 useHcal = true;
00068 useCalo = true;
00069 }
00070 double dREcal;
00071 double dRHcal;
00072 double dRCalo;
00073 int idREcal;
00074 int idRHcal;
00075 int idRCalo;
00076
00077 bool useEcal;
00078 bool useHcal;
00079 bool useCalo;
00080 };
00081
00082
00092 HTrackDetMatchInfo associate( const edm::Event&,
00093 const edm::EventSetup&,
00094 const FreeTrajectoryState&,
00095 const HAssociatorParameters& );
00096
00099 std::vector<EcalRecHit> associateEcal( const edm::Event&,
00100 const edm::EventSetup&,
00101 const FreeTrajectoryState&,
00102 const double dR = -1 );
00103
00106 double getEcalEnergy( const edm::Event&,
00107 const edm::EventSetup&,
00108 const FreeTrajectoryState&,
00109 const double dR = -1 );
00110
00113 std::vector<CaloTower> associateHcal( const edm::Event&,
00114 const edm::EventSetup&,
00115 const FreeTrajectoryState&,
00116 const double dR = -1 );
00117
00120 double getHcalEnergy( const edm::Event&,
00121 const edm::EventSetup&,
00122 const FreeTrajectoryState&,
00123 const double dR = -1 );
00125 void setPropagator( Propagator* );
00126
00128 void useDefaultPropagator();
00129
00131 void addDataLabels( const std::string className,
00132 const std::string moduleLabel,
00133 const std::string productInstanceLabel = "");
00134
00136 FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&,
00137 const reco::Track& );
00138 FreeTrajectoryState getFreeTrajectoryState( const edm::EventSetup&,
00139 const SimTrack&,
00140 const SimVertex& );
00141
00142 private:
00143 void fillEcal( const edm::Event&,
00144 const edm::EventSetup&,
00145 HTrackDetMatchInfo&,
00146 const FreeTrajectoryState&,
00147 const int,
00148 const double);
00149
00150 void fillHcal( const edm::Event&,
00151 const edm::EventSetup&,
00152 HTrackDetMatchInfo&,
00153 const FreeTrajectoryState&,
00154 const int,
00155 const double);
00156
00157 void fillHcalTowers( const edm::Event&,
00158 const edm::EventSetup&,
00159 HTrackDetMatchInfo&,
00160 const FreeTrajectoryState&,
00161 const int,
00162 const double);
00163
00164 void fillCaloTowers( const edm::Event&,
00165 const edm::EventSetup&,
00166 HTrackDetMatchInfo&,
00167 const FreeTrajectoryState&,
00168 const int,
00169 const double);
00170
00171 void init( const edm::EventSetup&);
00172
00173 math::XYZPoint getPoint( const GlobalPoint& point)
00174 {
00175 return math::XYZPoint(point.x(),point.y(),point.z());
00176 }
00177
00178 math::XYZPoint getPoint( const LocalPoint& point)
00179 {
00180 return math::XYZPoint(point.x(),point.y(),point.z());
00181 }
00182
00183 math::XYZVector getVector( const GlobalVector& vec)
00184 {
00185 return math::XYZVector(vec.x(),vec.y(),vec.z());
00186 }
00187
00188 math::XYZVector getVector( const LocalVector& vec)
00189 {
00190 return math::XYZVector(vec.x(),vec.y(),vec.z());
00191 }
00192
00193 Propagator* ivProp_;
00194 Propagator* defProp_;
00195 bool useDefaultPropagator_;
00196 int debug_;
00197 std::vector<std::vector<std::set<uint32_t> > >* caloTowerMap_;
00198
00199 HEcalDetIdAssociator ecalDetIdAssociator_;
00200 HHcalDetIdAssociator hcalDetIdAssociator_;
00201 HCaloDetIdAssociator caloDetIdAssociator_;
00202
00203 edm::ESHandle<CaloGeometry> theCaloGeometry_;
00204
00207 std::vector<std::string> EBRecHitCollectionLabels;
00208 std::vector<std::string> EERecHitCollectionLabels;
00210 std::vector<std::string> HBHERecHitCollectionLabels;
00212 std::vector<std::string> CaloTowerCollectionLabels;
00213 };
00214 #endif