ClassImp(AliUEHistograms)
-AliUEHistograms::AliUEHistograms() :
+const Int_t AliUEHistograms::fgkUEHists = 3;
+
+AliUEHistograms::AliUEHistograms(const char* histograms) :
TObject(),
fNumberDensitypT(0),
fSumpT(0),
fCorrelationMultiplicity(0),
fEventCount(0),
fEventCountDifferential(0),
- fVertexContributors(0)
+ fVertexContributors(0),
+ fCentralityDistribution(0)
{
// Constructor
+ //
+ // the string histograms defines which histograms are created:
+ // 1 = NumberDensitypT
+ // 2 = SumpT
+ // 3 = NumberDensityPhi
+ // 4 = NumberDensityPhiCentrality (other multiplicity for Pb)
+
+ TString histogramsStr(histograms);
+
+ if (histogramsStr.Contains("1"))
+ fNumberDensitypT = new AliUEHist("NumberDensitypT");
+ if (histogramsStr.Contains("2"))
+ fSumpT = new AliUEHist("SumpT");
- fNumberDensitypT = new AliUEHist("NumberDensitypT");
- fSumpT = new AliUEHist("SumpT");
- fNumberDensityPhi = new AliUEHist("NumberDensityPhi");
+ if (histogramsStr.Contains("3"))
+ fNumberDensityPhi = new AliUEHist("NumberDensityPhi");
+ else if (histogramsStr.Contains("4"))
+ fNumberDensityPhi = new AliUEHist("NumberDensityPhiCentrality");
// do not add this hists to the directory
Bool_t oldStatus = TH1::AddDirectoryStatus();
fVertexContributors = new TH1F("fVertexContributors", ";contributors;count", 100, -0.5, 99.5);
+ fCentralityDistribution = new TH1F("fCentralityDistribution", ";;count", fNumberDensityPhi->GetEventHist()->GetNBins(1), fNumberDensityPhi->GetEventHist()->GetAxis(1, 0)->GetBinLowEdge(1), fNumberDensityPhi->GetEventHist()->GetAxis(1, 0)->GetBinUpEdge(fNumberDensityPhi->GetEventHist()->GetNBins(1)));
+
TH1::AddDirectory(oldStatus);
}
fCorrelationMultiplicity(0),
fEventCount(0),
fEventCountDifferential(0),
- fVertexContributors(0)
+ fVertexContributors(0),
+ fCentralityDistribution(0)
{
//
// AliUEHistograms copy constructor
delete fVertexContributors;
fVertexContributors = 0;
}
+
+ if (fCentralityDistribution)
+ {
+ delete fCentralityDistribution;
+ fCentralityDistribution = 0;
+ }
}
AliUEHist* AliUEHistograms::GetUEHist(Int_t id)
Double_t vars[2];
vars[0] = leading->Pt();
vars[1] = multiplicity;
- fNumberDensitypT->GetEventHist()->Fill(vars, step);
- fSumpT->GetEventHist()->Fill(vars, step);
- fNumberDensityPhi->GetEventHist()->Fill(vars, step);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->GetEventHist()->Fill(vars, step);
fEventCountDifferential->Fill(leading->Pt(), step, eventType);
}
if (vars[4] < -0.5 * TMath::Pi())
vars[4] += TMath::TwoPi();
- fNumberDensitypT->GetTrackHist(region)->Fill(vars, step);
- fSumpT->GetTrackHist(region)->Fill(vars, step, particle->Pt());
+ if (fNumberDensitypT)
+ fNumberDensitypT->GetTrackHist(region)->Fill(vars, step);
+
+ if (fSumpT)
+ fSumpT->GetTrackHist(region)->Fill(vars, step, particle->Pt());
// fill all in toward region (is anyway as function of delta phi!)
- fNumberDensityPhi->GetTrackHist(AliUEHist::kToward)->Fill(vars, step);
+ if (fNumberDensityPhi)
+ fNumberDensityPhi->GetTrackHist(AliUEHist::kToward)->Fill(vars, step);
}
}
}
}
}
+
+//____________________________________________________________________
+void AliUEHistograms::FillCorrelations(Int_t eventType, Int_t centrality, AliUEHist::CFStep step, TSeqCollection* particles)
+{
+ // fills the fNumberDensityPhi histogram
+ //
+ // this function need a list of AliVParticles which contain the particles/tracks to be filled
+
+ // if particles is not set, just fill event statistics
+ if (particles)
+ {
+ for (Int_t i=0; i<particles->GetEntries(); i++)
+ {
+ AliVParticle* triggerParticle = (AliVParticle*) particles->At(i);
+ for (Int_t j=0; j<particles->GetEntries(); j++)
+ {
+ if (i == j)
+ continue;
+
+ AliVParticle* particle = (AliVParticle*) particles->At(j);
+
+ Double_t vars[5];
+ vars[0] = particle->Eta();
+ vars[1] = particle->Pt();
+ vars[2] = triggerParticle->Pt();
+ vars[3] = centrality;
+ vars[4] = triggerParticle->Phi() - particle->Phi();
+ if (vars[4] > 1.5 * TMath::Pi())
+ vars[4] -= TMath::TwoPi();
+ if (vars[4] < -0.5 * TMath::Pi())
+ vars[4] += TMath::TwoPi();
+
+ // fill all in toward region and no not use the other regions
+ fNumberDensityPhi->GetTrackHist(AliUEHist::kToward)->Fill(vars, step);
+ }
+
+ // once per trigger particle
+ Double_t vars[2];
+ vars[0] = triggerParticle->Pt();
+ vars[1] = centrality;
+ fNumberDensityPhi->GetEventHist()->Fill(vars, step);
+
+ fEventCountDifferential->Fill(triggerParticle->Pt(), step, eventType);
+ }
+ }
+
+ fCentralityDistribution->Fill(centrality);
+ FillEvent(eventType, step);
+}
//____________________________________________________________________
void AliUEHistograms::FillTrackingEfficiency(TObjArray* mc, TObjArray* recoPrim, TObjArray* recoAll, Int_t particleType)
vars[1] = particle->Pt();
vars[2] = particleType;
- fNumberDensitypT->GetTrackHistEfficiency()->Fill(vars, step);
- fSumpT->GetTrackHistEfficiency()->Fill(vars, step);
- fNumberDensityPhi->GetTrackHistEfficiency()->Fill(vars, step);
+ for (Int_t j=0; j<fgkUEHists; j++)
+ if (GetUEHist(j))
+ GetUEHist(j)->GetTrackHistEfficiency()->Fill(vars, step);
}
}
}
{
// sets eta min and max for all contained AliUEHist classes
- fNumberDensitypT->SetEtaRange(etaMin, etaMax);
- fSumpT->SetEtaRange(etaMin, etaMax);
- fNumberDensityPhi->SetEtaRange(etaMin, etaMax);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->SetEtaRange(etaMin, etaMax);
}
//____________________________________________________________________
{
// sets pT min and max for all contained AliUEHist classes
- fNumberDensitypT->SetPtRange(ptMin, ptMax);
- fSumpT->SetPtRange(ptMin, ptMax);
- fNumberDensityPhi->SetPtRange(ptMin, ptMax);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->SetPtRange(ptMin, ptMax);
}
//____________________________________________________________________
{
// sets the contamination enhancement histogram in all contained AliUEHist classes
- fNumberDensitypT->SetContaminationEnhancement(hist);
- fSumpT->SetContaminationEnhancement(hist);
- fNumberDensityPhi->SetContaminationEnhancement(hist);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->SetContaminationEnhancement(hist);
}
//____________________________________________________________________
{
// sets pT min and max for all contained AliUEHist classes
- fNumberDensitypT->SetCombineMinMax(flag);
- fSumpT->SetCombineMinMax(flag);
- fNumberDensityPhi->SetCombineMinMax(flag);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->SetCombineMinMax(flag);
}
//____________________________________________________________________
{
// corrects the contained histograms by calling AliUEHist::Correct
- fNumberDensitypT->Correct(corrections->fNumberDensitypT);
- fSumpT->Correct(corrections->fSumpT);
- fNumberDensityPhi->Correct(corrections->fNumberDensityPhi);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->Correct(corrections->GetUEHist(i));
}
//____________________________________________________________________
if (fVertexContributors)
target.fVertexContributors = dynamic_cast<TH1F*> (fVertexContributors->Clone());
+
+ if (fCentralityDistribution)
+ target.fCentralityDistribution = dynamic_cast<TH1F*> (fCentralityDistribution->Clone());
}
//____________________________________________________________________
TObject* obj;
// collections of objects
- const Int_t kMaxLists = 12;
+ const Int_t kMaxLists = 13;
TList* lists[kMaxLists];
for (Int_t i=0; i<kMaxLists; i++)
if (entry == 0)
continue;
- lists[0]->Add(entry->fNumberDensitypT);
- lists[1]->Add(entry->fSumpT);
- lists[2]->Add(entry->fNumberDensityPhi);
+ if (entry->fNumberDensitypT)
+ lists[0]->Add(entry->fNumberDensitypT);
+ if (entry->fSumpT)
+ lists[1]->Add(entry->fSumpT);
+ if (entry->fNumberDensityPhi)
+ lists[2]->Add(entry->fNumberDensityPhi);
lists[3]->Add(entry->fCorrelationpT);
lists[4]->Add(entry->fCorrelationEta);
lists[5]->Add(entry->fCorrelationPhi);
lists[9]->Add(entry->fEventCount);
lists[10]->Add(entry->fEventCountDifferential);
lists[11]->Add(entry->fVertexContributors);
+ lists[12]->Add(entry->fCentralityDistribution);
count++;
}
- fNumberDensitypT->Merge(lists[0]);
- fSumpT->Merge(lists[1]);
- fNumberDensityPhi->Merge(lists[2]);
+ if (fNumberDensitypT)
+ fNumberDensitypT->Merge(lists[0]);
+ if (fSumpT)
+ fSumpT->Merge(lists[1]);
+ if (fNumberDensityPhi)
+ fNumberDensityPhi->Merge(lists[2]);
fCorrelationpT->Merge(lists[3]);
fCorrelationEta->Merge(lists[4]);
fCorrelationPhi->Merge(lists[5]);
fEventCount->Merge(lists[9]);
fEventCountDifferential->Merge(lists[10]);
fVertexContributors->Merge(lists[11]);
+ fCentralityDistribution->Merge(lists[12]);
for (Int_t i=0; i<kMaxLists; i++)
delete lists[i];
{
// copies those histograms extracted from ESD to this object
- fNumberDensitypT->CopyReconstructedData(from->fNumberDensitypT);
- fSumpT->CopyReconstructedData(from->fSumpT);
- fNumberDensityPhi->CopyReconstructedData(from->fNumberDensityPhi);
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->CopyReconstructedData(from->GetUEHist(i));
}
void AliUEHistograms::ExtendTrackingEfficiency()
{
// delegates to AliUEHists
- for (Int_t i=0; i<3; i++)
- GetUEHist(i)->ExtendTrackingEfficiency();
+ for (Int_t i=0; i<fgkUEHists; i++)
+ if (GetUEHist(i))
+ GetUEHist(i)->ExtendTrackingEfficiency();
}