ROOT logo
/* $Id$ */

#include "AliPhysicsSelectionTask.h"

#include <TFile.h>
#include <TH1F.h>
#include <TH2F.h>

#include <AliLog.h>
#include <AliESDEvent.h>
#include <AliHeader.h>

#include "AliPhysicsSelection.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"

//#include "AliBackgroundSelection.h"

ClassImp(AliPhysicsSelectionTask)

AliPhysicsSelectionTask::AliPhysicsSelectionTask() :
  AliAnalysisTaskSE("AliPhysicsSelectionTask"),
  fOutput(0),
  fOption(""),
  fUseSpecialOutput(kFALSE),
  fPhysicsSelection(0)
{
  //
  // Default event handler
  //
}

AliPhysicsSelectionTask::AliPhysicsSelectionTask(const char* opt) :
  AliAnalysisTaskSE("AliPhysicsSelectionTask"),
  fOutput(0),
  fOption(opt),
  fUseSpecialOutput(kFALSE),
  fPhysicsSelection(new AliPhysicsSelection())
{
  //
  // Constructor. Initialization of pointers
  //
  AliInputEventHandler* handler = dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
  if (handler) {
    handler->SetEventSelection(fPhysicsSelection);
    AliInfo("Physics Event Selection enabled.");
  } else {
    AliError("No input event handler connected to analysis manager. No Physics Event Selection.");
  }
  //
  TString opts = opt;
  opts.ToLower();
  if (opts.Contains("specialoutput")) fUseSpecialOutput = kTRUE;

  // Define input and output slots here
  DefineOutput(1, TList::Class());
  fBranchNames = "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,AliESDVZERO.,"
                 "AliESDZDC.,SPDVertex.,PrimaryVertex.,TPCVertex.,Tracks,SPDPileupVertices";
  
  AliLog::SetClassDebugLevel("AliPhysicsSelectionTask", AliLog::kWarning);
}

AliPhysicsSelectionTask::~AliPhysicsSelectionTask()
{
  //
  // Destructor
  //

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor

  if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
    delete fOutput;
    fOutput = 0;
  }
}

void AliPhysicsSelectionTask::UserCreateOutputObjects()
{
  // create result objects and add to output list

  Printf("AliPhysicsSelectionTask::CreateOutputObjects");

  if (fUseSpecialOutput) OpenFile(1);

  fOutput = new TList;
  fOutput->SetOwner();
  
  if (!fPhysicsSelection)
    fPhysicsSelection = new AliPhysicsSelection;
  
  fOutput->Add(fPhysicsSelection);
  // All tasks must post data once for all outputs (AG)
  PostData(1, fOutput);
}

void AliPhysicsSelectionTask::UserExec(Option_t*)
{
  // process the event

  // AliPhysicsSelection::IsCollisionCandidate is called from the event handler
  // post the data here anyway!
  PostData(1, fOutput);
}

void AliPhysicsSelectionTask::FinishTaskOutput()
{
// This gets called at the end of the processing on the worker. It allows dumping
// statistics printed by the physics selection object to the statistics message
// handled by the analysis manager.
   if (fPhysicsSelection) fPhysicsSelection->Print("STAT");
}

