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.

240 lines
9.2 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
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
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_bu2hpmumu()
  38. {
  39. const char *sim_tree_name = "BuToHpMuMu_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_v0r0p6671378_BuToKpMuMu_12143001_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. Int_t B_BKGCAT, L1_TRUEID, L2_TRUEID, Hp_TRUEID;
  46. sim_chain->SetBranchAddress("L1_TRUEID", &L1_TRUEID);
  47. sim_chain->SetBranchAddress("L2_TRUEID", &L2_TRUEID);
  48. sim_chain->SetBranchAddress("Hp_TRUEID", &Hp_TRUEID);
  49. sim_chain->SetBranchAddress("B_BKGCAT", &B_BKGCAT);
  50. Float_t B_PT_in, B_BPVFDCHI2_in, B_BPVDIRA_in,
  51. Jpsi_BPVIPCHI2_in, Jpsi_PT_in, Jpsi_BPVDIRA_in,
  52. Hp_BPVIPCHI2_in, Hp_PT_in,
  53. L1_BPVIPCHI2_in, L1_PT_in,
  54. L2_BPVIPCHI2_in, L2_PT_in;
  55. Double_t B_CHI2_in, B_CHI2DOF_in,
  56. Jpsi_CHI2_in, Jpsi_CHI2DOF_in,
  57. Hp_PROBNN_K_in, Hp_PID_K_in,
  58. L1_PID_MU_in,
  59. L2_PID_MU_in;
  60. sim_chain->SetBranchAddress("B_PT", &B_PT_in);
  61. sim_chain->SetBranchAddress("B_BPVFDCHI2", &B_BPVFDCHI2_in);
  62. sim_chain->SetBranchAddress("B_BPVDIRA", &B_BPVDIRA_in);
  63. sim_chain->SetBranchAddress("B_CHI2", &B_CHI2_in);
  64. sim_chain->SetBranchAddress("B_CHI2VXNDOF", &B_CHI2DOF_in);
  65. sim_chain->SetBranchAddress("Jpsi_BPVIPCHI2", &Jpsi_BPVIPCHI2_in);
  66. sim_chain->SetBranchAddress("Jpsi_BPVDIRA", &Jpsi_BPVDIRA_in);
  67. sim_chain->SetBranchAddress("Jpsi_CHI2", &Jpsi_CHI2_in);
  68. sim_chain->SetBranchAddress("Jpsi_CHI2DOF", &Jpsi_CHI2DOF_in);
  69. sim_chain->SetBranchAddress("Jpsi_PT", &Jpsi_PT_in);
  70. sim_chain->SetBranchAddress("Hp_BPVIPCHI2", &Hp_BPVIPCHI2_in);
  71. sim_chain->SetBranchAddress("Hp_PT", &Hp_PT_in);
  72. sim_chain->SetBranchAddress("Hp_PROBNN_K", &Hp_PROBNN_K_in);
  73. sim_chain->SetBranchAddress("Hp_PID_K", &Hp_PID_K_in);
  74. sim_chain->SetBranchAddress("L1_BPVIPCHI2", &L1_BPVIPCHI2_in);
  75. sim_chain->SetBranchAddress("L1_PT", &L1_PT_in);
  76. sim_chain->SetBranchAddress("L1_PID_MU", &L1_PID_MU_in);
  77. sim_chain->SetBranchAddress("L2_BPVIPCHI2", &L2_BPVIPCHI2_in);
  78. sim_chain->SetBranchAddress("L2_PT", &L2_PT_in);
  79. sim_chain->SetBranchAddress("L2_PID_MU", &L2_PID_MU_in);
  80. TTree *output_tree = new TTree("DecayTree", "DecayTree");
  81. Float_t B_PT_out, B_BPVFDCHI2_out, B_BPVDIRA_out,
  82. Jpsi_BPVIPCHI2_out, Jpsi_PT_out, Jpsi_BPVDIRA_out,
  83. Kplus_BPVIPCHI2_out, Kplus_PT_out,
  84. muplus_BPVIPCHI2_out, muplus_PT_out,
  85. muminus_BPVIPCHI2_out, muminus_PT_out,
  86. B_PX_out, B_PY_out, B_PZ_out, B_ENERGY_out,
  87. muplus_PX_out, muplus_PY_out, muplus_PZ_out, muplus_ENERGY_out,
  88. muminus_PX_out, muminus_PY_out, muminus_PZ_out, muminus_ENERGY_out,
  89. Kplus_PX_out, Kplus_PY_out, Kplus_PZ_out, Kplus_ENERGY_out;
  90. Double_t B_M_out, B_CHI2_out, B_CHI2DOF_out,
  91. Jpsi_CHI2_out, Jpsi_CHI2DOF_out,
  92. Kplus_PROBNN_K_out, Kplus_M_out, Kplus_PID_K_out,
  93. muplus_M_out,
  94. muminus_M_out;
  95. Int_t muplus_ID_out, muminus_ID_out, Kplus_ID_out;
  96. output_tree->Branch("B_PT", &B_PT_out, "B_PT/F");
  97. output_tree->Branch("B_BPVFDCHI2", &B_BPVFDCHI2_out, "B_BPVFDCHI2/F");
  98. output_tree->Branch("B_BPVDIRA", &B_BPVDIRA_out, "B_BPVDIRA/F");
  99. output_tree->Branch("B_CHI2", &B_CHI2_out, "B_CHI2/D");
  100. output_tree->Branch("B_CHI2DOF", &B_CHI2DOF_out, "B_CHI2DOF/D");
  101. output_tree->Branch("B_PX", &B_PX_out, "B_PX/F");
  102. output_tree->Branch("B_PY", &B_PY_out, "B_PY/F");
  103. output_tree->Branch("B_PZ", &B_PZ_out, "B_PZ/F");
  104. output_tree->Branch("B_ENERGY", &B_ENERGY_out, "B_ENERGY/F");
  105. output_tree->Branch("B_M", &B_M_out, "B_M/D");
  106. output_tree->Branch("Jpsi_BPVIPCHI2", &Jpsi_BPVIPCHI2_out, "Jpsi_BPVIPCHI2/F");
  107. output_tree->Branch("Jpsi_PT", &Jpsi_PT_out, "Jpsi_PT/F");
  108. output_tree->Branch("Jpsi_BPVDIRA", &Jpsi_BPVDIRA_out, "Jpsi_BPVDIRA/F");
  109. output_tree->Branch("Jpsi_CHI2", &Jpsi_CHI2_out, "Jpsi_CHI2/D");
  110. output_tree->Branch("Jpsi_CHI2DOF", &Jpsi_CHI2DOF_out, "Jpsi_CHI2DOF/D");
  111. output_tree->Branch("Kplus_BPVIPCHI2", &Kplus_BPVIPCHI2_out, "Kplus_BPVIPCHI2/F");
  112. output_tree->Branch("Kplus_PROBNN_K", &Kplus_PROBNN_K_out, "Kplus_PROBNN_K/D");
  113. output_tree->Branch("Kplus_PID_K", &Kplus_PID_K_out, "Kplus_PID_K/D");
  114. output_tree->Branch("Kplus_PT", &Kplus_PT_out, "Kplus_PT/F");
  115. output_tree->Branch("Kplus_PX", &Kplus_PX_out, "Kplus_PX/F");
  116. output_tree->Branch("Kplus_PY", &Kplus_PY_out, "Kplus_PY/F");
  117. output_tree->Branch("Kplus_PZ", &Kplus_PZ_out, "Kplus_PZ/F");
  118. output_tree->Branch("Kplus_ENERGY", &Kplus_ENERGY_out, "Kplus_ENERGY/F");
  119. output_tree->Branch("Kplus_M", &Kplus_M_out, "Kplus_M/D");
  120. output_tree->Branch("Kplus_ID", &Kplus_ID_out, "Kplus_ID/I");
  121. output_tree->Branch("muminus_BPVIPCHI2", &muminus_BPVIPCHI2_out, "muminus_BPVIPCHI2/F");
  122. output_tree->Branch("muminus_PT", &muminus_PT_out, "muminus_PT/F");
  123. output_tree->Branch("muminus_PX", &muminus_PX_out, "muminus_PX/F");
  124. output_tree->Branch("muminus_PY", &muminus_PY_out, "muminus_PY/F");
  125. output_tree->Branch("muminus_PZ", &muminus_PZ_out, "muminus_PZ/F");
  126. output_tree->Branch("muminus_ENERGY", &muminus_ENERGY_out, "muminus_ENERGY/F");
  127. output_tree->Branch("muminus_M", &muminus_M_out, "muminus_M/D");
  128. output_tree->Branch("muminus_ID", &muminus_ID_out, "muminus_ID/I");
  129. output_tree->Branch("muplus_BPVIPCHI2", &muplus_BPVIPCHI2_out, "muplus_BPVIPCHI2/F");
  130. output_tree->Branch("muplus_PT", &muplus_PT_out, "muplus_PT/F");
  131. output_tree->Branch("muplus_PX", &muplus_PX_out, "muplus_PX/F");
  132. output_tree->Branch("muplus_PY", &muplus_PY_out, "muplus_PY/F");
  133. output_tree->Branch("muplus_PZ", &muplus_PZ_out, "muplus_PZ/F");
  134. output_tree->Branch("muplus_ENERGY", &muplus_ENERGY_out, "muplus_ENERGY/F");
  135. output_tree->Branch("muplus_M", &muplus_M_out, "muplus_M/D");
  136. output_tree->Branch("muplus_ID", &muplus_ID_out, "muplus_ID/I");
  137. unsigned int sim_entries = sim_chain->GetEntries();
  138. unsigned int selected_entries = 0;
  139. for (unsigned int i = 0; i < sim_entries; i++)
  140. {
  141. sim_chain->GetEntry(i);
  142. if (B_BKGCAT == 30 && TMath::Abs(L1_TRUEID) == PID_MUON && L2_TRUEID == -L1_TRUEID && TMath::Abs(Hp_TRUEID) == PID_KAON)
  143. {
  144. B_PT_out = B_PT_in;
  145. B_BPVFDCHI2_out = B_BPVFDCHI2_in;
  146. B_BPVDIRA_out = B_BPVDIRA_in;
  147. B_CHI2_out = B_CHI2_in;
  148. B_CHI2DOF_out = B_CHI2DOF_in;
  149. Jpsi_BPVIPCHI2_out = Jpsi_BPVIPCHI2_in;
  150. Jpsi_PT_out = Jpsi_PT_in;
  151. Jpsi_BPVDIRA_out = Jpsi_BPVDIRA_in;
  152. Jpsi_CHI2_out = Jpsi_CHI2_in;
  153. Jpsi_CHI2DOF_out = Jpsi_CHI2DOF_in;
  154. muminus_BPVIPCHI2_out = L1_BPVIPCHI2_in;
  155. muminus_ID_out = L1_TRUEID;
  156. muminus_PT_out = L1_PT_in;
  157. auto muminus_lv = l14v_sim->LorentzVector();
  158. muminus_PX_out = muminus_lv.Px();
  159. muminus_PY_out = muminus_lv.Py();
  160. muminus_PZ_out = muminus_lv.Pz();
  161. muminus_ENERGY_out = muminus_lv.E();
  162. muminus_M_out = muminus_lv.M();
  163. muplus_BPVIPCHI2_out = L2_BPVIPCHI2_in;
  164. muplus_ID_out = L2_TRUEID;
  165. muplus_PT_out = L2_PT_in;
  166. auto muplus_lv = l24v_sim->LorentzVector();
  167. muplus_PX_out = muplus_lv.Px();
  168. muplus_PY_out = muplus_lv.Py();
  169. muplus_PZ_out = muplus_lv.Pz();
  170. muplus_ENERGY_out = muplus_lv.E();
  171. muplus_M_out = muplus_lv.M();
  172. Kplus_BPVIPCHI2_out = Hp_BPVIPCHI2_in;
  173. Kplus_PT_out = Hp_PT_in;
  174. Kplus_PROBNN_K_out = Hp_PROBNN_K_in;
  175. Kplus_PID_K_out = Hp_PID_K_in;
  176. Kplus_ID_out = Hp_TRUEID;
  177. auto Kplus_lv = hp4v_sim->LorentzVector(K_MASS);
  178. Kplus_PX_out = Kplus_lv.Px();
  179. Kplus_PY_out = Kplus_lv.Py();
  180. Kplus_PZ_out = Kplus_lv.Pz();
  181. Kplus_ENERGY_out = Kplus_lv.E();
  182. Kplus_M_out = Kplus_lv.M();
  183. auto B_lv = muminus_lv + muplus_lv + Kplus_lv;
  184. B_PX_out = B_lv.Px();
  185. B_PY_out = B_lv.Py();
  186. B_PZ_out = B_lv.Pz();
  187. B_ENERGY_out = B_lv.E();
  188. B_M_out = B_lv.M();
  189. output_tree->Fill();
  190. selected_entries++;
  191. }
  192. PrintProgress(TString::Format("%s Mapping", sim_tree_name), sim_entries, 10000, i);
  193. }
  194. TFile *output_file = TFile::Open("/auto/data/pfeiffer/inclusive_detached_dilepton/MC/BuToHpMuMu_mapped_mc.root", "RECREATE");
  195. output_file->cd();
  196. output_file->mkdir("BuToHpMuMu_noPID_mapped/");
  197. output_file->cd("BuToHpMuMu_noPID_mapped/");
  198. output_tree->SetDirectory(gDirectory);
  199. output_tree->Write();
  200. output_file->Close();
  201. std::cout << "Triggered Entries: " << sim_entries << " Selected Entries: " << selected_entries << std::endl;
  202. return 0;
  203. }