Back to home page

sPhenix code displayed by LXR

 
 

    


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 // #include "../Constants.h"
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); // note : run1, run2 // todo: the baseline text in the back
0105         void PrepareClusAdcError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in); // note : NoThreshold
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); // note : 0.018 and 0.024
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); // note : strangeness enhancement
0110         void PrepareGeneratorError(std::vector<std::string> file_directory_vec_in, std::vector<std::string> file_title_in, std::string leg_header_in); // note : generator variation
0111         void PrepareMCMergedError(std::vector<std::string> file_directory_vec_in); // note : the errror due to different ways of MC merged
0112         void PrepareFinalError();
0113         void PrepareFinalResult(double Hist_Y_max);
0114         void EndRun();
0115 
0116         
0117 
0118     protected:
0119         // note : for the constructor
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         // note : for the standard
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         // note : for the analysis 
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         // note : for the errors
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         // note : the TGraph
0173         TGraph * gr_dNdEta_baseline;
0174         TGraph * gr_recoTracklet_baseline;
0175 
0176         // note : for the final results 
0177         std::pair<double, double> eta_range = {-1.9, 1.9}; // todo : the default eta range
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; // note : for ratio
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         // note : PHOBOS data
0212         std::string PHOBOS_data_directory;
0213         std::string PHOBOS_data_file_name;
0214         TGraphAsymmErrors * GetPHOBOSData();
0215 
0216 
0217         // note : for constants 
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             // 21,
0249             // 23,
0250             // 27,
0251             // 28,
0252             // 29
0253         };
0254 };
0255 
0256 #endif