Go to the documentation of this file.00001 #ifndef TCTauAlgorithm_H
00002 #define TCTauAlgorithm_H
00003
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015
00016 #include "TLorentzVector.h"
00017 #include "DataFormats/TauReco/interface/CaloTau.h"
00018 #include "DataFormats/JetReco/interface/CaloJet.h"
00019
00020
00021
00022 #include "FWCore/Framework/interface/Event.h"
00023
00024 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
00025 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
00026
00027 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00028 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
00029 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00030
00031 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00032 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00033 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00034 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00035 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
00036 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h"
00037
00038 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00039
00040 #include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h"
00041
00042
00043 #include "Math/VectorUtil.h"
00044
00045 class TCTauAlgorithm {
00046 public:
00047 enum {TCAlgoUndetermined,
00048 TCAlgoMomentum,
00049 TCAlgoTrackProblem,
00050 TCAlgoMomentumECAL,
00051 TCAlgoCaloJet,
00052 TCAlgoHadronicJet};
00053
00054 public:
00055 TCTauAlgorithm();
00056 TCTauAlgorithm(const edm::ParameterSet&);
00057 ~TCTauAlgorithm();
00058
00059 math::XYZTLorentzVector recalculateEnergy(const reco::CaloTau&);
00060 math::XYZTLorentzVector recalculateEnergy(const reco::CaloJet&,const reco::TrackRef&,const reco::TrackRefVector&);
00061
00062 void inputConfig(const edm::ParameterSet& iConfig);
00063 void eventSetup(const edm::Event&,const edm::EventSetup&);
00064
00065 double efficiency();
00066 int allTauCandidates();
00067 int statistics();
00068 int algoComponent();
00069
00070 private:
00071
00072 const edm::Event *event;
00073 const edm::EventSetup *setup;
00074 TrackAssociatorParameters trackAssociatorParameters;
00075 TrackDetectorAssociator* trackAssociator;
00076
00077
00078 void init();
00079
00080 math::XYZVector trackEcalHitPoint(const reco::TransientTrack&,const reco::CaloJet&);
00081 math::XYZVector trackEcalHitPoint(const reco::Track&);
00082 std::pair<math::XYZVector,math::XYZVector> getClusterEnergy(const reco::CaloJet&,math::XYZVector&,double);
00083 math::XYZVector getCellMomentum(const CaloCellGeometry*,double&);
00084
00085
00086 int all,
00087 passed;
00088
00089 int algoComponentUsed;
00090
00091 int prongs;
00092
00093 bool dropCaloJets;
00094 bool dropRejected;
00095
00096 const TransientTrackBuilder* transientTrackBuilder;
00097
00098 double signalCone;
00099 double ecalCone;
00100
00101 double etCaloOverTrackMin,
00102 etCaloOverTrackMax,
00103 etHcalOverTrackMin,
00104 etHcalOverTrackMax;
00105
00106 edm::InputTag EcalRecHitsEB_input;
00107 edm::InputTag EcalRecHitsEE_input;
00108 edm::InputTag HBHERecHits_input;
00109 edm::InputTag HORecHits_input;
00110 edm::InputTag HFRecHits_input;
00111
00112 const CaloSubdetectorGeometry* EB;
00113 const CaloSubdetectorGeometry* EE;
00114 const CaloSubdetectorGeometry* HB;
00115 const CaloSubdetectorGeometry* HE;
00116 const CaloSubdetectorGeometry* HO;
00117 const CaloSubdetectorGeometry* HF;
00118
00119 edm::Handle<EBRecHitCollection> EBRecHits;
00120 edm::Handle<EERecHitCollection> EERecHits;
00121
00122 edm::Handle<HBHERecHitCollection> HBHERecHits;
00123 edm::Handle<HORecHitCollection> HORecHits;
00124 edm::Handle<HFRecHitCollection> HFRecHits;
00125 };
00126 #endif
00127
00128