coverity fixes
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 May 2011 11:44:29 +0000 (11:44 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 May 2011 11:44:29 +0000 (11:44 +0000)
fill triggered step also in dphi corr task

PWG4/JetTasks/AliAnalyseLeadingTrackUE.cxx
PWG4/JetTasks/AliAnalysisTaskPhiCorrelations.cxx
PWG4/JetTasks/AliTHn.cxx
PWG4/JetTasks/AliTHn.h
PWG4/JetTasks/AliUEHist.cxx
PWG4/JetTasks/AliUEHist.h

index 635c1d1..a29283b 100644 (file)
@@ -401,7 +401,10 @@ AliVParticle*  AliAnalyseLeadingTrackUE::ParticleWithCuts(TObject* obj, Int_t ip
     
          // laser warm up tracks
          if (track->GetTPCsignal() < 10.)
+         {
+           delete track;
            return 0;
+         }
     
          if(track->Pt()>0.){
            // only constrain tracks above threshold
index 7acc603..e7ed8d0 100644 (file)
@@ -333,7 +333,15 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
   // Trigger selection ************************************************
   if (fAnalyseUE->TriggerSelection(fInputHandler))
   {  
-    fHistos->FillEvent(centrality, AliUEHist::kCFStepTriggered);
+    // (MC-true all particles)
+    // STEP 1
+    if (!fReduceMemoryFootprint)
+      fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepTriggered, tracksMC);
+    else
+      fHistos->FillEvent(centrality, AliUEHist::kCFStepTriggered);
+      
+    if (!inputEvent)
+      AliFatal("UNEXPECTED: inputEvent is 0. Trigger selection should have failed");
     
     // Vertex selection *************************************************
     if (fAnalyseUE->VertexSelection(inputEvent, fnTracksVertex, fZVertex))
@@ -358,6 +366,8 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
       // STEP 2
       if (!fReduceMemoryFootprint)
        fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepVertex, tracksMC);
+      else
+       fHistos->FillEvent(centrality, AliUEHist::kCFStepVertex);
       
       // Get MC primaries that match reconstructed track
       TObjArray* tracksRecoMatchedPrim = fAnalyseUE->GetAcceptedParticles(inputEvent, mc, kTRUE, -1, kTRUE);
index fb97e97..11cd36d 100644 (file)
@@ -305,8 +305,12 @@ void AliTHn::FillParent()
     THnSparse* target = GetGrid(i)->GetGrid();
     
     Int_t* binIdx = new Int_t[fNVars];
+    Int_t* nBins  = new Int_t[fNVars];
     for (Int_t j=0; j<fNVars; j++)
+    {
       binIdx[j] = 1;
+      nBins[j] = target->GetAxis(j)->GetNbins();
+    }
     
     Long64_t count = 0;
     
@@ -330,17 +334,99 @@ void AliTHn::FillParent()
       
       for (Int_t j=fNVars-1; j>0; j--)
       {
-       if (binIdx[j] > target->GetAxis(j)->GetNbins())
+       if (binIdx[j] > nBins[j])
        {
          binIdx[j] = 1;
          binIdx[j-1]++;
        }
       }
       
-      if (binIdx[0] > target->GetAxis(0)->GetNbins())
+      if (binIdx[0] > nBins[0])
        break;
     }
     
     AliInfo(Form("Step %d: copied %lld entries out of %lld bins", i, count, GetGlobalBinIndex(binIdx)));
+
+    delete[] binIdx;
+    delete[] nBins;
+  }
+}
+
+void AliTHn::ReduceAxis()
+{
+  // "removes" one axis by summing over the axis and putting the entry to bin 1
+  // TODO presently only implemented for the last axis
+  
+  Int_t axis = fNVars-1;
+  
+  for (Int_t i=0; i<fNSteps; i++)
+  {
+    if (!fValues[i])
+      continue;
+      
+    Float_t* source = fValues[i]->GetArray();
+    Float_t* sourceSumw2 = 0;
+    if (fSumw2[i])
+      sourceSumw2 = fSumw2[i]->GetArray();
+    
+    THnSparse* target = GetGrid(i)->GetGrid();
+    
+    Int_t* binIdx = new Int_t[fNVars];
+    Int_t* nBins  = new Int_t[fNVars];
+    for (Int_t j=0; j<fNVars; j++)
+    {
+      binIdx[j] = 1;
+      nBins[j] = target->GetAxis(j)->GetNbins();
+    }
+    
+    Long64_t count = 0;
+
+    while (1)
+    {
+      // sum over axis <axis>
+      Float_t sumValues = 0;
+      Float_t sumSumw2 = 0;
+      for (Int_t j=1; j<=nBins[axis]; j++)
+      {
+       binIdx[axis] = j;
+       Long64_t globalBin = GetGlobalBinIndex(binIdx);
+       sumValues += source[globalBin];
+       source[globalBin] = 0;
+
+       if (sourceSumw2)
+       {
+         sumSumw2 += sourceSumw2[globalBin];
+         sourceSumw2[globalBin] = 0;
+       }
+      }
+      binIdx[axis] = 1;
+       
+      Long64_t globalBin = GetGlobalBinIndex(binIdx);
+      source[globalBin] = sumValues;
+      if (sourceSumw2)
+       sourceSumw2[globalBin] = sumSumw2;
+
+      count++;
+
+      // next bin
+      binIdx[fNVars-2]++;
+      
+      for (Int_t j=fNVars-2; j>0; j--)
+      {
+       if (binIdx[j] > nBins[j])
+       {
+         binIdx[j] = 1;
+         binIdx[j-1]++;
+       }
+      }
+      
+      if (binIdx[0] > nBins[0])
+       break;
+    }
+    
+    AliInfo(Form("Step %d: reduced %lld bins to %lld entries", i, GetGlobalBinIndex(binIdx), count));
+
+    delete[] binIdx;
+    delete[] nBins;
   }
 }
