Draw_graphs.C 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985
  1. #include "Functions.C"
  2. void Draw_graphs(TString inFileName="", TString outFileName="./test_graphs.root")
  3. {
  4. TFile *fiCorr = new TFile(inFileName.Data(),"read");
  5. if (inFileName == "" || !fiCorr)
  6. {
  7. std::cerr << "No input file was provided!" << std::endl;
  8. return;
  9. }
  10. const std::pair<float, float> bcent_range = {10, 40}; // correspond to 10-40
  11. const int npid = 6; // h+-, proton, K+, K-, pi+, pi-
  12. const std::string pidname [] = {"hadrons", "protons", "kaons", "akaons", "pions", "apions"};
  13. const int ncorrsteps = 4;
  14. const std::string corrnames [ncorrsteps] = {"PLAIN", "RECENTERED", "TWIST", "RESCALED"};
  15. const std::string RPcorrname = "PLAIN";
  16. const std::string RPdatatype = "model";
  17. const int ndatatypes = 3;
  18. const std::string datatypes [ndatatypes] = {"mc", "reco", "mcreco"};
  19. // const std::string datatype = "mcreco";
  20. const int nProj = 2;
  21. const std::string projSimple [nProj] = {"x","y"};
  22. const std::string projv2EP [nProj] = {"cos2", "sin2"};
  23. const std::string projv1EP [nProj] = {"cos1", "sin1"};
  24. const std::string projv2SP [nProj] = {"x2", "y2"};
  25. const std::string projv1SP [nProj] = {"x1", "y1"};
  26. std::string projPtName = "";
  27. std::string projYName = "";
  28. TFile *foGraphs = new TFile(outFileName.Data(),"recreate");
  29. Qn::DataContainerStatCalculate q2_tpcEP[nProj][nProj], q2_tpcSP[nProj][nProj];
  30. Qn::DataContainerStatCalculate q1_fhcalEP[nProj][nProj], q1_fhcalSP[nProj][nProj];
  31. Qn::DataContainerStatCalculate u2_tpcEP1[nProj][nProj][npid], u2_tpcEP2[nProj][nProj][npid];
  32. Qn::DataContainerStatCalculate u2_tpcSP1[nProj][nProj][npid], u2_tpcSP2[nProj][nProj][npid];
  33. // Qn::DataContainerStatCalculate u2_rpSP1[nProj][nProj][npid], u2_rpSP2[nProj][nProj][npid];
  34. Qn::DataContainerStatCalculate u2_fhcalEP1[nProj][nProj][nProj][npid], u2_fhcalEP2[nProj][nProj][nProj][npid];
  35. Qn::DataContainerStatCalculate u2_fhcalSP1[nProj][nProj][nProj][npid], u2_fhcalSP2[nProj][nProj][nProj][npid];
  36. Qn::DataContainerStatCalculate u2_rpSP1[nProj][nProj][nProj][npid], u2_rpSP2[nProj][nProj][nProj][npid];
  37. Qn::DataContainerStatCalculate u1_fhcalEP1[nProj][nProj][npid], u1_fhcalEP2[nProj][nProj][npid];
  38. Qn::DataContainerStatCalculate u1_fhcalSP1[nProj][nProj][npid], u1_fhcalSP2[nProj][nProj][npid];
  39. Qn::DataContainerStatCalculate u1_rpSP1[nProj][nProj][npid], u1_rpSP2[nProj][nProj][npid];
  40. TGraphErrors *graph;
  41. // Setting up the name of the Qn*Qn correlations
  42. // Qn*Qn = "dir/nameQn1_correction.nameQn2_correction.component"
  43. // For example: "QQ/EP/mc_TPC_EP_L_PLAIN.mc_TPC_EP_R_PLAIN.cos2cos2"
  44. std::string name;
  45. // Define the correction step that is in the input file
  46. std::string corrname = "";
  47. std::string datatype = "";
  48. for (int idtype=0; idtype<ndatatypes; idtype++)
  49. {
  50. for (int icorr=0; icorr<ncorrsteps; icorr++)
  51. {
  52. name = datatypes[idtype]+"_TPC_EP_L_"+corrnames[icorr]+"."+datatypes[idtype]+"_TPC_EP_R_"+corrnames[icorr]+".x2x2";
  53. if (!fiCorr->FindKeyAny(name.c_str())) continue;
  54. else
  55. {
  56. corrname = corrnames[icorr];
  57. datatype = datatypes[idtype];
  58. std::cout << "Data type found in the input file : " << datatype << std::endl;
  59. std::cout << "Correction step found in the input file: " << corrname << std::endl;
  60. }
  61. }
  62. }
  63. if (corrname == "" || datatype == "")
  64. {
  65. std::cerr << "Couldn't find correction or datatype from the file. Exiting..." << std::endl;
  66. return;
  67. }
  68. if (datatype == "mc") projPtName = "_pT";
  69. if (datatype == "reco") projPtName = "_pT";
  70. if (datatype == "mcreco") projPtName = "_mc_pT";
  71. if (projPtName == "")
  72. {
  73. std::cerr << "Data type is not correctly set!" << std::endl;
  74. return;
  75. }
  76. if (datatype == "mc") projYName = "_rapidity";
  77. if (datatype == "reco") projYName = "_rapidity";
  78. if (datatype == "mcreco") projYName = "_mc_y";
  79. if (projYName == "")
  80. {
  81. std::cerr << "Data type is not correctly set!" << std::endl;
  82. return;
  83. }
  84. std::string trackBranchName = "";
  85. if (datatype == "mc") trackBranchName = "McTracksExt";
  86. if (datatype == "reco") trackBranchName = "TpcTracksExt";
  87. if (datatype == "mcreco") trackBranchName = "TpcTracksExt";
  88. if (trackBranchName == "")
  89. {
  90. std::cerr << "Data type is not correctly set!" << std::endl;
  91. return;
  92. }
  93. // Getting correlations from the TFile
  94. // Qn*Qn
  95. for (int iproj1=0; iproj1<nProj; iproj1++)
  96. {
  97. for (int iproj2=0; iproj2<nProj; iproj2++)
  98. {
  99. name = "v2/QQ/EP/"+datatype+"_TPC_EP_L_"+corrname+"."+datatype+"_TPC_EP_R_"+corrname+"."+projv2EP[iproj1]+projv2EP[iproj2];
  100. if (!GetDCStatCalculate(fiCorr, name, q2_tpcEP[iproj1][iproj2]))
  101. {
  102. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  103. }
  104. name = "v2/QQ/SP/"+datatype+"_TPC_EP_L_"+corrname+"."+datatype+"_TPC_EP_R_"+corrname+"."+projv2SP[iproj1]+projv2SP[iproj2];
  105. if (!GetDCStatCalculate(fiCorr, name, q2_tpcSP[iproj1][iproj2]))
  106. {
  107. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  108. }
  109. if (datatype != "mc"){
  110. name = "v1/QQ/EP/"+datatype+"_FHCal_L_"+corrname+"."+datatype+"_FHCal_R_"+corrname+"."+projv1EP[iproj1]+projv1EP[iproj2];
  111. if (!GetDCStatCalculate(fiCorr, name, q1_fhcalEP[iproj1][iproj2]))
  112. {
  113. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  114. }
  115. name = "v1/QQ/SP/"+datatype+"_FHCal_L_"+corrname+"."+datatype+"_FHCal_R_"+corrname+"."+projv1SP[iproj1]+projv1SP[iproj2];
  116. if (!GetDCStatCalculate(fiCorr, name, q1_fhcalSP[iproj1][iproj2]))
  117. {
  118. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  119. }
  120. }
  121. }
  122. }
  123. // un*Qn
  124. for (int iproj1=0; iproj1<nProj; iproj1++)
  125. {
  126. for (int iproj2=0; iproj2<nProj; iproj2++)
  127. {
  128. for (int ipid=0; ipid<npid; ipid++)
  129. {
  130. name = "v2/uQ/EP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+datatype+"_TPC_EP_R_"+corrname+"."+projv2EP[iproj1]+projv2EP[iproj2];
  131. if (!GetDCStatCalculate(fiCorr, name, u2_tpcEP1[iproj1][iproj2][ipid]))
  132. {
  133. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  134. }
  135. name = "v2/uQ/EP/"+datatype+"_" + pidname[ipid] + "_R_"+corrname+"."+datatype+"_TPC_EP_L_"+corrname+"."+projv2EP[iproj1]+projv2EP[iproj2];
  136. if (!GetDCStatCalculate(fiCorr, name, u2_tpcEP2[iproj1][iproj2][ipid]))
  137. {
  138. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  139. }
  140. name = "v2/uQ/SP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+datatype+"_TPC_EP_R_"+corrname+"."+projv2SP[iproj1]+projv2SP[iproj2];
  141. if (!GetDCStatCalculate(fiCorr, name, u2_tpcSP1[iproj1][iproj2][ipid]))
  142. {
  143. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  144. }
  145. name = "v2/uQ/SP/"+datatype+"_" + pidname[ipid] + "_R_"+corrname+"."+datatype+"_TPC_EP_L_"+corrname+"."+projv2SP[iproj1]+projv2SP[iproj2];
  146. if (!GetDCStatCalculate(fiCorr, name, u2_tpcSP2[iproj1][iproj2][ipid]))
  147. {
  148. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  149. }
  150. name = "v2/uQ/SP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+RPdatatype+"_RP_"+RPcorrname+"."+projv2SP[iproj1]+projv2SP[iproj2];
  151. if (datatype != "mc"){
  152. name = "v1/uQ/EP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+datatype+"_FHCal_R_"+corrname+"."+projv1EP[iproj1]+projv1EP[iproj2];
  153. if (!GetDCStatCalculate(fiCorr, name, u1_fhcalEP1[iproj1][iproj2][ipid]))
  154. {
  155. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  156. }
  157. name = "v1/uQ/EP/"+datatype+"_" + pidname[ipid] + "_R_"+corrname+"."+datatype+"_FHCal_L_"+corrname+"."+projv1EP[iproj1]+projv1EP[iproj2];
  158. if (!GetDCStatCalculate(fiCorr, name, u1_fhcalEP2[iproj1][iproj2][ipid]))
  159. {
  160. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  161. }
  162. name = "v1/uQ/SP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+datatype+"_FHCal_R_"+corrname+"."+projv1SP[iproj1]+projv1SP[iproj2];
  163. if (!GetDCStatCalculate(fiCorr, name, u1_fhcalSP1[iproj1][iproj2][ipid]))
  164. {
  165. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  166. }
  167. name = "v1/uQ/SP/"+datatype+"_" + pidname[ipid] + "_R_"+corrname+"."+datatype+"_FHCal_L_"+corrname+"."+projv1SP[iproj1]+projv1SP[iproj2];
  168. if (!GetDCStatCalculate(fiCorr, name, u1_fhcalSP2[iproj1][iproj2][ipid]))
  169. {
  170. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  171. }
  172. }
  173. name = "v1/uQ/SP/"+datatype+"_" + pidname[ipid] + "_L_"+corrname+"."+RPdatatype+"_RP_"+RPcorrname+"."+projv1SP[iproj1]+projv1SP[iproj2];
  174. if (!GetDCStatCalculate(fiCorr, name, u1_rpSP1[iproj1][iproj2][ipid]))
  175. {
  176. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  177. }
  178. name = "v1/uQ/SP/"+datatype+"_" + pidname[ipid] + "_R_"+corrname+"."+RPdatatype+"_RP_"+RPcorrname+"."+projv1SP[iproj1]+projv1SP[iproj2];
  179. if (!GetDCStatCalculate(fiCorr, name, u1_rpSP2[iproj1][iproj2][ipid]))
  180. {
  181. std::cerr << "Error: Cannot get " << name << " from the file!" << std::endl;
  182. }
  183. }
  184. }
  185. }
  186. if (datatype != "mc"){
  187. // Taking into account that EP2/SP2 is rotated by pi for v1/Q1
  188. q1_fhcalEP[0][0] = -1. * q1_fhcalEP[0][0];
  189. q1_fhcalEP[1][1] = -1. * q1_fhcalEP[1][1];
  190. q1_fhcalSP[0][0] = -1. * q1_fhcalSP[0][0];
  191. q1_fhcalSP[1][1] = -1. * q1_fhcalSP[1][1];
  192. }
  193. // Symmetrization for the pT-dependence of v1
  194. // for (int ipid=0; ipid<npid; ipid++)
  195. // {
  196. // u1_fhcalEP2[0][0][ipid] = -1. * u1_fhcalEP2[0][0][ipid];
  197. // u1_fhcalEP2[1][1][ipid] = -1. * u1_fhcalEP2[1][1][ipid];
  198. // u1_fhcalSP2[0][0][ipid] = -1. * u1_fhcalSP2[0][0][ipid];
  199. // u1_fhcalSP2[1][1][ipid] = -1. * u1_fhcalSP2[1][1][ipid];
  200. // }
  201. // Calculate resolution: res = Sqrt(<cos(Psi1 - Psi2)>) = Sqrt(<xx> + <yy>)
  202. Qn::DataContainerStatCalculate res2_tpcEP = Merge(q2_tpcEP[0][0], q2_tpcEP[1][1]);
  203. Qn::DataContainerStatCalculate res_tpcEP = Sqrt( 2*res2_tpcEP );
  204. Qn::DataContainerStatCalculate res2_fhcalEP, res2_fhcalSP, res_fhcalEP, res_fhcalSP;
  205. if (datatype != "mc"){
  206. res2_fhcalEP = Merge(q1_fhcalEP[0][0], q1_fhcalEP[1][1]);
  207. res_fhcalEP = Sqrt( 2*res2_fhcalEP );
  208. }
  209. Qn::DataContainerStatCalculate res2_tpcSP = Merge(q2_tpcSP[0][0], q2_tpcSP[1][1]);
  210. Qn::DataContainerStatCalculate res_tpcSP = Sqrt( 2*res2_tpcSP );
  211. if (datatype != "mc"){
  212. res2_fhcalSP = Merge(q1_fhcalSP[0][0], q1_fhcalSP[1][1]);
  213. res_fhcalSP = Sqrt( 2*res2_fhcalSP );
  214. }
  215. // Components X,Y
  216. Qn::DataContainerStatCalculate res_tpcEP_xy[nProj][nProj];
  217. Qn::DataContainerStatCalculate res_tpcSP_xy[nProj][nProj];
  218. Qn::DataContainerStatCalculate res_fhcalEP_xy[nProj][nProj];
  219. Qn::DataContainerStatCalculate res_fhcalSP_xy[nProj][nProj];
  220. for (int iproj1=0; iproj1<nProj; iproj1++)
  221. {
  222. for (int iproj2=0; iproj2<nProj; iproj2++)
  223. {
  224. res_tpcEP_xy[iproj1][iproj2] = Sqrt(2*q2_tpcEP[iproj1][iproj2]);
  225. res_tpcSP_xy[iproj1][iproj2] = Sqrt(2*q2_tpcSP[iproj1][iproj2]);
  226. if (datatype != "mc"){
  227. res_fhcalEP_xy[iproj1][iproj2] = Sqrt( 2*q1_fhcalEP[iproj1][iproj2] );
  228. res_fhcalSP_xy[iproj1][iproj2] = Sqrt( 2*q1_fhcalSP[iproj1][iproj2] );
  229. }
  230. }
  231. }
  232. foGraphs->mkdir("resEP");
  233. foGraphs->cd("resEP");
  234. name = "res_v2_tpcEP_" + corrname;
  235. graph = Qn::DataContainerHelper::ToTGraph(res_tpcEP);
  236. graph->SetName(Form("%s", name.c_str()));
  237. name += ";Centrality, %";
  238. graph->SetTitle(Form("%s", name.c_str()));
  239. graph->Write();
  240. if (datatype != "mc"){
  241. name = "res_v1_fhcalEP_" + corrname;
  242. graph = Qn::DataContainerHelper::ToTGraph(res_fhcalEP);
  243. graph->SetName(Form("%s", name.c_str()));
  244. name += ";Centrality, %";
  245. graph->SetTitle(Form("%s", name.c_str()));
  246. graph->Write();
  247. }
  248. foGraphs->mkdir("resSP");
  249. foGraphs->cd("resSP");
  250. name = "res_v2_tpcSP_" + corrname;
  251. graph = Qn::DataContainerHelper::ToTGraph(res_tpcSP);
  252. graph->SetName(Form("%s", name.c_str()));
  253. name += ";Centrality, %";
  254. graph->SetTitle(Form("%s", name.c_str()));
  255. graph->Write();
  256. if (datatype != "mc"){
  257. name = "res_v1_fhcalSP_" + corrname;
  258. graph = Qn::DataContainerHelper::ToTGraph(res_fhcalSP);
  259. graph->SetName(Form("%s", name.c_str()));
  260. name += ";Centrality, %";
  261. graph->SetTitle(Form("%s", name.c_str()));
  262. graph->Write();
  263. }
  264. Qn::DataContainerStatCalculate vn_pT_obs, vn_pT_div, vn_pT_cent, vn_pT;
  265. Qn::DataContainerStatCalculate vn_y_obs, vn_y_div, vn_y_cent, vn_y;
  266. Qn::DataContainerStatCalculate uq_cent, uq_pT, uq_y;
  267. Qn::DataContainerStatCalculate vn_comp_pT_obs, vn_comp_pT_div, vn_comp_pT_cent, vn_comp_pT;
  268. Qn::DataContainerStatCalculate vn_comp_y_obs, vn_comp_y_div, vn_comp_y_cent, vn_comp_y;
  269. // v2 TPC EP
  270. foGraphs->mkdir("v2tpcEP");
  271. foGraphs->cd("v2tpcEP");
  272. for (int ipid=0; ipid<npid; ipid++)
  273. {
  274. vn_pT_obs = Merge(Merge(u2_tpcEP1[0][0][ipid], u2_tpcEP1[1][1][ipid]), Merge(u2_tpcEP2[0][0][ipid], u2_tpcEP2[1][1][ipid]));
  275. vn_pT_div = vn_pT_obs / res_tpcEP;
  276. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  277. name = trackBranchName+projPtName;
  278. vn_pT = vn_pT_cent.Projection({name});
  279. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  280. name = "v2_pT_tpcEP_" + pidname[ipid] + "_" + corrname;
  281. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  282. graph->SetName(name.c_str());
  283. name += ";p_{T}, GeV/c;v_{2}";
  284. graph->SetTitle(name.c_str());
  285. graph->Write();
  286. vn_y_obs = Merge(Merge(u2_tpcEP1[0][0][ipid], u2_tpcEP1[1][1][ipid]), Merge(u2_tpcEP2[0][0][ipid], u2_tpcEP2[1][1][ipid]));
  287. vn_y_div = vn_y_obs / res_tpcEP;
  288. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  289. name = trackBranchName+projYName;
  290. vn_y = vn_y_cent.Projection({name});
  291. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  292. name = "v2_y_tpcEP_" + pidname[ipid] + "_" + corrname;
  293. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  294. graph->SetName(name.c_str());
  295. name += ";y;v_{2}";
  296. graph->SetTitle(name.c_str());
  297. graph->Write();
  298. }
  299. // v2 TPC SP
  300. foGraphs->mkdir("v2tpcSP");
  301. foGraphs->cd("v2tpcSP");
  302. for (int ipid=0; ipid<npid; ipid++)
  303. {
  304. vn_pT_obs = Merge(Merge(u2_tpcSP1[0][0][ipid], u2_tpcSP1[1][1][ipid]), Merge(u2_tpcSP2[0][0][ipid], u2_tpcSP2[1][1][ipid]));
  305. vn_pT_div = vn_pT_obs / res_tpcSP;
  306. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  307. name = trackBranchName+projPtName;
  308. vn_pT = vn_pT_cent.Projection({name});
  309. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  310. name = "v2_pT_tpcSP_" + pidname[ipid] + "_" + corrname;
  311. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  312. graph->SetName(name.c_str());
  313. name += ";p_{T}, GeV/c;v_{2}";
  314. graph->SetTitle(name.c_str());
  315. graph->Write();
  316. vn_y_obs = Merge(Merge(u2_tpcSP1[0][0][ipid], u2_tpcSP1[1][1][ipid]), Merge(u2_tpcSP2[0][0][ipid], u2_tpcSP2[1][1][ipid]));
  317. vn_y_div = vn_y_obs / res_tpcSP;
  318. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  319. name = trackBranchName+projYName;
  320. vn_y = vn_y_cent.Projection({name});
  321. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  322. name = "v2_y_tpcSP_" + pidname[ipid] + "_" + corrname;
  323. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  324. graph->SetName(name.c_str());
  325. name += ";y;v_{2}";
  326. graph->SetTitle(name.c_str());
  327. graph->Write();
  328. }
  329. if (datatype != "mc"){
  330. // v1 FHCal EP
  331. foGraphs->mkdir("v1fhcalEP");
  332. foGraphs->cd("v1fhcalEP");
  333. for (int ipid=0; ipid<npid; ipid++)
  334. {
  335. vn_pT_obs = Merge(Merge(u1_fhcalEP1[0][0][ipid], u1_fhcalEP1[1][1][ipid]), Merge(u1_fhcalEP2[0][0][ipid], u1_fhcalEP2[1][1][ipid]));
  336. if (corrname == "mc")
  337. {
  338. vn_pT_obs = -1.*vn_pT_obs;
  339. }
  340. vn_pT_div = vn_pT_obs / res_fhcalEP;
  341. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  342. vn_pT_cent = vn_pT_div.Rebin({"TpcTracksExt_rapidity", 11, -1.1, 1.1});
  343. name = trackBranchName+projPtName;
  344. vn_pT = vn_pT_cent.Projection({name});
  345. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  346. name = "v1_pT_fhcalEP_" + pidname[ipid] + "_" + corrname;
  347. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  348. graph->SetName(name.c_str());
  349. name += ";p_{T}, GeV/c;v_{1}";
  350. graph->SetTitle(name.c_str());
  351. graph->Write();
  352. vn_y_obs = Merge(Merge(-1.*u1_fhcalEP1[0][0][ipid], -1.*u1_fhcalEP1[1][1][ipid]), Merge(u1_fhcalEP2[0][0][ipid], u1_fhcalEP2[1][1][ipid]));
  353. if (corrname == "mc")
  354. {
  355. vn_y_obs = -1.*vn_y_obs;
  356. }
  357. vn_y_div = vn_y_obs / res_fhcalEP;
  358. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  359. name = trackBranchName+projYName;
  360. vn_y = vn_y_cent.Projection({name});
  361. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  362. name = "v1_y_fhcalEP_" + pidname[ipid] + "_" + corrname;
  363. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  364. graph->SetName(name.c_str());
  365. name += ";y;v_{1}";
  366. graph->SetTitle(name.c_str());
  367. graph->Write();
  368. }
  369. // v1 FHCal SP
  370. foGraphs->mkdir("v1fhcalSP");
  371. foGraphs->cd("v1fhcalSP");
  372. for (int ipid=0; ipid<npid; ipid++)
  373. {
  374. vn_pT_obs = Merge(Merge(u1_fhcalSP1[0][0][ipid], u1_fhcalSP1[1][1][ipid]), Merge(u1_fhcalSP2[0][0][ipid], u1_fhcalSP2[1][1][ipid]));
  375. if (datatype == "mc")
  376. {
  377. vn_pT_obs = -1. * vn_pT_obs;
  378. }
  379. vn_pT_div = vn_pT_obs / res_fhcalSP;
  380. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  381. vn_pT_cent = vn_pT_div.Rebin({"TpcTracksExt_rapidity", 11, -1.1, 1.1});
  382. name = trackBranchName+projPtName;
  383. vn_pT = vn_pT_cent.Projection({name});
  384. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  385. name = "v1_pT_fhcalSP_" + pidname[ipid] + "_" + corrname;
  386. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  387. graph->SetName(name.c_str());
  388. name += ";p_{T}, GeV/c;v_{1}";
  389. graph->SetTitle(name.c_str());
  390. graph->Write();
  391. vn_y_obs = Merge(Merge(-1.*u1_fhcalSP1[0][0][ipid], -1.*u1_fhcalSP1[1][1][ipid]), Merge(u1_fhcalSP2[0][0][ipid], u1_fhcalSP2[1][1][ipid]));
  392. if (datatype == "mc")
  393. {
  394. vn_y_obs = -1. * vn_y_obs;
  395. }
  396. vn_y_div = vn_y_obs / res_fhcalSP;
  397. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  398. name = trackBranchName+projYName;
  399. vn_y = vn_y_cent.Projection({name});
  400. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  401. name = "v1_y_fhcalSP_" + pidname[ipid] + "_" + corrname;
  402. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  403. graph->SetName(name.c_str());
  404. name += ";y;v_{1}";
  405. graph->SetTitle(name.c_str());
  406. graph->Write();
  407. }
  408. }
  409. // v1 RP SP
  410. foGraphs->mkdir("v1rpSP");
  411. foGraphs->cd("v1rpSP");
  412. for (int ipid=0; ipid<npid; ipid++)
  413. {
  414. vn_pT_obs = Merge(Merge(-1.*u1_rpSP1[0][0][ipid], -1.*u1_rpSP1[1][1][ipid]), Merge(u1_rpSP2[0][0][ipid], u1_rpSP2[1][1][ipid]));
  415. vn_pT_div = vn_pT_obs;
  416. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  417. vn_pT_cent = vn_pT_div.Rebin({"TpcTracksExt_rapidity", 11, -1.1, 1.1});
  418. name = trackBranchName+projPtName;
  419. vn_pT = vn_pT_cent.Projection({name});
  420. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  421. name = "v1_pT_rpSP_" + pidname[ipid] + "_" + corrname;
  422. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  423. graph->SetName(name.c_str());
  424. name += ";p_{T}, GeV/c;v_{1}";
  425. graph->SetTitle(name.c_str());
  426. graph->Write();
  427. vn_y_obs = Merge(Merge(u1_rpSP1[0][0][ipid], u1_rpSP1[1][1][ipid]), Merge(u1_rpSP2[0][0][ipid], u1_rpSP2[1][1][ipid]));
  428. vn_y_div = vn_y_obs;
  429. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  430. name = trackBranchName+projYName;
  431. vn_y = vn_y_cent.Projection({name});
  432. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  433. name = "v1_y_rpSP_" + pidname[ipid] + "_" + corrname;
  434. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  435. graph->SetName(name.c_str());
  436. name += ";y;v_{1}";
  437. graph->SetTitle(name.c_str());
  438. graph->Write();
  439. }
  440. /*// v1 RP EP
  441. foGraphs->mkdir("v1rpEP");
  442. foGraphs->cd("v1rpEP");
  443. for (int ipid=0; ipid<npid; ipid++)
  444. {
  445. vn_pT_obs = Merge(Merge(-1.*u1_rpEP1[0][0][ipid], -1.*u1_rpEP1[1][1][ipid]), Merge(u1_rpEP2[0][0][ipid], u1_rpEP2[1][1][ipid]));
  446. vn_pT_div = vn_pT_obs;
  447. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  448. vn_pT_cent = vn_pT_div.Rebin({"TpcTracksExt_rapidity", 11, -1.1, 1.1});
  449. name = trackBranchName+projPtName;
  450. vn_pT = vn_pT_cent.Projection({name});
  451. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  452. name = "v1_pT_rpEP_" + pidname[ipid] + "_" + corrname;
  453. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  454. graph->SetName(name.c_str());
  455. name += ";p_{T}, GeV/c;v_{1}";
  456. graph->SetTitle(name.c_str());
  457. graph->Write();
  458. vn_y_obs = Merge(Merge(u1_rpEP1[0][0][ipid], u1_rpEP1[1][1][ipid]), Merge(u1_rpEP2[0][0][ipid], u1_rpEP2[1][1][ipid]));
  459. vn_y_div = vn_y_obs;
  460. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  461. name = trackBranchName+projYName;
  462. vn_y = vn_y_cent.Projection({name});
  463. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  464. name = "v1_y_rpEP_" + pidname[ipid] + "_" + corrname;
  465. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  466. graph->SetName(name.c_str());
  467. name += ";y;v_{1}";
  468. graph->SetTitle(name.c_str());
  469. graph->Write();
  470. }*/
  471. // Components XY
  472. foGraphs->mkdir("resEPxy");
  473. foGraphs->cd("resEPxy");
  474. for (int iproj1=0; iproj1<nProj; iproj1++)
  475. {
  476. for (int iproj2=0; iproj2<nProj; iproj2++)
  477. {
  478. name = "res_v2_tpcEP_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  479. graph = Qn::DataContainerHelper::ToTGraph(res_tpcEP_xy[iproj1][iproj2]);
  480. graph->SetName(Form("%s", name.c_str()));
  481. name += ";Centrality, %";
  482. graph->SetTitle(Form("%s", name.c_str()));
  483. graph->Write();
  484. if (datatype != "mc"){
  485. name = "res_v1_fhcalEP_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  486. graph = Qn::DataContainerHelper::ToTGraph(res_fhcalEP_xy[iproj1][iproj2]);
  487. graph->SetName(Form("%s", name.c_str()));
  488. name += ";Centrality, %";
  489. graph->SetTitle(Form("%s", name.c_str()));
  490. graph->Write();
  491. }
  492. }
  493. }
  494. foGraphs->mkdir("resSPxy");
  495. foGraphs->cd("resSPxy");
  496. for (int iproj1=0; iproj1<nProj; iproj1++)
  497. {
  498. for (int iproj2=0; iproj2<nProj; iproj2++)
  499. {
  500. name = "res_v2_tpcSP_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  501. graph = Qn::DataContainerHelper::ToTGraph(res_tpcSP_xy[iproj1][iproj2]);
  502. graph->SetName(Form("%s", name.c_str()));
  503. name += ";Centrality, %";
  504. graph->SetTitle(Form("%s", name.c_str()));
  505. graph->Write();
  506. if (datatype != "mc"){
  507. name = "res_v1_fhcalSP_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  508. graph = Qn::DataContainerHelper::ToTGraph(res_fhcalSP_xy[iproj1][iproj2]);
  509. graph->SetName(Form("%s", name.c_str()));
  510. name += ";Centrality, %";
  511. graph->SetTitle(Form("%s", name.c_str()));
  512. graph->Write();
  513. }
  514. }
  515. }
  516. // v2 TPC EP
  517. foGraphs->mkdir("v2tpcEPxy");
  518. foGraphs->cd("v2tpcEPxy");
  519. for (int iproj1=0; iproj1<nProj; iproj1++)
  520. {
  521. for (int iproj2=0; iproj2<nProj; iproj2++)
  522. {
  523. for (int ipid=0; ipid<npid; ipid++)
  524. {
  525. vn_pT_obs = Merge(u2_tpcEP1[iproj1][iproj2][ipid], u2_tpcEP2[iproj1][iproj2][ipid]);
  526. vn_pT_div = vn_pT_obs / res_tpcEP_xy[iproj1][iproj2];
  527. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  528. name = trackBranchName+projPtName;
  529. vn_pT = vn_pT_cent.Projection({name});
  530. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  531. name = "v2_pT_tpcEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  532. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  533. graph->SetName(name.c_str());
  534. name += ";p_{T}, GeV/c;v_{2}";
  535. graph->SetTitle(name.c_str());
  536. graph->Write();
  537. vn_y_obs = Merge(u2_tpcEP1[iproj1][iproj2][ipid], u2_tpcEP2[iproj1][iproj2][ipid]);
  538. vn_y_div = vn_y_obs / res_tpcEP_xy[iproj1][iproj2];
  539. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  540. name = trackBranchName+projYName;
  541. vn_y = vn_y_cent.Projection({name});
  542. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  543. name = "v2_y_tpcEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  544. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  545. graph->SetName(name.c_str());
  546. name += ";y;v_{2}";
  547. graph->SetTitle(name.c_str());
  548. graph->Write();
  549. }
  550. }
  551. }
  552. // v2 TPC SP
  553. foGraphs->mkdir("v2tpcSPxy");
  554. foGraphs->cd("v2tpcSPxy");
  555. for (int iproj1=0; iproj1<nProj; iproj1++)
  556. {
  557. for (int iproj2=0; iproj2<nProj; iproj2++)
  558. {
  559. for (int ipid=0; ipid<npid; ipid++)
  560. {
  561. vn_pT_obs = Merge(u2_tpcSP1[iproj1][iproj2][ipid], u2_tpcSP2[iproj1][iproj2][ipid]);
  562. vn_pT_div = vn_pT_obs / res_tpcSP_xy[iproj1][iproj2];
  563. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  564. name = trackBranchName+projPtName;
  565. vn_pT = vn_pT_cent.Projection({name});
  566. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  567. name = "v2_pT_tpcSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  568. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  569. graph->SetName(name.c_str());
  570. name += ";p_{T}, GeV/c;v_{2}";
  571. graph->SetTitle(name.c_str());
  572. graph->Write();
  573. vn_y_obs = Merge(u2_tpcSP1[iproj1][iproj2][ipid], u2_tpcSP2[iproj1][iproj2][ipid]);
  574. vn_y_div = vn_y_obs / res_tpcSP_xy[iproj1][iproj2];
  575. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  576. name = trackBranchName+projYName;
  577. vn_y = vn_y_cent.Projection({name});
  578. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  579. name = "v2_y_tpcSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  580. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  581. graph->SetName(name.c_str());
  582. name += ";y;v_{2}";
  583. graph->SetTitle(name.c_str());
  584. graph->Write();
  585. }
  586. }
  587. }
  588. if (datatype != "mc"){
  589. // v1 FHCal EP
  590. foGraphs->mkdir("v1fhcalEPxy");
  591. foGraphs->cd("v1fhcalEPxy");
  592. for (int iproj1=0; iproj1<nProj; iproj1++)
  593. {
  594. for (int iproj2=0; iproj2<nProj; iproj2++)
  595. {
  596. for (int ipid=0; ipid<npid; ipid++)
  597. {
  598. vn_pT_obs = Merge(u1_fhcalEP1[iproj1][iproj2][ipid], u1_fhcalEP2[iproj1][iproj2][ipid]);
  599. vn_pT_div = vn_pT_obs / res_fhcalEP_xy[iproj1][iproj2];
  600. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  601. name = trackBranchName+projPtName;
  602. vn_pT = vn_pT_cent.Projection({name});
  603. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  604. name = "v1_pT_fhcalEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  605. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  606. graph->SetName(name.c_str());
  607. name += ";p_{T}, GeV/c;v_{1}";
  608. graph->SetTitle(name.c_str());
  609. graph->Write();
  610. vn_y_obs = Merge(-1.*u1_fhcalEP1[iproj1][iproj2][ipid], u1_fhcalEP2[iproj1][iproj2][ipid]);
  611. vn_y_div = vn_y_obs / res_fhcalEP_xy[iproj1][iproj2];
  612. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  613. name = trackBranchName+projYName;
  614. vn_y = vn_y_cent.Projection({name});
  615. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  616. name = "v1_y_fhcalEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  617. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  618. graph->SetName(name.c_str());
  619. name += ";y;v_{1}";
  620. graph->SetTitle(name.c_str());
  621. graph->Write();
  622. }
  623. }
  624. }
  625. // v1 FHCal SP
  626. foGraphs->mkdir("v1fhcalSPxy");
  627. foGraphs->cd("v1fhcalSPxy");
  628. for (int iproj1=0; iproj1<nProj; iproj1++)
  629. {
  630. for (int iproj2=0; iproj2<nProj; iproj2++)
  631. {
  632. for (int ipid=0; ipid<npid; ipid++)
  633. {
  634. vn_pT_obs = Merge(u1_fhcalSP1[iproj1][iproj2][ipid], u1_fhcalSP2[iproj1][iproj2][ipid]);
  635. vn_pT_div = vn_pT_obs / res_fhcalSP_xy[iproj1][iproj2];
  636. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  637. name = trackBranchName+projPtName;
  638. vn_pT = vn_pT_cent.Projection({name});
  639. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  640. name = "v1_pT_fhcalSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  641. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  642. graph->SetName(name.c_str());
  643. name += ";p_{T}, GeV/c;v_{1}";
  644. graph->SetTitle(name.c_str());
  645. graph->Write();
  646. vn_y_obs = Merge(-1.*u1_fhcalSP1[iproj1][iproj2][ipid], u1_fhcalSP2[iproj1][iproj2][ipid]);
  647. vn_y_div = vn_y_obs / res_fhcalSP_xy[iproj1][iproj2];
  648. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  649. name = trackBranchName+projYName;
  650. vn_y = vn_y_cent.Projection({name});
  651. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  652. name = "v1_y_fhcalSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  653. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  654. graph->SetName(name.c_str());
  655. name += ";y;v_{1}";
  656. graph->SetTitle(name.c_str());
  657. graph->Write();
  658. }
  659. }
  660. }
  661. }
  662. // v1 RP SP
  663. foGraphs->mkdir("v1rpSPxy");
  664. foGraphs->cd("v1rpSPxy");
  665. for (int iproj1=0; iproj1<nProj; iproj1++)
  666. {
  667. for (int iproj2=0; iproj2<nProj; iproj2++)
  668. {
  669. for (int ipid=0; ipid<npid; ipid++)
  670. {
  671. vn_pT_obs = Merge(-1.*u1_rpSP1[iproj1][iproj2][ipid], u1_rpSP2[iproj1][iproj2][ipid]);
  672. vn_pT_div = vn_pT_obs;
  673. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  674. name = trackBranchName+projPtName;
  675. vn_pT = vn_pT_cent.Projection({name});
  676. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  677. name = "v1_pT_rpSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  678. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  679. graph->SetName(name.c_str());
  680. name += ";p_{T}, GeV/c;v_{1}";
  681. graph->SetTitle(name.c_str());
  682. graph->Write();
  683. vn_y_obs = Merge(u1_rpSP1[iproj1][iproj2][ipid], u1_rpSP2[iproj1][iproj2][ipid]);
  684. vn_y_div = vn_y_obs;
  685. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  686. name = trackBranchName+projYName;
  687. vn_y = vn_y_cent.Projection({name});
  688. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  689. name = "v1_y_rpSP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  690. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  691. graph->SetName(name.c_str());
  692. name += ";y;v_{1}";
  693. graph->SetTitle(name.c_str());
  694. graph->Write();
  695. }
  696. }
  697. }
  698. /*// v1 RP EP
  699. foGraphs->mkdir("v1rpEPxy");
  700. foGraphs->cd("v1rpEPxy");
  701. for (int iproj1=0; iproj1<nProj; iproj1++)
  702. {
  703. for (int iproj2=0; iproj2<nProj; iproj2++)
  704. {
  705. for (int ipid=0; ipid<npid; ipid++)
  706. {
  707. vn_pT_obs = Merge(-1.*u1_rpEP1[iproj1][iproj2][ipid], u1_rpEP2[iproj1][iproj2][ipid]);
  708. vn_pT_div = vn_pT_obs;
  709. vn_pT_cent = vn_pT_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  710. name = trackBranchName+projPtName;
  711. vn_pT = vn_pT_cent.Projection({name});
  712. vn_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  713. name = "v1_pT_rpEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  714. graph = Qn::DataContainerHelper::ToTGraph(vn_pT);
  715. graph->SetName(name.c_str());
  716. name += ";p_{T}, GeV/c;v_{1}";
  717. graph->SetTitle(name.c_str());
  718. graph->Write();
  719. vn_y_obs = Merge(u1_rpEP1[iproj1][iproj2][ipid], u1_rpEP2[iproj1][iproj2][ipid]);
  720. vn_y_div = vn_y_obs;
  721. vn_y_cent = vn_y_div.Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  722. name = trackBranchName+projYName;
  723. vn_y = vn_y_cent.Projection({name});
  724. vn_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  725. name = "v1_y_rpEP_" + pidname[ipid] + "_" + corrname + "_" + projSimple[iproj1] + projSimple[iproj2];
  726. graph = Qn::DataContainerHelper::ToTGraph(vn_y);
  727. graph->SetName(name.c_str());
  728. name += ";y;v_{1}";
  729. graph->SetTitle(name.c_str());
  730. graph->Write();
  731. }
  732. }
  733. }*/
  734. // QQ correlations
  735. foGraphs->mkdir("QQ");
  736. foGraphs->cd("QQ");
  737. for (int iproj1=0; iproj1<nProj; iproj1++)
  738. {
  739. for (int iproj2=0; iproj2<nProj; iproj2++)
  740. {
  741. name = "QQ_tpc_"+ corrname + "_"+projv2EP[iproj1]+projv2EP[iproj2];
  742. graph = Qn::DataContainerHelper::ToTGraph(q2_tpcEP[iproj1][iproj2]);
  743. graph->SetName(name.c_str());
  744. name += ";Centrality, %;<"+projv2EP[iproj1]+projv2EP[iproj2]+">";
  745. graph->SetTitle(name.c_str());
  746. graph->Write();
  747. name = "QQ_tpc_"+ corrname + "_"+projv2SP[iproj1]+projv2SP[iproj2];
  748. graph = Qn::DataContainerHelper::ToTGraph(q2_tpcSP[iproj1][iproj2]);
  749. graph->SetName(name.c_str());
  750. name += ";Centrality, %;<"+projv2SP[iproj1]+projv2SP[iproj2]+">";
  751. graph->SetTitle(name.c_str());
  752. graph->Write();
  753. name = "QQ_fhcal_"+ corrname + "_"+projv1EP[iproj1]+projv1EP[iproj2];
  754. graph = Qn::DataContainerHelper::ToTGraph(q1_fhcalEP[iproj1][iproj2]);
  755. graph->SetName(name.c_str());
  756. name += ";Centrality, %;<"+projv1EP[iproj1]+projv1EP[iproj2]+">";
  757. graph->SetTitle(name.c_str());
  758. graph->Write();
  759. name = "QQ_fhcal_"+ corrname + "_"+projv1SP[iproj1]+projv1SP[iproj2];
  760. graph = Qn::DataContainerHelper::ToTGraph(q1_fhcalSP[iproj1][iproj2]);
  761. graph->SetName(name.c_str());
  762. name += ";Centrality, %;<"+projv1SP[iproj1]+projv1SP[iproj2]+">";
  763. graph->SetTitle(name.c_str());
  764. graph->Write();
  765. }
  766. }
  767. // uQ correlations
  768. foGraphs->mkdir("uQ");
  769. foGraphs->cd("uQ");
  770. for (int ipid=0; ipid<npid; ipid++)
  771. {
  772. for (int iproj1=0; iproj1<nProj; iproj1++)
  773. {
  774. for (int iproj2=0; iproj2<nProj; iproj2++)
  775. {
  776. uq_cent = u2_tpcEP1[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  777. name = trackBranchName+projPtName;
  778. uq_pT = uq_cent.Projection({name});
  779. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  780. name = "uQ_pT_tpcEP1_" + pidname[ipid] + "_" + corrname + "_"+projv2EP[iproj1]+projv2EP[iproj2];
  781. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  782. graph->SetName(name.c_str());
  783. name += ";p_{T}, GeV/c;<"+projv2EP[iproj1]+projv2EP[iproj2]+">";
  784. graph->SetTitle(name.c_str());
  785. graph->Write();
  786. name = trackBranchName+projYName;
  787. uq_y = uq_cent.Projection({name});
  788. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  789. name = "uQ_y_tpcEP1_" + pidname[ipid] + "_" + corrname + "_"+projv2EP[iproj1]+projv2EP[iproj2];
  790. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  791. graph->SetName(name.c_str());
  792. name += ";y;<"+projv2EP[iproj1]+projv2EP[iproj2]+">";
  793. graph->SetTitle(name.c_str());
  794. graph->Write();
  795. uq_cent = u2_tpcEP2[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  796. name = trackBranchName+projPtName;
  797. uq_pT = uq_cent.Projection({name});
  798. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  799. name = "uQ_pT_tpcEP2_" + pidname[ipid] + "_" + corrname + "_"+projv2EP[iproj1]+projv2EP[iproj2];
  800. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  801. graph->SetName(name.c_str());
  802. name += ";p_{T}, GeV/c;<"+projv2EP[iproj1]+projv2EP[iproj2]+">";
  803. graph->SetTitle(name.c_str());
  804. graph->Write();
  805. name = trackBranchName+projYName;
  806. uq_y = uq_cent.Projection({name});
  807. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  808. name = "uQ_y_tpcEP2_" + pidname[ipid] + "_" + corrname + "_"+projv2EP[iproj1]+projv2EP[iproj2];
  809. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  810. graph->SetName(name.c_str());
  811. name += ";y;<"+projv2EP[iproj1]+projv2EP[iproj2]+">";
  812. graph->SetTitle(name.c_str());
  813. graph->Write();
  814. uq_cent = u2_tpcSP1[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  815. name = trackBranchName+projPtName;
  816. uq_pT = uq_cent.Projection({name});
  817. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  818. name = "uQ_pT_tpcSP1_" + pidname[ipid] + "_" + corrname + "_"+projv2SP[iproj1]+projv2SP[iproj2];
  819. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  820. graph->SetName(name.c_str());
  821. name += ";p_{T}, GeV/c;<"+projv2SP[iproj1]+projv2SP[iproj2]+">";
  822. graph->SetTitle(name.c_str());
  823. graph->Write();
  824. name = trackBranchName+projYName;
  825. uq_y = uq_cent.Projection({name});
  826. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  827. name = "uQ_y_tpcSP1_" + pidname[ipid] + "_" + corrname + "_"+projv2SP[iproj1]+projv2SP[iproj2];
  828. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  829. graph->SetName(name.c_str());
  830. name += ";y;<"+projv2SP[iproj1]+projv2SP[iproj2]+">";
  831. graph->SetTitle(name.c_str());
  832. graph->Write();
  833. uq_cent = u2_tpcSP2[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  834. name = trackBranchName+projPtName;
  835. uq_pT = uq_cent.Projection({name});
  836. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  837. name = "uQ_pT_tpcSP2_" + pidname[ipid] + "_" + corrname + "_"+projv2SP[iproj1]+projv2SP[iproj2];
  838. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  839. graph->SetName(name.c_str());
  840. name += ";p_{T}, GeV/c;<"+projv2SP[iproj1]+projv2SP[iproj2]+">";
  841. graph->SetTitle(name.c_str());
  842. graph->Write();
  843. name = trackBranchName+projYName;
  844. uq_y = uq_cent.Projection({name});
  845. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  846. name = "uQ_y_tpcSP2_" + pidname[ipid] + "_" + corrname + "_"+projv2SP[iproj1]+projv2SP[iproj2];
  847. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  848. graph->SetName(name.c_str());
  849. name += ";y;<"+projv2SP[iproj1]+projv2SP[iproj2]+">";
  850. graph->SetTitle(name.c_str());
  851. graph->Write();
  852. uq_cent = u1_fhcalEP1[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  853. name = trackBranchName+projPtName;
  854. uq_pT = uq_cent.Projection({name});
  855. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  856. name = "uQ_pT_fhcalEP1_" + pidname[ipid] + "_" + corrname + "_"+projv1EP[iproj1]+projv1EP[iproj2];
  857. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  858. graph->SetName(name.c_str());
  859. name += ";p_{T}, GeV/c;<"+projv1EP[iproj1]+projv1EP[iproj2]+">";
  860. graph->SetTitle(name.c_str());
  861. graph->Write();
  862. name = trackBranchName+projYName;
  863. uq_y = uq_cent.Projection({name});
  864. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  865. name = "uQ_y_fhcalEP1_" + pidname[ipid] + "_" + corrname + "_"+projv1EP[iproj1]+projv1EP[iproj2];
  866. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  867. graph->SetName(name.c_str());
  868. name += ";y;<"+projv1EP[iproj1]+projv1EP[iproj2]+">";
  869. graph->SetTitle(name.c_str());
  870. graph->Write();
  871. uq_cent = u1_fhcalEP2[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  872. name = trackBranchName+projPtName;
  873. uq_pT = uq_cent.Projection({name});
  874. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  875. name = "uQ_pT_fhcalEP2_" + pidname[ipid] + "_" + corrname + "_"+projv1EP[iproj1]+projv1EP[iproj2];
  876. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  877. graph->SetName(name.c_str());
  878. name += ";p_{T}, GeV/c;<"+projv1EP[iproj1]+projv1EP[iproj2]+">";
  879. graph->SetTitle(name.c_str());
  880. graph->Write();
  881. name = trackBranchName+projYName;
  882. uq_y = uq_cent.Projection({name});
  883. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  884. name = "uQ_y_fhcalEP2_" + pidname[ipid] + "_" + corrname + "_"+projv1EP[iproj1]+projv1EP[iproj2];
  885. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  886. graph->SetName(name.c_str());
  887. name += ";y;<"+projv1EP[iproj1]+projv1EP[iproj2]+">";
  888. graph->SetTitle(name.c_str());
  889. graph->Write();
  890. uq_cent = u1_fhcalSP1[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  891. name = trackBranchName+projPtName;
  892. uq_pT = uq_cent.Projection({name});
  893. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  894. name = "uQ_pT_fhcalSP1_" + pidname[ipid] + "_" + corrname + "_"+projv1SP[iproj1]+projv1SP[iproj2];
  895. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  896. graph->SetName(name.c_str());
  897. name += ";p_{T}, GeV/c;<"+projv1SP[iproj1]+projv1SP[iproj2]+">";
  898. graph->SetTitle(name.c_str());
  899. graph->Write();
  900. name = trackBranchName+projYName;
  901. uq_y = uq_cent.Projection({name});
  902. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  903. name = "uQ_y_fhcalSP1_" + pidname[ipid] + "_" + corrname + "_"+projv1SP[iproj1]+projv1SP[iproj2];
  904. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  905. graph->SetName(name.c_str());
  906. name += ";y;<"+projv1SP[iproj1]+projv1SP[iproj2]+">";
  907. graph->SetTitle(name.c_str());
  908. graph->Write();
  909. uq_cent = u1_fhcalSP2[iproj1][iproj2][ipid].Rebin({"RecoEventExt_bcent", 1, bcent_range.first, bcent_range.second});
  910. name = trackBranchName+projPtName;
  911. uq_pT = uq_cent.Projection({name});
  912. uq_pT.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  913. name = "uQ_pT_fhcalSP2_" + pidname[ipid] + "_" + corrname + "_"+projv1SP[iproj1]+projv1SP[iproj2];
  914. graph = Qn::DataContainerHelper::ToTGraph(uq_pT);
  915. graph->SetName(name.c_str());
  916. name += ";p_{T}, GeV/c;<"+projv1SP[iproj1]+projv1SP[iproj2]+">";
  917. graph->SetTitle(name.c_str());
  918. graph->Write();
  919. name = trackBranchName+projYName;
  920. uq_y = uq_cent.Projection({name});
  921. uq_y.SetErrors(Qn::Stat::ErrorType::BOOTSTRAP);
  922. name = "uQ_y_fhcalSP2_" + pidname[ipid] + "_" + corrname + "_"+projv1SP[iproj1]+projv1SP[iproj2];
  923. graph = Qn::DataContainerHelper::ToTGraph(uq_y);
  924. graph->SetName(name.c_str());
  925. name += ";y;<"+projv1SP[iproj1]+projv1SP[iproj2]+">";
  926. graph->SetTitle(name.c_str());
  927. graph->Write();
  928. }
  929. }
  930. }
  931. foGraphs->Close();
  932. }