void AliPhysicsSelectionTask::Terminate(Option_t *)
{
  // The Terminate() function is the last function to be called during
  // a query. It always runs on the client, it can be used to present
  // the results graphically or save the results to file.

  fOutput = dynamic_cast<TList*> (GetOutputData(1));
  if (!fOutput)
    Printf("ERROR: fOutput not available");
    
  if (fOutput)
  {
    fPhysicsSelection = dynamic_cast<AliPhysicsSelection*> (fOutput->FindObject("AliPhysicsSelection"));
  }

  TFile* fout = new TFile("event_stat.root", "RECREATE");

  if (fPhysicsSelection)
  {
    fPhysicsSelection->Print();
    fPhysicsSelection->SaveHistograms();
  }
    
  fout->Write();
  fout->Close();
  
  Printf("Writing result to event_stat.root");
}
 AliPhysicsSelectionTask.cxx:1
 AliPhysicsSelectionTask.cxx:2
 AliPhysicsSelectionTask.cxx:3
 AliPhysicsSelectionTask.cxx:4
 AliPhysicsSelectionTask.cxx:5
 AliPhysicsSelectionTask.cxx:6
 AliPhysicsSelectionTask.cxx:7
 AliPhysicsSelectionTask.cxx:8
 AliPhysicsSelectionTask.cxx:9
 AliPhysicsSelectionTask.cxx:10
 AliPhysicsSelectionTask.cxx:11
 AliPhysicsSelectionTask.cxx:12
 AliPhysicsSelectionTask.cxx:13
 AliPhysicsSelectionTask.cxx:14
 AliPhysicsSelectionTask.cxx:15
 AliPhysicsSelectionTask.cxx:16
 AliPhysicsSelectionTask.cxx:17
 AliPhysicsSelectionTask.cxx:18
 AliPhysicsSelectionTask.cxx:19
 AliPhysicsSelectionTask.cxx:20
 AliPhysicsSelectionTask.cxx:21
 AliPhysicsSelectionTask.cxx:22
 AliPhysicsSelectionTask.cxx:23
 AliPhysicsSelectionTask.cxx:24
 AliPhysicsSelectionTask.cxx:25
 AliPhysicsSelectionTask.cxx:26
 AliPhysicsSelectionTask.cxx:27
 AliPhysicsSelectionTask.cxx:28
 AliPhysicsSelectionTask.cxx:29
 AliPhysicsSelectionTask.cxx:30
 AliPhysicsSelectionTask.cxx:31
 AliPhysicsSelectionTask.cxx:32
 AliPhysicsSelectionTask.cxx:33
 AliPhysicsSelectionTask.cxx:34
 AliPhysicsSelectionTask.cxx:35
 AliPhysicsSelectionTask.cxx:36
 AliPhysicsSelectionTask.cxx:37
 AliPhysicsSelectionTask.cxx:38
 AliPhysicsSelectionTask.cxx:39
 AliPhysicsSelectionTask.cxx:40
 AliPhysicsSelectionTask.cxx:41
 AliPhysicsSelectionTask.cxx:42
 AliPhysicsSelectionTask.cxx:43
 AliPhysicsSelectionTask.cxx:44
 AliPhysicsSelectionTask.cxx:45
 AliPhysicsSelectionTask.cxx:46
 AliPhysicsSelectionTask.cxx:47
 AliPhysicsSelectionTask.cxx:48
 AliPhysicsSelectionTask.cxx:49
 AliPhysicsSelectionTask.cxx:50
 AliPhysicsSelectionTask.cxx:51
 AliPhysicsSelectionTask.cxx:52
 AliPhysicsSelectionTask.cxx:53
 AliPhysicsSelectionTask.cxx:54
 AliPhysicsSelectionTask.cxx:55
 AliPhysicsSelectionTask.cxx:56
 AliPhysicsSelectionTask.cxx:57
 AliPhysicsSelectionTask.cxx:58
 AliPhysicsSelectionTask.cxx:59
 AliPhysicsSelectionTask.cxx:60
 AliPhysicsSelectionTask.cxx:61
 AliPhysicsSelectionTask.cxx:62
 AliPhysicsSelectionTask.cxx:63
 AliPhysicsSelectionTask.cxx:64
 AliPhysicsSelectionTask.cxx:65
 AliPhysicsSelectionTask.cxx:66
 AliPhysicsSelectionTask.cxx:67
 AliPhysicsSelectionTask.cxx:68
 AliPhysicsSelectionTask.cxx:69
 AliPhysicsSelectionTask.cxx:70
 AliPhysicsSelectionTask.cxx:71
 AliPhysicsSelectionTask.cxx:72
 AliPhysicsSelectionTask.cxx:73
 AliPhysicsSelectionTask.cxx:74
 AliPhysicsSelectionTask.cxx:75
 AliPhysicsSelectionTask.cxx:76
 AliPhysicsSelectionTask.cxx:77
 AliPhysicsSelectionTask.cxx:78
 AliPhysicsSelectionTask.cxx:79
 AliPhysicsSelectionTask.cxx:80
 AliPhysicsSelectionTask.cxx:81
 AliPhysicsSelectionTask.cxx:82
 AliPhysicsSelectionTask.cxx:83
 AliPhysicsSelectionTask.cxx:84
 AliPhysicsSelectionTask.cxx:85
 AliPhysicsSelectionTask.cxx:86
 AliPhysicsSelectionTask.cxx:87
 AliPhysicsSelectionTask.cxx:88
 AliPhysicsSelectionTask.cxx:89
 AliPhysicsSelectionTask.cxx:90
 AliPhysicsSelectionTask.cxx:91
 AliPhysicsSelectionTask.cxx:92
 AliPhysicsSelectionTask.cxx:93
 AliPhysicsSelectionTask.cxx:94
 AliPhysicsSelectionTask.cxx:95
 AliPhysicsSelectionTask.cxx:96
 AliPhysicsSelectionTask.cxx:97
 AliPhysicsSelectionTask.cxx:98
 AliPhysicsSelectionTask.cxx:99
 AliPhysicsSelectionTask.cxx:100
 AliPhysicsSelectionTask.cxx:101
 AliPhysicsSelectionTask.cxx:102
 AliPhysicsSelectionTask.cxx:103
 AliPhysicsSelectionTask.cxx:104
 AliPhysicsSelectionTask.cxx:105
 AliPhysicsSelectionTask.cxx:106
 AliPhysicsSelectionTask.cxx:107
 AliPhysicsSelectionTask.cxx:108
 AliPhysicsSelectionTask.cxx:109
 AliPhysicsSelectionTask.cxx:110
 AliPhysicsSelectionTask.cxx:111
 AliPhysicsSelectionTask.cxx:112
 AliPhysicsSelectionTask.cxx:113
 AliPhysicsSelectionTask.cxx:114
 AliPhysicsSelectionTask.cxx:115
 AliPhysicsSelectionTask.cxx:116
 AliPhysicsSelectionTask.cxx:117
 AliPhysicsSelectionTask.cxx:118
 AliPhysicsSelectionTask.cxx:119
 AliPhysicsSelectionTask.cxx:120
 AliPhysicsSelectionTask.cxx:121
 AliPhysicsSelectionTask.cxx:122
 AliPhysicsSelectionTask.cxx:123
 AliPhysicsSelectionTask.cxx:124
 AliPhysicsSelectionTask.cxx:125
 AliPhysicsSelectionTask.cxx:126
 AliPhysicsSelectionTask.cxx:127
 AliPhysicsSelectionTask.cxx:128
 AliPhysicsSelectionTask.cxx:129
 AliPhysicsSelectionTask.cxx:130
 AliPhysicsSelectionTask.cxx:131
 AliPhysicsSelectionTask.cxx:132
 AliPhysicsSelectionTask.cxx:133
 AliPhysicsSelectionTask.cxx:134
 AliPhysicsSelectionTask.cxx:135
 AliPhysicsSelectionTask.cxx:136
 AliPhysicsSelectionTask.cxx:137
 AliPhysicsSelectionTask.cxx:138
 AliPhysicsSelectionTask.cxx:139
 AliPhysicsSelectionTask.cxx:140
 AliPhysicsSelectionTask.cxx:141