ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */
// Author: Andrei Gheata, 20/12/2010

//==============================================================================
// AliAnalysisTaskStat - basic task that attaches a AliAnalysisTaskstatistics 
// object to the analysis manager. Use: AliAnalysisManager::AddStatisticsTask
// to attach to a train.
//==============================================================================

#include "AliAnalysisTaskStat.h"

#include <TList.h>
#include "AliVEvent.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisDataContainer.h"
#include "AliAnalysisStatistics.h"

ClassImp(AliAnalysisTaskStat)

//______________________________________________________________________________
AliAnalysisTaskStat::AliAnalysisTaskStat(const char *name)
                    :AliAnalysisTaskSE(name),
                     fStatistics(0),
                     fOutputList(0)
{
// Named constructor.
  DefineOutput(1, TList::Class());
  fBranchNames = "ESD:AliESDHeader. AOD:header";
  fStatistics = new AliAnalysisStatistics("MgrStat");
}

//______________________________________________________________________________
AliAnalysisTaskStat::~AliAnalysisTaskStat()
{
// Destructor.
  if (fOutputList) {
    if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
  } else {
    if (fStatistics) delete fStatistics;
  }
} 
    
//______________________________________________________________________________
AliAnalysisTaskStat *AliAnalysisTaskStat::AddToManager(UInt_t offlineMask)
{
// Add this task to the analysis manager. By default it selects MB events.
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AliAnalysisTaskStat::AddToManager", "You need a manager first");
    return 0;
  }
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  if (!cinput) {
    ::Error("AliAnalysisTaskStat::AddToManager", "Attach first the input handler");
    return 0;
  }  
  AliAnalysisDataContainer *coutput = mgr->CreateContainer("MgrStat", TList::Class(), AliAnalysisManager::kOutputContainer,
                mgr->GetCommonFileName());
  AliAnalysisTaskStat *taskStatistics = new AliAnalysisTaskStat("MgrStat");
  mgr->AddTask(taskStatistics);
  AliAnalysisStatistics *stat = taskStatistics->GetStatistics();
  stat->SetOfflineMask(offlineMask);
  mgr->SetStatistics(stat);
  taskStatistics->SelectCollisionCandidates(offlineMask);
  mgr->ConnectInput(taskStatistics, 0, cinput);
  mgr->ConnectOutput(taskStatistics, 1, coutput);
  return taskStatistics;
}

//______________________________________________________________________________
void  AliAnalysisTaskStat::UserCreateOutputObjects()
{
// Create the output list.
  if (!fStatistics) {
    Fatal("UserCreateOutputObjects", "You are not allowed to create this task using the dummy constructor. Use the named one.");
  }
  fOutputList = new TList();
  fOutputList->SetOwner();
  if (fStatistics) fOutputList->Add(fStatistics);
  PostData(1, fOutputList);
}   

//______________________________________________________________________________
void  AliAnalysisTaskStat::UserExec(Option_t *)
{
// Event loop.
  fStatistics->AddAccepted();
}