index 39ecba2..07fda1a 100644 (file)
@@ -28,6 +28,7 @@ class AliTHn : public AliCFContainer
   TArrayF* GetSumw2(Int_t step)  { return fSumw2[step]; }
   
   void DeleteContainers();
+  void ReduceAxis();
   
   AliTHn(const AliTHn &c);
   AliTHn& operator=(const AliTHn& corr);
index 5f503c2..0ac6aad 100644 (file)
@@ -779,69 +779,84 @@ TH1* AliUEHist::GetPtHist(CFStep step, Region region, Float_t ptLeadMin, Float_t
   return tracks;
 }
 
-//____________________________________________________________________
-void AliUEHist::CorrectTracks(CFStep step1, CFStep step2, TH1* trackCorrection, Int_t var1, Int_t var2)
+void AliUEHist::MultiplyHistograms(THnSparse* grid, THnSparse* target, TH1* histogram, Int_t var1, Int_t var2)
 {
-  // corrects from step1 to step2 by multiplying the tracks with trackCorrection
-  // trackCorrection can be a function of eta (var1 == 0), pT (var1 == 1), leading pT (var1 == 2), multiplicity (var1 == 3), delta phi (var1 == 4)
-  // if var2 >= 0 a two dimension correction is assumed in trackCorrection
+  // multiplies <grid> with <histogram> and put the result in <target>
+  // <grid> has usually more dimensions than histogram. The axis which are used to choose the value 
+  // from <histogram> are given in <var1> and <var2>
   //
-  // if trackCorrection is 0, just copies content from step1 to step2
-  
-  for (UInt_t region=0; region<fkRegions; region++)
-    CorrectTracks(step1, step2, region, trackCorrection, var1, var2);
-}
-
-//____________________________________________________________________
-void AliUEHist::CorrectTracks(CFStep step1, CFStep step2, Int_t region, TH1* trackCorrection, Int_t var1, Int_t var2)
-{
-  //
-  // see documentation of CorrectTracks above
-  //
-  
-  if (!fTrackHist[region])
-    return;
-   
-  THnSparse* grid = fTrackHist[region]->GetGrid(step1)->GetGrid();
-  THnSparse* target = fTrackHist[region]->GetGrid(step2)->GetGrid();
+  // if <histogram> is 0, just copies content from step1 to step2
   
   // clear target histogram
   target->Reset();
   
-  if (trackCorrection != 0)
+  if (histogram != 0)
   {
-    if (grid->GetAxis(var1)->GetNbins() != trackCorrection->GetNbinsX())
-      AliFatal(Form("Invalid binning (var1): %d %d", grid->GetAxis(var1)->GetNbins(), trackCorrection->GetNbinsX()));
+    if (grid->GetAxis(var1)->GetNbins() != histogram->GetNbinsX())
+      AliFatal(Form("Invalid binning (var1): %d %d", grid->GetAxis(var1)->GetNbins(), histogram->GetNbinsX()));
       
-    if (var2 >= 0 && grid->GetAxis(var2)->GetNbins() != trackCorrection->GetNbinsY())
-      AliFatal(Form("Invalid binning (var2): %d %d", grid->GetAxis(var2)->GetNbins(), trackCorrection->GetNbinsY()));
+    if (var2 >= 0 && grid->GetAxis(var2)->GetNbins() != histogram->GetNbinsY())
+      AliFatal(Form("Invalid binning (var2): %d %d", grid->GetAxis(var2)->GetNbins(), histogram->GetNbinsY()));
   }
+
+  if (grid->GetNdimensions() > 6)
+    AliFatal("Too many dimensions in THnSparse");
+  
+  Int_t bins[6];
   
   // optimized implementation
   for (Int_t binIdx = 0; binIdx < grid->GetNbins(); binIdx++)
   {
-    Int_t bins[5];
     Double_t value = grid->GetBinContent(binIdx, bins);
     Double_t error = grid->GetBinError(binIdx);
     
-    if (trackCorrection != 0)
+    if (histogram != 0)
     {
       if (var2 < 0)
       {
-        value *= trackCorrection->GetBinContent(bins[var1]);
-        error *= trackCorrection->GetBinContent(bins[var1]);
+        value *= histogram->GetBinContent(bins[var1]);
+        error *= histogram->GetBinContent(bins[var1]);
       }
       else
       {
-        value *= trackCorrection->GetBinContent(bins[var1], bins[var2]);
-        error *= trackCorrection->GetBinContent(bins[var1], bins[var2]);
+        value *= histogram->GetBinContent(bins[var1], bins[var2]);
+        error *= histogram->GetBinContent(bins[var1], bins[var2]);
       }
     }
     
     target->SetBinContent(bins, value);
     target->SetBinError(bins, error);
   }
+}
+
+//____________________________________________________________________
+void AliUEHist::CorrectTracks(CFStep step1, CFStep step2, TH1* trackCorrection, Int_t var1, Int_t var2)
+{
+  // corrects from step1 to step2 by multiplying the tracks with trackCorrection
+  // trackCorrection can be a function of eta (var1 == 0), pT (var1 == 1), leading pT (var1 == 2), multiplicity (var1 == 3), delta phi (var1 == 4)
+  // if var2 >= 0 a two dimension correction is assumed in trackCorrection
+  //
+  // if trackCorrection is 0, just copies content from step1 to step2
+  
+  for (UInt_t region=0; region<fkRegions; region++)
+    CorrectTracks(step1, step2, region, trackCorrection, var1, var2);
+}
+
+//____________________________________________________________________
+void AliUEHist::CorrectTracks(CFStep step1, CFStep step2, Int_t region, TH1* trackCorrection, Int_t var1, Int_t var2)
+{
+  //
+  // see documentation of CorrectTracks above
+  //
+  
+  if (!fTrackHist[region])
+    return;
+   
+  THnSparse* grid = fTrackHist[region]->GetGrid(step1)->GetGrid();
+  THnSparse* target = fTrackHist[region]->GetGrid(step2)->GetGrid();
+  
+  MultiplyHistograms(grid, target, trackCorrection, var1, var2);
+  
   Printf("AliUEHist::CorrectTracks: Corrected from %f to %f entries. Correction histogram: %f entries (integral: %f)", grid->GetEntries(), target->GetEntries(), (trackCorrection) ? trackCorrection->GetEntries() : -1.0, (trackCorrection) ? trackCorrection->Integral() : -1.0); 
 }
 
