File indexing completed on 2023-03-17 11:26:32
0001 #ifndef TrackAssociator_TrackDetMatchInfo_h
0002 #define TrackAssociator_TrackDetMatchInfo_h
0003
0004 #include "DataFormats/CaloTowers/interface/CaloTower.h"
0005 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
0006 #include "DataFormats/HcalRecHit/interface/HBHERecHit.h"
0007 #include "DataFormats/HcalRecHit/interface/HORecHit.h"
0008 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0009 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0010 #include "TrackingTools/TrackAssociator/interface/TAMuonChamberMatch.h"
0011 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0012 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0013 class TrackDetMatchInfo {
0014 public:
0015 enum EnergyType { EcalRecHits, HcalRecHits, HORecHits, TowerTotal, TowerEcal, TowerHcal, TowerHO };
0016
0017 TrackDetMatchInfo();
0018
0019
0020 double crossedEnergy(EnergyType);
0021
0022
0023
0024 double coneEnergy(double dR, EnergyType);
0025
0026
0027 double nXnEnergy(const DetId&, EnergyType, int gridSize = 1);
0028
0029
0030 double nXnEnergy(EnergyType, int gridSize = 1);
0031
0032
0033 DetId findMaxDeposition(EnergyType);
0034 DetId findMaxDeposition(EnergyType, int gridSize);
0035 DetId findMaxDeposition(const DetId&, EnergyType, int gridSize);
0036
0037
0038 math::XYZPoint trkGlobPosAtEcal;
0039 math::XYZPoint trkGlobPosAtHcal;
0040 math::XYZPoint trkGlobPosAtHO;
0041
0042 GlobalVector trkMomAtEcal;
0043 GlobalVector trkMomAtHcal;
0044 GlobalVector trkMomAtHO;
0045
0046 bool isGoodEcal;
0047 bool isGoodHcal;
0048 bool isGoodCalo;
0049 bool isGoodHO;
0050 bool isGoodMuon;
0051
0052
0053 std::vector<const EcalRecHit*> ecalRecHits;
0054 std::vector<const HBHERecHit*> hcalRecHits;
0055 std::vector<const HORecHit*> hoRecHits;
0056 std::vector<const CaloTower*> towers;
0057
0058
0059 std::vector<const EcalRecHit*> crossedEcalRecHits;
0060 std::vector<const HBHERecHit*> crossedHcalRecHits;
0061 std::vector<const HORecHit*> crossedHORecHits;
0062 std::vector<const CaloTower*> crossedTowers;
0063
0064
0065
0066 std::vector<DetId> crossedEcalIds;
0067 std::vector<DetId> crossedHcalIds;
0068 std::vector<DetId> crossedHOIds;
0069 std::vector<DetId> crossedTowerIds;
0070 std::vector<DetId> crossedPreshowerIds;
0071
0072 std::vector<TAMuonChamberMatch> chambers;
0073
0074
0075 FreeTrajectoryState stateAtIP;
0076
0077
0078 const SimTrack* simTrack;
0079 double ecalTrueEnergy;
0080 double hcalTrueEnergy;
0081 double hcalTrueEnergyCorrected;
0082
0083
0084
0085 reco::TrackRef trackRef_;
0086 SimTrackRef simTrackRef_;
0087
0088 double ecalCrossedEnergy();
0089 double ecalConeEnergy();
0090 double hcalCrossedEnergy();
0091 double hcalConeEnergy();
0092 double hoCrossedEnergy();
0093 double hoConeEnergy();
0094
0095 double ecalTowerEnergy() { return crossedEnergy(TowerEcal); }
0096 double ecalTowerConeEnergy() { return coneEnergy(999, TowerEcal); }
0097 double hcalTowerEnergy() { return crossedEnergy(TowerHcal); }
0098 double hcalTowerConeEnergy() { return coneEnergy(999, TowerHcal); }
0099 double hoTowerEnergy() { return crossedEnergy(TowerHO); }
0100 double hoTowerConeEnergy() { return coneEnergy(999, TowerHO); }
0101
0102 double ecalEnergy() { return ecalCrossedEnergy(); }
0103 double hcalEnergy() { return hcalCrossedEnergy(); }
0104 double hoEnergy() { return hoCrossedEnergy(); }
0105
0106 int numberOfSegments() const;
0107 int numberOfSegmentsInStation(int station) const;
0108 int numberOfSegmentsInStation(int station, int detector) const;
0109 int numberOfSegmentsInDetector(int detector) const;
0110
0111 void setCaloGeometry(const CaloGeometry* geometry) { caloGeometry = geometry; }
0112 GlobalPoint getPosition(const DetId&);
0113 std::string dumpGeometry(const DetId&);
0114
0115 private:
0116 bool insideCone(const DetId&, const double);
0117 const CaloGeometry* caloGeometry;
0118 };
0119 #endif