//______________________________________________________________________________
void  AliAnalysisTaskStat::Terminate(Option_t *)
{
// Get the statistics from its container and copy to manager.
  fOutputList = dynamic_cast<TList*>(GetOutputData(1));
  if (!fOutputList) {
    Error("Terminate", "Cannot get output list from container");
    return;
  }
  AliAnalysisStatistics *stat = dynamic_cast<AliAnalysisStatistics*>(fOutputList->At(0));
  if (!stat) {
    Error("Terminate", "Statistics object not found in list");
    return;
  }
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (stat != fStatistics) {
    // Non-local mode
    fStatistics->AddInput(stat->GetNinput());
    fStatistics->AddProcessed(stat->GetNprocessed());
    fStatistics->AddFailed(stat->GetNfailed());
    fStatistics->AddAccepted(stat->GetNaccepted());
    mgr->SetStatistics(fStatistics);
  }
  fStatistics->Print();
}  
 AliAnalysisTaskStat.cxx:1
 AliAnalysisTaskStat.cxx:2
 AliAnalysisTaskStat.cxx:3
 AliAnalysisTaskStat.cxx:4
 AliAnalysisTaskStat.cxx:5
 AliAnalysisTaskStat.cxx:6
 AliAnalysisTaskStat.cxx:7
 AliAnalysisTaskStat.cxx:8
 AliAnalysisTaskStat.cxx:9
 AliAnalysisTaskStat.cxx:10
 AliAnalysisTaskStat.cxx:11
 AliAnalysisTaskStat.cxx:12
 AliAnalysisTaskStat.cxx:13
 AliAnalysisTaskStat.cxx:14
 AliAnalysisTaskStat.cxx:15
 AliAnalysisTaskStat.cxx:16
 AliAnalysisTaskStat.cxx:17
 AliAnalysisTaskStat.cxx:18
 AliAnalysisTaskStat.cxx:19
 AliAnalysisTaskStat.cxx:20
 AliAnalysisTaskStat.cxx:21
 AliAnalysisTaskStat.cxx:22
 AliAnalysisTaskStat.cxx:23
 AliAnalysisTaskStat.cxx:24
 AliAnalysisTaskStat.cxx:25
 AliAnalysisTaskStat.cxx:26
 AliAnalysisTaskStat.cxx:27
 AliAnalysisTaskStat.cxx:28
 AliAnalysisTaskStat.cxx:29
 AliAnalysisTaskStat.cxx:30
 AliAnalysisTaskStat.cxx:31
 AliAnalysisTaskStat.cxx:32
 AliAnalysisTaskStat.cxx:33
 AliAnalysisTaskStat.cxx:34
 AliAnalysisTaskStat.cxx:35
 AliAnalysisTaskStat.cxx:36
 AliAnalysisTaskStat.cxx:37
 AliAnalysisTaskStat.cxx:38
 AliAnalysisTaskStat.cxx:39
 AliAnalysisTaskStat.cxx:40
 AliAnalysisTaskStat.cxx:41
 AliAnalysisTaskStat.cxx:42
 AliAnalysisTaskStat.cxx:43
 AliAnalysisTaskStat.cxx:44
 AliAnalysisTaskStat.cxx:45
 AliAnalysisTaskStat.cxx:46
 AliAnalysisTaskStat.cxx:47
 AliAnalysisTaskStat.cxx:48
 AliAnalysisTaskStat.cxx:49
 AliAnalysisTaskStat.cxx:50
 AliAnalysisTaskStat.cxx:51
 AliAnalysisTaskStat.cxx:52
 AliAnalysisTaskStat.cxx:53
 AliAnalysisTaskStat.cxx:54
 AliAnalysisTaskStat.cxx:55
 AliAnalysisTaskStat.cxx:56
 AliAnalysisTaskStat.cxx:57
 AliAnalysisTaskStat.cxx:58
 AliAnalysisTaskStat.cxx:59
 AliAnalysisTaskStat.cxx:60
 AliAnalysisTaskStat.cxx:61
 AliAnalysisTaskStat.cxx:62
 AliAnalysisTaskStat.cxx:63
 AliAnalysisTaskStat.cxx:64
 AliAnalysisTaskStat.cxx:65
 AliAnalysisTaskStat.cxx:66
 AliAnalysisTaskStat.cxx:67
 AliAnalysisTaskStat.cxx:68
 AliAnalysisTaskStat.cxx:69
 AliAnalysisTaskStat.cxx:70
 AliAnalysisTaskStat.cxx:71
 AliAnalysisTaskStat.cxx:72
 AliAnalysisTaskStat.cxx:73
 AliAnalysisTaskStat.cxx:74
 AliAnalysisTaskStat.cxx:75
 AliAnalysisTaskStat.cxx:76
 AliAnalysisTaskStat.cxx:77
 AliAnalysisTaskStat.cxx:78
 AliAnalysisTaskStat.cxx:79
 AliAnalysisTaskStat.cxx:80
 AliAnalysisTaskStat.cxx:81
 AliAnalysisTaskStat.cxx:82
 AliAnalysisTaskStat.cxx:83
 AliAnalysisTaskStat.cxx:84
 AliAnalysisTaskStat.cxx:85
 AliAnalysisTaskStat.cxx:86
 AliAnalysisTaskStat.cxx:87
 AliAnalysisTaskStat.cxx:88
 AliAnalysisTaskStat.cxx:89
 AliAnalysisTaskStat.cxx:90
 AliAnalysisTaskStat.cxx:91
 AliAnalysisTaskStat.cxx:92
 AliAnalysisTaskStat.cxx:93
 AliAnalysisTaskStat.cxx:94
 AliAnalysisTaskStat.cxx:95
 AliAnalysisTaskStat.cxx:96
 AliAnalysisTaskStat.cxx:97
 AliAnalysisTaskStat.cxx:98
 AliAnalysisTaskStat.cxx:99
 AliAnalysisTaskStat.cxx:100
 AliAnalysisTaskStat.cxx:101
 AliAnalysisTaskStat.cxx:102
 AliAnalysisTaskStat.cxx:103
 AliAnalysisTaskStat.cxx:104
 AliAnalysisTaskStat.cxx:105
 AliAnalysisTaskStat.cxx:106
 AliAnalysisTaskStat.cxx:107
 AliAnalysisTaskStat.cxx:108
 AliAnalysisTaskStat.cxx:109
 AliAnalysisTaskStat.cxx:110
 AliAnalysisTaskStat.cxx:111
 AliAnalysisTaskStat.cxx:112
 AliAnalysisTaskStat.cxx:113
 AliAnalysisTaskStat.cxx:114
 AliAnalysisTaskStat.cxx:115
 AliAnalysisTaskStat.cxx:116
 AliAnalysisTaskStat.cxx:117
 AliAnalysisTaskStat.cxx:118
 AliAnalysisTaskStat.cxx:119
 AliAnalysisTaskStat.cxx:120
 AliAnalysisTaskStat.cxx:121
 AliAnalysisTaskStat.cxx:122
 AliAnalysisTaskStat.cxx:123
 AliAnalysisTaskStat.cxx:124
 AliAnalysisTaskStat.cxx:125
 AliAnalysisTaskStat.cxx:126
 AliAnalysisTaskStat.cxx:127
 AliAnalysisTaskStat.cxx:128
 AliAnalysisTaskStat.cxx:129