@@ -856,48 +871,8 @@ void AliUEHist::CorrectEvents(CFStep step1, CFStep step2, TH1* eventCorrection,
   AliCFGridSparse* grid = fEventHist->GetGrid(step1);
   AliCFGridSparse* target = fEventHist->GetGrid(step2);
   
-  // clear target histogram
-  target->GetGrid()->Reset();
-  
-  if (eventCorrection != 0 && grid->GetNBins(var1) != eventCorrection->GetNbinsX())
-    AliFatal(Form("Invalid binning: %d %d", grid->GetNBins(var1), eventCorrection->GetNbinsX()));
-  
-  if (eventCorrection != 0 && var2 != -1 && grid->GetNBins(var2) != eventCorrection->GetNbinsY())
-    AliFatal(Form("Invalid binning: %d %d", grid->GetNBins(var2), eventCorrection->GetNbinsY()));
-  
-  Int_t bins[2];
-  for (Int_t x = 1; x <= grid->GetNBins(0); x++)
-  {
-    bins[0] = x;
-    for (Int_t y = 1; y <= grid->GetNBins(1); y++)
-    {
-      bins[1] = y;
-      
-      Double_t value = grid->GetElement(bins);
-      if (value != 0)
-      {
-        Double_t error = grid->GetElementError(bins);
-        
-        if (eventCorrection != 0)
-        {
-          if (var2 == -1)
-          {
-            value *= eventCorrection->GetBinContent(bins[var1]);
-            error *= eventCorrection->GetBinContent(bins[var1]);
-          }
-          else
-          {
-            value *= eventCorrection->GetBinContent(bins[var1], bins[var2]);
-            error *= eventCorrection->GetBinContent(bins[var1], bins[var2]);
-          }
-        }
-        
-        target->SetElement(bins, value);
-        target->SetElementError(bins, error);
-      }
-    }
-  }
-  
+  MultiplyHistograms(grid->GetGrid(), target->GetGrid(), eventCorrection, var1, var2);
+
   Printf("AliUEHist::CorrectEvents: Corrected from %f to %f entries. Correction histogram: %f entries (integral: %f)", grid->GetEntries(), target->GetEntries(), (eventCorrection) ? eventCorrection->GetEntries() : -1.0, (eventCorrection) ? eventCorrection->Integral() : -1.0); 
 }
 
