File indexing completed on 2025-08-03 08:14:08
0001 #include <iostream>
0002 using namespace std;
0003
0004 #include "TFile.h"
0005 #include "TTree.h"
0006 #include "TChain.h"
0007 #include "TLegend.h"
0008 #include "math.h"
0009 #include "TH1.h"
0010 #include "TH2.h"
0011 #include "TEfficiency.h"
0012
0013 TChain* handleFile(string name, string extension, string treename, unsigned int filecount){
0014 TChain *all = new TChain(treename.c_str());
0015 string temp;
0016 for (int i = 0; i < filecount; ++i)
0017 {
0018
0019 ostringstream s;
0020 s<<i;
0021 temp = name+string(s.str())+extension;
0022 all->Add(temp.c_str());
0023 }
0024 return all;
0025 }
0026
0027 int reportBackground(TChain* truthTree,TChain* recoTree,TFile* out_file){
0028 double signal = truthTree->GetEntries();
0029 signal*=(1-.012)*(1-.002)*(1-.011);
0030 int background = recoTree->GetEntries();
0031 background-=(int) signal;
0032 cout<<"For "<<truthTree->GetEntries()<<" truth conversions, I found "<<background<<" background events"<<endl;
0033 return (int) signal;
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 }
0053
0054 void reportCuts(TChain* _treeBackground,int signal){
0055 unsigned totalTracks;
0056 unsigned passedpTEtaQ;
0057 unsigned passedCluster;
0058 unsigned passedPair;
0059 unsigned passedVtx;
0060 unsigned passedPhoton;
0061
0062 int sum_totalTracks=-1*signal;
0063 int sum_passedpTEtaQ=-1*signal;
0064 int sum_passedCluster=-1*signal;
0065 int sum_passedPair=-1*signal;
0066 int sum_passedVtx=-1*signal;
0067 int sum_passedPhoton=-1*signal;
0068
0069 _treeBackground->SetBranchAddress("total", &totalTracks);
0070 _treeBackground->SetBranchAddress("tracksPEQ", &passedpTEtaQ);
0071 _treeBackground->SetBranchAddress("tracks_clus", &passedCluster);
0072 _treeBackground->SetBranchAddress("pairs", &passedPair);
0073 _treeBackground->SetBranchAddress("vtx", &passedVtx);
0074 _treeBackground->SetBranchAddress("photon", &passedPhoton);
0075
0076 for(unsigned i=0; i<_treeBackground->GetEntries();i++){
0077 _treeBackground->GetEntry(i);
0078 sum_totalTracks+=totalTracks;
0079 sum_passedpTEtaQ+=passedpTEtaQ;
0080 sum_passedCluster+=passedCluster;
0081 sum_passedPair+=passedPair;
0082 sum_passedVtx+=passedVtx;
0083 sum_passedPhoton+=passedPhoton;
0084 }
0085 cout<<"Did RecoConversionEval with "<<sum_totalTracks<<" total tracks\n\t";
0086 cout<<1-(float)sum_passedpTEtaQ/sum_totalTracks<<"+/-"<<sqrt((float)sum_passedpTEtaQ)/sum_totalTracks<<" of tracks were rejected by pTEtaQ\n\t";
0087 cout<<1-(float)sum_passedCluster/sum_passedpTEtaQ<<"+/-"<<sqrt((float)sum_passedCluster)/sum_passedpTEtaQ<<" of remaining tracks were rejected by cluster\n\t";
0088 cout<<1-(float)sum_passedPair/sum_passedCluster<<"+/-"<<sqrt((float)sum_passedPair)/sum_passedCluster<<" of pairs were rejected by pair cuts\n\t";
0089 cout<<1-(float)sum_passedVtx/sum_passedPair<<"+/-"<<sqrt((float)sum_passedVtx)/sum_passedPair<<" of vtx were rejected by vtx cuts\n\t";
0090 cout<<1-(float)sum_passedPhoton/sum_passedVtx<<"+/-"<<sqrt((float)sum_passedPhoton)/sum_passedVtx<<" of photons were rejected by photon cuts\n";
0091 cout<<sum_passedPhoton<<" background events remain with "<<signal<<" signal events\n";
0092 }
0093
0094 int analyzeSignal(TChain* _signalCutTree,TFile *outFile){
0095 int _b_track_layer ;
0096 int _b_track_dlayer ;
0097 float _b_track_deta ;
0098 float _b_track_pT;
0099 float _b_ttrack_pT;
0100 float _b_vtx_radius ;
0101 float _b_tvtx_radius ;
0102 float _b_cluster_prob ;
0103 float _b_photon_pT ;
0104 float _b_tphoton_pT ;
0105 float _b_photon_m ;
0106 _signalCutTree->SetBranchAddress("track_deta", &_b_track_deta);
0107 _signalCutTree->SetBranchAddress("track_dlayer",&_b_track_dlayer);
0108
0109 _signalCutTree->SetBranchAddress("track_pT", &_b_track_pT);
0110
0111 _signalCutTree->SetBranchAddress("vtx_radius", &_b_vtx_radius);
0112
0113
0114 _signalCutTree->SetBranchAddress("cluster_prob", &_b_cluster_prob);
0115 _signalCutTree->SetBranchAddress("photon_m", &_b_photon_m);
0116 _signalCutTree->SetBranchAddress("photon_pT", &_b_photon_pT);
0117 _signalCutTree->SetBranchAddress("tphoton_pT", &_b_tphoton_pT);
0118 unsigned pT=0, cluster=0, eta=0, photon=0,rsignal=0;
0119
0120 TH1F *rate_plot = new TH1F("rateplot","",60,0,15);
0121 rate_plot->Sumw2();
0122
0123 for(unsigned i=0; i<_signalCutTree->GetEntries();i++){
0124 _signalCutTree->GetEntry(i);
0125 if(_b_track_pT<.6) pT++;
0126 else if (_b_cluster_prob<0) cluster++;
0127 else if (_b_track_deta>.0082) eta++;
0128 else if (TMath::Abs(_b_track_dlayer)<=9&&_b_vtx_radius>1.84){
0129 if(_b_photon_m<.27||_b_photon_m>8.||_b_photon_pT<.039) photon++;
0130 else rsignal++;
0131 }
0132 rate_plot->Fill(_b_tphoton_pT);
0133 }
0134 cout<<"pT cut "<<pT<<" events\n";
0135 cout<<"cluster cut "<<cluster<<" events\n";
0136 cout<<"eta cut "<<eta<<" events\n";
0137 cout<<"photon cut "<<photon<<" events\n";
0138 rate_plot->Scale(1./6e5);
0139 outFile->Wrtie();
0140 return rsignal;
0141 }
0142
0143 void minBiasRecoAna()
0144 {
0145 string treePath = "/sphenix/user/vassalli/minBiasPythia/conversionembededminBiasanalysis";
0146 string truthTreePath = "/sphenix/user/vassalli/minBiasPythia/conversionembededminBiasTruthanalysis";
0147 string embedPath = "/sphenix/user/vassalli/RecoConversionTests/conversionembededonlineanalysis";
0148 string treeExtension = ".root";
0149 unsigned int nFiles=100;
0150 TFile *out_file = new TFile("minBiasplots.root","RECREATE");
0151 TChain *embed_truth_ttree = handleFile(embedPath,treeExtension,"cutTreeSignal",nFiles);
0152 TChain *embed_reco_ttree = handleFile(embedPath,treeExtension,"recoBackground",nFiles);
0153 TChain *cut_tree = new TChain("recoBackground");
0154 TChain *back_tree = new TChain("recoSignal");
0155 TChain *truth_ttree = new TChain("cutTreeSignal");
0156 string filename = "/sphenix/user/vassalli/minBiasConversion/conversionanaout.root";
0157 back_tree->Add(filename.c_str());
0158 cut_tree->Add(filename.c_str());
0159 filename = "/sphenix/user/vassalli/minBiasConversion/conversiontruthanaout.root";
0160 truth_ttree->Add(filename.c_str());
0161 reportCuts(cut_tree,analyzeSignal(truth_ttree));
0162
0163
0164
0165
0166 }