]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliHFEInclusiveSpectrum.cxx
Coverity and update
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEInclusiveSpectrum.cxx
index ba09ed995537574d61db312ef3baee7660dc997a..384e36e594b9583b38c9079b9bb73c7f3abc0f98 100644 (file)
@@ -63,7 +63,8 @@ ClassImp(AliHFEInclusiveSpectrum)
 //____________________________________________________________
 AliHFEInclusiveSpectrum::AliHFEInclusiveSpectrum(const char *name):
   AliHFECorrectSpectrumBase(name),
-  fQA(NULL)
+  fQA(NULL),
+  fNoCentralitySelectionMC(kFALSE)
 {
   //
   // Default constructor
@@ -75,7 +76,8 @@ AliHFEInclusiveSpectrum::AliHFEInclusiveSpectrum(const char *name):
 //____________________________________________________________
 AliHFEInclusiveSpectrum::AliHFEInclusiveSpectrum(const AliHFEInclusiveSpectrum &ref):
   AliHFECorrectSpectrumBase(ref),
-  fQA(ref.fQA)
+  fQA(ref.fQA),
+  fNoCentralitySelectionMC(ref.fNoCentralitySelectionMC)
 {
   //
   // Copy constructor
@@ -99,6 +101,7 @@ void AliHFEInclusiveSpectrum::Copy(TObject &o) const {
   //
   AliHFEInclusiveSpectrum &target = dynamic_cast<AliHFEInclusiveSpectrum &>(o);
   target.fQA = fQA;
+  target.fNoCentralitySelectionMC = fNoCentralitySelectionMC;
 
 
 }
@@ -111,7 +114,7 @@ AliHFEInclusiveSpectrum::~AliHFEInclusiveSpectrum(){
   
 }
 //____________________________________________________________
-Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, const AliHFEcontainer *mchfecontainer, const AliHFEcontainer *v0hfecontainer, const AliHFEcontainer */*bghfecontainer*/){
+Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, const AliHFEcontainer *mchfecontainer, const AliHFEcontainer */*bghfecontainer*/, const AliHFEcontainer *v0hfecontainer,AliCFContainer *photoniccontainerD){
   //
   // Init what we need for the correction:
   //
@@ -123,37 +126,29 @@ Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, co
   //
   //
 
-  Int_t kNdim = 3;
+  Bool_t centralitySelectionData = kTRUE, centralitySelectionMC = !fNoCentralitySelectionMC; 
 
-  Int_t dims[kNdim];
-  switch(fNbDimensions){
-  case 1:   dims[0] = 0;
-    break;
-  case 2:   for(Int_t i = 0; i < 2; i++) dims[i] = i;
-    break;
-  case 3:   for(Int_t i = 0; i < 3; i++) dims[i] = i;
-    break;
-  default:
-    AliError("Container with this number of dimensions not foreseen (yet)");
-    return kFALSE;
-  };
-  
   //
-  // Data container: raw spectrum + hadron contamination  
-  //  
+  // Data container: raw spectrum + hadron contamination
+  //
   AliCFContainer *datacontainer = datahfecontainer->GetCFContainer("recTrackContReco");
   AliCFContainer *contaminationcontainer = datahfecontainer->GetCFContainer("hadronicBackground");
   if((!datacontainer) || (!contaminationcontainer)) return kFALSE;
-  AliCFContainer *datacontainerD = GetSlicedContainer(datacontainer, fNbDimensions, dims, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
-  AliCFContainer *contaminationcontainerD = GetSlicedContainer(contaminationcontainer, fNbDimensions, dims, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
+  AliCFContainer *datacontainerD = GetSlicedContainer(datacontainer, fNbDimensions, fDims, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionData);
+  AliCFContainer *contaminationcontainerD = GetSlicedContainer(contaminationcontainer, fNbDimensions, fDims, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionData);
   if((!datacontainerD) || (!contaminationcontainerD)) return kFALSE;
   SetContainer(datacontainerD,AliHFECorrectSpectrumBase::kDataContainer);
   SetContainer(contaminationcontainerD,AliHFECorrectSpectrumBase::kBackgroundData);
+
+  // Photonic Background
+  SetContainer(photoniccontainerD,AliHFECorrectSpectrumBase::kPhotonicBackground);
+
   // QA 
   Int_t dimqa = datacontainer->GetNVar();
   Int_t dimsqa[dimqa];
   for(Int_t i = 0; i < dimqa; i++) dimsqa[i] = i;
-  AliCFContainer *datacontainerDQA = GetSlicedContainer(datacontainer, dimqa, dimsqa, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
+  AliCFContainer *datacontainerDQA = GetSlicedContainer(datacontainer, dimqa, dimsqa, -1, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionData);
   fQA->AddResultAt(datacontainerDQA,AliHFEInclusiveSpectrumQA::kDataProjection);
 
   //
@@ -165,8 +160,8 @@ Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, co
   mccontainermc = mchfecontainer->MakeMergedCFContainer("summc","summc","MCTrackCont:recTrackContMC");
   if((!mccontaineresd) || (!mccontainermc)) return kFALSE;  
   Int_t source = -1;
-  AliCFContainer *mccontaineresdD = GetSlicedContainer(mccontaineresd, fNbDimensions, dims, source, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
-  AliCFContainer *mccontainermcD = GetSlicedContainer(mccontainermc, fNbDimensions, dims, source, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
+  AliCFContainer *mccontaineresdD = GetSlicedContainer(mccontaineresd, fNbDimensions, fDims, source, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionMC);
+  AliCFContainer *mccontainermcD = GetSlicedContainer(mccontainermc, fNbDimensions, fDims, source, fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionMC);
   if((!mccontaineresdD) || (!mccontainermcD)) return kFALSE;
   SetContainer(mccontainermcD,AliHFECorrectSpectrumBase::kMCContainerMC);
   SetContainer(mccontaineresdD,AliHFECorrectSpectrumBase::kMCContainerESD);
@@ -177,7 +172,7 @@ Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, co
   THnSparseF *mccorrelation = mchfecontainer->GetCorrelationMatrix("correlationstepbeforePID");
   if(!mccorrelation) mccorrelation = mchfecontainer->GetCorrelationMatrix("correlationstepafterPID");
   if(!mccorrelation) return kFALSE;
-  THnSparseF *mccorrelationD = GetSlicedCorrelation(mccorrelation, fNbDimensions, dims,fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
+  THnSparseF *mccorrelationD = GetSlicedCorrelation(mccorrelation, fNbDimensions, fDims,fChargeChoosen,fTestCentralityLow,fTestCentralityHigh, centralitySelectionMC);
   if(!mccorrelationD) {
     printf("No correlation\n");
     return kFALSE;
@@ -192,7 +187,7 @@ Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, co
   if(v0hfecontainer) {
     AliCFContainer *containerV0 = v0hfecontainer->GetCFContainer("taggedTrackContainerReco");
     if(!containerV0) return kFALSE;
-    AliCFContainer *containerV0Electron = GetSlicedContainer(containerV0, fNbDimensions, dims, AliPID::kElectron,fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
+    AliCFContainer *containerV0Electron = GetSlicedContainer(containerV0, fNbDimensions, fDims, AliPID::kElectron,fChargeChoosen,fTestCentralityLow,fTestCentralityHigh);
     if(!containerV0Electron) return kFALSE;
     SetContainer(containerV0Electron,AliHFECorrectSpectrumBase::kDataContainerV0);
   }
@@ -204,7 +199,7 @@ Bool_t AliHFEInclusiveSpectrum::Init(const AliHFEcontainer *datahfecontainer, co
   return kTRUE;
 }
 //____________________________________________________________
-Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination){
+Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination, Bool_t subtractphotonic){
   //
   // Correct the spectrum for efficiency and unfolding
   // with both method and compare
@@ -227,15 +222,16 @@ Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination){
     AliInfo("You have to init before");
     return kFALSE;
   }
-  
+
   if((fStepTrue < 0) && (fStepMC < 0) && (fStepData < 0)) {
     AliInfo("You have to set the steps before: SetMCTruthStep, SetMCEffStep, SetStepToCorrect");
     return kFALSE;
   }
+
   SetStepGuessedUnfolding(AliHFEcuts::kStepRecKineITSTPC + AliHFEcuts::kNcutStepsMCTrack);
-    
+
   AliCFDataGrid *dataGridAfterFirstSteps = 0x0;
+
   //////////////////////////////////
   // Subtract hadron background
   /////////////////////////////////
@@ -245,6 +241,15 @@ Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination){
     dataGridAfterFirstSteps = dataspectrumaftersubstraction;
   }
 
+  //////////////////////////////////
+  // Subtract Photonic background
+  /////////////////////////////////
+  AliCFDataGrid *dataspectrumafterphotonicsubstraction = 0x0;
+  if(subtractphotonic) {
+    dataspectrumafterphotonicsubstraction = SubtractPhotonicBackground();
+    dataGridAfterFirstSteps = dataspectrumafterphotonicsubstraction;
+  }
+
   ////////////////////////////////////////////////
   // Correct for TPC efficiency from V0 if any
   ///////////////////////////////////////////////
@@ -252,7 +257,7 @@ Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination){
   AliCFContainer *dataContainerV0 = GetContainer(kDataContainerV0);
   if(dataContainerV0){
     dataspectrumafterV0efficiencycorrection = CorrectV0Efficiency(dataspectrumaftersubstraction);
-    dataGridAfterFirstSteps = dataspectrumafterV0efficiencycorrection;  
+    dataGridAfterFirstSteps = dataspectrumafterV0efficiencycorrection;
   }
 
   //////////////////////////////////////////////////////////////////////////////
@@ -264,23 +269,42 @@ Bool_t AliHFEInclusiveSpectrum::Correct(Bool_t subtractcontamination){
     dataGridAfterFirstSteps = dataspectrumafterefficiencyparametrizedcorrection;  
   }
     
-  ///////////////
-  // Unfold
-  //////////////
-  THnSparse *correctedspectrum = Unfold(dataGridAfterFirstSteps);
-  if(!correctedspectrum){
-    AliError("No corrected spectrum\n");
-    return kFALSE;
+  TGraphErrors* correctedspectrumD = 0x0;
+  TGraphErrors* alltogetherspectrumD = 0x0;
+  if(fStepMC>fStepTrue) {
+    ///////////////
+    // Unfold
+    //////////////
+    THnSparse *correctedspectrum = Unfold(dataGridAfterFirstSteps);
+    if(!correctedspectrum){
+      AliError("No corrected spectrum\n");
+      return kFALSE;
+    }
+    
+    /////////////////////
+    // Simply correct
+    ////////////////////
+    AliCFDataGrid *alltogetherCorrection = CorrectForEfficiency(dataGridAfterFirstSteps);
+
+    ////////////////////
+    // Normalization
+    ////////////////////
+    correctedspectrumD = Normalize(correctedspectrum);
+    alltogetherspectrumD = Normalize(alltogetherCorrection);
   }
-  
-  /////////////////////
-  // Simply correct
-  ////////////////////
-  AliCFDataGrid *alltogetherCorrection = CorrectForEfficiency(dataGridAfterFirstSteps);
+  else {
 
+    ////////////////////
+    // Normalization
+    ////////////////////
+    if(dataGridAfterFirstSteps) {
+      correctedspectrumD = Normalize(dataGridAfterFirstSteps);
+      alltogetherspectrumD = Normalize(dataGridAfterFirstSteps);
+    }
+  }
+  
   // QA final results
-  TGraphErrors* correctedspectrumD = Normalize(correctedspectrum);
-  TGraphErrors* alltogetherspectrumD = Normalize(alltogetherCorrection);
+
   fQA->AddResultAt(correctedspectrumD,AliHFEInclusiveSpectrumQA::kFinalResultUnfolded);
   fQA->AddResultAt(alltogetherspectrumD,AliHFEInclusiveSpectrumQA::kFinalResultDirectEfficiency);
   fQA->DrawResult();
@@ -313,25 +337,80 @@ AliCFDataGrid* AliHFEInclusiveSpectrum::SubtractBackground(){
     AliError("MC background container not found");
     return NULL;
   }
+
   Int_t stepbackground = 1; 
   AliCFDataGrid *backgroundGrid = new AliCFDataGrid("ContaminationGrid","ContaminationGrid",*backgroundContainer,stepbackground);
 
   // Subtract 
   spectrumSubtracted->Add(backgroundGrid,-1.0);
-  
+
   // QA
   TH1D *subtractedspectrum = (TH1D *) spectrumSubtracted->Project(0);
-  CorrectFromTheWidth(subtractedspectrum);
+  AliHFEtools::NormaliseBinWidth(subtractedspectrum);
   TH1D *rawspectrum = (TH1D *) dataspectrumbeforesubstraction->Project(0);
-  CorrectFromTheWidth(rawspectrum);
+  AliHFEtools::NormaliseBinWidth(rawspectrum);
   fQA->AddResultAt(subtractedspectrum,AliHFEInclusiveSpectrumQA::kAfterSC);
   fQA->AddResultAt(rawspectrum,AliHFEInclusiveSpectrumQA::kBeforeSC);
   fQA->DrawSubtractContamination();
 
+  if(fNbDimensions>=2) {
+    fQA->AddResultAt((TObject *) spectrumSubtracted,AliHFEInclusiveSpectrumQA::kAfterSCND);
+    fQA->AddResultAt((TObject *) dataspectrumbeforesubstraction,AliHFEInclusiveSpectrumQA::kBeforeSCND);
+    fQA->AddResultAt((TObject *) backgroundGrid,AliHFEInclusiveSpectrumQA::kHadronContaminationND);
+    fQA->DrawSubtractContaminationND();
+  }
+  
+
   return spectrumSubtracted;
 }
 
+//____________________________________________________________
+AliCFDataGrid* AliHFEInclusiveSpectrum::SubtractPhotonicBackground(){
+  //
+  // Apply Photonic background subtraction
+  //
+
+  printf("Photonic Background Subtraction \n");
+
+  // Raw spectrum
+  AliCFContainer *dataContainer = GetContainer(kDataContainer);
+  if(!dataContainer){
+    AliError("Data Container not available");
+    return NULL;
+  }
+  printf("Step data: %d\n",fStepData);
+  AliCFDataGrid *spectrumPhotonicSubtracted = new AliCFDataGrid("spectrumPhotonicSubtracted", "Data Grid for spectrum after Photonic Background subtraction", *dataContainer,fStepData);
+
+  AliCFDataGrid *dataSpectrumBeforePhotonicSubstraction = (AliCFDataGrid *) ((AliCFDataGrid *)GetSpectrum(GetContainer(kDataContainer),fStepData))->Clone();
+  dataSpectrumBeforePhotonicSubstraction->SetName("dataSpectrumBeforePhotonicSubstraction");
+
+
+  // Background Estimate
+  AliCFContainer *photonicContainer = GetContainer(kPhotonicBackground);
+  if(!photonicContainer){
+    AliError("Photonic background container not found");
+    return NULL;
+  }
+
+  Int_t stepbackground = 0;
+  AliCFDataGrid *photonicGrid = new AliCFDataGrid("ContaminationGrid","ContaminationGrid",*photonicContainer,stepbackground);
+
+  // Subtract
+  spectrumPhotonicSubtracted->Add(photonicGrid,-1.0);
+
+  // QA
+  TH1D *photonicsubtractedspectrum = (TH1D *) spectrumPhotonicSubtracted->Project(0);
+  AliHFEtools::NormaliseBinWidth(photonicsubtractedspectrum);
+  TH1D *newrawspectrum = (TH1D *) dataSpectrumBeforePhotonicSubstraction->Project(0);
+  AliHFEtools::NormaliseBinWidth(newrawspectrum);
+  fQA->AddResultAt(photonicsubtractedspectrum,AliHFEInclusiveSpectrumQA::kAfterSPB);
+  fQA->AddResultAt(newrawspectrum,AliHFEInclusiveSpectrumQA::kBeforeSPB);
+  fQA->DrawSubtractPhotonicBackground();
+
+  return spectrumPhotonicSubtracted;
+}
+
+
 //____________________________________________________________
 AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectParametrizedEfficiency(AliCFDataGrid* const bgsubpectrum){
   
@@ -345,7 +424,7 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectParametrizedEfficiency(AliCFDataG
     dataGrid = bgsubpectrum;
   }
   else {
-    
+
     AliCFContainer *dataContainer = GetContainer(kDataContainer);
     if(!dataContainer){
       AliError("Data Container not available");
@@ -373,11 +452,11 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectParametrizedEfficiency(AliCFDataG
 
   ULong64_t nEntries = h->GetNbins();
   for (ULong64_t i = 0; i < nEntries; ++i) {
-    
+
     Double_t value = h->GetBinContent(i, coord);
     //Double_t valuecontainer = dataContainerbis->GetBinContent(coord,fStepData);
     //printf("Value %f, and valuecontainer %f\n",value,valuecontainer);
-    
+
     // Get the bin co-ordinates given an coord
     for (Int_t j = 0; j < nbdimensions; ++j)
       points[j] = h->GetAxis(j)->GetBinCenter(coord[j]);
@@ -393,11 +472,10 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectParametrizedEfficiency(AliCFDataG
     if(valueEfficiency > 0.0) {
       h->SetBinContent(coord,value/valueEfficiency);
       dataContainerbis->SetBinContent(coord,fStepData,value/valueEfficiency);
+      Double_t error = h->GetBinError(i);
+      h->SetBinError(coord,error/valueEfficiency);
+      dataContainerbis->SetBinError(coord,fStepData,error/valueEfficiency);
     }
-    Double_t error = h->GetBinError(i);
-    h->SetBinError(coord,error/valueEfficiency);
-    dataContainerbis->SetBinError(coord,fStepData,error/valueEfficiency);
-
    
   } 
 
@@ -408,13 +486,20 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectParametrizedEfficiency(AliCFDataG
 
  // QA
   TH1D *afterE = (TH1D *) resultt->Project(0);
-  CorrectFromTheWidth(afterE);
+  AliHFEtools::NormaliseBinWidth(afterE);
   TH1D *beforeE = (TH1D *) dataGrid->Project(0);
-  CorrectFromTheWidth(beforeE);
+  AliHFEtools::NormaliseBinWidth(beforeE);
   fQA->AddResultAt(afterE,AliHFEInclusiveSpectrumQA::kAfterPE);
   fQA->AddResultAt(beforeE,AliHFEInclusiveSpectrumQA::kBeforePE);
   fQA->AddResultAt(fEfficiencyFunction,AliHFEInclusiveSpectrumQA::kPEfficiency);
   fQA->DrawCorrectWithEfficiency(AliHFEInclusiveSpectrumQA::kParametrized);
+
+  if(fNbDimensions>=2) {
+    fQA->AddResultAt((TObject *) resultt,AliHFEInclusiveSpectrumQA::kAfterPEND);
+    fQA->AddResultAt((TObject *) dataGrid,AliHFEInclusiveSpectrumQA::kBeforePEND);
+    fQA->AddResultAt((TObject *) fEfficiencyFunction,AliHFEInclusiveSpectrumQA::kPEfficiencyND);
+    fQA->DrawCorrectWithEfficiencyND(AliHFEInclusiveSpectrumQA::kParametrized);
+  }
   
   return resultt;
 
@@ -456,14 +541,21 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectV0Efficiency(AliCFDataGrid* const
 
   // QA
   TH1D *afterE = (TH1D *) result->Project(0);
-  CorrectFromTheWidth(afterE);
+  AliHFEtools::NormaliseBinWidth(afterE);
   TH1D *beforeE = (TH1D *) dataGrid->Project(0);
-  CorrectFromTheWidth(beforeE);
+  AliHFEtools::NormaliseBinWidth(beforeE);
   TH1D* efficiencyDproj = (TH1D *) efficiencyD->Project(0);
   fQA->AddResultAt(afterE,AliHFEInclusiveSpectrumQA::kAfterV0);
   fQA->AddResultAt(beforeE,AliHFEInclusiveSpectrumQA::kBeforeV0);
   fQA->AddResultAt(efficiencyDproj,AliHFEInclusiveSpectrumQA::kV0Efficiency);
   fQA->DrawCorrectWithEfficiency(AliHFEInclusiveSpectrumQA::kV0);
+
+  if(fNbDimensions>=2) {
+    fQA->AddResultAt((TObject *) result,AliHFEInclusiveSpectrumQA::kAfterV0ND);
+    fQA->AddResultAt((TObject *) dataGrid,AliHFEInclusiveSpectrumQA::kBeforeV0ND);
+    fQA->AddResultAt((TObject *) efficiencyD,AliHFEInclusiveSpectrumQA::kV0EfficiencyND);
+    fQA->DrawCorrectWithEfficiencyND(AliHFEInclusiveSpectrumQA::kV0);
+  }
  
 
   return result;
@@ -488,7 +580,7 @@ THnSparse *AliHFEInclusiveSpectrum::Unfold(AliCFDataGrid* const bgsubpectrum){
   }
 
   // Data 
-  AliCFDataGrid *dataGrid = 0x0;  
+  AliCFDataGrid *dataGrid = 0x0;
   if(bgsubpectrum) {
     dataGrid = bgsubpectrum;
   }
@@ -501,8 +593,8 @@ THnSparse *AliHFEInclusiveSpectrum::Unfold(AliCFDataGrid* const bgsubpectrum){
     }
 
     dataGrid = new AliCFDataGrid("dataGrid","dataGrid",*dataContainer, fStepData);
-  } 
-  
+  }
+
   // Guessed
   AliCFDataGrid* guessedGrid = new AliCFDataGrid("guessed","",*mcContainer, fStepGuessedUnfolding);
   THnSparse* guessedTHnSparse = ((AliCFGridSparse*)guessedGrid->GetData())->GetGrid();
@@ -511,8 +603,8 @@ THnSparse *AliHFEInclusiveSpectrum::Unfold(AliCFDataGrid* const bgsubpectrum){
   AliCFEffGrid* efficiencyD = new AliCFEffGrid("efficiency","",*mcContainer);
   efficiencyD->CalculateEfficiency(fStepMC,fStepTrue);
 
-  // Unfold 
-  
+  // Unfold
+
   AliCFUnfolding unfolding("unfolding","",fNbDimensions,fCorrelation,efficiencyD->GetGrid(),dataGrid->GetGrid(),guessedTHnSparse,1.e-06,0,fNumberOfIterations);
   if(fSetSmoothing) unfolding.UseSmoothing();
   unfolding.Unfold();
@@ -520,15 +612,15 @@ THnSparse *AliHFEInclusiveSpectrum::Unfold(AliCFDataGrid* const bgsubpectrum){
   // Results
   THnSparse* result = unfolding.GetUnfolded();
   THnSparse* residual = unfolding.GetEstMeasured();
-  
+
   // QA
   TH1D *residualh = (TH1D *) residual->Projection(0);
   TH1D *beforeE = (TH1D *) dataGrid->Project(0);
   TH1D* efficiencyDproj = (TH1D *) efficiencyD->Project(0);
   TH1D *afterE = (TH1D *) result->Projection(0);
-  CorrectFromTheWidth(residualh);
-  CorrectFromTheWidth(beforeE);
-  CorrectFromTheWidth(afterE);
+  AliHFEtools::NormaliseBinWidth(residualh);
+  AliHFEtools::NormaliseBinWidth(beforeE);
+  AliHFEtools::NormaliseBinWidth(afterE);
   fQA->AddResultAt(residualh,AliHFEInclusiveSpectrumQA::kResidualU);
   fQA->AddResultAt(afterE,AliHFEInclusiveSpectrumQA::kAfterU);
   fQA->AddResultAt(beforeE,AliHFEInclusiveSpectrumQA::kBeforeU);
@@ -540,7 +632,7 @@ THnSparse *AliHFEInclusiveSpectrum::Unfold(AliCFDataGrid* const bgsubpectrum){
 }
 //____________________________________________________________
 AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectForEfficiency(AliCFDataGrid* const bgsubpectrum){
-  
+
   //
   // Apply unfolding and efficiency correction together to bgsubspectrum
   //
@@ -556,12 +648,12 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectForEfficiency(AliCFDataGrid* cons
   efficiencyD->CalculateEfficiency(fStepMC,fStepTrue);
 
   // Data in the right format
-  AliCFDataGrid *dataGrid = 0x0;  
+  AliCFDataGrid *dataGrid = 0x0;
   if(bgsubpectrum) {
     dataGrid = bgsubpectrum;
   }
   else {
-    
+
     AliCFContainer *dataContainer = GetContainer(kDataContainer);
     if(!dataContainer){
       AliError("Data Container not available");
@@ -569,7 +661,7 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectForEfficiency(AliCFDataGrid* cons
     }
 
     dataGrid = new AliCFDataGrid("dataGrid","dataGrid",*dataContainer, fStepData);
-  } 
+  }
 
   // Correct
   AliCFDataGrid *result = (AliCFDataGrid *) dataGrid->Clone();
@@ -577,16 +669,22 @@ AliCFDataGrid *AliHFEInclusiveSpectrum::CorrectForEfficiency(AliCFDataGrid* cons
 
   // QA
   TH1D *afterE = (TH1D *) result->Project(0);
-  CorrectFromTheWidth(afterE);
-  TH1D *beforeE = (TH1D *) dataGrid->Project(0);
-  CorrectFromTheWidth(beforeE);
+  AliHFEtools::NormaliseBinWidth(afterE);
+  TH1D *beforeE = (TH1D *) dataGrid->Project(0); 
+  AliHFEtools::NormaliseBinWidth(beforeE);
   TH1D* efficiencyDproj = (TH1D *) efficiencyD->Project(0);
   fQA->AddResultAt(afterE,AliHFEInclusiveSpectrumQA::kAfterMCE);
   fQA->AddResultAt(beforeE,AliHFEInclusiveSpectrumQA::kBeforeMCE);
   fQA->AddResultAt(efficiencyDproj,AliHFEInclusiveSpectrumQA::kMCEfficiency);
   fQA->DrawCorrectWithEfficiency(AliHFEInclusiveSpectrumQA::kMC);
 
-  
+  if(fNbDimensions>=2) {
+    fQA->AddResultAt((TObject *) result,AliHFEInclusiveSpectrumQA::kAfterMCEND);
+    fQA->AddResultAt((TObject *) dataGrid,AliHFEInclusiveSpectrumQA::kBeforeMCEND);
+    fQA->AddResultAt((TObject *) efficiencyD,AliHFEInclusiveSpectrumQA::kMCEfficiencyND);
+    fQA->DrawCorrectWithEfficiencyND(AliHFEInclusiveSpectrumQA::kMC);
+  }
+
   return result;
 
 }