,fDCArOff(0)
,fDCAzOff(0)
,fNclusterOff(0)
+ ,fNITSclusterOff(0)
,fNclusterOffwCut(0)
,fPhiOff(0)
,fMultOff(0)
,fXvertexOff(0)
,fYvertexOff(0)
,fZvertexOff(0)
+ ,fSPDXvertexOff(0)
+ ,fSPDYvertexOff(0)
+ ,fSPDZvertexOff(0)
,fEtaOff(0)
,fEtaMomentumcutOff(0)
,fNclusVSphiOff(0)
,fDCArHLT(0)
,fDCAzHLT(0)
,fNclusterHLT(0)
+ ,fNITSclusterHLT(0)
,fNclusterHLTwCut(0)
,fPhiHLT(0)
,fMultHLT(0)
,fXvertexHLT(0)
,fYvertexHLT(0)
,fZvertexHLT(0)
+ ,fSPDXvertexHLT(0)
+ ,fSPDYvertexHLT(0)
+ ,fSPDZvertexHLT(0)
,fEtaHLT(0)
,fEtaMomentumcutHLT(0)
,fNclusVSphiHLT(0)
,fDCArOff(0)
,fDCAzOff(0)
,fNclusterOff(0)
+ ,fNITSclusterOff(0)
,fNclusterOffwCut(0)
,fPhiOff(0)
,fMultOff(0)
,fNclusVSthetaOff(0)
,fEventSpecieOff(0)
,fV0cent(0)
-
+ ,fNcontOff(0)
+
,fChargeHLT(0)
,fMomentumHLT(0)
,fNclusterHLT(0)
+ ,fNITSclusterHLT(0)
,fNclusterHLTwCut(0)
,fPhiHLT(0)
,fMultHLT(0)
,fNclusVSphiHLT(0)
,fNclusVSthetaHLT(0)
,fEventSpecieHLT(0)
+ ,fNcontHLT(0)
,fBeamType()
,fTextBox(0)
//=========== event properties =================//
if(fBeamType.Contains("Pb")){
- fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,2000);
- fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,2000);
- fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100);
+ fMultOff = new TH1F("fMult_off", "TPC track multiplicity (OFF)",200,0,2000);
+ fMultHLT = new TH1F("fMult_hlt", "TPC track multiplicity (HLT)",200,0,2000);
+ fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,2000);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,2000);
+ fV0cent = new TH1F("fV0cent", "V0 centrality", 100,0, 100);
}
else {
fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,200);
- fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);
+ fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);
+ fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,200);
+ fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,200);
}
fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (OFF)",100,-1,1,100,-1,1);
fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (OFF)",100,-20,20);
fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",100,-20,20);
+
+ fSPDXvertexOff = new TH1F("fSPDXvertex_off","X SPD primary vertex (OFF)",200,-0.5,0.5);
+ fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex (HLT)",200,-0.5,0.5);
+
+ fSPDYvertexOff = new TH1F("fSPDYvertex_off","Y SPD primary vertex (OFF)",200,-0.5,0.5);
+ fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex (HLT)",200,-0.5,0.5);
+
+ fSPDZvertexOff = new TH1F("fSPDZvertex_off","Z SPD primary vertex (OFF)",100,-20,20);
+ fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex (HLT)",100,-20,20);
fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for OFF",18, 0, 18);
fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
fMomentumOff = new TH1F("fMomentum_off", "p_{T} (OFF)", 100, 0, 10);
fMomentumHLT = new TH1F("fMomentum_hlt", "p_{T} (HLT)", 100, 0, 10);
- fDCArOff = new TH1F("fDCA_off", "DCAr to beam line (OFF)", 200, -15, 15);
- fDCArHLT = new TH1F("fDCA_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
+ fDCArOff = new TH1F("fDCAr_off", "DCAr to beam line (OFF)", 200, -15, 15);
+ fDCArHLT = new TH1F("fDCAr_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
fDCAzOff = new TH1F("fDCAz_off", "DCAz to beam line (OFF)", 200, -15, 15);
fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz to beam line (HLT)", 200, -15, 15);
fNclusterOff = new TH1F("fNcluster_off","TPC clusters/track (OFF)", 200, 0, 200);
fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track (HLT)", 200, 0, 200);
+
+ fNITSclusterOff = new TH1F("fNITScluster_off","ITS clusters/track (OFF)", 10, 0, 10);
+ fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track (HLT)", 10, 0, 10);
fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (OFF)",90,0,360);
fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)", 90,0,360);
fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",100,-2,2);
-
fNclusterOffwCut = new TH1F("fNcluster_wcut_off","TPC clusters per track with cuts (OFF)", 200, 0, 200);
fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","TPC clusters per track with cuts (HLT)", 200, 0, 200);
fOutputList->Add(fDCArOff); fOutputList->Add(fDCArHLT);
fOutputList->Add(fDCAzOff); fOutputList->Add(fDCAzHLT);
fOutputList->Add(fNclusterOff); fOutputList->Add(fNclusterHLT);
+ fOutputList->Add(fNITSclusterOff); fOutputList->Add(fNITSclusterHLT);
fOutputList->Add(fNclusterOffwCut); fOutputList->Add(fNclusterHLTwCut);
fOutputList->Add(fPhiOff); fOutputList->Add(fPhiHLT);
fOutputList->Add(fMultOff); fOutputList->Add(fMultHLT);
fOutputList->Add(fXvertexOff); fOutputList->Add(fXvertexHLT);
fOutputList->Add(fYvertexOff); fOutputList->Add(fYvertexHLT);
fOutputList->Add(fZvertexOff); fOutputList->Add(fZvertexHLT);
+ fOutputList->Add(fSPDXvertexOff); fOutputList->Add(fSPDXvertexHLT);
+ fOutputList->Add(fSPDYvertexOff); fOutputList->Add(fSPDYvertexHLT);
+ fOutputList->Add(fSPDZvertexOff); fOutputList->Add(fSPDZvertexHLT);
fOutputList->Add(fEtaOff); fOutputList->Add(fEtaHLT);
fOutputList->Add(fEtaMomentumcutOff); fOutputList->Add(fEtaMomentumcutHLT);
fOutputList->Add(fNclusVSphiOff); fOutputList->Add(fNclusVSphiHLT);
fOutputList->Add(fNclusVSthetaOff); fOutputList->Add(fNclusVSthetaHLT);
fOutputList->Add(fEventSpecieOff); fOutputList->Add(fEventSpecieHLT);
+ fOutputList->Add(fNcontOff); fOutputList->Add(fNcontHLT);
fOutputList->Add(fTextBox);
if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent);
Int_t nr_tracksHLT = 0;
const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks();
- // Int_t nr_contributorsHLT = vertHLT->GetNContributors();
-
-// if(nr_contributorsHLT<1) {
-// // SPD vertex
-// vertHLT = esdHLT->GetPrimaryVertexSPD();
-// if(nr_contributorsHLT<1) {
-// // NO GOOD VERTEX, SKIP EVENT
-// testVertexHLT=kFALSE;
-// }
-// }
+
if(vertHLT->GetStatus()==kTRUE){
fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
fXvertexHLT->Fill( vertHLT->GetX() );
fYvertexHLT->Fill( vertHLT->GetY() );
fZvertexHLT->Fill( vertHLT->GetZ() );
+
+ fSPDXvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetX());
+ fSPDYvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetY());
+ fSPDZvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetZ());
+
+ fNcontHLT->Fill(vertHLT->GetNContributors());
}
//At the moment no constrains on vertex before filling histograms
//Should be changed.
fChargeHLT->Fill(esdtrackHLT->Charge());
fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+ fNITSclusterHLT->Fill(esdtrackHLT->GetNcls(0));
fEtaHLT->Fill(esdtrackHLT->Eta());
fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
fMomentumHLT->Fill(TMath::Abs(esdtrackHLT->Pt()));
//----------------- OFFLINE ESD tree ----------------//
Int_t nr_tracksOff = 0;
- const AliESDVertex *vertOff = esdOFF->GetPrimaryVertexTracks();
+ const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
if(fBeamType.Contains("Pb")){
fCentrality = esdOFF->GetCentrality();
else fV0cent->Fill(fCentrality->GetCentralityPercentile("V0M"));
}
- if(vertOff->GetStatus()==kTRUE){
- fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
- fXvertexOff->Fill( vertOff->GetX() );
- fYvertexOff->Fill( vertOff->GetY() );
- fZvertexOff->Fill( vertOff->GetZ() );
+ if(vertOFF->GetStatus()==kTRUE){
+ fXYvertexOff->Fill(vertOFF->GetX(), vertOFF->GetY() );
+ fXvertexOff->Fill( vertOFF->GetX() );
+ fYvertexOff->Fill( vertOFF->GetY() );
+ fZvertexOff->Fill( vertOFF->GetZ() );
+
+ fSPDXvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetX());
+ fSPDYvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetY());
+ fSPDZvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetZ());
+
+ fNcontOff->Fill(vertOFF->GetNContributors());
}
fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
esdtrackOFF->GetXYZ(x);
Double_t b[3];
AliTracker::GetBxByBz(x,b);
- Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig);
+ Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig);
if(!isOK) return;
const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
fChargeOff->Fill(esdtrackOFF->Charge());
fNclusterOff->Fill(esdtrackOFF->GetTPCNcls());
+ fNITSclusterOff->Fill(esdtrackOFF->GetNcls(0));
fEtaOff->Fill(esdtrackOFF->Eta());
fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) );
TH1F *fDCArOff; //! track DCAr to beam line
TH1F *fDCAzOff; //! track DCAz to beam line
TH1F *fNclusterOff; //! #clusters per track
+ TH1F *fNITSclusterOff; //! # ITS clusters per track
TH1F *fNclusterOffwCut; //! #clusters per track w cuts
TH1F *fPhiOff; //! azimuthal angle distribution
TH1F *fMultOff; //! track multiplicity of the event
TH1F *fXvertexOff; //! X primary vertex distribution
TH1F *fYvertexOff; //! Y primary vertex distribution
TH1F *fZvertexOff; //! Z primary vertex distribution
+ TH1F *fSPDXvertexOff; //! SPD X primary vertex distribution
+ TH1F *fSPDYvertexOff; //! SPD Y primary vertex distribution
+ TH1F *fSPDZvertexOff; //! SPD Z primary vertex distribution
TH1F *fEtaOff; //! pseudorapidity
TH1F *fEtaMomentumcutOff; //! pseudorapidity with DCA cut
TH2F *fNclusVSphiOff; //! clusters per track vs. azimuthal angle
TH2F *fNclusVSthetaOff; //! clusters per track vs. polar angle
TH1F *fEventSpecieOff; //! Event Specie Offline
TH1F *fV0cent; //! V0 centrality information
+ TH1F *fNcontOff; //! # of contributors to the vertex estimate
TH1F *fChargeHLT; //! Charge distribution
TH1F *fMomentumHLT; //! momentum
TH1F *fDCArHLT; //! track DCAr to beam line
TH1F *fDCAzHLT; //! track DCAz to beam line
TH1F *fNclusterHLT; //! #clusters per track
+ TH1F *fNITSclusterHLT; //! # ITS clusters per track
TH1F *fNclusterHLTwCut; //! #clusters per track with cuts
TH1F *fPhiHLT; //! azimuthal angle distribution
TH1F *fMultHLT; //! track multiplicity of the event
TH1F *fXvertexHLT; //! X primary vertex distribution
TH1F *fYvertexHLT; //! Y primary vertex distribution
TH1F *fZvertexHLT; //! Z primary vertex distribution
+ TH1F *fSPDXvertexHLT; //! SPD X primary vertex distribution
+ TH1F *fSPDYvertexHLT; //! SPD Y primary vertex distribution
+ TH1F *fSPDZvertexHLT; //! SPD Z primary vertex distribution
TH1F *fEtaHLT; //! pseudorapidity
TH1F *fEtaMomentumcutHLT; //! pseudorapidity with DCA cut
TH2F *fNclusVSphiHLT; //! clusters per track vs. azimuthal angle
TH2F *fNclusVSthetaHLT; //! clusters per track vs. polar angle
TH1F *fEventSpecieHLT; //! Event Specie HLT
+ TH1F *fNcontHLT; //! # of contributors to the vertex estimate
TString fBeamType; //! beam type: p-p, Pb-Pb, No beam
TText *fTextBox; //! TText box containing run number info and date
// --------------------- forward declerations --------------//
-void printStats(TH1F *h1, TH1F *h2);
void plot(TH1F *h1, TH1F *h2);
+void printStats(TH1F *h1);
+void printStats(TH1F *h1, TH1F *h2);
//==========================================================//
folder.ReplaceAll(",","_");
gSystem->Exec("mkdir "+folder); // create a folder whose name contains run number and date of run
- TCanvas *c1 = new TCanvas("c1","HLT vs. offline",1200,700);
- c1->Divide(3,3);
+ TCanvas *c1 = new TCanvas("c1","track properties",1200,700);
+ c1->Divide(4,2);
+
TH1F *h1 = NULL;
TH1F *h2 = NULL;
- h1 = (TH1F*)list->FindObject("fNcluster_hlt"); if(!h1) { printf("Empty histogram fNcluster_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fNcluster_off"); if(!h2) { printf("Empty histogram fNcluster_off\n"); return; }
- h1->SetTitle("TPC cluster distribution");
- h1->GetXaxis()->SetTitle("TPC clusters per track");
+
+ h1 = (TH1F*)list->FindObject("fMomentum_hlt"); if(!h1) { printf("Empty histogram fMomentum_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fMomentum_off"); if(!h2) { printf("Empty histogram fMomentum_off\n"); return; }
+ h1->SetXTitle("p_{t} (GeV/c)");
+ h1->SetTitle("transverse momentum");
+
+ c1->cd(1);
+ plot(h1,h2);
TLegend *leg1 = new TLegend(0.6,0.2,0.8,0.5);
leg1->SetFillColor(10);
leg1->SetLineColor(10);
leg1->AddEntry(h1,"HLT", "l");
leg1->AddEntry(h2,"OFF", "l");
+ leg1->Draw("same");
- c1->cd(1);
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fNcluster_hlt"); if(!h1) { printf("Empty histogram fNcluster_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNcluster_off"); if(!h2) { printf("Empty histogram fNcluster_off\n"); return; }
+ h1->SetTitle("TPC cluster distribution");
+ h1->GetXaxis()->SetTitle("TPC clusters per track");
+
+ c1->cd(2);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fEta_hlt"); if(!h1) { printf("Empty histogram fEta_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fEta_off"); if(!h2) { printf("Empty histogram fEta_off\n"); return; }
+ h1->SetTitle("pseudorapidity");
+ h1->SetXTitle("#eta");
+
+ c1->cd(3);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fPhi_hlt"); if(!h1) { printf("Empty histogram fPhi_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fPhi_off"); if(!h2) { printf("Empty histogram fPhi_off\n"); return; }
+ h1->SetTitle("azimuthal angle");
+ h1->SetXTitle("#phi (deg)");
+
+ c1->cd(4);
plot(h1,h2);
//-------------------------------------------------
- h1 = (TH1F*)list->FindObject("fDCA_hlt"); if(!h1) { printf("Empty histogram fDCA_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fDCA_off"); if(!h2) { printf("Empty histogram fDCA_off\n"); return; }
+ h1 = (TH1F*)list->FindObject("fDCAr_hlt"); if(!h1) { printf("Empty histogram fDCAr_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fDCAr_off"); if(!h2) { printf("Empty histogram fDCAr_off\n"); return; }
h1->SetTitle("DCA between track and vertex on XY plane");
h1->SetXTitle("DCAr (cm)");
- c1->cd(2);
+ c1->cd(5);
plot(h1,h2);
//-------------------------------------------------
- h1 = (TH1F*)list->FindObject("fMult_hlt"); if(!h1) { printf("Empty histogram fMult_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fMult_off"); if(!h2) { printf("Empty histogram fMult_off\n"); return; }
- h1->SetTitle("track multiplicity");
-
- c1->cd(3);
+ h1 = (TH1F*)list->FindObject("fDCAz_hlt"); if(!h1) { printf("Empty histogram fDCAz_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fDCAz_off"); if(!h2) { printf("Empty histogram fDCAz_off\n"); return; }
+ h1->SetTitle("DCA between track and beam line");
+ h1->SetXTitle("DCAz (cm)");
+
+ c1->cd(6);
plot(h1,h2);
//-------------------------------------------------
+
h1 = (TH1F*)list->FindObject("fCharge_hlt"); if(!h1) { printf("Empty histogram fCharge_hlt\n"); return; }
h2 = (TH1F*)list->FindObject("fCharge_off"); if(!h2) { printf("Empty histogram fCharge_off\n"); return; }
h1->SetXTitle("polarity");
h1->SetTitle("charge distribution");
- c1->cd(4);
+ c1->cd(7);
plot(h1,h2);
//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fNITScluster_hlt"); if(!h1) { printf("Empty histogram fNITScluster_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNITScluster_off"); if(!h2) { printf("Empty histogram fNITScluster_off\n"); return; }
+ h1->SetTitle("ITS cluster distribution");
+ h1->GetXaxis()->SetTitle("ITS clusters per track");
- h1 = (TH1F*)list->FindObject("fMomentum_hlt"); if(!h1) { printf("Empty histogram fMomentum_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fMomentum_off"); if(!h2) { printf("Empty histogram fMomentum_off\n"); return; }
- h1->SetXTitle("p_{t} (GeV/c)");
- h1->SetTitle("transverse momentum");
-
- c1->cd(5);
+ c1->cd(8);
plot(h1,h2);
- leg1->Draw("same");
-//-------------------------------------------------
- h1 = (TH1F*)list->FindObject("fEta_hlt"); if(!h1) { printf("Empty histogram fEta_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fEta_off"); if(!h2) { printf("Empty histogram fEta_off\n"); return; }
- h1->SetTitle("pseudorapidity");
- h1->SetXTitle("#eta");
+//============= EVENT PROPERTIES ===============//
- c1->cd(6);
- plot(h1,h2);
-
-//-------------------------------------------------
+ TCanvas *c2 = new TCanvas("c2","vertex event properties",1200,700);
+ c2->Divide(3,2);
h1 = (TH1F*)list->FindObject("fXvertex_hlt"); if(!h1) { printf("Empty histogram fXvertex_hlt\n"); return; }
h2 = (TH1F*)list->FindObject("fXvertex_off"); if(!h2) { printf("Empty histogram fXvertex_off\n"); return; }
h1->SetXTitle("x (cm)");
h1->SetTitle("x of primary vertex");
- c1->cd(7);
+ c2->cd(1);
plot(h1,h2);
+ leg1->Draw("same");
//-------------------------------------------------
h1->SetXTitle("y (cm)");
h1->SetTitle("y of primary vertex");
- c1->cd(8);
+ c2->cd(2);
plot(h1,h2);
//-------------------------------------------------
h1->SetXTitle("z (cm)");
h1->SetTitle("z of primary vertex");
- c1->cd(9);
+ c2->cd(3);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fSPDXvertex_hlt"); if(!h1) { printf("Empty histogram fSPDXvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDXvertex_off"); if(!h2) { printf("Empty histogram fSPDXvertex_off\n"); return; }
+ h1->SetXTitle("x (cm)");
+ h1->SetTitle("x of SPD primary vertex");
+
+ c2->cd(4);
plot(h1,h2);
//-------------------------------------------------
- c1->SaveAs(folder+"/HLT-offline.png");
- c1->SaveAs(folder+"/HLT-offline.root");
+ h1 = (TH1F*)list->FindObject("fSPDYvertex_hlt"); if(!h1) { printf("Empty histogram fSPDYvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDYvertex_off"); if(!h2) { printf("Empty histogram fSPDYvertex_off\n"); return; }
+ h1->SetXTitle("y (cm)");
+ h1->SetTitle("y of SPD primary vertex");
+
+ c2->cd(5);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fSPDZvertex_hlt"); if(!h1) { printf("Empty histogram fSPDZvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDZvertex_off"); if(!h2) { printf("Empty histogram fSPDZvertex_off\n"); return; }
+ h1->SetXTitle("z (cm)");
+ h1->SetTitle("z of SPD primary vertex");
+
+ c2->cd(6);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ TCanvas *c3 = new TCanvas("c3","general event properties",1200,500);
+ c3->Divide(3,1);
+
+ h1 = (TH1F*)list->FindObject("fMult_hlt"); if(!h1) { printf("Empty histogram fMult_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fMult_off"); if(!h2) { printf("Empty histogram fMult_off\n"); return; }
+ h1->SetTitle("TPC track multiplicity");
+
+ c3->cd(1);
+ plot(h1,h2);
+ leg1->Draw("same");
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fNcont_hlt"); if(!h1) { printf("Empty histogram fNcont_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNcont_off"); if(!h2) { printf("Empty histogram fNcont_off\n"); return; }
+ h1->SetTitle("# of contributors");
+
+ c3->cd(2);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fV0cent"); if(!h1) { printf("Empty histogram fV0cent\n"); return; }
+ c3->cd(3);
+ h1->Draw();
+ printStats(h1);
+
+//-------------------------------------------------
+
+ c1->SaveAs(folder+"/track_properties.png");
+ c1->SaveAs(folder+"/track_properties.root");
+ c2->SaveAs(folder+"/vertex_event_properties.png");
+ c2->SaveAs(folder+"/vertex_event_properties.root");
+ c3->SaveAs(folder+"/general_event_properties.png");
+ c3->SaveAs(folder+"/general_event_properties.root");
return;
}
return;
}
+void printStats(TH1F* h1){
+ gPad->Update();
+ TPaveStats *st1 = (TPaveStats*)h1->FindObject("stats"); if(!st1) { printf("TPaveStats st1 is 0x0\n"); return; }
+ st1->SetLineColor(0);
+ return;
+}
+
void plot(TH1F *h1, TH1F *h2){
//Y axis
if(h1->GetMaximum() > h2->GetMaximum()) h2->SetMaximum(1.1*h1->GetMaximum());