12 std::map<int, double> result;
13 for (
int ibin = 0; ibin < histo->GetNbinsX(); ibin++)
15 if (histo->GetBinContent(ibin) > 0)
17 std::cout << histo->GetBinCenter(ibin) <<
" : " << histo->GetBinContent(ibin) << std::endl;
18 result[histo->GetBinCenter(ibin)]=histo->GetBinContent(ibin);
28 dataSelector += xValue;
30 dataSelector += histoName;
31 tree->Draw(dataSelector, cut,
"goff");
37 for (
auto pdg : pdgValues){
38 pdgHisto->Fill(i,pdg.second);
41 pdgHisto->GetXaxis()->SetBinLabel(i+1, pdgName.Data());
53 TFile
outfile(outputFile.Data(),
"RECREATE");
55 std::cout <<
"InFileName: " << simFile.Data() << std::endl;
56 std::cout <<
"OutputFileName: " << outputFile.Data() << std::endl;
58 TFile fileqa(simFile.Data());
59 TTree *
simtree = (TTree*) fileqa.Get(
"pndsim");
60 std::cout <<
"SimTree: " << simtree << std::endl;
61 std::cout <<
"SimTree.GetEntries() " << simtree->GetEntries() << std::endl;
63 TString theta =
"TMath::RadToDeg()*TMath::ATan2(TMath::Sqrt(MCTrack.fPx^2+MCTrack.fPy^2),MCTrack.fPz)";
64 TString p =
"TMath::Sqrt(MCTrack.fPx^2+MCTrack.fPy^2+MCTrack.fPz^2)";
65 TString pt =
"TMath::Sqrt(MCTrack.fPx^2+MCTrack.fPy^2)";
66 TCut primCut =
"MCTrack.GetMotherID()<0";
67 TCut secCut =
"MCTrack.GetMotherID()>0";
69 TH1I* pdgHistoPrim =
new TH1I(
"pdgHistoPrim",
"pdgHistoPrim", 20001, -10000.5, 10000.5);
70 TH1I* pdgHistoSec =
new TH1I(
"pdgHistoSec",
"pdgHistoSec", 20001, -10000.5, 10000.5);
72 simtree->Draw(
"MCTrack.fPdgCode>>pdgHistoPrim", primCut,
"goff");
73 simtree->Draw(
"MCTrack.fPdgCode>>pdgHistoSec", secCut,
"goff");
75 std::map<int, double> pdgValues =
GetFilledBins(pdgHistoPrim);
76 TH1D* pdgHistoSelectPrim =
new TH1D(
"pdgHistoSelectPrim",
"pdgHistoSelectPrim", pdgValues.size(),-0.5,pdgValues.size() -0.5);
79 std::map<int, double> pdgValuesSec =
GetFilledBins(pdgHistoSec);
80 TH1D* pdgHistoSelectSec =
new TH1D(
"pdgHistoSelectSec",
"pdgHistoSelectSec", pdgValuesSec.size(),-0.5,pdgValuesSec.size() -0.5);
84 pdgHistoSelectPrim->Write();
85 pdgHistoSelectSec->Write();
88 std::map<int, TH2*> ThetaPHistosPdg;
89 std::map<int, TH2*> PtPzHistosPdg;
90 TString histosNameThetaP =
"histoThetaPforPdg_";
91 TString histosNamePtPz =
"histoPtPzforPdg_";
92 TString pdgCut =
"MCTrack.fPdgCode==";
93 TString myHistoName = histosNameThetaP;
95 ThetaPHistosPdg[0] =
new TH2I(myHistoName.Data(),myHistoName.Data(),180,0,180,150,0,15);
96 Draw2DHisto(simtree, theta, p, myHistoName,primCut);
98 myHistoName = histosNamePtPz;
100 PtPzHistosPdg[0] =
new TH2I(myHistoName.Data(), myHistoName.Data(), 300, -15, 15, 150, 0, 15);
101 Draw2DHisto(simtree,
"MCTrack.fPz", pt, myHistoName, primCut);
104 ThetaPHistosPdg[0]->Write();
105 PtPzHistosPdg[0]->Write();
107 for (
auto pdg : pdgValues){
108 myHistoName = histosNameThetaP;
109 myHistoName += pdg.first;
111 myPdgString += pdg.first;
112 TCut myPdgCut = myPdgString.Data();
114 ThetaPHistosPdg[pdg.first] =
new TH2I(myHistoName.Data(),myHistoName.Data(),180,0,180,150,0,15);
115 Draw2DHisto(simtree, theta, p, myHistoName, myPdgCut&&primCut);
117 myHistoName = histosNamePtPz;
118 myHistoName += pdg.first;
120 PtPzHistosPdg[pdg.first] =
new TH2I(myHistoName.Data(),myHistoName.Data(),300,-15,15,150,0,15);
121 Draw2DHisto(simtree,
"MCTrack.fPz", pt, myHistoName, myPdgCut&&primCut);
124 ThetaPHistosPdg[pdg.first]->Write();
125 PtPzHistosPdg[pdg.first]->Write();
128 cout <<
" Test passed" << endl;
129 cout <<
" All ok " << endl;
void Draw2DHisto(TTree *tree, TString xValue, TString yValue, TString histoName, TCut cut)
void FillPdgSelectHisto(std::map< int, double > &pdgValues, TH1 *pdgHisto)
TString pt(TString pts, TString exts="px py pz")
A simple class which adds the corresponding file extensions to a given base class.
int AnalyseSimFile(TString prefix)
PndMvdCreateDefaultApvMap * creator
std::map< int, double > GetFilledBins(TH1 *histo)