Handling of Terminate in frame corrected
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 May 2009 12:24:24 +0000 (12:24 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 May 2009 12:24:24 +0000 (12:24 +0000)
PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h
PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx
PWG4/PartCorrBase/AliAnaPartCorrMaker.h
PWG4/PartCorrBase/AliAnalysisTaskParticleCorrelation.cxx
PWG4/PartCorrDep/AliAnaExample.cxx
PWG4/PartCorrDep/AliAnaExample.h
PWG4/PartCorrDep/AliAnaPi0.cxx
PWG4/PartCorrDep/AliAnaPi0.h

index 15603b8..292038f 100755 (executable)
@@ -69,8 +69,8 @@ public:
   virtual AliCaloTrackReader * GetReader() const {return fReader ; }
   virtual void SetReader(AliCaloTrackReader * reader) { fReader = reader ; }
   
-  virtual void Terminate() {;}
-  
+  virtual void Terminate(TList * /*outputList*/) {;}
+       
   //analysis AOD branch
   virtual TClonesArray * GetCreateOutputAODBranch() ;
   virtual TString GetInputAODName() const {return fInputAODName ; }
index d0f5fab..4b97a34 100755 (executable)
@@ -254,15 +254,20 @@ Bool_t AliAnaPartCorrMaker::ProcessEvent(Int_t iEntry){
 }
 
 //________________________________________________________________________
-void AliAnaPartCorrMaker::Terminate()
+void AliAnaPartCorrMaker::Terminate(TList * outputList)
 {  
   //Execute Terminate of analysis
   //Do some final plots.
   
+  if (!outputList) {
+         Error("Terminate", "No output list");
+         return;
+  }
+       
   for(Int_t iana = 0; iana <  fAnalysisContainer->GetEntries(); iana++){
     
     AliAnaPartCorrBaseClass * ana =  ((AliAnaPartCorrBaseClass *) fAnalysisContainer->At(iana)) ;
-    ana->Terminate();
+    ana->Terminate(outputList);
     
   }//Loop on analysis defined
 }
index e6dc929..2296c5a 100755 (executable)
@@ -46,7 +46,7 @@ class AliAnaPartCorrMaker : public TObject {
   void SwitchOnAODsMaker()   { fMakeAOD = kTRUE ; }
   void SwitchOffAODsMaker()   { fMakeAOD = kFALSE ; }
   
-  void Terminate();
+  void Terminate(TList * outputList);
 
   void AddAnalysis(TObject* ana, Int_t n) {
     if ( fAnalysisContainer) fAnalysisContainer->AddAt(ana,n); 
index f478d2c..2e11e3a 100755 (executable)
@@ -155,9 +155,11 @@ void AliAnalysisTaskParticleCorrelation::Terminate(Option_t */*option*/)
 {
   // Terminate analysis
   // Do some plots
-  //
-  
-  fAna->Terminate();
 
+  // Get merged histograms from the output container
+  TList *outputList = (TList*)GetOutputData(1);
+  // Propagate histagrams to maker
+  fAna->Terminate(outputList);
+       
 }
 
index 8df6c56..b509552 100755 (executable)
@@ -375,12 +375,43 @@ void  AliAnaExample::MakeAnalysisFillHistograms()
   }
 }
 
+//________________________________________________________________________
+void AliAnaExample::ReadHistograms(TList* outputList)
+{
+       // Needed when Terminate is executed in distributed environment
+       // Refill analysis histograms of this class with corresponding histograms in output list. 
+       
+       // Histograms of this analsys are kept in the same list as other analysis, recover the position of
+       // the first one and then add the next 
+       Int_t index = outputList->IndexOf(outputList->FindObject(GetAddedHistogramsStringToName()+"hPt"));
+       
+       //Read histograms, must be in the same order as in GetCreateOutputObject.
+       fhPt   = (TH1F *) outputList->At(index++); 
+       fhPhi  = (TH1F *) outputList->At(index++); 
+       fhEta  = (TH1F *) outputList->At(index++);
+       
+       if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC) {
+        fhNCells     = (TH1F *) outputList->At(index++); 
+        fhAmplitude  = (TH1F *) outputList->At(index++); 
+       }
+       
+       if(IsDataMC()){
+         fh2Pt  = (TH2F *) outputList->At(index++); 
+         fh2Phi = (TH2F *) outputList->At(index++); 
+         fh2Eta = (TH2F *) outputList->At(index); 
+       }
+       
+}
+
 //__________________________________________________________________
