00001 #ifndef HardTauAlgorithm_H 00002 #define HardTauAlgorithm_H 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 00006 #include "TLorentzVector.h" 00007 #include "DataFormats/TauReco/interface/CaloTau.h" 00008 #include "DataFormats/JetReco/interface/CaloJet.h" 00009 #include "DataFormats/JetReco/interface/Jet.h" 00010 #include "DataFormats/BTauReco/interface/IsolatedTauTagInfo.h" 00011 00012 #include "FWCore/Framework/interface/Event.h" 00013 00014 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" 00015 #include "TrackingTools/Records/interface/TransientTrackRecord.h" 00016 00017 #include "Geometry/CaloGeometry/interface/CaloGeometry.h" 00018 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" 00019 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00020 00021 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" 00022 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" 00023 #include "DataFormats/EcalDetId/interface/EBDetId.h" 00024 #include "DataFormats/EcalDetId/interface/EEDetId.h" 00025 #include "DataFormats/HcalDetId/interface/HcalDetId.h" 00026 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h" 00027 00028 #include "DataFormats/VertexReco/interface/VertexFwd.h" 00029 00030 #include "Math/VectorUtil.h" 00031 00032 using namespace ROOT::Math; 00033 using namespace std; 00034 using namespace reco; 00035 using namespace edm; 00036 00037 class HardTauAlgorithm { 00038 00039 public: 00040 HardTauAlgorithm(); 00041 HardTauAlgorithm(const edm::ParameterSet&); 00042 ~HardTauAlgorithm(); 00043 00044 TLorentzVector recalculateEnergy(const reco::CaloTau&); 00045 TLorentzVector recalculateEnergy(const reco::CaloJet&); 00046 TLorentzVector recalculateEnergy(const reco::Jet&); 00047 TLorentzVector recalculateEnergy(const reco::IsolatedTauTagInfo&); 00048 TLorentzVector recalculateEnergy(const reco::CaloJet&,const TrackRef&,const TrackRefVector&); 00049 00050 void inputConfig(const edm::ParameterSet& iConfig); 00051 void eventSetup(const edm::Event&,const edm::EventSetup&); 00052 00053 double efficiency(); 00054 00055 private: 00056 void init(); 00057 00058 XYZVector trackEcalHitPoint(const TransientTrack&,const CaloJet&); 00059 pair<XYZVector,XYZVector> getClusterEnergy(const CaloJet&,XYZVector&,double); 00060 XYZVector getCellMomentum(const CaloCellGeometry*,double&); 00061 00062 00063 int all, 00064 passed; 00065 00066 int prongs; 00067 00068 const TransientTrackBuilder* transientTrackBuilder; 00069 00070 double signalCone; 00071 double ecalCone; 00072 double matchingCone; 00073 double tkptmin; 00074 double tkmaxipt; 00075 double tkmaxChi2; 00076 int tkminPixelHitsn; 00077 int tkminTrackerHitsn; 00078 00079 double etCaloOverTrackMin, 00080 etCaloOverTrackMax, 00081 etHcalOverTrackMin, 00082 etHcalOverTrackMax; 00083 00084 InputTag trackInput; 00085 InputTag vertexInput; 00086 00087 InputTag EcalRecHitsEB_input; 00088 InputTag EcalRecHitsEE_input; 00089 InputTag HBHERecHits_input; 00090 InputTag HORecHits_input; 00091 InputTag HFRecHits_input; 00092 00093 const CaloSubdetectorGeometry* EB; 00094 const CaloSubdetectorGeometry* EE; 00095 const CaloSubdetectorGeometry* HB; 00096 const CaloSubdetectorGeometry* HE; 00097 const CaloSubdetectorGeometry* HO; 00098 const CaloSubdetectorGeometry* HF; 00099 00100 Handle<EBRecHitCollection> EBRecHits; 00101 Handle<EERecHitCollection> EERecHits; 00102 00103 Handle<HBHERecHitCollection> HBHERecHits; 00104 Handle<HORecHitCollection> HORecHits; 00105 Handle<HFRecHitCollection> HFRecHits; 00106 00107 Handle<TrackCollection> tracks; 00108 Handle<VertexCollection> thePVs; 00109 }; 00110 #endif 00111 00112