Go to the documentation of this file.00001 #ifndef TrackAssociator_TrackDetMatchInfo_h
00002 #define TrackAssociator_TrackDetMatchInfo_h
00003
00004 #include "DataFormats/CaloTowers/interface/CaloTower.h"
00005 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
00006 #include "DataFormats/HcalRecHit/interface/HBHERecHit.h"
00007 #include "DataFormats/HcalRecHit/interface/HORecHit.h"
00008 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00009 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
00010 #include "TrackingTools/TrackAssociator/interface/TAMuonChamberMatch.h"
00011 #include "FWCore/Framework/interface/ESHandle.h"
00012 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00013 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00014 class TrackDetMatchInfo {
00015 public:
00016 enum EnergyType { EcalRecHits, HcalRecHits, HORecHits, TowerTotal, TowerEcal, TowerHcal, TowerHO };
00017
00018 TrackDetMatchInfo();
00019
00021 double crossedEnergy( EnergyType );
00022
00025 double coneEnergy( double dR, EnergyType );
00026
00028 double nXnEnergy(const DetId&, EnergyType, int gridSize = 1);
00029
00031 double nXnEnergy(EnergyType, int gridSize = 1);
00032
00034 DetId findMaxDeposition( EnergyType );
00035 DetId findMaxDeposition( EnergyType, int gridSize );
00036 DetId findMaxDeposition( const DetId&, EnergyType, int gridSize );
00037
00039 math::XYZPoint trkGlobPosAtEcal;
00040 math::XYZPoint trkGlobPosAtHcal;
00041 math::XYZPoint trkGlobPosAtHO;
00042
00043 GlobalVector trkMomAtEcal;
00044 GlobalVector trkMomAtHcal;
00045 GlobalVector trkMomAtHO;
00046
00047 bool isGoodEcal;
00048 bool isGoodHcal;
00049 bool isGoodCalo;
00050 bool isGoodHO;
00051 bool isGoodMuon;
00052
00054 std::vector<const EcalRecHit*> ecalRecHits;
00055 std::vector<const HBHERecHit*> hcalRecHits;
00056 std::vector<const HORecHit*> hoRecHits;
00057 std::vector<const CaloTower*> towers;
00058
00060 std::vector<const EcalRecHit*> crossedEcalRecHits;
00061 std::vector<const HBHERecHit*> crossedHcalRecHits;
00062 std::vector<const HORecHit*> crossedHORecHits;
00063 std::vector<const CaloTower*> crossedTowers;
00064
00067 std::vector<DetId> crossedEcalIds;
00068 std::vector<DetId> crossedHcalIds;
00069 std::vector<DetId> crossedHOIds;
00070 std::vector<DetId> crossedTowerIds;
00071 std::vector<DetId> crossedPreshowerIds;
00072
00073 std::vector<TAMuonChamberMatch> chambers;
00074
00076 FreeTrajectoryState stateAtIP;
00077
00079 const SimTrack* simTrack;
00080 double ecalTrueEnergy;
00081 double hcalTrueEnergy;
00082 double hcalTrueEnergyCorrected;
00083
00086 reco::TrackRef trackRef_;
00087 SimTrackRef simTrackRef_;
00088
00089 double ecalCrossedEnergy();
00090 double ecalConeEnergy();
00091 double hcalCrossedEnergy();
00092 double hcalConeEnergy();
00093 double hoCrossedEnergy();
00094 double hoConeEnergy();
00095
00096 double ecalTowerEnergy() { return crossedEnergy(TowerEcal); }
00097 double ecalTowerConeEnergy() { return coneEnergy(999,TowerEcal); }
00098 double hcalTowerEnergy() { return crossedEnergy(TowerHcal); }
00099 double hcalTowerConeEnergy() { return coneEnergy(999, TowerHcal); }
00100 double hoTowerEnergy() { return crossedEnergy(TowerHO); }
00101 double hoTowerConeEnergy() { return coneEnergy(999, TowerHO); }
00102
00103 double ecalEnergy() { return ecalCrossedEnergy(); }
00104 double hcalEnergy() { return hcalCrossedEnergy(); }
00105 double hoEnergy() { return hoCrossedEnergy(); }
00106
00107 int numberOfSegments() const;
00108 int numberOfSegmentsInStation(int station) const;
00109 int numberOfSegmentsInStation(int station, int detector) const;
00110 int numberOfSegmentsInDetector(int detector) const;
00111
00112 void setCaloGeometry( edm::ESHandle<CaloGeometry> geometry ) { caloGeometry = geometry; }
00113 GlobalPoint getPosition( const DetId& );
00114 std::string dumpGeometry( const DetId& );
00115 private:
00116 bool insideCone(const DetId&, const double);
00117 edm::ESHandle<CaloGeometry> caloGeometry;
00118 };
00119 #endif