]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/CorrelationsBase/AliUEHist.cxx
small updates before moving code around
[u/mrichter/AliRoot.git] / PWG4 / CorrelationsBase / AliUEHist.cxx
index 8b2922e352273e896cbc89d2eef3bd380334d795..f8a0b4499296e5ee55c4ca47c2dfbaf7f862f438 100644 (file)
@@ -697,6 +697,116 @@ TH1* AliUEHist::GetUEHist(AliUEHist::CFStep step, AliUEHist::Region region, Floa
   return tracks;
 }
 
+//____________________________________________________________________
+void AliUEHist::GetHistsZVtx(AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd, TH3** trackHist, TH1** eventHist)
+{
+  // Calculates a 3d histogram with deltaphi, deltaeta, zvtx on track level and a 1d histogram on event level (as fct of zvtx)
+  // Histogram has to be deleted by the caller of the function
+  
+  if (!fTrackHist[kToward]->GetGrid(0)->GetGrid()->GetAxis(5))
+    AliFatal("Histogram without vertex axis provided");
+
+  // unzoom all axes
+  ResetBinLimits(fTrackHist[region]->GetGrid(step));
+  ResetBinLimits(fEventHist->GetGrid(step));
+  
+  SetBinLimits(fTrackHist[region]->GetGrid(step));
+  
+  if (multBinEnd >= multBinBegin)
+  {
+    Printf("Using multiplicity range %d --> %d", multBinBegin, multBinEnd);
+    fTrackHist[region]->GetGrid(step)->GetGrid()->GetAxis(3)->SetRange(multBinBegin, multBinEnd);
+    fEventHist->GetGrid(step)->GetGrid()->GetAxis(1)->SetRange(multBinBegin, multBinEnd);
+  }
+    
+  Int_t firstBin = fTrackHist[region]->GetAxis(2, step)->FindBin(ptLeadMin);
+  Int_t lastBin = fTrackHist[region]->GetAxis(2, step)->FindBin(ptLeadMax);
+  Printf("Using leading pT range %d --> %d", firstBin, lastBin);
+  fTrackHist[region]->GetGrid(step)->GetGrid()->GetAxis(2)->SetRange(firstBin, lastBin);
+  fEventHist->GetGrid(step)->GetGrid()->GetAxis(0)->SetRange(firstBin, lastBin);
+    
+  *trackHist = (TH3*) fTrackHist[region]->GetGrid(step)->Project(4, 0, 5);
+  *eventHist = (TH1*) fEventHist->GetGrid(step)->Project(2);
+
+  ResetBinLimits(fTrackHist[region]->GetGrid(step));
+  ResetBinLimits(fEventHist->GetGrid(step));
+}
+
+//____________________________________________________________________
+TH2* AliUEHist::GetSumOfRatios2(AliUEHist* mixed, AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd)
+{
+  // Calls GetUEHist(...) for *each* vertex bin and performs a sum of ratios:
+  // 1_N [ (same/mixed)_1 + (same/mixed)_2 + (same/mixed)_3 + ... ]
+  // where N is the total number of events/trigger particles and the subscript is the vertex bin
+  // where mixed is normalized such that the information about the number of pairs in same is kept
+  //
+  // returns a 2D histogram: deltaphi, deltaeta
+  //
+  // Parameters:
+  //   mixed: AliUEHist containing mixed event corresponding to this object
+  //   <other parameters> : check documentation of AliUEHist::GetUEHist
+  
+  TH2* totalTracks = 0;
+  
+  TH3* trackSameAll = 0;
+  TH3* trackMixedAll = 0;
+  TH1* eventSameAll = 0;
+  TH1* eventMixedAll = 0;
+  
+  GetHistsZVtx(step, region, ptLeadMin, ptLeadMax, multBinBegin, multBinEnd, &trackSameAll, &eventSameAll);
+  mixed->GetHistsZVtx(step, region, ptLeadMin, ptLeadMax, multBinBegin, multBinEnd, &trackMixedAll, &eventMixedAll);
+  
+  TAxis* vertexAxis = trackSameAll->GetZaxis();
+  for (Int_t vertexBin = 1; vertexBin <= vertexAxis->GetNbins(); vertexBin++)
+  {
+    trackSameAll->GetZaxis()->SetRange(vertexBin, vertexBin);
+    trackMixedAll->GetZaxis()->SetRange(vertexBin, vertexBin);
+
+    TH2* tracksSame = (TH2*) trackSameAll->Project3D("yx1");
+    TH2* tracksMixed = (TH2*) trackMixedAll->Project3D("yx1");
+    
+    // asssume flat in dphi, gain in statistics
+//     TH1* histMixedproj = mixedTwoD->ProjectionY();
+//     histMixedproj->Scale(1.0 / mixedTwoD->GetNbinsX());
+//     
+//     for (Int_t x=1; x<=mixedTwoD->GetNbinsX(); x++)
+//       for (Int_t y=1; y<=mixedTwoD->GetNbinsY(); y++)
+//     mixedTwoD->SetBinContent(x, y, histMixedproj->GetBinContent(y));
+
+//       delete histMixedproj;
+
+    // get mixed event normalization by assuming full acceptance at deta of 0
+    /*
+    Double_t mixedNorm = tracksMixed->Integral(tracksMixed->GetXaxis()->FindBin(-0.01), tracksMixed->GetXaxis()->FindBin(0.01), tracksMixed->GetYaxis()->FindBin(-0.01), tracksMixed->GetYaxis()->FindBin(0.01));
+    mixedNorm /= tracksMixed->GetXaxis()->FindBin(0.01) - tracksMixed->GetXaxis()->FindBin(-0.01) + 1) * (tracksMixed->GetYaxis()->FindBin(0.01) - tracksMixed->GetYaxis()->FindBin(-0.01) + 1);
+    tracksMixed->Scale(1.0 / mixedNorm);
+    */
+    tracksSame->Scale(tracksMixed->Integral() / tracksSame->Integral());
+    
+    tracksSame->Divide(tracksMixed);
+    
+    if (!totalTracks)
+      totalTracks = (TH2*) tracksSame->Clone("totalTracks");
+    else
+      totalTracks->Add(tracksSame);
+
+    delete tracksSame;
+    delete tracksMixed;
+  }
+
+  Int_t totalEvents = eventSameAll->Integral();
+  Printf("Dividing %f tracks by %d events", totalTracks->Integral(), totalEvents);
+  if (totalEvents > 0)
+    totalTracks->Scale(1.0 / totalEvents);
+  
+  delete trackSameAll;
+  delete trackMixedAll;
+  delete eventSameAll;
+  delete eventMixedAll;
+  
+  return totalTracks;
+}
+
 //____________________________________________________________________
 TH2* AliUEHist::GetSumOfRatios(AliUEHist* mixed, AliUEHist::CFStep step, AliUEHist::Region region, Float_t ptLeadMin, Float_t ptLeadMax, Int_t multBinBegin, Int_t multBinEnd, Bool_t etaNorm, Bool_t useVertexBins)
 {