* about the suitability of this software for any purpose. It is *\r
* provided "as is" without express or implied warranty. *\r
**************************************************************************/\r
-\r
-#include <iostream>\r
+//------------------------------------------------------------------------------\r
+// AlidNdPtCorrection class:\r
+//\r
+// a. functionality:\r
+// - applies corrections on dNdPt spectra\r
+// - fills corrected dNdPt histograms\r
+// - fills correction control histograms \r
+//\r
+// b. data members:\r
+// - dNdPt spectra before and after correction procedure\r
+// - control histograms\r
+// - correction matrices (must be loaded)\r
+// \r
+// Author: J.Otwinowski 04/11/2008 \r
+//------------------------------------------------------------------------------\r
\r
#include "TFile.h"\r
-#include "TCint.h"\r
#include "TH1.h"\r
#include "TH2.h"\r
\r
\r
// only charged particles\r
Double_t charge = particle->GetPDG()->Charge()/3.;\r
- if (charge == 0.0)\r
+ if (TMath::Abs(charge) < 0.001)\r
continue;\r
\r
// only postive charged \r
}\r
\r
//_____________________________________________________________________________\r
-void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks)\r
+void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const\r
{\r
//\r
// Fill corrected histograms\r
if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events\r
{\r
Int_t bin = fZvEmptyEventsNorm->FindBin(zv);\r
- Double_t Fz = fZvEmptyEventsNorm->GetBinContent(bin);\r
+ Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);\r
Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
- //printf("Fz %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",Fz,corrToInelF0,corrToNDF0,corrToNSDF0);\r
+ //printf("factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
\r
fCorrRecEventHist2[0]->Fill(vEventMatrix);\r
- fCorrRecEventHist2[1]->Fill(vEventMatrix,Fz);\r
- fCorrRecEventHist2[2]->Fill(vEventMatrix,Fz*corrToInelF0);\r
- fCorrRecEventHist2[3]->Fill(vEventMatrix,Fz*corrToNDF0);\r
- fCorrRecEventHist2[4]->Fill(vEventMatrix,Fz*corrToNSDF0);\r
+ fCorrRecEventHist2[1]->Fill(vEventMatrix,factZ);\r
+ fCorrRecEventHist2[2]->Fill(vEventMatrix,factZ*corrToInelF0);\r
+ fCorrRecEventHist2[3]->Fill(vEventMatrix,factZ*corrToNDF0);\r
+ fCorrRecEventHist2[4]->Fill(vEventMatrix,factZ*corrToNSDF0);\r
}\r
}\r
\r
//_____________________________________________________________________________\r
-void AlidNdPtCorrection::FillHistograms(AliESDtrack *esdTrack, AliStack *stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult)\r
+void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult) const\r
{\r
//\r
// Fill ESD track and MC histograms \r
if(!particle) return;\r
\r
Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3\r
- if(gq==0) return;\r
+ if(TMath::Abs(gq)<0.001) return;\r
Float_t gpt = particle->Pt();\r
Float_t geta = particle->Eta();\r
Float_t gphi = particle->Phi();\r
}\r
\r
//_____________________________________________________________________________\r
-void AlidNdPtCorrection::FillHistograms(AliStack *stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/)\r
+void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const\r
{\r
// Fill MC histograms\r
if(!stack) return;\r
}\r
\r
//_____________________________________________________________________________\r
-Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse *hist, Double_t zv, Double_t pt, Double_t eta) const {\r
+Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
// return correction factor F(zv,pt,eta)\r
\r
if(!hist) return 1.;\r
}\r
\r
//_____________________________________________________________________________\r
-Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse *hist, Double_t zv, Double_t pt, Double_t eta) const {\r
+Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const {\r
// return contamination correction factor F(zv,pt,eta)\r
\r
if(!hist) return 1.0;\r
}\r
\r
//_____________________________________________________________________________\r
-Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse *hist, Double_t zv, Int_t mult) const {\r
+Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
// return correction factor F(zv,mult)\r
\r
if(!hist) return 1.;\r
}\r
\r
//_____________________________________________________________________________\r
-Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse *hist, Double_t zv, Int_t mult) const {\r
+Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const {\r
// return contamination correction factor F(zv,mult)\r
\r
if(!hist) return 1.;\r
}\r
\r
//_____________________________________________________________________________\r
-Long64_t AlidNdPtCorrection::Merge(TCollection* list) \r
+Long64_t AlidNdPtCorrection::Merge(TCollection* const list) \r
{\r
// Merge list of objects (needed by PROOF)\r
\r
return count;\r
}\r
\r
-Int_t AlidNdPtCorrection::GetTrueMult(THnSparse *hist, Int_t mult)\r
+//____________________________________________________________________________\r
+Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const\r
{\r
+//\r
+// get multiplicity of primary particles\r
+//\r
if(!hist) return 0;\r
- Int_t true_mult = 0;\r
+ Int_t trueMult = 0;\r
\r
// 0 bins exluded\r
TAxis *ax = hist->GetAxis(0);\r
\r
// get true multiplicity\r
TH1D *h1 = (TH1D *)hist->Projection(1);\r
- true_mult = (Int_t)h1->GetMean();\r
+ trueMult = (Int_t)h1->GetMean();\r
\r
- return true_mult;\r
+ return trueMult;\r
}\r
\r
//_____________________________________________________________________________\r
//\r
//Double_t minPt = accCuts->GetMinPt();\r
//Double_t maxPt = accCuts->GetMaxPt();\r
- //Double_t minEta = accCuts->GetMinEta();\r
- //Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
+ Double_t minEta = accCuts->GetMinEta();\r
+ Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
\r
+ printf("minEta %f, maxEta %f \n",minEta, maxEta);\r
\r
//\r
// cosmics background histo\r
hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
aFolderObj->Add(hsc);\r
\r
+ // positive eta\r
+ fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta);\r
+\r
+ h = fCorrRecTrackMultHist1[5]->Projection(0);\r
+ h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta");\r
+ hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
+ hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
+ aFolderObj->Add(hs);\r
+\r
+ hsc = (TH1D*)hs->Clone();\r
+ hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
+ hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
+ aFolderObj->Add(hsc);\r
+\r
+ // negative eta\r
+ fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
+\r
+ h = fCorrRecTrackMultHist1[5]->Projection(0);\r
+ h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta");\r
+ hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
+ hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
+ aFolderObj->Add(hs);\r
+\r
+ hsc = (TH1D*)hs->Clone();\r
+ hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
+ hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral()));\r
+ aFolderObj->Add(hsc);\r
+\r
+ fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins());\r
+\r
//\r
h = fCorrRecTrackMultHist1[6]->Projection(0);\r
h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected");\r
hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
aFolderObj->Add(hsc);\r
\r
+ //\r
+ // positive eta\r
+ //\r
+ fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta);\r
+\r
+ h = fCorrRecTrackMultHist1[7]->Projection(0);\r
+ h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta");\r
+ hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
+ hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta");\r
+ aFolderObj->Add(hs);\r
+\r
+ hsc = (TH1D*)hs->Clone();\r
+ hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta");\r
+ hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
+ aFolderObj->Add(hsc);\r
+\r
+ //\r
+ // negative eta\r
+ //\r
+ fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001);\r
+\r
+ h = fCorrRecTrackMultHist1[7]->Projection(0);\r
+ h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta");\r
+ hs = AlidNdPtHelper::ScaleByBinWidth(h);\r
+ hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta");\r
+ aFolderObj->Add(hs);\r
+\r
+ hsc = (TH1D*)hs->Clone();\r
+ hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta");\r
+ hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral()));\r
+ aFolderObj->Add(hsc);\r
+\r
+ fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins());\r
+\r
// eta axis\r
h = fCorrRecTrackMultHist1[0]->Projection(1);\r
h->SetName("eta_rec_track_not_corrected");\r