From ada1a03f389720a2bacfcb5da59aefc3133b9f36 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Thu, 21 Oct 2010 08:14:01 +0000 Subject: [PATCH] added corrections for delta phi UE event distribution tracking efficiency is stored in settings tree for each worker --- .../AliAnalysisTaskLeadingTrackUE.cxx | 1 + PWG4/JetTasks/AliUEHist.cxx | 46 +++++++++++------- PWG4/JetTasks/AliUEHist.h | 8 +-- PWG4/JetTasks/AliUEHistograms.cxx | 16 +++++- PWG4/JetTasks/AliUEHistograms.h | 2 + .../inputFiles/ue_trackingefficiency.root | Bin 7563 -> 6823 bytes 6 files changed, 51 insertions(+), 22 deletions(-) diff --git a/PWG4/JetTasks/AliAnalysisTaskLeadingTrackUE.cxx b/PWG4/JetTasks/AliAnalysisTaskLeadingTrackUE.cxx index 864c737b471..d44f7d599bc 100644 --- a/PWG4/JetTasks/AliAnalysisTaskLeadingTrackUE.cxx +++ b/PWG4/JetTasks/AliAnalysisTaskLeadingTrackUE.cxx @@ -295,6 +295,7 @@ void AliAnalysisTaskLeadingTrackUE::AddSettingsTree() settingsTree->Branch("fSelectBit", &fSelectBit,"EventSelectionBit/I"); settingsTree->Branch("fLeadingTrackEtaCut", &fLeadingTrackEtaCut, "LeadingTrackEtaCut/D"); settingsTree->Branch("fUseChargeHadrons", &fUseChargeHadrons,"UseChHadrons/O"); + settingsTree->Branch("fkTrackingEfficiency", "TH1D", &fkTrackingEfficiency); settingsTree->Fill(); fListOfHistos->Add(settingsTree); } diff --git a/PWG4/JetTasks/AliUEHist.cxx b/PWG4/JetTasks/AliUEHist.cxx index 4480b0337f9..3776d73f616 100644 --- a/PWG4/JetTasks/AliUEHist.cxx +++ b/PWG4/JetTasks/AliUEHist.cxx @@ -89,10 +89,8 @@ AliUEHist::AliUEHist(const char* reqHist) : leadingpTBins[i] = 0.5 * i; // pT,lead binning 2 - const Int_t kNLeadingpTBins2 = 10; - Double_t leadingpTBins2[kNLeadingpTBins2+1]; - for (Int_t i=0; i<=kNLeadingpTBins2; i++) - leadingpTBins2[i] = 5.0 * i; + const Int_t kNLeadingpTBins2 = 13; + Double_t leadingpTBins2[] = { 0.0, 0.5, 1.0, 2.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 100.0 }; // phi,lead const Int_t kNLeadingPhiBins = 40; @@ -484,6 +482,7 @@ TH1D* AliUEHist::GetUEHist(AliUEHist::CFStep step, AliUEHist::Region region, Flo { fTrackHist[region]->GetGrid(step)->SetRangeUser(2, ptLeadMin, ptLeadMax); tracks = fTrackHist[region]->GetGrid(step)->Project(4); + Printf("Calculated histogram in %.2f <= pT <= %.2f --> %f entries", ptLeadMin, ptLeadMax, tracks->Integral()); fTrackHist[region]->GetGrid(step)->SetRangeUser(2, 0, -1); // normalize to get a density (deta dphi) @@ -625,13 +624,26 @@ void AliUEHist::Correct(AliUEHist* corrections) { if (!fTrackHist[region]) continue; - - //TH1D* leadingBias = (TH1D*) corrections->GetBias(kCFStepReconstructed, kCFStepTracked, region, "z"); // from MC - TH1D* leadingBias = (TH1D*) GetBias(kCFStepBiasStudy, kCFStepReconstructed, region, "z"); // from data - CorrectTracks(kCFStepReconstructed, kCFStepTracked, region, leadingBias, 2); + + const char* projAxis = "z"; + Int_t secondBin = -1; + + if (fTrackHist[region]->GetNVar() == 5) + { + projAxis = "yz"; + secondBin = 4; + } + + #if 0 + TH1* leadingBias = (TH1*) corrections->GetBias(kCFStepReconstructed, kCFStepTracked, region, projAxis); // from MC + Printf("WARNING: Using MC bias correction"); + #else + TH1* leadingBias = (TH1*) GetBias(kCFStepBiasStudy, kCFStepReconstructed, region, projAxis); // from data + #endif + CorrectTracks(kCFStepReconstructed, kCFStepTracked, region, leadingBias, 2, secondBin); if (region == kMin && fCombineMinMax) { - CorrectTracks(kCFStepReconstructed, kCFStepTracked, kMax, leadingBias, 2); + CorrectTracks(kCFStepReconstructed, kCFStepTracked, kMax, leadingBias, 2, secondBin); delete leadingBias; break; } @@ -672,7 +684,7 @@ void AliUEHist::Correct(AliUEHist* corrections) vertexCorrectionObs->Reset(); TF1* func = new TF1("func", "[1]+[0]/(x-[2])"); - vertexCorrection->Fit(func, "0", "", 0.8, 4); + vertexCorrection->Fit(func, "0", "", 0, 3); for (Int_t i=1; i<=vertexCorrectionObs->GetNbinsX(); i++) { @@ -688,12 +700,15 @@ void AliUEHist::Correct(AliUEHist* corrections) vertexCorrection->DrawCopy(); vertexCorrectionObs->SetLineColor(2); vertexCorrectionObs->DrawCopy("same"); + func->SetRange(0, 4); + func->DrawClone("same"); #endif CorrectTracks(kCFStepVertex, kCFStepTriggered, vertexCorrectionObs, 3); CorrectEvents(kCFStepVertex, kCFStepTriggered, vertexCorrectionObs, 1); delete vertexCorrectionObs; delete vertexCorrection; + delete func; // copy CorrectTracks(kCFStepTriggered, kCFStepAll, 0, -1); @@ -955,11 +970,11 @@ TH1* AliUEHist::GetBias(CFStep step1, CFStep step2, Int_t region, const char* ax SetBinLimits(tmp->GetGrid(step2)); TH1D* events1 = fEventHist->Project(0, step1); - TH3D* hist1 = tmp->Project(0, 1, 2, step1); + TH3D* hist1 = tmp->Project(0, tmp->GetNVar()-1, 2, step1); WeightHistogram(hist1, events1); TH1D* events2 = fEventHist->Project(0, step2); - TH3D* hist2 = tmp->Project(0, 1, 2, step2); + TH3D* hist2 = tmp->Project(0, tmp->GetNVar()-1, 2, step2); WeightHistogram(hist2, events2); TH1* generated = hist1; @@ -978,12 +993,7 @@ TH1* AliUEHist::GetBias(CFStep step1, CFStep step2, Int_t region, const char* ax hist1->GetXaxis()->SetRangeUser(fEtaMin, fEtaMax); hist2->GetXaxis()->SetRangeUser(fEtaMin, fEtaMax); } - if (fPtMax > fPtMin && !TString(axis).Contains("y")) - { - hist1->GetYaxis()->SetRangeUser(fPtMin, fPtMax); - hist2->GetYaxis()->SetRangeUser(fPtMin, fPtMax); - } - + generated = hist1->Project3D(axis); measured = hist2->Project3D(axis); diff --git a/PWG4/JetTasks/AliUEHist.h b/PWG4/JetTasks/AliUEHist.h index f853fa5728a..879766ef39a 100644 --- a/PWG4/JetTasks/AliUEHist.h +++ b/PWG4/JetTasks/AliUEHist.h @@ -40,6 +40,7 @@ class AliUEHist : public TObject void SetTrackHist(Region region, AliCFContainer* hist) { fTrackHist[region] = hist; } void SetEventHist(AliCFContainer* hist) { fEventHist = hist; } + void SetTrackHistEfficiency(AliCFContainer* hist) { fTrackHistEfficiency = hist; } void CopyReconstructedData(AliUEHist* from); @@ -47,7 +48,7 @@ class AliUEHist : public TObject TH1* GetTrackEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Int_t source = 1); TH1* GetEventEfficiency(CFStep step1, CFStep step2, Int_t axis1, Int_t axis2 = -1, Float_t ptLeadMin = -1, Float_t ptLeadMax = -1); - TH1* GetBias(CFStep step1, CFStep step2, Int_t region, const char* axis, Float_t leadPtMin = 0, Float_t leadPtMax = 0); + TH1* GetBias(CFStep step1, CFStep step2, Int_t region, const char* axis, Float_t leadPtMin = 0, Float_t leadPtMax = -1); TH1D* GetTrackingEfficiency(Int_t axis); TH2D* GetTrackingEfficiency(); @@ -75,6 +76,9 @@ class AliUEHist : public TObject void CountEmptyBins(AliUEHist::CFStep step, Float_t ptLeadMin, Float_t ptLeadMax); + void SetBinLimits(AliCFGridSparse* grid); + void ResetBinLimits(AliCFGridSparse* grid); + AliUEHist(const AliUEHist &c); AliUEHist& operator=(const AliUEHist& corr); virtual void Copy(TObject& c) const; @@ -84,8 +88,6 @@ class AliUEHist : public TObject protected: void SetStepNames(AliCFContainer* container); void WeightHistogram(TH3* hist1, TH1* hist2); - void SetBinLimits(AliCFGridSparse* grid); - void ResetBinLimits(AliCFGridSparse* grid); AliCFContainer* fTrackHist[4]; // container for track level distributions in four regions (toward, away, min, max) and at four analysis steps AliCFContainer* fEventHist; // container for event level distribution at four analysis steps diff --git a/PWG4/JetTasks/AliUEHistograms.cxx b/PWG4/JetTasks/AliUEHistograms.cxx index 79c3e8b0da0..3c4347b1a05 100644 --- a/PWG4/JetTasks/AliUEHistograms.cxx +++ b/PWG4/JetTasks/AliUEHistograms.cxx @@ -183,6 +183,20 @@ AliUEHistograms::~AliUEHistograms() } } +AliUEHist* AliUEHistograms::GetUEHist(Int_t id) +{ + // returns AliUEHist object, useful for loops + + switch (id) + { + case 0: return fNumberDensitypT; break; + case 1: return fSumpT; break; + case 2: return fNumberDensityPhi; break; + } + + return 0; +} + //____________________________________________________________________ Int_t AliUEHistograms::CountParticles(TList* list, Float_t ptMin) { @@ -391,7 +405,7 @@ void AliUEHistograms::Correct(AliUEHistograms* corrections) fNumberDensitypT->Correct(corrections->fNumberDensitypT); fSumpT->Correct(corrections->fSumpT); - //fNumberDensityPhi->Correct(corrections->fNumberDensityPhi); + fNumberDensityPhi->Correct(corrections->fNumberDensityPhi); } //____________________________________________________________________ diff --git a/PWG4/JetTasks/AliUEHistograms.h b/PWG4/JetTasks/AliUEHistograms.h index 1877e2c7804..14a3abf6d9b 100644 --- a/PWG4/JetTasks/AliUEHistograms.h +++ b/PWG4/JetTasks/AliUEHistograms.h @@ -31,6 +31,8 @@ class AliUEHistograms : public TObject void CopyReconstructedData(AliUEHistograms* from); + AliUEHist* GetUEHist(Int_t id); + AliUEHist* GetNumberDensitypT() { return fNumberDensitypT; } AliUEHist* GetSumpT() { return fSumpT; } AliUEHist* GetNumberDensityPhi() { return fNumberDensityPhi; } diff --git a/PWG4/JetTasks/inputFiles/ue_trackingefficiency.root b/PWG4/JetTasks/inputFiles/ue_trackingefficiency.root index 2c76b9ccf1f793680b667591552775ca373e9a5c..26bad5ef166ca509be7edf4a63133ea6fe6a7e78 100644 GIT binary patch delta 6542 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