Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-10 08:12:50

0001 #include "sPhenixStyle.C"
0002 
0003 int TCanvasInTFile_MakePlot()
0004 {   
0005     string input_directory = "/sphenix/tg/tg01/commissioning/INTT/work/cwshih/seflgendata/run_54280_HR_Dec042024/completed/Run24NewCode_EvtVtxZTracklet/completed";
0006     string intput_filename = "Plot_Data_EvtVtxZProtoTracklet_FieldOff_BcoFullDiff_VtxZReco_Tracklet_TrackletRotate_FirstRun20241218_00054280_00000.root";
0007     string output_direcotry = input_directory + "/INTTvtxZEventDisplay";
0008     bool isInternal = true;
0009     string plot_text = (isInternal) ? "Internal" : "Preliminary";
0010     string Bid_pad_name = "pad_EvtZDist";
0011     bool DrawLegend = true;
0012 
0013     system(Form("if [ ! -d %s ]; then mkdir -p %s; fi",output_direcotry.c_str(),output_direcotry.c_str()));
0014 
0015     TFile * file_in = TFile::Open(Form("%s/%s",input_directory.c_str(),intput_filename.c_str()));
0016 
0017     SetsPhenixStyle();
0018 
0019     std::map<std::string, TCanvas*> data_canvas_map;
0020     std::map<std::string, TPad*> data_pad_map;
0021     std::map<std::string, TF1*> data_TF1_map;
0022 
0023     const std::vector<std::string> color_code = {
0024         "#9e0142",
0025         "#d53e4f",
0026         "#f46d43",
0027         "#fdae61",
0028         "#fee08b",
0029         "#e6f598",
0030         "#abdda4",
0031         "#66c2a5",
0032         "#3288bd",
0033         "#5e4fa2" 
0034     };
0035 
0036     TLatex * ltx = new TLatex();
0037     ltx->SetNDC();
0038     ltx->SetTextSize(0.045);
0039     ltx->SetTextAlign(31);
0040 
0041     TLegend * leg = new TLegend(0.2,0.68,0.8,0.77);
0042     leg -> SetNColumns(2);
0043     leg -> SetBorderSize(0);
0044     leg -> SetTextSize(0.02);
0045     leg -> SetMargin(0.2);
0046 
0047     for (TObject* keyAsObj : *file_in->GetListOfKeys())
0048     {
0049         auto key = dynamic_cast<TKey*>(keyAsObj);
0050         std::string canvas_name  = key->GetName();
0051         std::string class_name = key->GetClassName();
0052 
0053         std::cout<<std::endl;
0054         std::cout<<"canvas_name : "<<canvas_name<<", class_name : "<<class_name<<std::endl;
0055 
0056         if (class_name == "TCanvas")
0057         {
0058             data_pad_map.clear();
0059             data_TF1_map.clear();
0060 
0061             data_canvas_map[canvas_name.c_str()] = (TCanvas*) file_in -> Get( canvas_name.c_str() );
0062 
0063             TList *primitives = data_canvas_map[canvas_name.c_str()]->GetListOfPrimitives();
0064 
0065             // Iterate through the list to find TPads
0066             TIter next(primitives);
0067             TObject *obj;
0068             std::cout << "List of TPad objects in the canvas:" << std::endl;
0069             while ((obj = next())) {
0070                 if (obj->InheritsFrom("TPad")) {
0071                     TPad *pad = dynamic_cast<TPad*>(obj);
0072                     if (pad) {
0073                         std::cout << "TPad Name: " << pad->GetName() << ", Title: " << pad->GetTitle() << std::endl;
0074 
0075                         data_pad_map[Form("%s_%s",canvas_name.c_str(),pad->GetName())] = dynamic_cast<TPad*>(data_canvas_map[canvas_name.c_str()]->GetPrimitive(pad->GetName()));
0076                     }
0077                 }
0078             }
0079 
0080             for (auto &pair : data_pad_map){
0081                 int line_count = 0;
0082                 std::cout<<"pair.first : "<<pair.first<<std::endl;
0083                 TList *primitives = data_pad_map[pair.first]->GetListOfPrimitives();
0084 
0085                 TIter next(primitives);
0086                 while ((obj = next())) {
0087                     if (obj->InheritsFrom("TF1")) {
0088                         TF1 *tf1 = dynamic_cast<TF1*>(obj);
0089                         if (tf1) {
0090                             std::cout << "TF1 Name: " << tf1->GetName() << ", Title: " << tf1->GetTitle() << std::endl;
0091 
0092                             data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())] = dynamic_cast<TF1*>(data_pad_map[pair.first]->GetPrimitive(tf1->GetName()));
0093                             data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())] -> SetLineColor( TColor::GetColor(color_code[line_count].c_str()) );
0094                             data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())] -> SetLineWidth(1);
0095                             // cout<<Form("%s_%s",pair.first.c_str(),tf1->GetName())<<" get range: "<<data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())]->GetXmin()<<" ~ "<<data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())]->GetXmax()<<endl;
0096 
0097                             double fit_xmin, fit_xmax;
0098                             data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())] -> GetRange(fit_xmin, fit_xmax);
0099 
0100                             leg -> AddEntry(data_TF1_map[Form("%s_%s",pair.first.c_str(),tf1->GetName())], Form("Gaus, range: [%.2f, %.2f] cm", fit_xmin, fit_xmax), "l");
0101 
0102                             line_count++;
0103                         }
0104                     }
0105                 }
0106             }
0107 
0108             // data_canvas_map[canvas_name.c_str()]->Update();
0109             // data_canvas_map[canvas_name.c_str()]->Draw();
0110             data_canvas_map[canvas_name.c_str()] -> cd();
0111             data_pad_map[Form("%s_%s", canvas_name.c_str(), Bid_pad_name.c_str())]->cd();
0112             ltx->DrawLatex(1 - gPad->GetRightMargin(), 1 - gPad->GetTopMargin() + 0.01, Form("#it{#bf{sPHENIX}} %s", plot_text.c_str()));
0113             if (DrawLegend) {leg->Draw("same");}
0114             data_canvas_map[canvas_name.c_str()]->Print(Form("%s/%s.pdf",output_direcotry.c_str(),canvas_name.c_str()));
0115             
0116             leg -> Clear();
0117             std::cout<<"------------------------------------------------------------------------------------"<<std::endl;
0118 
0119         }
0120 
0121 
0122     }
0123 
0124     
0125 
0126 
0127     return 0;
0128 }