ROOT Analysis for the Inclusive Detachted Dilepton Trigger Lines
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
13 KiB

7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
  1. #include <string>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <filesystem>
  6. #include <string_view>
  7. #include "TH1D.h"
  8. #include "TH2D.h"
  9. #include "THStack.h"
  10. #include "TGraph.h"
  11. #include "TTree.h"
  12. #include "TChain.h"
  13. #include "TFile.h"
  14. #include "TCanvas.h"
  15. #include "TROOT.h"
  16. #include "TStyle.h"
  17. #include "TColor.h"
  18. #include "TLorentzVector.h"
  19. #include "TRandom3.h"
  20. #include "TLegend.h"
  21. #include "RooDataHist.h"
  22. #include "RooRealVar.h"
  23. #include "RooPlot.h"
  24. #include "RooGaussian.h"
  25. #include "RooExponential.h"
  26. #include "RooRealConstant.h"
  27. #include "RooAddPdf.h"
  28. #include "RooFitResult.h"
  29. #include "RooProduct.h"
  30. #include "RooCrystalBall.h"
  31. #include "RooBreitWigner.h"
  32. #include "RooArgSet.h"
  33. #include "RooFFTConvPdf.h"
  34. #include "RooNovosibirsk.h"
  35. #include "constants.h"
  36. #include "basic_analysis.h"
  37. int mapmc_b02hphmmumu()
  38. {
  39. const char *sim_tree_name = "B0ToHpHmMuMu_noPID";
  40. TChain *sim_chain = new TChain(TString::Format("%s/DecayTree", sim_tree_name));
  41. sim_chain->Add("/auto/data/pfeiffer/inclusive_detached_dilepton/MC/rd_btoxll_simulation_fullstream_v0r0p6919194_B0ToKpPimMuMu_11144002_magdown.root");
  42. FourVect *l14v_sim = FourVect::Init(sim_chain, "L1");
  43. FourVect *l24v_sim = FourVect::Init(sim_chain, "L2");
  44. FourVect *hp4v_sim = FourVect::Init(sim_chain, "Hp");
  45. FourVect *hm4v_sim = FourVect::Init(sim_chain, "Hm");
  46. Int_t B_BKGCAT, L1_TRUEID, L2_TRUEID, Hp_TRUEID, Hm_TRUEID;
  47. sim_chain->SetBranchAddress("L1_TRUEID", &L1_TRUEID);
  48. sim_chain->SetBranchAddress("L2_TRUEID", &L2_TRUEID);
  49. sim_chain->SetBranchAddress("Hp_TRUEID", &Hp_TRUEID);
  50. sim_chain->SetBranchAddress("Hm_TRUEID", &Hm_TRUEID);
  51. sim_chain->SetBranchAddress("B0_BKGCAT", &B_BKGCAT);
  52. Float_t B0_PT_in, B0_BPVFDCHI2_in, B0_BPVDIRA_in,
  53. Jpsi_BPVIPCHI2_in, Jpsi_PT_in, Jpsi_BPVDIRA_in, Jpsi_BPVFDCHI2_in,
  54. Res_BPVIPCHI2_in, Res_PT_in, Res_BPVFDCHI2_in,
  55. Hp_BPVIPCHI2_in, Hp_PT_in,
  56. Hm_BPVIPCHI2_in, Hm_PT_in,
  57. L1_BPVIPCHI2_in, L1_PT_in,
  58. L2_BPVIPCHI2_in, L2_PT_in;
  59. Double_t B0_CHI2_in, B0_CHI2DOF_in,
  60. Jpsi_CHI2_in, Jpsi_CHI2DOF_in,
  61. Hp_PROBNN_K_in, Hp_PID_K_in,
  62. Hm_PROBNN_K_in, Hm_PID_K_in,
  63. L1_PID_MU_in,
  64. L2_PID_MU_in;
  65. sim_chain->SetBranchAddress("B0_PT", &B0_PT_in);
  66. sim_chain->SetBranchAddress("B0_BPVFDCHI2", &B0_BPVFDCHI2_in);
  67. sim_chain->SetBranchAddress("B0_BPVDIRA", &B0_BPVDIRA_in);
  68. sim_chain->SetBranchAddress("B0_CHI2", &B0_CHI2_in);
  69. sim_chain->SetBranchAddress("B0_CHI2VXNDOF", &B0_CHI2DOF_in);
  70. sim_chain->SetBranchAddress("Jpsi_BPVIPCHI2", &Jpsi_BPVIPCHI2_in);
  71. sim_chain->SetBranchAddress("Jpsi_CHI2", &Jpsi_CHI2_in);
  72. sim_chain->SetBranchAddress("Jpsi_CHI2DOF", &Jpsi_CHI2DOF_in);
  73. sim_chain->SetBranchAddress("Jpsi_PT", &Jpsi_PT_in);
  74. sim_chain->SetBranchAddress("Jpsi_BPVFDCHI2", &Jpsi_BPVFDCHI2_in);
  75. sim_chain->SetBranchAddress("Res_BPVIPCHI2", &Res_BPVIPCHI2_in);
  76. sim_chain->SetBranchAddress("Res_PT", &Res_PT_in);
  77. sim_chain->SetBranchAddress("Res_BPVFDCHI2", &Res_BPVFDCHI2_in);
  78. sim_chain->SetBranchAddress("Hp_BPVIPCHI2", &Hp_BPVIPCHI2_in);
  79. sim_chain->SetBranchAddress("Hp_PT", &Hp_PT_in);
  80. sim_chain->SetBranchAddress("Hp_PROBNN_K", &Hp_PROBNN_K_in);
  81. sim_chain->SetBranchAddress("Hp_PID_K", &Hp_PID_K_in);
  82. sim_chain->SetBranchAddress("Hm_BPVIPCHI2", &Hm_BPVIPCHI2_in);
  83. sim_chain->SetBranchAddress("Hm_PT", &Hm_PT_in);
  84. sim_chain->SetBranchAddress("Hm_PROBNN_K", &Hm_PROBNN_K_in);
  85. sim_chain->SetBranchAddress("Hm_PID_K", &Hm_PID_K_in);
  86. sim_chain->SetBranchAddress("L1_BPVIPCHI2", &L1_BPVIPCHI2_in);
  87. sim_chain->SetBranchAddress("L1_PT", &L1_PT_in);
  88. sim_chain->SetBranchAddress("L1_PID_MU", &L1_PID_MU_in);
  89. sim_chain->SetBranchAddress("L2_BPVIPCHI2", &L2_BPVIPCHI2_in);
  90. sim_chain->SetBranchAddress("L2_PT", &L2_PT_in);
  91. sim_chain->SetBranchAddress("L2_PID_MU", &L2_PID_MU_in);
  92. TTree *output_tree = new TTree("DecayTree", "DecayTree");
  93. Float_t B0_PT_out, B0_BPVFDCHI2_out, B0_BPVDIRA_out,
  94. Jpsi_BPVIPCHI2_out, Jpsi_PT_out, Jpsi_BPVDIRA_out, Jpsi_BPVFDCHI2_out,
  95. Kst0_BPVIPCHI2_out, Kst0_PT_out, Kst0_BPVFDCHI2_out,
  96. Kplus_BPVIPCHI2_out, Kplus_PT_out,
  97. piminus_BPVIPCHI2_out, piminus_PT_out, muplus_BPVIPCHI2_out, muplus_PT_out,
  98. muminus_BPVIPCHI2_out, muminus_PT_out,
  99. B0_PX_out, B0_PY_out, B0_PZ_out, B0_ENERGY_out,
  100. muplus_PX_out, muplus_PY_out, muplus_PZ_out, muplus_ENERGY_out,
  101. muminus_PX_out, muminus_PY_out, muminus_PZ_out, muminus_ENERGY_out,
  102. Kplus_PX_out, Kplus_PY_out, Kplus_PZ_out, Kplus_ENERGY_out,
  103. piminus_PX_out, piminus_PY_out, piminus_PZ_out, piminus_ENERGY_out;
  104. Double_t B0_M_out, B0_CHI2_out, B0_CHI2DOF_out,
  105. Jpsi_CHI2_out, Jpsi_CHI2DOF_out,
  106. muplus_M_out,
  107. muminus_M_out,
  108. Kplus_M_out, Kplus_PROBNN_K_out, Kplus_PID_K_out,
  109. piminus_M_out, piminus_PROBNN_K_out;
  110. Int_t muplus_ID_out, muminus_ID_out, Kplus_ID_out, piminus_ID_out;
  111. output_tree->Branch("B0_PT", &B0_PT_out, "B0_PT/F");
  112. output_tree->Branch("B0_BPVFDCHI2", &B0_BPVFDCHI2_out, "B0_BPVFDCHI2/F");
  113. output_tree->Branch("B0_BPVDIRA", &B0_BPVDIRA_out, "B0_BPVDIRA/F");
  114. output_tree->Branch("B0_CHI2", &B0_CHI2_out, "B0_CHI2/D");
  115. output_tree->Branch("B0_CHI2DOF", &B0_CHI2DOF_out, "B0_CHI2DOF/D");
  116. output_tree->Branch("B0_PX", &B0_PX_out, "0_PX/F");
  117. output_tree->Branch("B0_PY", &B0_PY_out, "0_PY/F");
  118. output_tree->Branch("B0_PZ", &B0_PZ_out, "0_PZ/F");
  119. output_tree->Branch("B0_ENERGY", &B0_ENERGY_out, "B0_ENERGY/F");
  120. output_tree->Branch("B0_M", &B0_M_out, "B0_M/D");
  121. output_tree->Branch("Jpsi_BPVIPCHI2", &Jpsi_BPVIPCHI2_out, "Jpsi_BPVIPCHI2/F");
  122. output_tree->Branch("Jpsi_PT", &Jpsi_PT_out, "Jpsi_PT/F");
  123. output_tree->Branch("Jpsi_BPVDIRA", &Jpsi_BPVDIRA_out, "Jpsi_BPVDIRA/F");
  124. output_tree->Branch("Jpsi_CHI2", &Jpsi_CHI2_out, "Jpsi_CHI2/D");
  125. output_tree->Branch("Jpsi_CHI2DOF", &Jpsi_CHI2DOF_out, "Jpsi_CHI2DOF/D");
  126. output_tree->Branch("Jpsi_BPVFDCHI2", &Jpsi_BPVFDCHI2_out, "Jpsi_BPVFDCHI2/F");
  127. output_tree->Branch("Kst0_BPVIPCHI2", &Kst0_BPVIPCHI2_out, "Kst0_BPVIPCHI2/F");
  128. output_tree->Branch("Kst0_PT", &Kst0_PT_out, "Kst0_PT/F");
  129. output_tree->Branch("Kst0_BPVFDCHI2", &Kst0_BPVFDCHI2_out, "Kst0_BPVFDCHI2/F");
  130. output_tree->Branch("Kplus_BPVIPCHI2", &Kplus_BPVIPCHI2_out, "Kplus_BPVIPCHI2/F");
  131. output_tree->Branch("Kplus_PROBNN_K", &Kplus_PROBNN_K_out, "Kplus_PROBNN_K/D");
  132. output_tree->Branch("Kplus_PID_K", &Kplus_PID_K_out, "Kplus_PID_K/D");
  133. output_tree->Branch("Kplus_PT", &Kplus_PT_out, "Kplus_PT/F");
  134. output_tree->Branch("Kplus_PX", &Kplus_PX_out, "Kplus_PX/F");
  135. output_tree->Branch("Kplus_PY", &Kplus_PY_out, "Kplus_PY/F");
  136. output_tree->Branch("Kplus_PZ", &Kplus_PZ_out, "Kplus_PZ/F");
  137. output_tree->Branch("Kplus_ENERGY", &Kplus_ENERGY_out, "Kplus_ENERGY/F");
  138. output_tree->Branch("Kplus_M", &Kplus_M_out, "Kplus_M/D");
  139. output_tree->Branch("Kplus_ID", &Kplus_ID_out, "Kplus_ID/I");
  140. output_tree->Branch("piminus_BPVIPCHI2", &piminus_BPVIPCHI2_out, "piminus_BPVIPCHI2/F");
  141. output_tree->Branch("piminus_PROBNN_K", &piminus_PROBNN_K_out, "piminus_PROBNN_K/D");
  142. output_tree->Branch("piminus_PT", &piminus_PT_out, "piminus_PT/F");
  143. output_tree->Branch("piminus_PX", &piminus_PX_out, "piminus_PX/F");
  144. output_tree->Branch("piminus_PY", &piminus_PY_out, "piminus_PY/F");
  145. output_tree->Branch("piminus_PZ", &piminus_PZ_out, "piminus_PZ/F");
  146. output_tree->Branch("piminus_ENERGY", &piminus_ENERGY_out, "piminus_ENERGY/F");
  147. output_tree->Branch("piminus_M", &piminus_M_out, "piminus_M/D");
  148. output_tree->Branch("piminus_ID", &piminus_ID_out, "piminus_ID/I");
  149. output_tree->Branch("muminus_BPVIPCHI2", &muminus_BPVIPCHI2_out, "muminus_BPVIPCHI2/F");
  150. output_tree->Branch("muminus_PT", &muminus_PT_out, "muminus_PT/F");
  151. output_tree->Branch("muminus_PX", &muminus_PX_out, "muminus_PX/F");
  152. output_tree->Branch("muminus_PY", &muminus_PY_out, "muminus_PY/F");
  153. output_tree->Branch("muminus_PZ", &muminus_PZ_out, "muminus_PZ/F");
  154. output_tree->Branch("muminus_ENERGY", &muminus_ENERGY_out, "muminus_ENERGY/F");
  155. output_tree->Branch("muminus_M", &muminus_M_out, "muminus_M/D");
  156. output_tree->Branch("muminus_ID", &muminus_ID_out, "muminus_ID/I");
  157. output_tree->Branch("muplus_BPVIPCHI2", &muplus_BPVIPCHI2_out, "muplus_BPVIPCHI2/F");
  158. output_tree->Branch("muplus_PT", &muplus_PT_out, "muplus_PT/F");
  159. output_tree->Branch("muplus_PX", &muplus_PX_out, "muplus_PX/F");
  160. output_tree->Branch("muplus_PY", &muplus_PY_out, "muplus_PY/F");
  161. output_tree->Branch("muplus_PZ", &muplus_PZ_out, "muplus_PZ/F");
  162. output_tree->Branch("muplus_ENERGY", &muplus_ENERGY_out, "muplus_ENERGY/F");
  163. output_tree->Branch("muplus_M", &muplus_M_out, "muplus_M/D");
  164. output_tree->Branch("muplus_ID", &muplus_ID_out, "muplus_ID/I");
  165. unsigned int sim_entries = sim_chain->GetEntries();
  166. unsigned int selected_entries = 0;
  167. for (unsigned int i = 0; i < sim_entries; i++)
  168. {
  169. sim_chain->GetEntry(i);
  170. if (B_BKGCAT == 30 && TMath::Abs(L1_TRUEID) == PID_MUON && L2_TRUEID == -L1_TRUEID && ((TMath::Abs(Hp_TRUEID) == PID_KAON && TMath::Abs(Hm_TRUEID) == PID_PION) || (TMath::Abs(Hp_TRUEID) == PID_PION && TMath::Abs(Hm_TRUEID) == PID_KAON)) && L1_PID_MU_in > -3. && L2_PID_MU_in > -3.)
  171. {
  172. B0_PT_out = B0_PT_in;
  173. B0_BPVFDCHI2_out = B0_BPVFDCHI2_in;
  174. B0_BPVDIRA_out = B0_BPVDIRA_in;
  175. B0_CHI2_out = B0_CHI2_in;
  176. B0_CHI2DOF_out = B0_CHI2DOF_in;
  177. Jpsi_BPVIPCHI2_out = Jpsi_BPVIPCHI2_in;
  178. Jpsi_PT_out = Jpsi_PT_in;
  179. Jpsi_BPVDIRA_out = Jpsi_BPVDIRA_in;
  180. Jpsi_CHI2_out = Jpsi_CHI2_in;
  181. Jpsi_CHI2DOF_out = Jpsi_CHI2DOF_in;
  182. Jpsi_BPVFDCHI2_out = Jpsi_BPVFDCHI2_in;
  183. Kst0_BPVIPCHI2_out = Res_BPVIPCHI2_in;
  184. Kst0_BPVFDCHI2_out = Res_BPVFDCHI2_in;
  185. Kst0_PT_out = Res_PT_in;
  186. muminus_BPVIPCHI2_out = L1_BPVIPCHI2_in;
  187. muminus_ID_out = L1_TRUEID;
  188. muminus_PT_out = L1_PT_in;
  189. auto muminus_lv = l14v_sim->LorentzVector();
  190. muminus_PX_out = muminus_lv.Px();
  191. muminus_PY_out = muminus_lv.Py();
  192. muminus_PZ_out = muminus_lv.Pz();
  193. muminus_ENERGY_out = muminus_lv.E();
  194. muminus_M_out = muminus_lv.M();
  195. muplus_BPVIPCHI2_out = L2_BPVIPCHI2_in;
  196. muplus_ID_out = L2_TRUEID;
  197. muplus_PT_out = L2_PT_in;
  198. auto muplus_lv = l24v_sim->LorentzVector();
  199. muplus_PX_out = muplus_lv.Px();
  200. muplus_PY_out = muplus_lv.Py();
  201. muplus_PZ_out = muplus_lv.Pz();
  202. muplus_ENERGY_out = muplus_lv.E();
  203. muplus_M_out = muplus_lv.M();
  204. if (TMath::Abs(Hp_TRUEID) == PID_KAON && TMath::Abs(Hm_TRUEID) == PID_PION)
  205. {
  206. Kplus_BPVIPCHI2_out = Hp_BPVIPCHI2_in;
  207. Kplus_PT_out = Hp_PT_in;
  208. Kplus_PROBNN_K_out = Hp_PROBNN_K_in;
  209. Kplus_PID_K_out = Hp_PID_K_in;
  210. Kplus_ID_out = Hp_TRUEID;
  211. piminus_BPVIPCHI2_out = Hm_BPVIPCHI2_in;
  212. piminus_PT_out = Hm_PT_in;
  213. piminus_PROBNN_K_out = Hm_PROBNN_K_in;
  214. piminus_ID_out = Hm_TRUEID;
  215. auto Kplus_lv = hp4v_sim->LorentzVector(K_MASS);
  216. auto piminus_lv = hm4v_sim->LorentzVector();
  217. Kplus_PX_out = Kplus_lv.Px();
  218. Kplus_PY_out = Kplus_lv.Py();
  219. Kplus_PZ_out = Kplus_lv.Pz();
  220. Kplus_ENERGY_out = Kplus_lv.E();
  221. Kplus_M_out = Kplus_lv.M();
  222. piminus_PX_out = piminus_lv.Px();
  223. piminus_PY_out = piminus_lv.Py();
  224. piminus_PZ_out = piminus_lv.Pz();
  225. piminus_ENERGY_out = piminus_lv.E();
  226. piminus_M_out = piminus_lv.M();
  227. auto B0_lv = muminus_lv + muplus_lv + Kplus_lv + piminus_lv;
  228. B0_PX_out = B0_lv.Px();
  229. B0_PY_out = B0_lv.Py();
  230. B0_PZ_out = B0_lv.Pz();
  231. B0_ENERGY_out = B0_lv.E();
  232. B0_M_out = B0_lv.M();
  233. }
  234. else if (TMath::Abs(Hp_TRUEID) == PID_PION && TMath::Abs(Hm_TRUEID) == PID_KAON)
  235. {
  236. Kplus_BPVIPCHI2_out = Hm_BPVIPCHI2_in;
  237. Kplus_PT_out = Hm_PROBNN_K_in;
  238. Kplus_PROBNN_K_out = Hm_PROBNN_K_in;
  239. Kplus_PID_K_out = Hm_PID_K_in;
  240. Kplus_ID_out = Hm_TRUEID;
  241. piminus_BPVIPCHI2_out = Hp_BPVIPCHI2_in;
  242. piminus_PT_out = Hp_PT_in;
  243. piminus_PROBNN_K_out = Hp_PROBNN_K_in;
  244. piminus_ID_out = Hp_TRUEID;
  245. auto Kplus_lv = hm4v_sim->LorentzVector(K_MASS);
  246. auto piminus_lv = hp4v_sim->LorentzVector();
  247. Kplus_PX_out = Kplus_lv.Px();
  248. Kplus_PY_out = Kplus_lv.Py();
  249. Kplus_PZ_out = Kplus_lv.Pz();
  250. Kplus_ENERGY_out = Kplus_lv.E();
  251. Kplus_M_out = Kplus_lv.M();
  252. piminus_PX_out = piminus_lv.Px();
  253. piminus_PY_out = piminus_lv.Py();
  254. piminus_PZ_out = piminus_lv.Pz();
  255. piminus_ENERGY_out = piminus_lv.E();
  256. piminus_M_out = piminus_lv.M();
  257. auto B0_lv = muminus_lv + muplus_lv + Kplus_lv + piminus_lv;
  258. B0_PX_out = B0_lv.Px();
  259. B0_PY_out = B0_lv.Py();
  260. B0_PZ_out = B0_lv.Pz();
  261. B0_ENERGY_out = B0_lv.E();
  262. B0_M_out = B0_lv.M();
  263. }
  264. output_tree->Fill();
  265. selected_entries++;
  266. }
  267. PrintProgress(TString::Format("%s Mapping", sim_tree_name), sim_entries, 10000, i);
  268. }
  269. TFile* output_file = TFile::Open("/auto/data/pfeiffer/inclusive_detached_dilepton/MC/B0ToHpHmMuMu_mapped_mc.root", "RECREATE");
  270. output_file->cd();
  271. output_file->mkdir("B0ToHpHmMuMu_noPID_mapped/");
  272. output_file->cd("B0ToHpHmMuMu_noPID_mapped/");
  273. output_tree->SetDirectory(gDirectory);
  274. output_tree->Write();
  275. output_file->Close();
  276. std::cout << "Triggered Entries: " << sim_entries << " Selected Entries: " << selected_entries << std::endl;
  277. return 0;
  278. }