ROOT logo
// $Id$
//
// Task to setup emcal related global objects.
//
// Author: C.Loizides

#include "AliEmcalCompatTask.h"

#include <TClonesArray.h>

#include "AliAnalysisManager.h"
#include "AliCentrality.h"
#include "AliESDEvent.h"
#include "AliEsdTrackExt.h"
#include "AliEventplane.h"
#include "AliInputEventHandler.h"

ClassImp(AliEmcalCompatTask)

//________________________________________________________________________
AliEmcalCompatTask::AliEmcalCompatTask() : 
  AliAnalysisTaskSE(),
  fDoCent(1),
  fDoEp(1)
{
  // Constructor.
}

//________________________________________________________________________
AliEmcalCompatTask::AliEmcalCompatTask(const char *name) : 
  AliAnalysisTaskSE(name),
  fDoCent(1),
  fDoEp(1)
{
  // Constructor.

  fBranchNames = "ESD:AliESDHeader.,AliESDRun.,Tracks";
}

//________________________________________________________________________
AliEmcalCompatTask::~AliEmcalCompatTask()
{
  // Destructor.
}

//________________________________________________________________________
void AliEmcalCompatTask::UserExec(Option_t *) 
{
  // Main loop, called for each event.

  AliESDEvent *esdEv = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!esdEv) {
    AliError("Task works only on ESD events, returning");
    return;
  }

  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
  if (!am) {
    AliError("Manager zero, returning");
    return;
  }

  am->LoadBranch("AliESDHeader.");
  am->LoadBranch("AliESDRun.");
  LoadBranches();

  AliESDHeader *header = esdEv->GetHeader();
  TString title;
  if (header)
    title = header->GetTitle();
  else {
    AliError(Form("%s: Header zero, returning!", GetName()));
    return;
  }

  if (title.Length()==0) {
    AliError(Form("%s: Title should encode offline trigger, returning!", GetName()));
    return;
  } else {
    UInt_t off = header->GetUniqueID();
    off &= 0x4FFFFFFF;
    UInt_t res     = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected(); 
    res &= 0x4FFFFFFF;
    if (off!=res) {
      AliWarning(Form("Stored offline trigger not equal computed: %ud %ud", off, res));
    }
  }

  if (fDoCent) {
    am->LoadBranch("Centrality.");
    AliCentrality *centin = dynamic_cast<AliCentrality*>(esdEv->FindListObject("Centrality"));
    AliCentrality *centout = esdEv->GetCentrality();
    if (centin&&centout&&centout->GetQuality()==999) {
      centout->SetQuality(centin->GetQuality());
      centout->SetCentralityV0M(centin->GetCentralityPercentileUnchecked("V0M"));
      centout->SetCentralityFMD(centin->GetCentralityPercentileUnchecked("FMD"));
      centout->SetCentralityTRK(centin->GetCentralityPercentileUnchecked("TRK"));
      centout->SetCentralityTKL(centin->GetCentralityPercentileUnchecked("TKL"));
      centout->SetCentralityCL0(centin->GetCentralityPercentileUnchecked("CL0"));
      centout->SetCentralityCL1(centin->GetCentralityPercentileUnchecked("CL1"));
      centout->SetCentralityV0MvsFMD(centin->GetCentralityPercentileUnchecked("V0MvsFMD"));
      centout->SetCentralityTKLvsV0M(centin->GetCentralityPercentileUnchecked("TKLvsV0M"));
      centout->SetCentralityZEMvsZDC(centin->GetCentralityPercentileUnchecked("ZEMvsZDC"));
    }
  }

  if (fDoEp) {
    am->LoadBranch("Eventplane.");
    AliEventplane *epin  = dynamic_cast<AliEventplane*>(esdEv->FindListObject("Eventplane"));
    AliEventplane *epout = esdEv->GetEventplane();
    if (epin&&epout&&(epout->GetQVector()==0)&&(epin->GetQVector()!=0)) {
      epout->SetQVector(new TVector2(*epin->GetQVector()));
      epout->SetEventplaneQ(epin->GetEventplane("Q"));
      epout->SetQsub(new TVector2(*epin->GetQsub1()),new TVector2(*epin->GetQsub2()));
      epout->SetQsubRes(epin->GetQsubRes());
    }
  }

  TTree *tree = am->GetTree();
  if (tree&&tree->GetBranch("PicoTracks")) {
    am->LoadBranch("PicoTracks");
  }

  if (tree&&tree->GetBranch("Tracks")) {
    am->LoadBranch("Tracks");
    TClonesArray *ts = dynamic_cast<TClonesArray*>(esdEv->FindListObject("Tracks"));
    if (ts) {
      TString clsname(ts->GetClass()->GetName());
      if (clsname == "AliEsdTrackExt") {
        const Int_t N = ts->GetEntries();
        for (Int_t i=0; i<N; ++i) {
          AliEsdTrackExt *t = static_cast<AliEsdTrackExt*>(ts->At(i));
          if (t) {
            t->SetESDEvent(esdEv);
            t->Setup();
          }
        }
      }
    }
  }
}
 AliEmcalCompatTask.cxx:1
 AliEmcalCompatTask.cxx:2
 AliEmcalCompatTask.cxx:3
 AliEmcalCompatTask.cxx:4
 AliEmcalCompatTask.cxx:5
 AliEmcalCompatTask.cxx:6
 AliEmcalCompatTask.cxx:7
 AliEmcalCompatTask.cxx:8
 AliEmcalCompatTask.cxx:9
 AliEmcalCompatTask.cxx:10
 AliEmcalCompatTask.cxx:11
 AliEmcalCompatTask.cxx:12
 AliEmcalCompatTask.cxx:13
 AliEmcalCompatTask.cxx:14
 AliEmcalCompatTask.cxx:15
 AliEmcalCompatTask.cxx:16
 AliEmcalCompatTask.cxx:17
 AliEmcalCompatTask.cxx:18
 AliEmcalCompatTask.cxx:19
 AliEmcalCompatTask.cxx:20
 AliEmcalCompatTask.cxx:21
 AliEmcalCompatTask.cxx:22
 AliEmcalCompatTask.cxx:23
 AliEmcalCompatTask.cxx:24
 AliEmcalCompatTask.cxx:25
 AliEmcalCompatTask.cxx:26
 AliEmcalCompatTask.cxx:27
 AliEmcalCompatTask.cxx:28
 AliEmcalCompatTask.cxx:29
 AliEmcalCompatTask.cxx:30
 AliEmcalCompatTask.cxx:31
 AliEmcalCompatTask.cxx:32
 AliEmcalCompatTask.cxx:33
 AliEmcalCompatTask.cxx:34
 AliEmcalCompatTask.cxx:35
 AliEmcalCompatTask.cxx:36
 AliEmcalCompatTask.cxx:37
 AliEmcalCompatTask.cxx:38
 AliEmcalCompatTask.cxx:39
 AliEmcalCompatTask.cxx:40
 AliEmcalCompatTask.cxx:41
 AliEmcalCompatTask.cxx:42
 AliEmcalCompatTask.cxx:43
 AliEmcalCompatTask.cxx:44
 AliEmcalCompatTask.cxx:45
 AliEmcalCompatTask.cxx:46
 AliEmcalCompatTask.cxx:47
 AliEmcalCompatTask.cxx:48
 AliEmcalCompatTask.cxx:49
 AliEmcalCompatTask.cxx:50
 AliEmcalCompatTask.cxx:51
 AliEmcalCompatTask.cxx:52
 AliEmcalCompatTask.cxx:53
 AliEmcalCompatTask.cxx:54
 AliEmcalCompatTask.cxx:55
 AliEmcalCompatTask.cxx:56
 AliEmcalCompatTask.cxx:57
 AliEmcalCompatTask.cxx:58
 AliEmcalCompatTask.cxx:59
 AliEmcalCompatTask.cxx:60
 AliEmcalCompatTask.cxx:61
 AliEmcalCompatTask.cxx:62
 AliEmcalCompatTask.cxx:63
 AliEmcalCompatTask.cxx:64
 AliEmcalCompatTask.cxx:65
 AliEmcalCompatTask.cxx:66
 AliEmcalCompatTask.cxx:67
 AliEmcalCompatTask.cxx:68
 AliEmcalCompatTask.cxx:69
 AliEmcalCompatTask.cxx:70
 AliEmcalCompatTask.cxx:71
 AliEmcalCompatTask.cxx:72
 AliEmcalCompatTask.cxx:73
 AliEmcalCompatTask.cxx:74
 AliEmcalCompatTask.cxx:75
 AliEmcalCompatTask.cxx:76
 AliEmcalCompatTask.cxx:77
 AliEmcalCompatTask.cxx:78
 AliEmcalCompatTask.cxx:79
 AliEmcalCompatTask.cxx:80
 AliEmcalCompatTask.cxx:81
 AliEmcalCompatTask.cxx:82
 AliEmcalCompatTask.cxx:83
 AliEmcalCompatTask.cxx:84
 AliEmcalCompatTask.cxx:85
 AliEmcalCompatTask.cxx:86
 AliEmcalCompatTask.cxx:87
 AliEmcalCompatTask.cxx:88
 AliEmcalCompatTask.cxx:89
 AliEmcalCompatTask.cxx:90
 AliEmcalCompatTask.cxx:91
 AliEmcalCompatTask.cxx:92
 AliEmcalCompatTask.cxx:93
 AliEmcalCompatTask.cxx:94
 AliEmcalCompatTask.cxx:95
 AliEmcalCompatTask.cxx:96
 AliEmcalCompatTask.cxx:97
 AliEmcalCompatTask.cxx:98
 AliEmcalCompatTask.cxx:99
 AliEmcalCompatTask.cxx:100
 AliEmcalCompatTask.cxx:101
 AliEmcalCompatTask.cxx:102
 AliEmcalCompatTask.cxx:103
 AliEmcalCompatTask.cxx:104
 AliEmcalCompatTask.cxx:105
 AliEmcalCompatTask.cxx:106
 AliEmcalCompatTask.cxx:107
 AliEmcalCompatTask.cxx:108
 AliEmcalCompatTask.cxx:109
 AliEmcalCompatTask.cxx:110
 AliEmcalCompatTask.cxx:111
 AliEmcalCompatTask.cxx:112
 AliEmcalCompatTask.cxx:113
 AliEmcalCompatTask.cxx:114
 AliEmcalCompatTask.cxx:115
 AliEmcalCompatTask.cxx:116
 AliEmcalCompatTask.cxx:117
 AliEmcalCompatTask.cxx:118
 AliEmcalCompatTask.cxx:119
 AliEmcalCompatTask.cxx:120
 AliEmcalCompatTask.cxx:121
 AliEmcalCompatTask.cxx:122
 AliEmcalCompatTask.cxx:123
 AliEmcalCompatTask.cxx:124
 AliEmcalCompatTask.cxx:125
 AliEmcalCompatTask.cxx:126
 AliEmcalCompatTask.cxx:127
 AliEmcalCompatTask.cxx:128
 AliEmcalCompatTask.cxx:129
 AliEmcalCompatTask.cxx:130
 AliEmcalCompatTask.cxx:131
 AliEmcalCompatTask.cxx:132
 AliEmcalCompatTask.cxx:133
 AliEmcalCompatTask.cxx:134
 AliEmcalCompatTask.cxx:135
 AliEmcalCompatTask.cxx:136
 AliEmcalCompatTask.cxx:137
 AliEmcalCompatTask.cxx:138
 AliEmcalCompatTask.cxx:139
 AliEmcalCompatTask.cxx:140
 AliEmcalCompatTask.cxx:141