Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00016 #ifndef hcalCalib_h
00017 #define hcalCalib_h
00018
00019 #include <vector>
00020 #include <map>
00021
00022 #include <TROOT.h>
00023 #include <TChain.h>
00024 #include <TFile.h>
00025 #include <TSelector.h>
00026 #include <TROOT.h>
00027 #include <TChain.h>
00028 #include <TFile.h>
00029 #include <TSelector.h>
00030
00031 #include "TLorentzVector.h"
00032 #include "TClonesArray.h"
00033 #include "TRefArray.h"
00034
00035
00036 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00037 #include "Geometry/CaloTopology/interface/HcalTopology.h"
00038
00039
00040 class hcalCalib : public TSelector {
00041 public :
00042 TTree *fChain;
00043
00044 UInt_t eventNumber;
00045 UInt_t runNumber;
00046 Int_t iEtaHit;
00047 UInt_t iPhiHit;
00048 TClonesArray *cells;
00049 Float_t emEnergy;
00050 Float_t targetE;
00051 Float_t etVetoJet;
00052
00053 Float_t xTrkHcal;
00054 Float_t yTrkHcal;
00055 Float_t zTrkHcal;
00056 Float_t xTrkEcal;
00057 Float_t yTrkEcal;
00058 Float_t zTrkEcal;
00059
00060 TLorentzVector *tagJetP4;
00061 TLorentzVector *probeJetP4;
00062
00063 Float_t tagJetEmFrac;
00064 Float_t probeJetEmFrac;
00065
00066
00067 TBranch *b_eventNumber;
00068 TBranch *b_runNumber;
00069 TBranch *b_iEtaHit;
00070 TBranch *b_iPhiHit;
00071 TBranch *b_cells;
00072 TBranch *b_emEnergy;
00073 TBranch *b_targetE;
00074 TBranch *b_etVetoJet;
00075
00076 TBranch *b_xTrkHcal;
00077 TBranch *b_yTrkHcal;
00078 TBranch *b_zTrkHcal;
00079 TBranch *b_xTrkEcal;
00080 TBranch *b_yTrkEcal;
00081 TBranch *b_zTrkEcal;
00082
00083 TBranch *b_tagJetEmFrac;
00084 TBranch *b_probeJetEmFrac;
00085
00086 TBranch *b_tagJetP4;
00087 TBranch *b_probeJetP4;
00088
00089
00090 hcalCalib(TTree * =0) { }
00091 virtual ~hcalCalib() { }
00092 virtual Int_t Version() const { return 2; }
00093 virtual void Begin(TTree *tree);
00094
00095 virtual void Init(TTree *tree);
00096 virtual Bool_t Notify();
00097 virtual Bool_t Process(Long64_t entry);
00098 virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; }
00099 virtual void SetOption(const char *option) { fOption = option; }
00100 virtual void SetObject(TObject *obj) { fObject = obj; }
00101 virtual void SetInputList(TList *input) { fInput = input; }
00102 virtual TList *GetOutputList() const { return fOutput; }
00103
00104 virtual void Terminate();
00105
00106
00107 Float_t MIN_TARGET_E;
00108 Float_t MAX_TARGET_E;
00109
00110 Float_t MIN_CELL_E;
00111 Float_t MIN_EOVERP;
00112 Float_t MAX_EOVERP;
00113 Float_t MAX_TRK_EME;
00114
00115 Float_t MAX_ET_THIRD_JET;
00116 Float_t MIN_DPHI_DIJETS;
00117
00118 Bool_t SUM_DEPTHS;
00119 Bool_t SUM_SMALL_DEPTHS;
00120 Bool_t COMBINE_PHI;
00121
00122 Int_t HB_CLUSTER_SIZE;
00123 Int_t HE_CLUSTER_SIZE;
00124
00125 Bool_t USE_CONE_CLUSTERING;
00126 Float_t MAX_CONE_DIST;
00127
00128 Int_t CALIB_ABS_IETA_MAX;
00129 Int_t CALIB_ABS_IETA_MIN;
00130
00131 Float_t MAX_PROBEJET_EMFRAC;
00132 Float_t MAX_TAGJET_EMFRAC;
00133 Float_t MAX_TAGJET_ABSETA;
00134 Float_t MIN_TAGJET_ET;
00135
00136 Float_t MIN_PROBEJET_ABSETA;
00137
00138 TString CALIB_TYPE;
00139 TString CALIB_METHOD;
00140
00141 TString PHI_SYM_COR_FILENAME;
00142 Bool_t APPLY_PHI_SYM_COR_FLAG;
00143
00144 TString OUTPUT_COR_COEF_FILENAME;
00145 TString HISTO_FILENAME;
00146
00147
00148 const CaloGeometry* theCaloGeometry;
00149 const HcalTopology* topo_;
00150
00151
00152 void SetMinTargetE(Float_t e) { MIN_TARGET_E = e; }
00153 void SetMaxTargetE(Float_t e) { MAX_TARGET_E = e; }
00154 void SetSumDepthsFlag(Bool_t b) { SUM_DEPTHS = b; }
00155 void SetSumSmallDepthsFlag(Bool_t b) { SUM_SMALL_DEPTHS = b; }
00156 void SetCombinePhiFlag(Bool_t b) { COMBINE_PHI = b; }
00157 void SetMinCellE(Float_t e) { MIN_CELL_E = e; }
00158 void SetMinEOverP(Float_t e) { MIN_EOVERP = e; }
00159 void SetMaxEOverP(Float_t e) { MAX_EOVERP = e; }
00160 void SetMaxTrkEmE(Float_t e) { MAX_TRK_EME = e; }
00161 void SetCalibType(TString s) { CALIB_TYPE = s; }
00162 void SetCalibMethod(TString s) { CALIB_METHOD = s; }
00163 void SetHbClusterSize(Int_t i) { HB_CLUSTER_SIZE = i; }
00164 void SetHeClusterSize(Int_t i) { HE_CLUSTER_SIZE = i; }
00165
00166 void SetUseConeClustering (Bool_t b) { USE_CONE_CLUSTERING = b; }
00167 void SetConeMaxDist(Float_t d) { MAX_CONE_DIST = d; }
00168
00169 void SetCalibAbsIEtaMax(Int_t i) { CALIB_ABS_IETA_MAX = i; }
00170 void SetCalibAbsIEtaMin(Int_t i) { CALIB_ABS_IETA_MIN = i; }
00171 void SetMaxEtThirdJet(Float_t et) { MAX_ET_THIRD_JET = et; }
00172 void SetMinDPhiDiJets(Float_t dphi) { MIN_DPHI_DIJETS = dphi; }
00173 void SetApplyPhiSymCorFlag(Bool_t b) { APPLY_PHI_SYM_COR_FLAG = b; }
00174 void SetPhiSymCorFileName(TString filename) { PHI_SYM_COR_FILENAME = filename; }
00175 void SetMaxProbeJetEmFrac(Float_t f) { MAX_PROBEJET_EMFRAC = f; }
00176 void SetMaxTagJetEmFrac(Float_t f) { MAX_TAGJET_EMFRAC = f; }
00177 void SetMaxTagJetAbsEta(Float_t e) { MAX_TAGJET_ABSETA = e; }
00178 void SetMinTagJetEt(Float_t e) { MIN_TAGJET_ET = e; }
00179 void SetMinProbeJetAbsEta(Float_t e) { MIN_PROBEJET_ABSETA = e; }
00180 void SetOutputCorCoefFileName(TString filename) { OUTPUT_COR_COEF_FILENAME = filename; }
00181 void SetHistoFileName(TString filename) { HISTO_FILENAME = filename; }
00182
00183
00184 void SetCaloGeometry (const CaloGeometry* g, const HcalTopology* topo) { theCaloGeometry = g; topo_=topo; }
00185
00186 void GetCoefFromMtrxInvOfAve();
00187
00188 Bool_t ReadPhiSymCor();
00189
00190 void makeTextFile();
00191
00192
00193
00194 std::vector< std::vector<Float_t> > cellEnergies;
00195 std::vector< std::vector<UInt_t> > cellIds;
00196 std::vector< std::pair<Int_t, UInt_t> > refIEtaIPhi;
00197 std::vector< Float_t> targetEnergies;
00198
00199 std::map<UInt_t, Float_t> phiSymCor;
00200
00201 std::map<UInt_t, Float_t> solution;
00202 std::map<Int_t, Float_t> iEtaCoefMap;
00203
00204
00205
00206
00207 };
00208
00209 #endif
00210
00211 #ifdef hcalCalib_cxx
00212 void hcalCalib::Init(TTree *tree)
00213 {
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 cells = 0;
00224 tagJetP4 = 0;
00225 probeJetP4 = 0;
00226
00227
00228 if (!tree) return;
00229 fChain = tree;
00230
00231
00232
00233 fChain->SetBranchAddress("eventNumber", &eventNumber, &b_eventNumber);
00234 fChain->SetBranchAddress("runNumber", &runNumber, &b_runNumber);
00235 fChain->SetBranchAddress("iEtaHit", &iEtaHit, &b_iEtaHit);
00236 fChain->SetBranchAddress("iPhiHit", &iPhiHit, &b_iPhiHit);
00237 fChain->SetBranchAddress("cells", &cells, &b_cells);
00238 fChain->SetBranchAddress("emEnergy", &emEnergy, &b_emEnergy);
00239 fChain->SetBranchAddress("targetE", &targetE, &b_targetE);
00240 fChain->SetBranchAddress("etVetoJet", &etVetoJet, &b_etVetoJet);
00241
00242 fChain->SetBranchAddress("xTrkHcal", &xTrkHcal, &b_xTrkHcal);
00243 fChain->SetBranchAddress("yTrkHcal", &yTrkHcal, &b_yTrkHcal);
00244 fChain->SetBranchAddress("zTrkHcal", &zTrkHcal, &b_zTrkHcal);
00245 fChain->SetBranchAddress("xTrkEcal", &xTrkEcal, &b_xTrkEcal);
00246 fChain->SetBranchAddress("yTrkEcal", &yTrkEcal, &b_yTrkEcal);
00247 fChain->SetBranchAddress("zTrkEcal", &zTrkEcal, &b_zTrkEcal);
00248
00249 fChain->SetBranchAddress("tagJetEmFrac", &tagJetEmFrac, &b_tagJetEmFrac);
00250 fChain->SetBranchAddress("probeJetEmFrac", &probeJetEmFrac, &b_probeJetEmFrac);
00251
00252 fChain->SetBranchAddress("tagJetP4", &tagJetP4, &b_tagJetP4);
00253 fChain->SetBranchAddress("probeJetP4", &probeJetP4, &b_probeJetP4);
00254
00255
00256
00257 }
00258
00259 Bool_t hcalCalib::Notify()
00260 {
00261
00262
00263
00264
00265
00266
00267 return kTRUE;
00268 }
00269
00270 #endif // #ifdef hcalCalib_cxx