/ElectroWeakAnalysis/ZEE/macros/PerformAnalysis.cpp

https://github.com/aivanov-cern/cmssw · C++ · 628 lines · 507 code · 62 blank · 59 comment · 51 complexity · 3a0d0be621e118257920558a34169e39 MD5 · raw file

  1. #include "TROOT.h"
  2. #include "TFile.h"
  3. #include "TTree.h"
  4. #include "TH1.h"
  5. #include "TF1.h"
  6. #include "TRandom3.h"
  7. #include "TString.h"
  8. #include <cmath>
  9. #include <iostream>
  10. #include <fstream>
  11. using namespace std;
  12. void PerformAnalysis(TString process, double eventweight, TString datapath)//, ofstream& results) //int main()
  13. {
  14. cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl;
  15. cout << "\% " << "Perform Analysis" << endl;
  16. cout << "\% " << process << endl;
  17. cout << "\% " << "Event Weight = " << eventweight << endl;
  18. cout << "\% " << "Data Path = " << datapath << endl;
  19. cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl;
  20. // Declare electron cut value variables
  21. double cMEt = 30.;
  22. double cPt = 30.;
  23. double cECALiso_EB = 4.2, cECALiso_EE = 3.4;
  24. double cHCALiso_EB = 2.0, cHCALiso_EE = 1.3;
  25. double cTrackiso_EB = 2.2, cTrackiso_EE = 1.1;
  26. double cDeltaEta_EB = 0.0040, cDeltaEta_EE = 0.0066;
  27. double cDeltaPhi_EB = 0.025, cDeltaPhi_EE = 0.020;
  28. double csIhIh_EB = 0.0099, csIhIh_EE = 0.0280;
  29. // Declare neutrino cut value variables
  30. double cHCAL = 6.2;
  31. double cHCALEt = 12;
  32. double cf1x5 = 0.83, cf2x5 = 0.93;
  33. int celecmatch = 0;
  34. double cnusIhIh = 0.027;
  35. cout << "Cut Values:" << endl;
  36. cout << "MEt cut " << cMEt << endl;
  37. cout << "Electron selection cuts:" << endl;
  38. cout << "Pt cut " << cPt << endl;
  39. cout << "ECAL Isolation cut (EB) " << cECALiso_EB << endl;
  40. cout << "ECAL Isolation cut (EE) " << cECALiso_EE << endl;
  41. cout << "HCAL Isolation cut (EB) " << cHCALiso_EB << endl;
  42. cout << "HCAL Isolation cut (EE) " << cHCALiso_EE << endl;
  43. cout << "Track Isolation cut (EB) " << cTrackiso_EB << endl;
  44. cout << "Track Isolation cut (EE) " << cTrackiso_EE << endl;
  45. cout << "Delta Eta cut (EB) " << cDeltaEta_EB << endl;
  46. cout << "Delta Eta cut (EE) " << cDeltaEta_EE << endl;
  47. cout << "Delta Phi cut (EB) " << cDeltaPhi_EB << endl;
  48. cout << "Delta Phi cut (EE) " << cDeltaPhi_EE << endl;
  49. cout << "Sigma iEta iEta cut (EB) " << csIhIh_EB << endl;
  50. cout << "Sigma iEta iEta cut (EE) " << csIhIh_EE << endl;
  51. cout << "Probe selection cuts:" << endl;
  52. cout << "HCAL Energy cut " << cHCAL << endl;
  53. cout << "HCAL Transverse Energy cut " << cHCALEt << endl;
  54. cout << "Fraction of energy in 1x5 cut " << cf1x5 << endl;
  55. cout << "Fraction of energy in 2x5 cut " << cf2x5 << endl;
  56. cout << "Require electron match " << celecmatch << endl;
  57. cout << "Sigma iEta iEta cut " << cnusIhIh << endl;
  58. cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%\%" << endl;
  59. // Import probe selection efficiency weights
  60. double nueff[345];
  61. ifstream weightsin;
  62. weightsin.open("EtaWeights.txt", ifstream::in);
  63. for(int eta=0; eta < 345; ++eta)
  64. {
  65. double weight;
  66. weightsin >> weight;
  67. //cout << eta << "\t" << weight << endl;
  68. nueff[eta] = weight;
  69. }
  70. weightsin.close();
  71. cout << "Imported probe selection efficiencies" << endl;
  72. TString OutFileName = process+".root";
  73. TFile* outfile = TFile::Open(OutFileName, "recreate");
  74. cout << "Created output file \"" << OutFileName << "\"" << endl;
  75. TH1F* h_dataWMEt_pass_EB = new TH1F("dataWMEt_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  76. TH1F* h_dataWMEt_pass_EE = new TH1F("dataWMEt_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  77. TH1F* h_dataWMEt_fail_EB = new TH1F("dataWMEt_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  78. TH1F* h_dataWMEt_fail_EE = new TH1F("dataWMEt_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  79. TH1F* h_mcWMEtin_pass_EB = new TH1F("mcWMEtin_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  80. TH1F* h_mcWMEtin_pass_EE = new TH1F("mcWMEtin_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  81. TH1F* h_mcWMEtin_fail_EB = new TH1F("mcWMEtin_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  82. TH1F* h_mcWMEtin_fail_EE = new TH1F("mcWMEtin_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  83. TH1F* h_mcWMEtout_pass_EB = new TH1F("mcWMEtout_pass_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  84. TH1F* h_mcWMEtout_pass_EE = new TH1F("mcWMEtout_pass_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  85. TH1F* h_mcWMEtout_fail_EB = new TH1F("mcWMEtout_fail_EB","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  86. TH1F* h_mcWMEtout_fail_EE = new TH1F("mcWMEtout_fail_EE","W#rightarrow e#nu MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  87. TH1F* h_ErsatzMEt_pass_EB = new TH1F("ErsatzMEt_pass_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  88. TH1F* h_ErsatzMEt_pass_EE = new TH1F("ErsatzMEt_pass_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  89. TH1F* h_ErsatzMEt_fail_EB = new TH1F("ErsatzMEt_fail_EB","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  90. TH1F* h_ErsatzMEt_fail_EE = new TH1F("ErsatzMEt_fail_EE","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  91. TH1F* h_ErsatzMEt_probept = new TH1F("ErsatzMEt_probept","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  92. TH1F* h_ErsatzMEt_uncorr = new TH1F("ErsatzMEt_uncorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  93. TH1F* h_ErsatzMEt_fetacorr = new TH1F("ErsatzMEt_fetacorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  94. TH1F* h_ErsatzMEt_fbremcorr = new TH1F("ErsatzMEt_fbremcorr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  95. TH1F* h_ErsatzMEt_pass_EB_peakfit = new TH1F("ErsatzMEt_pass_EB_peakfit","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  96. TH1F* h_ErsatzMEt_pass_EE_peakfit = new TH1F("ErsatzMEt_pass_EE_peakfit","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  97. TH1F* h_WMEt_pass_EB_peakfit = new TH1F("WMEt_pass_EB_peakfit","W MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  98. TH1F* h_WMEt_pass_EE_peakfit = new TH1F("WMEt_pass_EE_peakfit","W MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  99. TH1F* h_ErsatzMEt_pass_EB_shifted = new TH1F("ErsatzMEt_pass_EB_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  100. TH1F* h_ErsatzMEt_pass_EE_shifted = new TH1F("ErsatzMEt_pass_EE_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  101. TH1F* h_ErsatzMEt_fail_EB_shifted = new TH1F("ErsatzMEt_fail_EB_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  102. TH1F* h_ErsatzMEt_fail_EE_shifted = new TH1F("ErsatzMEt_fail_EE_shifted","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  103. TH1F* h_acceptance_correction_pass_EB = new TH1F("acceptacne_correction_pass_EB", "Acceptance Correction pass EB;#slash{E_{T}};Acceptance Correction", 100, 0., 100.);
  104. TH1F* h_acceptance_correction_pass_EE = new TH1F("acceptacne_correction_pass_EE", "Acceptance Correction pass EE;#slash{E_{T}};Acceptance Correction", 100, 0., 100.);
  105. TH1F* h_acceptance_correction_fail_EB = new TH1F("acceptacne_correction_fail_EB", "Acceptance Correction fail EB;#slash{E_{T}};Acceptance Correction", 100, 0., 100.);
  106. TH1F* h_acceptance_correction_fail_EE = new TH1F("acceptacne_correction_fail_EE", "Acceptance Correction fail EE;#slash{E_{T}};Acceptance Correction", 100, 0., 100.);
  107. TH1F* h_ErsatzMEt_pass_EB_corr = new TH1F("ErsatzMEt_pass_EB_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  108. TH1F* h_ErsatzMEt_pass_EE_corr = new TH1F("ErsatzMEt_pass_EE_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  109. TH1F* h_ErsatzMEt_fail_EB_corr = new TH1F("ErsatzMEt_fail_EB_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  110. TH1F* h_ErsatzMEt_fail_EE_corr = new TH1F("ErsatzMEt_fail_EE_corr","Ersatz MET;#slash{E}_{T} (GeV);Arbitrary Units", 100, 0., 100.);
  111. cout << "Declared Histograms" << endl;
  112. vector<double> ErsatzMEt_pass_EB;
  113. vector<double> ErsatzMEt_pass_EE;
  114. vector<double> ErsatzMEt_fail_EB;
  115. vector<double> ErsatzMEt_fail_EE;
  116. vector<double> Weight_pass_EB;
  117. vector<double> Weight_pass_EE;
  118. vector<double> Weight_fail_EB;
  119. vector<double> Weight_fail_EE;
  120. TRandom3 r;
  121. TString WFileName = datapath+"WenuTrue.root";
  122. TFile *fileW = TFile::Open(WFileName);
  123. cout << "Opened W Monte Carlo file" << endl;
  124. TTree *t = (TTree*) fileW->Get("analyse/AnalysisData");
  125. cout << "Got W TTree" << endl;
  126. long nEntries = t->GetEntriesFast();
  127. cout << "Total number of W events = " << nEntries << endl;
  128. double elec_pt_W[4], elec_eta_W[4];
  129. double elec_trckIso_W[4]/*, elec_EcalIso_W[4], elec_HcalIso_W[4]*/;
  130. double elec_sigIhIh_W[4]/*, elec_dPhi_W[4], elec_dEta_W[4]*/;
  131. double nu_pt_W, nu_eta_W, nu_ECALeta_W, nu_phi_W;
  132. //double McW_pt, McW_phi;
  133. double CaloMEt_W;//, CaloMEt25, CaloMEt30;
  134. //double CaloMt[4];// CaloMt25[4], CaloMt30[4];
  135. // TBranch* bMcW_pt = t->GetBranch("Boson_pt");
  136. // bMcW_pt->SetAddress(&McW_pt);
  137. // TBranch* bMcW_phi = t->GetBranch("Boson_phi");
  138. // bMcW_phi->SetAddress(&McW_phi);
  139. // TBranch* bNSelElecs = t->GetBranch("nSelElecs");
  140. // bNSelElecs->SetAddress(&nSelElecs);
  141. TBranch* bElec_eta = t->GetBranch("elec_eta");
  142. bElec_eta->SetAddress(&elec_eta_W);
  143. TBranch* bElec_pt = t->GetBranch("elec_pt");
  144. bElec_pt->SetAddress(&elec_pt_W);
  145. TBranch* bTag_sIhIh_W = t->GetBranch("elec_sIhIh");
  146. bTag_sIhIh_W->SetAddress(&elec_sigIhIh_W);
  147. //TBranch* bTag_dPhi = t->GetBranch("elec_dPhiIn");
  148. //bTag_dPhi->SetAddress(&elec_dPhi_W);
  149. //TBranch* bTag_dEta = t->GetBranch("elec_dEtaIn");
  150. //bTag_dEta->SetAddress(&elec_dEta_W);
  151. TBranch* bTag_tIso_W = t->GetBranch("elec_isoTrack");
  152. bTag_tIso_W->SetAddress(&elec_trckIso_W);
  153. //TBranch* bTag_eIso = t->GetBranch("elec_isoEcal");
  154. //bTag_eIso->SetAddress(&elec_EcalIso_W);
  155. //TBranch* bTag_hIso = t->GetBranch("elec_isoHcal");
  156. //bTag_hIso->SetAddress(&elec_HcalIso_W);
  157. // TBranch* = t->GetBranch("");
  158. // ->SetAddress(&);
  159. TBranch* bMcNu_pt = t->GetBranch("McNu_pt");
  160. bMcNu_pt->SetAddress(&nu_pt_W);
  161. TBranch* bMcNu_phi = t->GetBranch("McNu_phi");
  162. bMcNu_phi->SetAddress(&nu_phi_W);
  163. TBranch* bMcNu_eta = t->GetBranch("McNu_eta");
  164. bMcNu_eta->SetAddress(&nu_eta_W);
  165. TBranch* bMcNu_ECALeta = t->GetBranch("McNu_ECALeta");
  166. bMcNu_ECALeta->SetAddress(&nu_ECALeta_W);
  167. TBranch* bCalo_MEt = t->GetBranch("caloMEt");
  168. bCalo_MEt->SetAddress(&CaloMEt_W);
  169. // TBranch* bCalo_MEt25 = t->GetBranch("caloMEt25");
  170. // bCalo_MEt25->SetAddress(&CaloMEt25);
  171. // TBranch* bCalo_MEt30 = t->GetBranch("caloMEt30");
  172. // bCalo_MEt30->SetAddress(&CaloMEt30);
  173. // TBranch* bCalo_Mt = t->GetBranch("caloMt");
  174. // bCalo_Mt->SetAddress(&CaloMt);
  175. cout << "Set up branches" << endl;
  176. //long nentries = t->GetEntries();
  177. //int index = 0;
  178. int aaa = 0, bbb = 0, ccc = 0, ddd = 0;
  179. for(long i = 0; i < nEntries; ++i)
  180. {
  181. if(i%100000 == 0) cout <<"Analysing event "<< i << endl;
  182. //if (i == ChosenEvents[index])
  183. //{
  184. //index++;
  185. //bool iIsChosen = (i == ChosenEvents[index]);
  186. t->GetEntry(i);
  187. if(elec_pt_W[0] > cPt)
  188. {
  189. bool pass_e_cuts = false;
  190. bool pass_trkiso_cut = false;
  191. bool inBarrel = false;
  192. bool inEndcap = false;
  193. if(fabs(elec_eta_W[0]) < 1.4442)
  194. {
  195. pass_e_cuts = (elec_sigIhIh_W[0] < csIhIh_EB);
  196. pass_trkiso_cut = (elec_trckIso_W[0] < cTrackiso_EB);
  197. inBarrel = true;
  198. }else if(fabs(elec_eta_W[0]) < 2.5)
  199. {
  200. pass_e_cuts = (elec_sigIhIh_W[0] < csIhIh_EE);
  201. pass_trkiso_cut = (elec_trckIso_W[0] < cTrackiso_EE);
  202. inEndcap = true;
  203. }
  204. if(pass_e_cuts)
  205. {
  206. if(pass_trkiso_cut)
  207. {
  208. if(inBarrel)
  209. {
  210. h_dataWMEt_pass_EB->Fill(CaloMEt_W);
  211. h_WMEt_pass_EB_peakfit->Fill(CaloMEt_W);
  212. aaa++;
  213. if(fabs(nu_eta_W) < 2.5)
  214. {
  215. h_mcWMEtin_pass_EB->Fill(CaloMEt_W);
  216. }else{
  217. h_mcWMEtout_pass_EB->Fill(CaloMEt_W);
  218. }
  219. }
  220. if(inEndcap)
  221. {
  222. h_dataWMEt_pass_EE->Fill(CaloMEt_W);
  223. h_WMEt_pass_EE_peakfit->Fill(CaloMEt_W);
  224. bbb++;
  225. if(fabs(nu_eta_W) < 2.5)
  226. {
  227. h_mcWMEtin_pass_EE->Fill(CaloMEt_W);
  228. }else{
  229. h_mcWMEtout_pass_EE->Fill(CaloMEt_W);
  230. }
  231. }
  232. }else
  233. {
  234. if(inBarrel)
  235. {
  236. h_dataWMEt_fail_EB->Fill(CaloMEt_W);
  237. ccc++;
  238. if(fabs(nu_eta_W) < 2.5)
  239. {
  240. h_mcWMEtin_fail_EB->Fill(CaloMEt_W);
  241. }else{
  242. h_mcWMEtout_fail_EB->Fill(CaloMEt_W);
  243. }
  244. }
  245. if(inEndcap)
  246. {
  247. h_dataWMEt_fail_EE->Fill(CaloMEt_W);
  248. ddd++;
  249. if(fabs(nu_eta_W) < 2.5)
  250. {
  251. h_mcWMEtin_fail_EE->Fill(CaloMEt_W);
  252. }else{
  253. h_mcWMEtout_fail_EE->Fill(CaloMEt_W);
  254. }
  255. }
  256. }
  257. }
  258. }
  259. }
  260. fileW->Close();
  261. cout << "Closed W Monte Carlo file" << endl;
  262. cout << "Number of W events passing selection cuts = " << aaa+bbb+ccc+ddd << endl;
  263. cout << "Number Pass EB = " << aaa << endl;
  264. cout << "Number Pass EE = " << bbb << endl;
  265. cout << "Number Fail EB = " << ccc << endl;
  266. cout << "Number Fail EE = " << ddd << endl;
  267. TString ErsatzFileName = datapath+process+".root";
  268. TFile *fileZ = TFile::Open(ErsatzFileName);
  269. cout << "Opened Ersatz data file" << endl;
  270. t = (TTree*) fileZ->Get("ErsatzMEt/ErsatzMEt");
  271. cout << "Got ersatz TTree" << endl;
  272. nEntries = t->GetEntries();
  273. cout << "Total number of ersatz events = " << nEntries << endl;
  274. int nErNu;
  275. double tag_pt[4], tag_eta[4], tag_phi[4], probe_pt[4], probe_eta[4], probe_phi[4];
  276. double ErsatzV1MEt[4], ErsatzV1aMEt[4], ErsatzV1bMEt[4];
  277. double elec_trkIso[4], elec_ECALIso[4], elec_HCALIso[4];
  278. double elec_sigIhIh[4], elec_dPhi[4], elec_dEta[4];
  279. double tag_rescPt[4], mesc[4];
  280. double nu_e1x5[4], nu_e2x5[4], nu_e5x5[4], nu_sigIhIh[4];
  281. double nu_HCALEt[4], nu_HCAL[4], nu_trckIso[4];
  282. double caloMEt;
  283. //int nu_elec[4];
  284. TBranch* bNum_ErNu = t->GetBranch("nProbes");
  285. bNum_ErNu->SetAddress(&nErNu);
  286. //W selected electron properties
  287. TBranch* bTag_eta = t->GetBranch("tag_eta");
  288. bTag_eta->SetAddress(&tag_eta);
  289. TBranch* bTag_pt = t->GetBranch("tag_pt");
  290. bTag_pt->SetAddress(&tag_pt);
  291. TBranch* bTag_phi = t->GetBranch("tag_phi");
  292. bTag_phi->SetAddress(&tag_phi);
  293. TBranch* bTag_rescPt = t->GetBranch("tag_rescPt");
  294. bTag_rescPt->SetAddress(&tag_rescPt);
  295. // TBranch* = t->GetBranch("");
  296. // ->SetAddress(&);
  297. TBranch* bTag_sIhIh = t->GetBranch("tag_sIhIh");
  298. bTag_sIhIh->SetAddress(&elec_sigIhIh);
  299. TBranch* bTag_dPhi = t->GetBranch("tag_dPhiIn");
  300. bTag_dPhi->SetAddress(&elec_dPhi);
  301. TBranch* bTag_dEta = t->GetBranch("tag_dEtaIn");
  302. bTag_dEta->SetAddress(&elec_dEta);
  303. TBranch* bTag_tIso = t->GetBranch("tag_isoTrack");
  304. bTag_tIso->SetAddress(&elec_trkIso);
  305. TBranch* bTag_eIso = t->GetBranch("tag_isoEcal");
  306. bTag_eIso->SetAddress(&elec_ECALIso);
  307. TBranch* bTag_hIso = t->GetBranch("tag_isoHcal");
  308. bTag_hIso->SetAddress(&elec_HCALIso);
  309. //ersatz neutrino properties
  310. TBranch* bProbe_pt = t->GetBranch("probe_pt");
  311. bProbe_pt->SetAddress(&probe_pt);
  312. TBranch* bProbe_eta = t->GetBranch("probe_eta");
  313. bProbe_eta->SetAddress(&probe_eta);
  314. TBranch* bProbe_phi = t->GetBranch("probe_phi");
  315. bProbe_phi->SetAddress(&probe_phi);
  316. //TBranch* bProbe_elec = t->GetBranch("probe_elecMatch");
  317. //bProbe_elec->SetAddress(&nu_elec);
  318. TBranch* bProbe_trckIso = t->GetBranch("probe_isoTrack");
  319. bProbe_trckIso->SetAddress(&nu_trckIso);
  320. //TBranch* bProbe_ECALIso = t->GetBranch("probe_isoECAL");
  321. //bProbe_ECALIso->SetAddress(&nu_ECALIso);
  322. //TBranch* bProbe_HCALIso = t->GetBranch("probe_isoHCAL");
  323. //bProbe_HCALIso->SetAddress(&nu_HCALIso);
  324. TBranch* bProbe_sIhIh = t->GetBranch("probe_sIhIh");
  325. bProbe_sIhIh->SetAddress(&nu_sigIhIh);
  326. //TBranch* bProbe_DeltaEta = t->GetBranch("probe_DeltaEta");
  327. //bProbe_DeltaEta->SetAddress(&nu_DeltaEta);
  328. //TBranch* bProbe_DeltaPhiIso = t->GetBranch("probe_DeltaPhi");
  329. //bProbe_DeltaPhi->SetAddress(&nu_DeltaPhi);
  330. TBranch* bProbe_e1x5 = t->GetBranch("probe_e1x5Max");
  331. bProbe_e1x5->SetAddress(&nu_e1x5);
  332. TBranch* bProbe_e2x5 = t->GetBranch("probe_e2x5Max");
  333. bProbe_e2x5->SetAddress(&nu_e2x5);
  334. TBranch* bProbe_e5x5 = t->GetBranch("probe_e5x5");
  335. bProbe_e5x5->SetAddress(&nu_e5x5);
  336. TBranch* bProbe_HCAL = t->GetBranch("probe_HcalE015");
  337. bProbe_HCAL->SetAddress(&nu_HCAL);
  338. TBranch* bProbe_HCALEt = t->GetBranch("probe_HcalEt015");
  339. bProbe_HCALEt->SetAddress(&nu_HCALEt);
  340. //Ersatz MEt results
  341. TBranch* bErsatzV1_MEt = t->GetBranch("ErsatzV1CaloMEt");
  342. bErsatzV1_MEt->SetAddress(&ErsatzV1MEt);
  343. TBranch* bErsatzV1a_MEt = t->GetBranch("ErsatzV1aCaloMEt");
  344. bErsatzV1a_MEt->SetAddress(&ErsatzV1aMEt);
  345. TBranch* bErsatzV1b_MEt = t->GetBranch("ErsatzV1bCaloMEt");
  346. bErsatzV1b_MEt->SetAddress(&ErsatzV1bMEt);
  347. TBranch* bMesc = t->GetBranch("ErsatzV1_Mesc");
  348. bMesc->SetAddress(&mesc);
  349. TBranch* bCaloMEt = t->GetBranch("recoCaloMEt");
  350. bCaloMEt->SetAddress(&caloMEt);
  351. cout << "Set up Branches" << endl;
  352. aaa=0, bbb=0, ccc=0, ddd=0;
  353. for(int i=0; i < nEntries; ++i)
  354. {
  355. if(i%100000 == 0) cout <<"Processing event "<< i << endl;
  356. t->GetEntry(i);
  357. for(int j = 0; j < nErNu; ++j)
  358. {
  359. bool passEtCut = false;
  360. if(tag_rescPt[j] > cPt) passEtCut = true;
  361. /*
  362. if(process == "Zee" || process == "BCtoE_30to80" || process == "BCtoE_80to170"){
  363. if(tag_rescPt[j] > cPt) passEtCut = true;
  364. }else{
  365. if(tag_pt[j] > (91.188/80.398)*cPt) passEtCut = true;
  366. }
  367. */
  368. if(passEtCut)
  369. {
  370. if(fabs(mesc[j]-91.1876) < 21.1876)
  371. {
  372. bool pass_e_cuts = false;
  373. bool pass_trkiso_cut = false;
  374. bool inBarrel = false;
  375. bool inEndcap = false;
  376. if(fabs(tag_eta[j])<1.4442)
  377. {
  378. pass_e_cuts = (elec_ECALIso[j] < cECALiso_EB && elec_HCALIso[j] < cHCALiso_EB
  379. && elec_sigIhIh[j] < csIhIh_EB && elec_dPhi[j] < cDeltaPhi_EB
  380. && elec_dEta[j] < cDeltaEta_EB);
  381. pass_trkiso_cut = (elec_trkIso[j] < cTrackiso_EB);
  382. inBarrel = true;
  383. }else if(fabs(tag_eta[j] < 2.5))
  384. {
  385. pass_e_cuts = (elec_ECALIso[j] < cECALiso_EE && elec_HCALIso[j] < cHCALiso_EE
  386. && elec_sigIhIh[j] < csIhIh_EE && elec_dPhi[j] < cDeltaPhi_EE
  387. && elec_dEta[j] < cDeltaEta_EE);
  388. pass_trkiso_cut = (elec_trkIso[j] < cTrackiso_EE);
  389. inEndcap = true;
  390. }
  391. if(pass_e_cuts)
  392. {
  393. bool pass_nu_cuts = false;
  394. double f1x5 = nu_e1x5[j]/nu_e5x5[j];
  395. double f2x5 = nu_e2x5[j]/nu_e5x5[j];
  396. if(fabs(probe_eta[j]) < 1.4442)
  397. {
  398. pass_nu_cuts = (nu_HCAL[j] < cHCAL && (f1x5 > cf1x5 || f2x5 > cf2x5)
  399. /*&& nu_elec[j] == celecmatch*/);
  400. }else if(fabs(probe_eta[j] < 2.5)){
  401. pass_nu_cuts = (nu_HCALEt[j] < cHCALEt && nu_sigIhIh[j] < cnusIhIh
  402. /*&& nu_elec[j] == celecmatch*/);
  403. }
  404. if(pass_nu_cuts)
  405. {
  406. int EtaInt = int((probe_eta[j] + 3.)/0.01739);
  407. double weight = eventweight/nueff[EtaInt];
  408. if(pass_trkiso_cut)
  409. {
  410. if(inBarrel)
  411. {
  412. aaa++;
  413. ErsatzMEt_pass_EB.push_back(ErsatzV1bMEt[j]);
  414. Weight_pass_EB.push_back(weight);
  415. h_ErsatzMEt_pass_EB->Fill(ErsatzV1bMEt[j], weight);
  416. h_ErsatzMEt_pass_EB_peakfit->Fill(ErsatzV1bMEt[j], weight);
  417. h_ErsatzMEt_probept->Fill(probe_pt[j], weight);
  418. h_ErsatzMEt_uncorr->Fill(ErsatzV1MEt[j], weight);
  419. h_ErsatzMEt_fetacorr->Fill(ErsatzV1aMEt[j], weight);
  420. h_ErsatzMEt_fbremcorr->Fill(ErsatzV1bMEt[j], weight);
  421. }
  422. if(inEndcap)
  423. {
  424. bbb++;
  425. ErsatzMEt_pass_EE.push_back(ErsatzV1bMEt[j]);
  426. Weight_pass_EE.push_back(weight);
  427. h_ErsatzMEt_pass_EE->Fill(ErsatzV1bMEt[j], weight);
  428. h_ErsatzMEt_pass_EE_peakfit->Fill(ErsatzV1bMEt[j], weight);
  429. h_ErsatzMEt_probept->Fill(probe_pt[j], weight);
  430. h_ErsatzMEt_uncorr->Fill(ErsatzV1MEt[j], weight);
  431. h_ErsatzMEt_fetacorr->Fill(ErsatzV1aMEt[j], weight);
  432. h_ErsatzMEt_fbremcorr->Fill(ErsatzV1bMEt[j], weight);
  433. }
  434. }else{
  435. if(inBarrel)
  436. {
  437. ccc++;
  438. ErsatzMEt_fail_EB.push_back(ErsatzV1bMEt[j]);
  439. Weight_fail_EB.push_back(weight);
  440. h_ErsatzMEt_fail_EB->Fill(ErsatzV1bMEt[j], weight);
  441. }
  442. if(inEndcap)
  443. {
  444. ddd++;
  445. ErsatzMEt_fail_EE.push_back(ErsatzV1bMEt[j]);
  446. Weight_fail_EE.push_back(weight);
  447. h_ErsatzMEt_fail_EE->Fill(ErsatzV1bMEt[j], weight);
  448. }
  449. }
  450. }
  451. }
  452. }
  453. }
  454. }
  455. }
  456. fileZ->Close();
  457. cout << "Closed Ersatz data file" << endl;
  458. cout << "Number of events passing selection cuts = " << aaa+bbb+ccc+ddd << endl;
  459. cout << "Number Pass EB = " << aaa << endl;
  460. cout << "Number Pass EE = " << bbb << endl;
  461. cout << "Number Fail EB = " << ccc << endl;
  462. cout << "Number Fail EE = " << ddd << endl;
  463. cout << "Apply shift correction ..." << endl;
  464. int maxbin;
  465. h_WMEt_pass_EB_peakfit->Scale(1./h_WMEt_pass_EB_peakfit->Integral(0,100));
  466. maxbin = h_WMEt_pass_EB_peakfit->GetMaximumBin();
  467. TF1 peakW_EB = TF1("peakW_EB", "gaus", maxbin-4, maxbin+4);
  468. h_WMEt_pass_EB_peakfit->Fit("peakW_EB", "MR");
  469. cout << "W MEt maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakW_EB.GetParameter(1) << endl;
  470. h_WMEt_pass_EB_peakfit->Draw();
  471. h_ErsatzMEt_pass_EB_peakfit->Scale(1./h_ErsatzMEt_pass_EB_peakfit->Integral(0,100));
  472. maxbin = h_ErsatzMEt_pass_EB_peakfit->GetMaximumBin();
  473. TF1 peakZ_EB = TF1("peakZ_EB", "gaus", maxbin-4, maxbin+4);
  474. h_ErsatzMEt_pass_EB_peakfit->Fit("peakZ_EB", "MR");
  475. cout << "Ersatz maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakZ_EB.GetParameter(1) << endl;
  476. h_ErsatzMEt_pass_EB_peakfit->Draw();
  477. double shift_EB = peakW_EB.GetParameter(1) - peakZ_EB.GetParameter(1);
  478. cout << "EB Shift = " << shift_EB << endl;
  479. h_WMEt_pass_EE_peakfit->Scale(1./h_WMEt_pass_EE_peakfit->Integral(0,100));
  480. maxbin = h_WMEt_pass_EE_peakfit->GetMaximumBin();
  481. TF1 peakW_EE = TF1("peakW_EE", "gaus", maxbin-4, maxbin+4);
  482. h_WMEt_pass_EE_peakfit->Fit("peakW_EE", "MR");
  483. cout << "W MEt maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakW_EE.GetParameter(1) << endl;
  484. h_WMEt_pass_EE_peakfit->Draw();
  485. h_ErsatzMEt_pass_EE_peakfit->Scale(1./h_ErsatzMEt_pass_EE_peakfit->Integral(0,100));
  486. maxbin = h_ErsatzMEt_pass_EE_peakfit->GetMaximumBin();
  487. TF1 peakZ_EE = TF1("peakZ_EE", "gaus", maxbin-4, maxbin+4);
  488. h_ErsatzMEt_pass_EE_peakfit->Fit("peakZ_EE", "MR");
  489. cout << "Ersatz maximum bin = " << maxbin << "\tPeak of Gaussian = " << peakZ_EE.GetParameter(1) << endl;
  490. h_ErsatzMEt_pass_EE_peakfit->Draw();
  491. double shift_EE = peakW_EE.GetParameter(1) - peakZ_EE.GetParameter(1);
  492. cout << "EE Shift = " << shift_EE << endl;
  493. for(unsigned int i=0; i < ErsatzMEt_pass_EB.size(); i++)
  494. {
  495. ErsatzMEt_pass_EB[i] += shift_EB;
  496. h_ErsatzMEt_pass_EB_shifted->Fill(ErsatzMEt_pass_EB[i], Weight_pass_EB[i]);
  497. }
  498. for(unsigned int i=0; i < ErsatzMEt_pass_EE.size(); i++)
  499. {
  500. ErsatzMEt_pass_EE[i] += shift_EE;
  501. h_ErsatzMEt_pass_EE_shifted->Fill(ErsatzMEt_pass_EE[i], Weight_pass_EE[i]);
  502. }
  503. for(unsigned int i=0; i < ErsatzMEt_fail_EB.size(); i++)
  504. {
  505. ErsatzMEt_fail_EB[i] += shift_EB;
  506. h_ErsatzMEt_fail_EB_shifted->Fill(ErsatzMEt_fail_EB[i], Weight_fail_EB[i]);
  507. }
  508. for(unsigned int i=0; i < ErsatzMEt_fail_EE.size(); i++)
  509. {
  510. ErsatzMEt_fail_EE[i] += shift_EE;
  511. h_ErsatzMEt_fail_EE_shifted->Fill(ErsatzMEt_fail_EE[i], Weight_fail_EE[i]);
  512. }
  513. cout << "Apply acceptance correction ..." << endl;
  514. TH1F* h_ones = new TH1F("ones", "Histogram of Ones;;", 100, 0., 100.);
  515. for (int i=0; i<100; i++)
  516. {
  517. h_ones->Fill(i+0.5);
  518. }
  519. h_acceptance_correction_pass_EB->Divide(h_mcWMEtout_pass_EB, h_mcWMEtin_pass_EB);
  520. h_acceptance_correction_pass_EB->Add(h_ones);
  521. h_ErsatzMEt_pass_EB_corr->Multiply(h_ErsatzMEt_pass_EB_shifted, h_acceptance_correction_pass_EB);
  522. h_acceptance_correction_pass_EE->Divide(h_mcWMEtout_pass_EE, h_mcWMEtin_pass_EE);
  523. h_acceptance_correction_pass_EE->Add(h_ones);
  524. h_ErsatzMEt_pass_EE_corr->Multiply(h_ErsatzMEt_pass_EE_shifted, h_acceptance_correction_pass_EE);
  525. h_acceptance_correction_fail_EB->Divide(h_mcWMEtout_fail_EB, h_mcWMEtin_fail_EB);
  526. h_acceptance_correction_fail_EB->Add(h_ones);
  527. h_ErsatzMEt_fail_EB_corr->Multiply(h_ErsatzMEt_fail_EB_shifted, h_acceptance_correction_fail_EB);
  528. h_acceptance_correction_fail_EE->Divide(h_mcWMEtout_fail_EE, h_mcWMEtin_fail_EE);
  529. h_acceptance_correction_fail_EE->Add(h_ones);
  530. h_ErsatzMEt_fail_EE_corr->Multiply(h_ErsatzMEt_fail_EE_shifted, h_acceptance_correction_fail_EE);
  531. cout << "Calculating f ..." << endl;
  532. double N_pass_EB = h_ErsatzMEt_pass_EB_corr->Integral(0,100);
  533. double A_EB = h_ErsatzMEt_pass_EB_corr->Integral(int(cMEt)+1,100);
  534. double B_EB = h_ErsatzMEt_pass_EB_corr->Integral(0,int(cMEt));
  535. double N_pass_EE = h_ErsatzMEt_pass_EE_corr->Integral(0,100);
  536. double A_EE = h_ErsatzMEt_pass_EE_corr->Integral(int(cMEt)+1,100);
  537. double B_EE = h_ErsatzMEt_pass_EE_corr->Integral(0,int(cMEt));
  538. double N_fail_EB = h_ErsatzMEt_fail_EB_corr->Integral(0,100);
  539. double D_EB = h_ErsatzMEt_fail_EB_corr->Integral(int(cMEt)+1,100);
  540. double C_EB = h_ErsatzMEt_fail_EB_corr->Integral(0,int(cMEt));
  541. double N_fail_EE = h_ErsatzMEt_fail_EE_corr->Integral(0,100);
  542. double D_EE = h_ErsatzMEt_fail_EE_corr->Integral(int(cMEt)+1,100);
  543. double C_EE = h_ErsatzMEt_fail_EE_corr->Integral(0,int(cMEt));
  544. double A = A_EB + A_EE;
  545. double B = B_EB + B_EE;
  546. double C = C_EB + C_EE;
  547. double D = D_EB + D_EE;
  548. double N_pass = N_pass_EB + N_pass_EE;
  549. double N_fail = N_fail_EB + N_fail_EE;
  550. //int N = N_pass + N_fail;
  551. double eff = 1.0*A/(A+B);
  552. double efferror = sqrt(eff*(1.-eff)/N_pass);
  553. double f = 1.0*A/B;
  554. double ferror = efferror/((1.-eff)*(1.-eff));
  555. double effprime = 1.0*D/(D+C);
  556. double effprimeerror = sqrt(effprime*(1.-effprime)/N_fail);
  557. double fprime = 1.0*D/C;
  558. double fprimeerror = effprimeerror/((1.-effprime)*(1.-effprime));
  559. cout << "f\tferror\teff\tefferror\tA\tB\tN_pass" << endl;
  560. cout << f << "\t" << ferror << "\t" << eff << "\t" << efferror << "\t" << A << "\t" << B << "\t" << N_pass << "\n" << endl;
  561. cout << "fprime\tfprimeerror\teffprime\teffprimeerror\tD\tC\tN_fail" << endl;
  562. cout << fprime << "\t" << fprimeerror << "\t" << effprime << "\t" << effprimeerror << "\t" << D << "\t" << C << "\t" << N_fail << "\n" << endl;
  563. // results << process << "\t" << f << "\t" << ferror << "\t" << A << "\t" << B << "\t" << fprime << "\t" << fprimeerror << "\t" << D << "\t" << C << endl;
  564. outfile->Write();
  565. outfile->Close();
  566. }