@@ -1101,8 +1076,9 @@ void AliUEHist::Correct(AliUEHist* corrections)
         }
     }
     
-    //new TCanvas; correlatedContamination->DrawCopy("COLZ");
+//     new TCanvas; correlatedContamination->DrawCopy("COLZ");
     CorrectCorrelatedContamination(kCFStepTrackedOnlyPrim, 0, correlatedContamination);
+//     Printf("\n\n\nWARNING ---> SKIPPING CorrectCorrelatedContamination\n\n\n");
     
     delete correlatedContamination;
     
@@ -1598,7 +1574,7 @@ void AliUEHist::CorrectCorrelatedContamination(CFStep step, Int_t region, TH1* t
   // optimized implementation
   for (Int_t binIdx = 0; binIdx < grid->GetNbins(); binIdx++)
   {
-    Int_t bins[5];
+    Int_t bins[6];
     
     Double_t value = grid->GetBinContent(binIdx, bins);
     Double_t error = grid->GetBinError(binIdx);
@@ -1985,7 +1961,7 @@ void AliUEHist::AdditionalDPhiCorrection(Int_t step)
   // optimized implementation
   for (Int_t binIdx = 0; binIdx < grid->GetNbins(); binIdx++)
   {
-    Int_t bins[5];
+    Int_t bins[6];
     Double_t value = grid->GetBinContent(binIdx, bins);
     Double_t error = grid->GetBinError(binIdx);
     
index fdfe16d..3e477b5 100644 (file)
@@ -20,6 +20,7 @@ class TH2;
 class TH2D;
 class TCollection;
 class AliCFGridSparse;
+class THnSparse;
 
 class AliUEHist : public TObject
 {
@@ -107,6 +108,7 @@ class AliUEHist : public TObject
 protected:
   void SetStepNames(AliCFContainer* container);
   void WeightHistogram(TH3* hist1, TH1* hist2);
+  void MultiplyHistograms(THnSparse* grid, THnSparse* target, TH1* histogram, Int_t var1, Int_t var2);
 
   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