Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:20

0001 std::vector<std::string> v_color{"#99cc99", "#6699cc", "#f2777a", "#7F167F"};
0002 
0003 void drawAndSaveCanvas(std::pair<int, int> canvasSize,                   //
0004                        std::tuple<float, float, float, float> axisrange, //
0005                        std::vector<TScatter *> &vec_tscat,               //
0006                        std::vector<TLine *> &tline,                      //
0007                        const std::vector<std::string> &v_leg,            //
0008                        const std::string &xtitle,                        //
0009                        const std::string &ytitle,                        //
0010                        const std::string &plotname                       //
0011 
0012 )
0013 {
0014     TCanvas *c = new TCanvas("c", "c", canvasSize.first, canvasSize.second);
0015     gPad->SetRightMargin(0.05);
0016     gPad->SetTopMargin(0.05 * vec_tscat.size() + 0.03);
0017     c->cd();
0018     TH2F *h = new TH2F("h", "", 1, std::get<0>(axisrange), std::get<1>(axisrange), 1, std::get<2>(axisrange), std::get<3>(axisrange));
0019     h->GetXaxis()->SetTitle(xtitle.c_str());
0020     h->GetYaxis()->SetTitle(ytitle.c_str());
0021     h->Draw("axis");
0022     for (size_t i = 0; i < vec_tscat.size(); ++i)
0023     {
0024         vec_tscat[i]->SetMarkerSize(0.5);
0025         // vec_tscat[i]->SetMarkerColor(TColor::GetColor(v_color[i].c_str()));
0026         vec_tscat[i]->Draw();
0027     }
0028 
0029     gPad->Update();
0030     gPad->Modified();
0031 
0032     for (auto &line : tline)
0033     {
0034         line->Draw("same");
0035     }
0036 
0037     // redraw the TScatter object of "Event vertex" to make it on top of the TGraph2D objects
0038     auto it_evtvtx = std::find(v_leg.begin(), v_leg.end(), "Event vertex");
0039     if (it_evtvtx != v_leg.end())
0040     {
0041         int index = std::distance(v_leg.begin(), it_evtvtx);
0042         vec_tscat[index]->Draw();
0043     }
0044 
0045     TLegend *leg = new TLegend(gPad->GetLeftMargin(),           //
0046                                1 - gPad->GetTopMargin() + 0.01, //
0047                                gPad->GetLeftMargin() + 0.3,     //
0048                                0.98                             //
0049     );
0050     leg->SetBorderSize(0);
0051     leg->SetFillStyle(0);
0052     leg->SetTextSize(0.04);
0053     for (size_t i = 0; i < vec_tscat.size(); ++i)
0054     {
0055         leg->AddEntry(vec_tscat[i], v_leg[i].c_str(), "p");
0056     }
0057     leg->Draw();
0058 
0059     c->SaveAs(Form("%s.pdf", plotname.c_str()));
0060     c->SaveAs(Form("%s.png", plotname.c_str()));
0061 }
0062 
0063 void drawTGraph2D(std::pair<int, int> canvasSize,                                 //
0064                   std::tuple<float, float, float, float, float, float> axisrange, //
0065                   std::vector<TGraph2D *> &vec_tg2D,                              //
0066                   std::vector<TPolyLine3D *> &tline,                              //
0067                   const std::vector<std::string> &v_leg,                          //
0068                   const std::string &xtitle,                                      //
0069                   const std::string &ytitle,                                      //
0070                   const std::string &ztitle,                                      //
0071                   const std::string &plotname                                     //
0072 )
0073 {
0074     TCanvas *c = new TCanvas("c", "c", canvasSize.first, canvasSize.second);
0075     c->SetTheta(-30);
0076     c->SetPhi(-30);
0077     gPad->SetTopMargin(0.05 * vec_tg2D.size() + 0.03);
0078     c->cd();
0079 
0080     // Unpack axis range values (assumed order: x_min, x_max, y_min, y_max, z_min, z_max)
0081     double xlow = std::get<0>(axisrange);
0082     double xhigh = std::get<1>(axisrange);
0083     double ylow = std::get<2>(axisrange);
0084     double yhigh = std::get<3>(axisrange);
0085     double zlow = std::get<4>(axisrange);
0086     double zhigh = std::get<5>(axisrange);
0087 
0088     // Create a dummy histogram to set the frame.
0089     // Use enough bins (e.g. 50) so that the full range is defined without precision issues.
0090     int nbinsX = 1, nbinsY = 1, nbinsZ = 1;
0091     TH3F *dummy = new TH3F("dummy", "", nbinsX, xlow, xhigh, nbinsY, ylow, yhigh, nbinsZ, zlow, zhigh);
0092     // Remove fill and stats so only the frame is drawn.
0093     dummy->SetFillStyle(0);
0094     dummy->SetStats(0);
0095 
0096     // Set the axis titles
0097     dummy->GetXaxis()->SetTitle(xtitle.c_str());
0098     dummy->GetYaxis()->SetTitle(ytitle.c_str());
0099     dummy->GetZaxis()->SetTitle(ztitle.c_str());
0100 
0101     // Draw the frame (using "HIST" draws the histogram frame, including the titles)
0102     dummy->Draw("HIST");
0103 
0104     // Now draw each TGraph2D object on top of the dummy frame.
0105     for (size_t i = 0; i < vec_tg2D.size(); ++i)
0106     {
0107         // vec_tg2D[i]->SetMarkerStyle(20);
0108         vec_tg2D[i]->SetMarkerSize(0.5);
0109         // vec_tg2D[i]->SetMarkerColor(TColor::GetColor(v_color[i].c_str()));
0110         vec_tg2D[i]->Draw("P SAME");
0111     }
0112 
0113     // Draw any additional TPolyLine3D objects
0114     for (auto &line : tline)
0115     {
0116         line->Draw("SAME");
0117     }
0118 
0119     auto it_evtvtx = std::find(v_leg.begin(), v_leg.end(), "Event vertex");
0120     if (it_evtvtx != v_leg.end())
0121     {
0122         int index = std::distance(v_leg.begin(), it_evtvtx);
0123         vec_tg2D[index]->Draw("P SAME");
0124     }
0125 
0126     TLegend *leg = new TLegend(gPad->GetLeftMargin(),           //
0127                                1 - gPad->GetTopMargin() + 0.01, //
0128                                gPad->GetLeftMargin() + 0.3,     //
0129                                0.98                             //
0130     );
0131     leg->SetBorderSize(0);
0132     leg->SetFillStyle(0);
0133     leg->SetTextSize(0.04);
0134     for (size_t i = 0; i < vec_tg2D.size(); ++i)
0135     {
0136         leg->AddEntry(vec_tg2D[i], v_leg[i].c_str(), "p");
0137     }
0138     leg->Draw();
0139 
0140     c->SaveAs(Form("%s.pdf", plotname.c_str()));
0141     c->SaveAs(Form("%s.png", plotname.c_str()));
0142 }
0143 
0144 void recotkl_matchdisplay()
0145 {
0146     // directory to save the output plots; if the directory does not exist, create it using
0147     std::string plotdir = "./recotkl_matchEff/display";
0148     system(Form("mkdir -p %s", plotdir.c_str()));
0149 
0150     // TH3F *hM_tklposition3D = new TH3F("hM_tklposition3D", "Tracklet position 3D", 250, -25, 25, 240, -12, 12, 240, -12, 12);
0151 
0152     TFile *f = new TFile("/sphenix/tg/tg01/hf/hjheng/ppg02/minitree/TrackletMinitree_Sim_SIMPLE_ana466_20250214/dRcut999p0_NominalVtxZ_RandomClusSet0_clusAdcCutSet0_clusPhiSizeCutSet0/minitree_00000.root", "READ");
0153     TTree *t = (TTree *)f->Get("minitree");
0154 
0155     // get the vectors from the TTree
0156     int event;
0157     float PV_x, PV_y, PV_z;
0158     std::vector<float> *tklclus1x = 0, *tklclus1y = 0, *tklclus1z = 0, *tklclus2x = 0, *tklclus2y = 0, *tklclus2z = 0, *tklclus1phi = 0, *tklclus1eta = 0, *tklclus2phi = 0, *tklclus2eta = 0;
0159     std::vector<float> *PrimaryG4P_eta = 0, *PrimaryG4P_phi = 0, *GenHadron_eta = 0, *GenHadron_phi = 0;
0160     std::vector<int> *recotkl_clus1_matchedtrackID = 0, *recotkl_clus2_matchedtrackID = 0;
0161     std::vector<float> *recotkl_matchedPG4P_eta = 0, *recotkl_matchedPG4P_phi = 0;
0162     t->SetBranchAddress("event", &event);
0163     t->SetBranchAddress("PV_x", &PV_x);
0164     t->SetBranchAddress("PV_y", &PV_y);
0165     t->SetBranchAddress("PV_z", &PV_z);
0166     t->SetBranchAddress("tklclus1x", &tklclus1x);
0167     t->SetBranchAddress("tklclus1y", &tklclus1y);
0168     t->SetBranchAddress("tklclus1z", &tklclus1z);
0169     t->SetBranchAddress("tklclus2x", &tklclus2x);
0170     t->SetBranchAddress("tklclus2y", &tklclus2y);
0171     t->SetBranchAddress("tklclus2z", &tklclus2z);
0172     t->SetBranchAddress("tklclus1Phi", &tklclus1phi);
0173     t->SetBranchAddress("tklclus1Eta", &tklclus1eta);
0174     t->SetBranchAddress("tklclus2Phi", &tklclus2phi);
0175     t->SetBranchAddress("tklclus2Eta", &tklclus2eta);
0176     t->SetBranchAddress("PrimaryG4P_eta", &PrimaryG4P_eta);
0177     t->SetBranchAddress("PrimaryG4P_phi", &PrimaryG4P_phi);
0178     t->SetBranchAddress("GenHadron_eta", &GenHadron_eta);
0179     t->SetBranchAddress("GenHadron_phi", &GenHadron_phi);
0180     t->SetBranchAddress("recotkl_clus1_matchedtrackID", &recotkl_clus1_matchedtrackID);
0181     t->SetBranchAddress("recotkl_clus2_matchedtrackID", &recotkl_clus2_matchedtrackID);
0182     t->SetBranchAddress("recotkl_matchedPG4P_eta", &recotkl_matchedPG4P_eta);
0183     t->SetBranchAddress("recotkl_matchedPG4P_phi", &recotkl_matchedPG4P_phi);
0184 
0185     for (int i = 0; i < 1; i++)
0186     {
0187         t->GetEntry(i);
0188 
0189         int ntkl = tklclus1x->size();
0190         int ntkl_matchedtrack = 0, ntkl_unmatchedtrack = 0, ntkl_matchedtrack_positiveID = 0, ntkl_matchedtrack_negativeID = 0;
0191         std::vector<double> tkl_clusx_matched_posTrackID, tkl_clusy_matched_posTrackID, tkl_clusz_matched_posTrackID, tkl_clusrho_matched_posTrackID;
0192         std::vector<double> tkl_clusx_matched_negTrackID, tkl_clusy_matched_negTrackID, tkl_clusz_matched_negTrackID, tkl_clusrho_matched_negTrackID;
0193         std::vector<double> tkl_clusx_unmatched, tkl_clusy_unmatched, tkl_clusz_unmatched, tkl_clusrho_unmatched;
0194         std::vector<double> tkl_cluseta_matched_posTrackID, tkl_clusphi_matched_posTrackID, tkl_cluseta_matched_negTrackID, tkl_clusphi_matched_negTrackID, tkl_cluseta_unmatched, tkl_clusphi_unmatched;
0195         std::vector<double> pg4p_eta, pg4p_phi, gh_eta, gh_phi;
0196         std::vector<double> tklmatchedg4p_eta_posTrackID, tklmatchedg4p_phi_posTrackID, tklmatchedg4p_eta_negTrackID, tklmatchedg4p_phi_negTrackID;
0197 
0198         std::vector<TLine *> tklline, tklline_zrho, tline_etaphi, tline_etaphi_matched_posTrackID, tline_etaphi_matched_negTrackID;
0199         std::vector<TPolyLine3D *> tkl3Dline;
0200 
0201         for (size_t j = 0; j < tklclus1x->size(); j++)
0202         {
0203             std::cout << "(x1, y1, matched trackID)=(" << tklclus1x->at(j) << ", " << tklclus1y->at(j) << ", " << recotkl_clus1_matchedtrackID->at(j) << "); (x2, y2, matched trackID)=(" << tklclus2x->at(j) << ", " << tklclus2y->at(j) << ", " << recotkl_clus2_matchedtrackID->at(j) << ")" << std::endl;
0204             // rho is calculated relative to (PV_x, PV_y)
0205             float rho1 = ((tklclus1y->at(j) - PV_y) > 0) ? sqrt(pow(tklclus1x->at(j) - PV_x, 2) + pow(tklclus1y->at(j) - PV_y, 2)) : -sqrt(pow(tklclus1x->at(j) - PV_x, 2) + pow(tklclus1y->at(j) - PV_y, 2));
0206             float rho2 = ((tklclus2y->at(j) - PV_y) > 0) ? sqrt(pow(tklclus2x->at(j) - PV_x, 2) + pow(tklclus2y->at(j) - PV_y, 2)) : -sqrt(pow(tklclus2x->at(j) - PV_x, 2) + pow(tklclus2y->at(j) - PV_y, 2));
0207 
0208             if (recotkl_clus1_matchedtrackID->at(j) == recotkl_clus2_matchedtrackID->at(j) && recotkl_clus1_matchedtrackID->at(j) > 0)
0209             {
0210                 tkl_clusx_matched_posTrackID.push_back(tklclus1x->at(j));
0211                 tkl_clusx_matched_posTrackID.push_back(tklclus2x->at(j));
0212                 tkl_clusy_matched_posTrackID.push_back(tklclus1y->at(j));
0213                 tkl_clusy_matched_posTrackID.push_back(tklclus2y->at(j));
0214                 tkl_clusz_matched_posTrackID.push_back(tklclus1z->at(j));
0215                 tkl_clusz_matched_posTrackID.push_back(tklclus2z->at(j));
0216                 tkl_clusrho_matched_posTrackID.push_back(rho1);
0217                 tkl_clusrho_matched_posTrackID.push_back(rho2);
0218                 tkl_cluseta_matched_posTrackID.push_back(tklclus1eta->at(j));
0219                 tkl_cluseta_matched_posTrackID.push_back(tklclus2eta->at(j));
0220                 tkl_clusphi_matched_posTrackID.push_back(tklclus1phi->at(j));
0221                 tkl_clusphi_matched_posTrackID.push_back(tklclus2phi->at(j));
0222 
0223                 tklmatchedg4p_eta_posTrackID.push_back(recotkl_matchedPG4P_eta->at(j));
0224                 tklmatchedg4p_phi_posTrackID.push_back(recotkl_matchedPG4P_phi->at(j));
0225             }
0226             else if (recotkl_clus1_matchedtrackID->at(j) == recotkl_clus2_matchedtrackID->at(j) && recotkl_clus1_matchedtrackID->at(j) < 0)
0227             {
0228                 tkl_clusx_matched_negTrackID.push_back(tklclus1x->at(j));
0229                 tkl_clusx_matched_negTrackID.push_back(tklclus2x->at(j));
0230                 tkl_clusy_matched_negTrackID.push_back(tklclus1y->at(j));
0231                 tkl_clusy_matched_negTrackID.push_back(tklclus2y->at(j));
0232                 tkl_clusz_matched_negTrackID.push_back(tklclus1z->at(j));
0233                 tkl_clusz_matched_negTrackID.push_back(tklclus2z->at(j));
0234                 tkl_clusrho_matched_negTrackID.push_back(rho1);
0235                 tkl_clusrho_matched_negTrackID.push_back(rho2);
0236                 tkl_cluseta_matched_negTrackID.push_back(tklclus1eta->at(j));
0237                 tkl_cluseta_matched_negTrackID.push_back(tklclus2eta->at(j));
0238                 tkl_clusphi_matched_negTrackID.push_back(tklclus1phi->at(j));
0239                 tkl_clusphi_matched_negTrackID.push_back(tklclus2phi->at(j));
0240 
0241                 tklmatchedg4p_eta_negTrackID.push_back(recotkl_matchedPG4P_eta->at(j));
0242                 tklmatchedg4p_phi_negTrackID.push_back(recotkl_matchedPG4P_phi->at(j));
0243             }
0244             else
0245             {
0246                 tkl_clusx_unmatched.push_back(tklclus1x->at(j));
0247                 tkl_clusx_unmatched.push_back(tklclus2x->at(j));
0248                 tkl_clusy_unmatched.push_back(tklclus1y->at(j));
0249                 tkl_clusy_unmatched.push_back(tklclus2y->at(j));
0250                 tkl_clusz_unmatched.push_back(tklclus1z->at(j));
0251                 tkl_clusz_unmatched.push_back(tklclus2z->at(j));
0252                 tkl_clusrho_unmatched.push_back(rho1);
0253                 tkl_clusrho_unmatched.push_back(rho2);
0254                 tkl_cluseta_unmatched.push_back(tklclus1eta->at(j));
0255                 tkl_cluseta_unmatched.push_back(tklclus2eta->at(j));
0256                 tkl_clusphi_unmatched.push_back(tklclus1phi->at(j));
0257                 tkl_clusphi_unmatched.push_back(tklclus2phi->at(j));
0258             }
0259 
0260             TLine *tkl = new TLine(tklclus1x->at(j), tklclus1y->at(j), tklclus2x->at(j), tklclus2y->at(j));
0261             TLine *tkl_zrho = new TLine(tklclus1z->at(j), rho1, tklclus2z->at(j), rho2);
0262             TLine *tkl2vtx_xy = new TLine(tklclus1x->at(j), tklclus1y->at(j), PV_x, PV_y);
0263             TLine *tkl2vtx_zrho = new TLine(tklclus1z->at(j), rho1, PV_z, 0);
0264             TLine *tkl_etaphi = new TLine(tklclus1eta->at(j), tklclus1phi->at(j), tklclus2eta->at(j), tklclus2phi->at(j));
0265             TLine *assoc_tklclus1_g4p = new TLine(tklclus1eta->at(j), tklclus1phi->at(j), recotkl_matchedPG4P_eta->at(j), recotkl_matchedPG4P_phi->at(j));
0266             TLine *assoc_tklclus2_g4p = new TLine(tklclus2eta->at(j), tklclus2phi->at(j), recotkl_matchedPG4P_eta->at(j), recotkl_matchedPG4P_phi->at(j));
0267             if (recotkl_clus1_matchedtrackID->at(j) == recotkl_clus2_matchedtrackID->at(j))
0268             {
0269                 ntkl_matchedtrack++;
0270                 if (recotkl_clus1_matchedtrackID->at(j) > 0)
0271                 {
0272                     ntkl_matchedtrack_positiveID++;
0273                     tkl->SetLineColor(TColor::GetColor("#99cc99"));
0274                     tkl_zrho->SetLineColor(TColor::GetColor("#99cc99"));
0275                     tkl_etaphi->SetLineColor(TColor::GetColor("#99cc99"));
0276                     tline_etaphi_matched_posTrackID.push_back(tkl_etaphi);
0277                     tkl2vtx_xy->SetLineColorAlpha(TColor::GetColor("#99cc99"), 0.4);
0278                     tkl2vtx_xy->SetLineStyle(2);
0279                     tkl2vtx_zrho->SetLineColorAlpha(TColor::GetColor("#99cc99"), 0.4);
0280                     tkl2vtx_zrho->SetLineStyle(2);
0281                     assoc_tklclus1_g4p->SetLineColorAlpha(TColor::GetColor("#5E8B7E"), 0.5);
0282                     assoc_tklclus2_g4p->SetLineColorAlpha(TColor::GetColor("#5E8B7E"), 0.5);
0283                     assoc_tklclus1_g4p->SetLineStyle(2);
0284                     assoc_tklclus2_g4p->SetLineStyle(2);
0285                     tline_etaphi_matched_posTrackID.push_back(assoc_tklclus1_g4p);
0286                     tline_etaphi_matched_posTrackID.push_back(assoc_tklclus2_g4p);
0287                 }
0288                 else
0289                 {
0290                     ntkl_matchedtrack_negativeID++;
0291                     tkl->SetLineColor(TColor::GetColor("#6699cc"));
0292                     tkl_zrho->SetLineColor(TColor::GetColor("#6699cc"));
0293                     tkl_etaphi->SetLineColor(TColor::GetColor("#6699cc"));
0294                     tline_etaphi_matched_negTrackID.push_back(tkl_etaphi);
0295                     tkl2vtx_xy->SetLineColorAlpha(TColor::GetColor("#6699cc"), 0.4);
0296                     tkl2vtx_xy->SetLineStyle(2);
0297                     tkl2vtx_zrho->SetLineColorAlpha(TColor::GetColor("#6699cc"), 0.4);
0298                     tkl2vtx_zrho->SetLineStyle(2);
0299                     assoc_tklclus1_g4p->SetLineColorAlpha(TColor::GetColor("#0F4C75"), 0.8);
0300                     assoc_tklclus2_g4p->SetLineColorAlpha(TColor::GetColor("#0F4C75"), 0.8);
0301                     assoc_tklclus1_g4p->SetLineStyle(2);
0302                     assoc_tklclus2_g4p->SetLineStyle(2);
0303                     tline_etaphi_matched_negTrackID.push_back(assoc_tklclus1_g4p);
0304                     tline_etaphi_matched_negTrackID.push_back(assoc_tklclus2_g4p);
0305                 }
0306             }
0307             else
0308             {
0309                 ntkl_unmatchedtrack++;
0310                 tkl->SetLineColor(TColor::GetColor("#f2777a"));
0311                 tkl_zrho->SetLineColor(TColor::GetColor("#f2777a"));
0312                 tkl_etaphi->SetLineColor(TColor::GetColor("#f2777a"));
0313 
0314                 tkl2vtx_xy->SetLineColorAlpha(TColor::GetColor("#f2777a"), 0.4);
0315                 tkl2vtx_xy->SetLineStyle(2);
0316                 tkl2vtx_zrho->SetLineColorAlpha(TColor::GetColor("#f2777a"), 0.4);
0317                 tkl2vtx_zrho->SetLineStyle(2);
0318             }
0319             tklline.push_back(tkl);
0320             tklline.push_back(tkl2vtx_xy);
0321             tklline_zrho.push_back(tkl_zrho);
0322             tklline_zrho.push_back(tkl2vtx_zrho);
0323             tline_etaphi.push_back(tkl_etaphi);
0324 
0325             // z-y-x
0326             // hM_tklposition3D->Fill(tklclus1z->at(j), tklclus1y->at(j), tklclus1x->at(j));
0327             // hM_tklposition3D->Fill(tklclus2z->at(j), tklclus2y->at(j), tklclus2x->at(j));
0328             TPolyLine3D *tkl3D = new TPolyLine3D(2);
0329             tkl3D->SetPoint(0, tklclus1z->at(j), tklclus1y->at(j), tklclus1x->at(j));
0330             tkl3D->SetPoint(1, tklclus2z->at(j), tklclus2y->at(j), tklclus2x->at(j));
0331             TPolyLine3D *tkl2vtx3D = new TPolyLine3D(2);
0332             tkl2vtx3D->SetPoint(0, tklclus1z->at(j), tklclus1y->at(j), tklclus1x->at(j));
0333             tkl2vtx3D->SetPoint(1, PV_z, PV_y, PV_x);
0334             TPolyLine3D *vtxline = new TPolyLine3D(2);
0335             vtxline->SetPoint(0, -25, PV_y, PV_x);
0336             vtxline->SetPoint(1, 25, PV_y, PV_x);
0337             vtxline->SetLineColorAlpha(kBlack, 0.4);
0338             vtxline->SetLineStyle(1);
0339             if (recotkl_clus1_matchedtrackID->at(j) == recotkl_clus2_matchedtrackID->at(j) && recotkl_clus1_matchedtrackID->at(j) > 0)
0340             {
0341                 tkl3D->SetLineColor(TColor::GetColor("#99cc99"));
0342                 tkl2vtx3D->SetLineColorAlpha(TColor::GetColor("#99cc99"), 0.2);
0343                 tkl2vtx3D->SetLineStyle(2);
0344             }
0345             else if (recotkl_clus1_matchedtrackID->at(j) == recotkl_clus2_matchedtrackID->at(j) && recotkl_clus1_matchedtrackID->at(j) < 0)
0346             {
0347                 tkl3D->SetLineColor(TColor::GetColor("#6699cc"));
0348                 tkl2vtx3D->SetLineColorAlpha(TColor::GetColor("#6699cc"), 0.2);
0349                 tkl2vtx3D->SetLineStyle(2);
0350             }
0351             else
0352             {
0353                 tkl3D->SetLineColor(TColor::GetColor("#f2777a"));
0354                 tkl2vtx3D->SetLineColorAlpha(TColor::GetColor("#f2777a"), 0.2);
0355                 tkl2vtx3D->SetLineStyle(2);
0356             }
0357             tkl3Dline.push_back(vtxline);
0358             tkl3Dline.push_back(tkl3D);
0359             tkl3Dline.push_back(tkl2vtx3D);
0360         }
0361 
0362         for (size_t j = 0; j < PrimaryG4P_eta->size(); j++)
0363         {
0364             pg4p_eta.push_back(PrimaryG4P_eta->at(j));
0365             pg4p_phi.push_back(PrimaryG4P_phi->at(j));
0366         }
0367 
0368         for (size_t j = 0; j < GenHadron_eta->size(); j++)
0369         {
0370             gh_eta.push_back(GenHadron_eta->at(j));
0371             gh_phi.push_back(GenHadron_phi->at(j));
0372         }
0373 
0374         std::cout << "ntkl = " << ntkl << "; ntkl_matchedtrack = " << ntkl_matchedtrack << "; ntkl_unmatchedtrack = " << ntkl_unmatchedtrack << "; ntkl_matchedtrack_positiveID = " << ntkl_matchedtrack_positiveID << "; ntkl_matchedtrack_negativeID = " << ntkl_matchedtrack_negativeID << std::endl;
0375 
0376         // TScatter objectt
0377         vector<double> evtvtx_x = {PV_x};
0378         vector<double> evtvtx_y = {PV_y};
0379         vector<double> evtvtx_z = {PV_z};
0380         vector<double> evtvtx_rho = {sqrt(PV_x * PV_x + PV_y * PV_y)};
0381         TScatter *scat_evtvertex_xy = new TScatter(1, &evtvtx_x[0], &evtvtx_y[0]);
0382         TScatter *scat_evtvertex_zrho = new TScatter(1, &evtvtx_z[0], &evtvtx_rho[0]);
0383 
0384         TScatter *scat_xy_matched_posTrackID = new TScatter(tkl_clusx_matched_posTrackID.size(), tkl_clusx_matched_posTrackID.data(), tkl_clusy_matched_posTrackID.data());
0385         TScatter *scat_xy_matched_negTrackID = new TScatter(tkl_clusx_matched_negTrackID.size(), tkl_clusx_matched_negTrackID.data(), tkl_clusy_matched_negTrackID.data());
0386         TScatter *scat_xy_unmatched = new TScatter(tkl_clusx_unmatched.size(), tkl_clusx_unmatched.data(), tkl_clusy_unmatched.data());
0387         TScatter *scat_zrho_matched_posTrackID = new TScatter(tkl_clusz_matched_posTrackID.size(), tkl_clusz_matched_posTrackID.data(), tkl_clusrho_matched_posTrackID.data());
0388         TScatter *scat_zrho_matched_negTrackID = new TScatter(tkl_clusz_matched_negTrackID.size(), tkl_clusz_matched_negTrackID.data(), tkl_clusrho_matched_negTrackID.data());
0389         TScatter *scat_zrho_unmatched = new TScatter(tkl_clusz_unmatched.size(), tkl_clusz_unmatched.data(), tkl_clusrho_unmatched.data());
0390 
0391         TScatter *scat_recotkl_clusetaphi_matched_posTrackID = new TScatter(tkl_cluseta_matched_posTrackID.size(), tkl_cluseta_matched_posTrackID.data(), tkl_clusphi_matched_posTrackID.data());
0392         TScatter *scat_recotkl_clusetaphi_matched_negTrackID = new TScatter(tkl_cluseta_matched_negTrackID.size(), tkl_cluseta_matched_negTrackID.data(), tkl_clusphi_matched_negTrackID.data());
0393         TScatter *scat_recotkl_clusetaphi_unmatched = new TScatter(tkl_cluseta_unmatched.size(), tkl_cluseta_unmatched.data(), tkl_clusphi_unmatched.data());
0394         TScatter *scat_primaryG4P_etaphi = new TScatter(pg4p_eta.size(), pg4p_eta.data(), pg4p_phi.data());
0395         TScatter *scat_genHadron_etaphi = new TScatter(gh_eta.size(), gh_eta.data(), gh_phi.data());
0396         TScatter *scat_tklmatchedg4p_etaphi_posTrackID = new TScatter(tklmatchedg4p_eta_posTrackID.size(), tklmatchedg4p_eta_posTrackID.data(), tklmatchedg4p_phi_posTrackID.data());
0397         TScatter *scat_tklmatchedg4p_etaphi_negTrackID = new TScatter(tklmatchedg4p_eta_negTrackID.size(), tklmatchedg4p_eta_negTrackID.data(), tklmatchedg4p_phi_negTrackID.data());
0398 
0399         TGraph2D *gr2D_evtvtx = new TGraph2D(evtvtx_x.size(), evtvtx_z.data(), evtvtx_y.data(), evtvtx_x.data());
0400         TGraph2D *gr2D_matched_posTrackID = new TGraph2D(tkl_clusx_matched_posTrackID.size(), tkl_clusz_matched_posTrackID.data(), tkl_clusy_matched_posTrackID.data(), tkl_clusx_matched_posTrackID.data());
0401         TGraph2D *gr2D_matched_negTrackID = new TGraph2D(tkl_clusx_matched_negTrackID.size(), tkl_clusz_matched_negTrackID.data(), tkl_clusy_matched_negTrackID.data(), tkl_clusx_matched_negTrackID.data());
0402         TGraph2D *gr2D_unmatched = new TGraph2D(tkl_clusx_unmatched.size(), tkl_clusz_unmatched.data(), tkl_clusy_unmatched.data(), tkl_clusx_unmatched.data());
0403 
0404         // drawAndSaveCanvas(std::pair<int, int> canvasSize, std::vector<TScatter *> &vec_tscat, std::vector<TLine *> &tline, std::vector<std::string> &v_leg, const std::string &xtitle, const std::string &ytitle, const std::string &plotname)
0405         std::pair<int, int> canvasSize_xy{550, 700};
0406         scat_evtvertex_xy->SetMarkerColor(TColor::GetColor("#393E46"));
0407         scat_evtvertex_xy->SetMarkerStyle(34);
0408         scat_xy_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0409         scat_xy_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0410         scat_xy_unmatched->SetMarkerColor(TColor::GetColor("#f2777a"));
0411         std::vector<TScatter *> vec_tscat_xy{scat_evtvertex_xy, scat_xy_matched_posTrackID, scat_xy_matched_negTrackID, scat_xy_unmatched};
0412         std::tuple<float, float, float, float> axisrange_xy{-12, 12, -12, 12};
0413         drawAndSaveCanvas(canvasSize_xy, axisrange_xy, vec_tscat_xy, tklline, std::vector<std::string>{"Event vertex", "Tracklet - matched to G4P with trackID>0", "Tracklet - matched to G4P with trackID<0", "Tracklet - not matched to G4P"}, "x [cm]", "y [cm]", plotdir + "/tkl_xy_scatter");
0414 
0415         std::pair<int, int> canvasSize_zrho{800, 500};
0416         scat_evtvertex_zrho->SetMarkerColor(TColor::GetColor("#393E46"));
0417         scat_evtvertex_zrho->SetMarkerStyle(34);
0418         scat_zrho_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0419         scat_zrho_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0420         scat_zrho_unmatched->SetMarkerColor(TColor::GetColor("#f2777a"));
0421         vector<TScatter *> vec_tscat_zrho{scat_evtvertex_zrho, scat_zrho_matched_posTrackID, scat_zrho_matched_negTrackID, scat_zrho_unmatched};
0422         std::tuple<float, float, float, float> axisrange_zrho{-24, 24, -12, 12};
0423         drawAndSaveCanvas(canvasSize_zrho, axisrange_zrho, vec_tscat_zrho, tklline_zrho, std::vector<std::string>{"Event vertex", "Tracklet - matched to G4P with trackID>0", "Tracklet - matched to G4P with trackID<0", "Tracklet - not matched to G4P"}, "z [cm]", "Radius [cm]", plotdir + "/tkl_zrho_scatter");
0424 
0425         std::pair<int, int> canvasSize_etaphi{700, 500};
0426         scat_recotkl_clusetaphi_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0427         scat_recotkl_clusetaphi_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0428         scat_recotkl_clusetaphi_unmatched->SetMarkerColor(TColor::GetColor("#f2777a"));
0429         scat_primaryG4P_etaphi->SetMarkerColor(TColor::GetColor("#7F167F"));
0430         scat_primaryG4P_etaphi->SetMarkerStyle(21);
0431         std::vector<TScatter *> vec_tscat_etaphi_primaryG4P{scat_recotkl_clusetaphi_matched_posTrackID, scat_recotkl_clusetaphi_matched_negTrackID, scat_recotkl_clusetaphi_unmatched, scat_primaryG4P_etaphi};
0432         std::tuple<float, float, float, float> axisrange_etaphi{-2, 2, -3.5, 3.5};
0433         drawAndSaveCanvas(canvasSize_etaphi, axisrange_etaphi, vec_tscat_etaphi_primaryG4P, tline_etaphi, std::vector<std::string>{"Tracklet - matched to G4P with trackID>0", "Tracklet - matched to G4P with trackID<0", "Tracklet - not matched to G4P", "Primary PHG4Particle"}, "#eta", "#phi", plotdir + "/tkl_etaphi_scatter_primaryG4P");
0434 
0435         scat_recotkl_clusetaphi_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0436         scat_recotkl_clusetaphi_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0437         scat_recotkl_clusetaphi_unmatched->SetMarkerColor(TColor::GetColor("#f2777a"));
0438         scat_genHadron_etaphi->SetMarkerColor(TColor::GetColor("#7F167F"));
0439         scat_genHadron_etaphi->SetMarkerStyle(21);
0440         std::vector<TScatter *> vec_tscat_etaphi_genhadron{scat_recotkl_clusetaphi_matched_posTrackID, scat_recotkl_clusetaphi_matched_negTrackID, scat_recotkl_clusetaphi_unmatched, scat_genHadron_etaphi};
0441         drawAndSaveCanvas(canvasSize_etaphi, axisrange_etaphi, vec_tscat_etaphi_genhadron, tline_etaphi, std::vector<std::string>{"Tracklet - matched to G4P with trackID>0", "Tracklet - matched to G4P with trackID<0", "Tracklet - not matched to G4P", "Generated charged hadron"}, "#eta", "#phi", plotdir + "/tkl_etaphi_scatter_genhadron");
0442 
0443         scat_recotkl_clusetaphi_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0444         scat_tklmatchedg4p_etaphi_posTrackID->SetMarkerColor(TColor::GetColor("#5E8B7E"));
0445         scat_tklmatchedg4p_etaphi_posTrackID->SetMarkerStyle(21);
0446         std::vector<TScatter *> vec_tscat_etaphi_tklmatchedg4p_posTrackID{scat_recotkl_clusetaphi_matched_posTrackID, scat_tklmatchedg4p_etaphi_posTrackID};
0447         drawAndSaveCanvas(canvasSize_etaphi, axisrange_etaphi, vec_tscat_etaphi_tklmatchedg4p_posTrackID, tline_etaphi_matched_posTrackID, std::vector<std::string>{"Tracklet - matched to G4P with trackID>0", "Matched PHG4Particle with trackID>0"}, "#eta", "#phi", plotdir + "/tkl_etaphi_scatter_tklmatchedg4p_posTrackID");
0448 
0449         scat_recotkl_clusetaphi_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0450         scat_tklmatchedg4p_etaphi_negTrackID->SetMarkerColor(TColor::GetColor("#0F4C75"));
0451         scat_tklmatchedg4p_etaphi_negTrackID->SetMarkerStyle(21);
0452         std::vector<TScatter *> vec_tscat_etaphi_tklmatchedg4p_negTrackID{scat_recotkl_clusetaphi_matched_negTrackID, scat_tklmatchedg4p_etaphi_negTrackID};
0453         drawAndSaveCanvas(canvasSize_etaphi, axisrange_etaphi, vec_tscat_etaphi_tklmatchedg4p_negTrackID, tline_etaphi_matched_negTrackID, std::vector<std::string>{"Tracklet - matched to G4P with trackID<0", "Matched PHG4Particle with trackID<0"}, "#eta", "#phi", plotdir + "/tkl_etaphi_scatter_tklmatchedg4p_negTrackID");
0454 
0455         std::pair<int, int> canvasSize_3D{700, 350};
0456         gr2D_evtvtx->SetMarkerColor(TColor::GetColor("#393E46"));
0457         gr2D_evtvtx->SetMarkerStyle(34);
0458         gr2D_matched_posTrackID->SetMarkerColor(TColor::GetColor("#99cc99"));
0459         gr2D_matched_negTrackID->SetMarkerColor(TColor::GetColor("#6699cc"));
0460         gr2D_unmatched->SetMarkerColor(TColor::GetColor("#f2777a"));
0461         std::vector<TGraph2D *> vec_tg2D{gr2D_evtvtx, gr2D_matched_posTrackID, gr2D_matched_negTrackID, gr2D_unmatched};
0462         std::tuple<float, float, float, float, float, float> axisrange_3D{-25, 25, -12, 12, -12, 12};
0463         drawTGraph2D(canvasSize_3D, axisrange_3D, vec_tg2D, tkl3Dline, std::vector<std::string>{"Event vertex", "Tracklet - matched to G4P with trackID>0", "Tracklet - matched to G4P with trackID<0", "Tracklet - not matched to G4P"}, "z [cm]", "y [cm]", "x [cm]", plotdir + "/tkl_3D_scatter");
0464     }
0465 
0466     f->Close();
0467 }