-void  AliAnaExample::Terminate() 
+void  AliAnaExample::Terminate(TList* outputList) 
 {
   
   //Do some plots to end
   
+  //Recover histograms from output histograms list, needed for distributed analysis.   
+  ReadHistograms(outputList);
+       
   printf(" AliAnaExample::Terminate()  *** %s Report:", GetName()) ; 
   printf(" AliAnaExample::Terminate()        pt         : %5.3f , RMS : %5.3f \n", fhPt->GetMean(),   fhPt->GetRMS() ) ;
  
index 891a411..34ee7c8 100755 (executable)
@@ -46,8 +46,9 @@ class AliAnaExample : public AliAnaPartCorrBaseClass {
   TString GetDetector() const {return fDetector ;}
   void SetDetector( TString calo ) {fDetector = calo; }
   
-  void Terminate();
-  
+  void Terminate(TList * outputList);
+  void ReadHistograms(TList * outputList); //Fill histograms with histograms in ouput list, needed in Terminate.
+
  private:
   
   Int_t  fPdg ; //identified particle id
index 55eca9b..9916994 100755 (executable)
@@ -42,7 +42,6 @@
 #include "TParticle.h"
 #include "AliAODCaloCluster.h"
 #include "AliVEvent.h"
-#include "AliLog.h"
 
 #ifdef __PHOSGEO__
        #include "AliPHOSGeoUtils.h"
@@ -482,18 +481,58 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
   
 }      
 
+//________________________________________________________________________
+void AliAnaPi0::ReadHistograms(TList* outputList)
+{
+       // Needed when Terminate is executed in distributed environment
+       // Refill analysis histograms of this class with corresponding histograms in output list. 
+       
+       // Histograms of this analsys are kept in the same list as other analysis, recover the position of
+       // the first one and then add the next 
+       Int_t index = outputList->IndexOf(outputList->FindObject(GetAddedHistogramsStringToName()+"hRe_cen0_pid0_dist1"));
+       
+
+    for(Int_t ic=0; ic<fNCentrBin; ic++){
+        for(Int_t ipid=0; ipid<fNPID; ipid++){
+                       fhRe1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+                       fhMi1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+                       fhRe2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+                       fhMi2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+                       fhRe3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+                       fhMi3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++);
+               }
+       }
+       
+       fhEvents = (TH3D *) outputList->At(index++); 
+       
+       //Histograms filled only if MC data is requested        
+       if(IsDataMC() || (GetReader()->GetDataType() == AliCaloTrackReader::kMC) ){
+                fhPrimPt     = (TH1D*)  outputList->At(index++);
+                fhPrimAccPt  = (TH1D*)  outputList->At(index++);
+                fhPrimY      = (TH1D*)  outputList->At(index++);
+                fhPrimAccY   = (TH1D*)  outputList->At(index++);
+                fhPrimPhi    = (TH1D*)  outputList->At(index++);
+                fhPrimAccPhi = (TH1D*)  outputList->At(index);
+       }
+       
+}
+
+
 //____________________________________________________________________________________________________________________________________________________
-void AliAnaPi0::Terminate() 
+void AliAnaPi0::Terminate(TList* outputList) 
 {
   //Do some calculations and plots from the final histograms.
   
   printf(" *** %s Terminate:\n", GetName()) ; 
-  
+  //Recover histograms from output histograms list, needed for distributed analysis.    
+  ReadHistograms(outputList);
+       
   if (!fhRe1) {
      printf("AliAnaPi0::Terminate() - Error: Remote output histograms not imported in AliAnaPi0 object");
      return;
   }
-      
+       
   printf("AliAnaPi0::Terminate()         Mgg Real        : %5.3f , RMS : %5.3f \n", fhRe1[0]->GetMean(),   fhRe1[0]->GetRMS() ) ;
  
   char nameIM[128];
index dbb18c2..9be56b5 100755 (executable)
@@ -61,8 +61,9 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass {
   TString GetCalorimeter()   const {return fCalorimeter ; }
   void SetCalorimeter(TString det)    {fCalorimeter = det ; }
   
-  void Terminate();
-  
+  void Terminate(TList* outputList);
+  void ReadHistograms(TList * outputList); //Fill histograms with histograms in ouput list, needed in Terminate.
+       
   private:
   Bool_t IsBadRun(Int_t /*iRun*/) const {return kFALSE;} //Tests if this run bad according to private list