File indexing completed on 2025-08-07 08:12:44
0001 #ifndef FINALRESULT_H
0002 #define FINALRESULT_H
0003
0004 #include <iostream>
0005 #include <fstream>
0006 #include <sstream>
0007 #include <vector>
0008 #include <string>
0009 #include <numeric>
0010 #include <cctype> // For isdigit
0011
0012 #include <TFile.h>
0013 #include <TTree.h>
0014 #include <TH2D.h>
0015 #include <TH1D.h>
0016 #include <TMath.h>
0017 #include <TF1.h>
0018 #include <TProfile.h>
0019 #include <TCanvas.h>
0020 #include <TPad.h>
0021 #include <TGraphErrors.h>
0022 #include <TLatex.h>
0023 #include <THStack.h>
0024 #include <TCanvas.h> // note : for the combined case
0025 #include <TGraph.h> // note : for the combined case
0026 #include <TGraphAsymmErrors.h>
0027 #include <TKey.h>
0028 #include <TRandom.h> // note : for the offset
0029 #include <TRandom3.h> // note : for the offset
0030
0031 #include <TColor.h>
0032 #include <TLegend.h>
0033 #include <TLine.h>
0034
0035 #include <TObjArray.h>
0036
0037
0038 #include "sPhenixStyle.h"
0039
0040 class FinalResult{
0041 public:
0042 FinalResult(
0043 int runnumber_in,
0044 int Mbin_in,
0045 std::string StandardData_directory_in,
0046 std::string StandardData_file_name_in,
0047 std::string StandardMC_directory_in,
0048 std::string StandardMC_file_name_in,
0049 std::string sPH_label_in = "Internal",
0050
0051 std::string Output_directory_in = "Not_given"
0052 );
0053
0054 void SetEtaRange(std::pair<double,double> eta_range_in) {
0055 eta_range = eta_range_in;
0056 }
0057
0058 void SetAnaDescription(std::pair<std::pair<double,double>, std::string> input_text) {
0059 AnaDescription = input_text;
0060 }
0061
0062 void SetCollisionStr(std::pair<std::pair<double,double>, std::string> input_text) {
0063 Collision_str = input_text;
0064 }
0065
0066 void SetFinal_Data_MC_text(std::pair<std::string, std::string> input_pair) {
0067 Final_Data_MC_text = input_pair;
0068 }
0069
0070 void SetSystUncPlot_Ymax(double Ymax_in) {
0071 SystUncPlot_Ymax = Ymax_in;
0072 }
0073
0074 void PrepareBaseLineTGraph();
0075 void PrepareMCClosureTGraph();
0076
0077 void DrawAlphaCorrectionPlots(
0078 std::string AlphaCorr_file_directory,
0079 std::vector<std::tuple<double,double,std::string>> additional_text,
0080 std::vector<std::tuple<int, std::string, std::string>> legend_text
0081 );
0082
0083 void DrawGoodPair2DFineBinPlot(std::vector<std::tuple<double,double,std::string>> additional_text = {});
0084
0085 void DrawRecoTrackletDataMCPlot(
0086 std::vector<std::tuple<double,double,std::string>> additional_text,
0087 std::vector<std::tuple<int, std::string, std::string>> legend_text
0088 );
0089
0090 void SetPHOBOSData(
0091 std::string data_directory_in,
0092 std::string data_file_name_in
0093 ){
0094 PHOBOS_data_directory = data_directory_in;
0095 PHOBOS_data_file_name = data_file_name_in;
0096 Have_PHOBOS = true;
0097 }
0098
0099 std::string GetOutputFileName() {
0100 return output_folder_name;
0101 }
0102
0103 void PrepareStatisticalError();
0104 void PrepareRunSegmentError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0105 void PrepareClusAdcError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0106 void PrepareGeoOffsetError(std::string file_directory_in, std::string alpha_corr_directory_in);
0107 void PrepareDeltaPhiError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0108 void PrepareClusPhiSizeError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0109 void PrepareStrangenessError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0110 void PrepareGeneratorError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in);
0111 void PrepareMCMergedError(std::vector<std::string> file_directory_vec_in);
0112 void PrepareFinalError();
0113 void PrepareFinalResult(double Hist_Y_max);
0114 void EndRun();
0115
0116
0117
0118 protected:
0119
0120 int runnumber;
0121 int Mbin;
0122 std::string StandardData_directory;
0123 std::string StandardData_file_name;
0124 std::string StandardMC_directory;
0125 std::string StandardMC_file_name;
0126 std::string sPH_label;
0127
0128 std::string Output_directory;
0129
0130
0131 std::string final_output_directory;
0132
0133
0134 TFile * file_in_data_standard;
0135 TFile * file_in_MC_standard;
0136 TH1D * h1D_data_standard = nullptr;
0137 TGraphErrors * gE_data_final = nullptr;
0138 TH1D * h1D_truth_standard = nullptr;
0139
0140 TH1D * h1D_MC_closure_standard = nullptr;
0141 TGraph * gr_MC_closure_standard = nullptr;
0142
0143
0144 void h1D_to_AbsRatio(TH1D * h1D_in);
0145 std::pair<double, double> GetH1DMinMax(TH1D * h1D_in);
0146 std::vector<TH1D*> h1D_RunSegmentError_vec;
0147 std::vector<TH1D*> h1D_ClusAdcError_vec;
0148 std::vector<TH1D*> h1D_GeoOffsetError_vec;
0149 std::vector<TH1D*> h1D_DeltaPhiError_vec;
0150 std::vector<TH1D*> h1D_ClusPhiSizeError_vec;
0151 std::vector<TH1D*> h1D_StrangenessError_vec;
0152 std::vector<TH1D*> h1D_GeneratorError_vec;
0153 std::vector<TH1D*> h1D_MCMergedError_vec;
0154
0155 bool Have_PHOBOS = false;
0156 std::pair<std::pair<double,double>, std::string> AnaDescription;
0157 std::pair<std::pair<double,double>, std::string> Collision_str;
0158 std::pair<std::string, std::string> Final_Data_MC_text = {"",""};
0159
0160
0161 TH1D * h1D_error_statistic = nullptr;
0162 TH1D * h1D_error_Run_segmentation = nullptr;
0163 TH1D * h1D_error_ClusAdc = nullptr;
0164 TH1D * h1D_error_GeoOffset = nullptr;
0165 TH1D * h1D_error_DeltaPhi = nullptr;
0166 TH1D * h1D_error_ClusPhiSize = nullptr;
0167 TH1D * h1D_error_Strangeness = nullptr;
0168 TH1D * h1D_error_Generator = nullptr;
0169 TH1D * h1D_error_MCMerged = nullptr;
0170 TH1D * h1D_error_Final;
0171
0172
0173 TGraph * gr_dNdEta_baseline;
0174 TGraph * gr_recoTracklet_baseline;
0175
0176
0177 std::pair<double, double> eta_range = {-1.9, 1.9};
0178 void PrepareOutputFolderName();
0179 TH1D * h1D_FindLargestOnes(std::string hist_name, std::vector<TH1D*> h1D_vec_in);
0180 TGraph * h1D_to_TGraph(TH1D * hist_in);
0181 TGraph * GetRatioGr(TGraph * gr_numerator, TGraph * gr_denominator);
0182 std::string output_folder_name;
0183 TFile * file_out;
0184 TTree * tree_out;
0185
0186 std::pair<double,double> UncRange_StatUnc = {std::nan("1"), std::nan("1")};
0187 std::pair<double,double> UncRange_RunSegment = {std::nan("1"), std::nan("1")};
0188 std::pair<double,double> UncRange_ClusAdc = {std::nan("1"), std::nan("1")};
0189 std::pair<double,double> UncRange_GeoOffset = {std::nan("1"), std::nan("1")};
0190 std::pair<double,double> UncRange_DeltaPhi = {std::nan("1"), std::nan("1")};
0191 std::pair<double,double> UncRange_ClusPhiSize = {std::nan("1"), std::nan("1")};
0192 std::pair<double,double> UncRange_Strangeness = {std::nan("1"), std::nan("1")};
0193 std::pair<double,double> UncRange_Generator = {std::nan("1"), std::nan("1")};
0194 std::pair<double,double> UncRange_Final = {std::nan("1"), std::nan("1")};
0195
0196 TCanvas * c1;
0197 TPad * pad1;
0198 TPad * pad2;
0199 TLine * line;
0200
0201 TLatex * ltx;
0202 TLatex * draw_text;
0203 TLegend * leg_errors;
0204 TLegend * leg_final;
0205 TLegend * leg_variation;
0206 TLegend * leg_variation_recoTracklet;
0207 TLegend * leg_TruthReco;
0208
0209 double SystUncPlot_Ymax = 0.11;
0210
0211
0212 std::string PHOBOS_data_directory;
0213 std::string PHOBOS_data_file_name;
0214 TGraphAsymmErrors * GetPHOBOSData();
0215
0216
0217
0218 std::string StandardData_h1D_name = "h1D_RotatedBkg_RecoTrackletEtaPerEvtPostAC";
0219 std::string StandardTruth_h1D_name = "h1D_TruedNdEta";
0220
0221 std::string h1D_RecoTracklet_name = "h1D_RotatedBkg_RecoTrackletEtaPerEvt";
0222 std::string h1D_AlphaCorr_name = "h1D_RotatedBkg_alpha_correction";
0223 std::string h2D_GoodProtoTracklet_EtaVtxZ_FineBin_name = "h2D_GoodProtoTracklet_EtaVtxZ_FineBin";
0224
0225 const std::vector<std::string> color_code = {
0226 "#9e0142",
0227 "#66c2a5",
0228 "#f46d43",
0229 "#3288bd",
0230 "#fee08b",
0231 "#5e4fa2",
0232 "#00A1FF",
0233 "#FF42A1",
0234 "#000000",
0235
0236
0237 "#abdda4",
0238 "#e6f598",
0239 "#fdae61",
0240 "#d53e4f"
0241 };
0242
0243 const std::vector<int> marker_code = {
0244 25,
0245 28,
0246 27,
0247 26
0248
0249
0250
0251
0252
0253 };
0254 };
0255
0256 #endif