ROOT logo
// $Id: AliEmcalTrackPropagatorTask.cxx | Mon Dec 9 12:59:28 2013 +0100 | Constantin Loizides  $
//
// Task to propagate tracks to EMCAL surface.
//
// Author: C.Loizides

#include "AliEmcalTrackPropagatorTask.h"
#include <TClonesArray.h>
#include "AliAODEvent.h"
#include "AliAnalysisManager.h"
#include "AliEMCALRecoUtils.h"
#include "AliESDEvent.h"

ClassImp(AliEmcalTrackPropagatorTask)

//________________________________________________________________________
AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask() : 
  AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
  fTracksInName(),
  fTracksOutName(),
  fDist(440),
  fOnlyIfNotSet(kTRUE),
  fTracksIn(0),
  fTracksOut(0)
{
  // Constructor.
}

//________________________________________________________________________
AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) : 
  AliAnalysisTaskSE("AliEmcalTrackPropagatorTask"),
  fTracksInName(),
  fTracksOutName(),
  fDist(440),
  fOnlyIfNotSet(kTRUE),
  fTracksIn(0),
  fTracksOut(0)
{
  // Constructor.

  if (!name)
    return;

  SetName(name);

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

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

//________________________________________________________________________
void AliEmcalTrackPropagatorTask::UserCreateOutputObjects()
{
  // User create output objects.
}

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

  AliESDEvent *esdev = dynamic_cast<AliESDEvent*>(InputEvent());
  AliAODEvent *aodev = 0;
  if (!esdev) {
    aodev = dynamic_cast<AliAODEvent*>(InputEvent());
    if (!aodev) {
      AliError("Task needs AOD or ESD event, returning");
      return;
    }
  }

  if (fTracksInName.Length()==0) {
    if (esdev) {
      fTracksInName = "Tracks";
    } else {
      fTracksInName = "tracks";
    }
  }

  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
  if (!am) {
    AliError("Manager zero, returning");
    return;
  }
  if (fTracksInName == "Tracks")
    am->LoadBranch("Tracks");
  else if (fTracksInName == "tracks")
    am->LoadBranch("tracks");

  if (!fTracksIn) {
    fTracksIn = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksInName)));
    if (!fTracksIn) {
      AliError(Form("Could not get tracks %s, returning", fTracksInName.Data()));
      return;
    }
  }

  if ((fTracksOutName.Length()>0) && !fTracksOut) {
    if ((InputEvent()->FindListObject(fTracksOutName))) {
      AliError(Form("Could not add tracks %s to event, returning", fTracksOutName.Data()));
      return;
    }
    if (esdev)
      fTracksOut = new TClonesArray("AliESDtrack");
    else 
      fTracksOut = new TClonesArray("AliAODTrack");
    fTracksOut->SetName(fTracksOutName);
    InputEvent()->AddObject(fTracksOut);
  }

  const Int_t ntr = fTracksIn->GetEntries();
  for (Int_t i=0; i<ntr; ++i) {
    AliVTrack *inTrack = dynamic_cast<AliVTrack*>(fTracksIn->At(i));
    if (!inTrack)
      continue;
    if (inTrack->IsExtrapolatedToEMCAL() && fOnlyIfNotSet)
      continue;
    AliVTrack *outTrack = inTrack;
    if (fTracksOut) {
      if (esdev)
	outTrack = new ((*fTracksOut)[i]) AliESDtrack(*((AliESDtrack*)inTrack));
      else
	outTrack = new ((*fTracksOut)[i]) AliAODTrack(*((AliAODTrack*)inTrack));
    }
    AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(outTrack,fDist);
  }
}
 AliEmcalTrackPropagatorTask.cxx:1
 AliEmcalTrackPropagatorTask.cxx:2
 AliEmcalTrackPropagatorTask.cxx:3
 AliEmcalTrackPropagatorTask.cxx:4
 AliEmcalTrackPropagatorTask.cxx:5
 AliEmcalTrackPropagatorTask.cxx:6
 AliEmcalTrackPropagatorTask.cxx:7
 AliEmcalTrackPropagatorTask.cxx:8
 AliEmcalTrackPropagatorTask.cxx:9
 AliEmcalTrackPropagatorTask.cxx:10
 AliEmcalTrackPropagatorTask.cxx:11
 AliEmcalTrackPropagatorTask.cxx:12
 AliEmcalTrackPropagatorTask.cxx:13
 AliEmcalTrackPropagatorTask.cxx:14
 AliEmcalTrackPropagatorTask.cxx:15
 AliEmcalTrackPropagatorTask.cxx:16
 AliEmcalTrackPropagatorTask.cxx:17
 AliEmcalTrackPropagatorTask.cxx:18
 AliEmcalTrackPropagatorTask.cxx:19
 AliEmcalTrackPropagatorTask.cxx:20
 AliEmcalTrackPropagatorTask.cxx:21
 AliEmcalTrackPropagatorTask.cxx:22
 AliEmcalTrackPropagatorTask.cxx:23
 AliEmcalTrackPropagatorTask.cxx:24
 AliEmcalTrackPropagatorTask.cxx:25
 AliEmcalTrackPropagatorTask.cxx:26
 AliEmcalTrackPropagatorTask.cxx:27
 AliEmcalTrackPropagatorTask.cxx:28
 AliEmcalTrackPropagatorTask.cxx:29
 AliEmcalTrackPropagatorTask.cxx:30
 AliEmcalTrackPropagatorTask.cxx:31
 AliEmcalTrackPropagatorTask.cxx:32
 AliEmcalTrackPropagatorTask.cxx:33
 AliEmcalTrackPropagatorTask.cxx:34
 AliEmcalTrackPropagatorTask.cxx:35
 AliEmcalTrackPropagatorTask.cxx:36
 AliEmcalTrackPropagatorTask.cxx:37
 AliEmcalTrackPropagatorTask.cxx:38
 AliEmcalTrackPropagatorTask.cxx:39
 AliEmcalTrackPropagatorTask.cxx:40
 AliEmcalTrackPropagatorTask.cxx:41
 AliEmcalTrackPropagatorTask.cxx:42
 AliEmcalTrackPropagatorTask.cxx:43
 AliEmcalTrackPropagatorTask.cxx:44
 AliEmcalTrackPropagatorTask.cxx:45
 AliEmcalTrackPropagatorTask.cxx:46
 AliEmcalTrackPropagatorTask.cxx:47
 AliEmcalTrackPropagatorTask.cxx:48
 AliEmcalTrackPropagatorTask.cxx:49
 AliEmcalTrackPropagatorTask.cxx:50
 AliEmcalTrackPropagatorTask.cxx:51
 AliEmcalTrackPropagatorTask.cxx:52
 AliEmcalTrackPropagatorTask.cxx:53
 AliEmcalTrackPropagatorTask.cxx:54
 AliEmcalTrackPropagatorTask.cxx:55
 AliEmcalTrackPropagatorTask.cxx:56
 AliEmcalTrackPropagatorTask.cxx:57
 AliEmcalTrackPropagatorTask.cxx:58
 AliEmcalTrackPropagatorTask.cxx:59
 AliEmcalTrackPropagatorTask.cxx:60
 AliEmcalTrackPropagatorTask.cxx:61
 AliEmcalTrackPropagatorTask.cxx:62
 AliEmcalTrackPropagatorTask.cxx:63
 AliEmcalTrackPropagatorTask.cxx:64
 AliEmcalTrackPropagatorTask.cxx:65
 AliEmcalTrackPropagatorTask.cxx:66
 AliEmcalTrackPropagatorTask.cxx:67
 AliEmcalTrackPropagatorTask.cxx:68
 AliEmcalTrackPropagatorTask.cxx:69
 AliEmcalTrackPropagatorTask.cxx:70
 AliEmcalTrackPropagatorTask.cxx:71
 AliEmcalTrackPropagatorTask.cxx:72
 AliEmcalTrackPropagatorTask.cxx:73
 AliEmcalTrackPropagatorTask.cxx:74
 AliEmcalTrackPropagatorTask.cxx:75
 AliEmcalTrackPropagatorTask.cxx:76
 AliEmcalTrackPropagatorTask.cxx:77
 AliEmcalTrackPropagatorTask.cxx:78
 AliEmcalTrackPropagatorTask.cxx:79
 AliEmcalTrackPropagatorTask.cxx:80
 AliEmcalTrackPropagatorTask.cxx:81
 AliEmcalTrackPropagatorTask.cxx:82
 AliEmcalTrackPropagatorTask.cxx:83
 AliEmcalTrackPropagatorTask.cxx:84
 AliEmcalTrackPropagatorTask.cxx:85
 AliEmcalTrackPropagatorTask.cxx:86
 AliEmcalTrackPropagatorTask.cxx:87
 AliEmcalTrackPropagatorTask.cxx:88
 AliEmcalTrackPropagatorTask.cxx:89
 AliEmcalTrackPropagatorTask.cxx:90
 AliEmcalTrackPropagatorTask.cxx:91
 AliEmcalTrackPropagatorTask.cxx:92
 AliEmcalTrackPropagatorTask.cxx:93
 AliEmcalTrackPropagatorTask.cxx:94
 AliEmcalTrackPropagatorTask.cxx:95
 AliEmcalTrackPropagatorTask.cxx:96
 AliEmcalTrackPropagatorTask.cxx:97
 AliEmcalTrackPropagatorTask.cxx:98
 AliEmcalTrackPropagatorTask.cxx:99
 AliEmcalTrackPropagatorTask.cxx:100
 AliEmcalTrackPropagatorTask.cxx:101
 AliEmcalTrackPropagatorTask.cxx:102
 AliEmcalTrackPropagatorTask.cxx:103
 AliEmcalTrackPropagatorTask.cxx:104
 AliEmcalTrackPropagatorTask.cxx:105
 AliEmcalTrackPropagatorTask.cxx:106
 AliEmcalTrackPropagatorTask.cxx:107
 AliEmcalTrackPropagatorTask.cxx:108
 AliEmcalTrackPropagatorTask.cxx:109
 AliEmcalTrackPropagatorTask.cxx:110
 AliEmcalTrackPropagatorTask.cxx:111
 AliEmcalTrackPropagatorTask.cxx:112
 AliEmcalTrackPropagatorTask.cxx:113
 AliEmcalTrackPropagatorTask.cxx:114
 AliEmcalTrackPropagatorTask.cxx:115
 AliEmcalTrackPropagatorTask.cxx:116
 AliEmcalTrackPropagatorTask.cxx:117
 AliEmcalTrackPropagatorTask.cxx:118
 AliEmcalTrackPropagatorTask.cxx:119
 AliEmcalTrackPropagatorTask.cxx:120
 AliEmcalTrackPropagatorTask.cxx:121
 AliEmcalTrackPropagatorTask.cxx:122
 AliEmcalTrackPropagatorTask.cxx:123
 AliEmcalTrackPropagatorTask.cxx:124
 AliEmcalTrackPropagatorTask.cxx:125
 AliEmcalTrackPropagatorTask.cxx:126
 AliEmcalTrackPropagatorTask.cxx:127
 AliEmcalTrackPropagatorTask.cxx:128
 AliEmcalTrackPropagatorTask.cxx:129
 AliEmcalTrackPropagatorTask.cxx:130
 AliEmcalTrackPropagatorTask.cxx:131