ROOT logo
//
// Class to filter Aod tracks
//
// Author: C.Loizides

#include "AliEmcalAodTrackFilterTask.h"
#include <TClonesArray.h>
#include <TRandom3.h>
#include <AliAODEvent.h>
#include <AliAODTrack.h>
#include <AliAnalysisManager.h>
#include <AliEMCALRecoUtils.h>
#include <AliLog.h>

ClassImp(AliEmcalAodTrackFilterTask)

//________________________________________________________________________
AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask() : 
  AliAnalysisTaskSE("AliEmcalAodTrackFilterTask"),
  fTracksOutName("PicoTracks"),
  fTracksInName("tracks"),
  fIncludeNoITS(kTRUE),
  fCutMaxFrShTPCClus(0),
  fUseNegativeLabels(kTRUE),
  fIsMC(kFALSE),
  fDoPropagation(kFALSE),
  fAttemptProp(kFALSE),
  fAttemptPropMatch(kFALSE),
  fDist(440),
  fTrackEfficiency(0),
  fTracksIn(0),
  fTracksOut(0)
{
  // Constructor.

  fAODfilterBits[0] = -1;
  fAODfilterBits[1] = -1;
}

//________________________________________________________________________
AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) : 
  AliAnalysisTaskSE(name),
  fTracksOutName("PicoTracks"),
  fTracksInName("tracks"),
  fIncludeNoITS(kTRUE),
  fCutMaxFrShTPCClus(0),
  fUseNegativeLabels(kTRUE),
  fIsMC(kFALSE),
  fDoPropagation(kFALSE),
  fAttemptProp(kFALSE),
  fAttemptPropMatch(kFALSE),
  fDist(440),
  fTrackEfficiency(0),
  fTracksIn(0),
  fTracksOut(0)
{
  // Constructor.

  fAODfilterBits[0] = -1;
  fAODfilterBits[1] = -1;
  fBranchNames = "AOD:tracks";
}

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

//________________________________________________________________________
void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
{
  // Create my user objects.

  fTracksOut = new TClonesArray("AliAODTrack");
  fTracksOut->SetName(fTracksOutName);
}

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

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

  // retrieve tracks from input.
  if (!fTracksIn) { 
    fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
    if (!fTracksIn) {
      AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); 
      return;
    }
    if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
      AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); 
      return;
    }
  }

  // add tracks to event if not yet there
  fTracksOut->Delete();
  if (!(InputEvent()->FindListObject(fTracksOutName))) {
    InputEvent()->AddObject(fTracksOut);
  }

  // loop over tracks
  const Int_t Ntracks = fTracksIn->GetEntriesFast();
  for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {

    AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));

    if (!track)
      continue;
    Int_t type = -1;
    if (fAODfilterBits[0] < 0) {
      if (track->IsHybridGlobalConstrainedGlobal())
	type = 3;
      else /*not a good track*/
	continue;
    } else {
      if (track->TestFilterBit(fAODfilterBits[0])) {
	type = 0;
      } else if (fAODfilterBits[1]>-1 && track->TestFilterBit(fAODfilterBits[1])) {
	if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
	  if (fIncludeNoITS)
	    type = 2;
	  else
	    continue;
	} else {
	  type = 1;
	}
      }
      else {/*not a good track*/
	continue;
      }
    }

    if (fCutMaxFrShTPCClus > 0) {
      Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
      if (frac > fCutMaxFrShTPCClus) {
	continue;
      }
    }

    if (fTrackEfficiency) {
      Double_t r = gRandom->Rndm();
      if (fTrackEfficiency->Eval(track->Pt()) < r)
        continue;
    }

    AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
    newt->SetUniqueID(0);
    newt->ResetBit(TObject::kHasUUID);
    newt->ResetBit(TObject::kIsReferenced);

    Bool_t propthistrack = kFALSE;
    if (fDoPropagation)
      propthistrack = kTRUE;
    else if (!newt->IsExtrapolatedToEMCAL()) {
      if (fAttemptProp)
	propthistrack = kTRUE;
      else if (fAttemptPropMatch && newt->IsEMCAL())
	propthistrack = kTRUE;
    }
    if (propthistrack)
      AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);

    Int_t label = 0;
    if (fIsMC) {
      if (fUseNegativeLabels)
	label = track->GetLabel();
      else 
	label = TMath::Abs(track->GetLabel());
      if (label == 0) 
	AliDebug(2,Form("Track %d with label==0", iTracks));
    }
    newt->SetLabel(label);
    if (type==0) {
      newt->SetBit(BIT(22),0);
      newt->SetBit(BIT(23),0);
    } else if (type==1) {
      newt->SetBit(BIT(22),1);
      newt->SetBit(BIT(23),0);
    } else if (type==2) {
      newt->SetBit(BIT(22),0);
      newt->SetBit(BIT(23),1);
    } else if (type==3) {
      newt->SetBit(BIT(22),1);
      newt->SetBit(BIT(23),1);
    }
    ++nacc;
  }
}
 AliEmcalAodTrackFilterTask.cxx:1
 AliEmcalAodTrackFilterTask.cxx:2
 AliEmcalAodTrackFilterTask.cxx:3
 AliEmcalAodTrackFilterTask.cxx:4
 AliEmcalAodTrackFilterTask.cxx:5
 AliEmcalAodTrackFilterTask.cxx:6
 AliEmcalAodTrackFilterTask.cxx:7
 AliEmcalAodTrackFilterTask.cxx:8
 AliEmcalAodTrackFilterTask.cxx:9
 AliEmcalAodTrackFilterTask.cxx:10
 AliEmcalAodTrackFilterTask.cxx:11
 AliEmcalAodTrackFilterTask.cxx:12
 AliEmcalAodTrackFilterTask.cxx:13
 AliEmcalAodTrackFilterTask.cxx:14
 AliEmcalAodTrackFilterTask.cxx:15
 AliEmcalAodTrackFilterTask.cxx:16
 AliEmcalAodTrackFilterTask.cxx:17
 AliEmcalAodTrackFilterTask.cxx:18
 AliEmcalAodTrackFilterTask.cxx:19
 AliEmcalAodTrackFilterTask.cxx:20
 AliEmcalAodTrackFilterTask.cxx:21
 AliEmcalAodTrackFilterTask.cxx:22
 AliEmcalAodTrackFilterTask.cxx:23
 AliEmcalAodTrackFilterTask.cxx:24
 AliEmcalAodTrackFilterTask.cxx:25
 AliEmcalAodTrackFilterTask.cxx:26
 AliEmcalAodTrackFilterTask.cxx:27
 AliEmcalAodTrackFilterTask.cxx:28
 AliEmcalAodTrackFilterTask.cxx:29
 AliEmcalAodTrackFilterTask.cxx:30
 AliEmcalAodTrackFilterTask.cxx:31
 AliEmcalAodTrackFilterTask.cxx:32
 AliEmcalAodTrackFilterTask.cxx:33
 AliEmcalAodTrackFilterTask.cxx:34
 AliEmcalAodTrackFilterTask.cxx:35
 AliEmcalAodTrackFilterTask.cxx:36
 AliEmcalAodTrackFilterTask.cxx:37
 AliEmcalAodTrackFilterTask.cxx:38
 AliEmcalAodTrackFilterTask.cxx:39
 AliEmcalAodTrackFilterTask.cxx:40
 AliEmcalAodTrackFilterTask.cxx:41
 AliEmcalAodTrackFilterTask.cxx:42
 AliEmcalAodTrackFilterTask.cxx:43
 AliEmcalAodTrackFilterTask.cxx:44
 AliEmcalAodTrackFilterTask.cxx:45
 AliEmcalAodTrackFilterTask.cxx:46
 AliEmcalAodTrackFilterTask.cxx:47
 AliEmcalAodTrackFilterTask.cxx:48
 AliEmcalAodTrackFilterTask.cxx:49
 AliEmcalAodTrackFilterTask.cxx:50
 AliEmcalAodTrackFilterTask.cxx:51
 AliEmcalAodTrackFilterTask.cxx:52
 AliEmcalAodTrackFilterTask.cxx:53
 AliEmcalAodTrackFilterTask.cxx:54
 AliEmcalAodTrackFilterTask.cxx:55
 AliEmcalAodTrackFilterTask.cxx:56
 AliEmcalAodTrackFilterTask.cxx:57
 AliEmcalAodTrackFilterTask.cxx:58
 AliEmcalAodTrackFilterTask.cxx:59
 AliEmcalAodTrackFilterTask.cxx:60
 AliEmcalAodTrackFilterTask.cxx:61
 AliEmcalAodTrackFilterTask.cxx:62
 AliEmcalAodTrackFilterTask.cxx:63
 AliEmcalAodTrackFilterTask.cxx:64
 AliEmcalAodTrackFilterTask.cxx:65
 AliEmcalAodTrackFilterTask.cxx:66
 AliEmcalAodTrackFilterTask.cxx:67
 AliEmcalAodTrackFilterTask.cxx:68
 AliEmcalAodTrackFilterTask.cxx:69
 AliEmcalAodTrackFilterTask.cxx:70
 AliEmcalAodTrackFilterTask.cxx:71
 AliEmcalAodTrackFilterTask.cxx:72
 AliEmcalAodTrackFilterTask.cxx:73
 AliEmcalAodTrackFilterTask.cxx:74
 AliEmcalAodTrackFilterTask.cxx:75
 AliEmcalAodTrackFilterTask.cxx:76
 AliEmcalAodTrackFilterTask.cxx:77
 AliEmcalAodTrackFilterTask.cxx:78
 AliEmcalAodTrackFilterTask.cxx:79
 AliEmcalAodTrackFilterTask.cxx:80
 AliEmcalAodTrackFilterTask.cxx:81
 AliEmcalAodTrackFilterTask.cxx:82
 AliEmcalAodTrackFilterTask.cxx:83
 AliEmcalAodTrackFilterTask.cxx:84
 AliEmcalAodTrackFilterTask.cxx:85
 AliEmcalAodTrackFilterTask.cxx:86
 AliEmcalAodTrackFilterTask.cxx:87
 AliEmcalAodTrackFilterTask.cxx:88
 AliEmcalAodTrackFilterTask.cxx:89
 AliEmcalAodTrackFilterTask.cxx:90
 AliEmcalAodTrackFilterTask.cxx:91
 AliEmcalAodTrackFilterTask.cxx:92
 AliEmcalAodTrackFilterTask.cxx:93
 AliEmcalAodTrackFilterTask.cxx:94
 AliEmcalAodTrackFilterTask.cxx:95
 AliEmcalAodTrackFilterTask.cxx:96
 AliEmcalAodTrackFilterTask.cxx:97
 AliEmcalAodTrackFilterTask.cxx:98
 AliEmcalAodTrackFilterTask.cxx:99
 AliEmcalAodTrackFilterTask.cxx:100
 AliEmcalAodTrackFilterTask.cxx:101
 AliEmcalAodTrackFilterTask.cxx:102
 AliEmcalAodTrackFilterTask.cxx:103
 AliEmcalAodTrackFilterTask.cxx:104
 AliEmcalAodTrackFilterTask.cxx:105
 AliEmcalAodTrackFilterTask.cxx:106
 AliEmcalAodTrackFilterTask.cxx:107
 AliEmcalAodTrackFilterTask.cxx:108
 AliEmcalAodTrackFilterTask.cxx:109
 AliEmcalAodTrackFilterTask.cxx:110
 AliEmcalAodTrackFilterTask.cxx:111
 AliEmcalAodTrackFilterTask.cxx:112
 AliEmcalAodTrackFilterTask.cxx:113
 AliEmcalAodTrackFilterTask.cxx:114
 AliEmcalAodTrackFilterTask.cxx:115
 AliEmcalAodTrackFilterTask.cxx:116
 AliEmcalAodTrackFilterTask.cxx:117
 AliEmcalAodTrackFilterTask.cxx:118
 AliEmcalAodTrackFilterTask.cxx:119
 AliEmcalAodTrackFilterTask.cxx:120
 AliEmcalAodTrackFilterTask.cxx:121
 AliEmcalAodTrackFilterTask.cxx:122
 AliEmcalAodTrackFilterTask.cxx:123
 AliEmcalAodTrackFilterTask.cxx:124
 AliEmcalAodTrackFilterTask.cxx:125
 AliEmcalAodTrackFilterTask.cxx:126
 AliEmcalAodTrackFilterTask.cxx:127
 AliEmcalAodTrackFilterTask.cxx:128
 AliEmcalAodTrackFilterTask.cxx:129
 AliEmcalAodTrackFilterTask.cxx:130
 AliEmcalAodTrackFilterTask.cxx:131
 AliEmcalAodTrackFilterTask.cxx:132
 AliEmcalAodTrackFilterTask.cxx:133
 AliEmcalAodTrackFilterTask.cxx:134
 AliEmcalAodTrackFilterTask.cxx:135
 AliEmcalAodTrackFilterTask.cxx:136
 AliEmcalAodTrackFilterTask.cxx:137
 AliEmcalAodTrackFilterTask.cxx:138
 AliEmcalAodTrackFilterTask.cxx:139
 AliEmcalAodTrackFilterTask.cxx:140
 AliEmcalAodTrackFilterTask.cxx:141
 AliEmcalAodTrackFilterTask.cxx:142
 AliEmcalAodTrackFilterTask.cxx:143
 AliEmcalAodTrackFilterTask.cxx:144
 AliEmcalAodTrackFilterTask.cxx:145
 AliEmcalAodTrackFilterTask.cxx:146
 AliEmcalAodTrackFilterTask.cxx:147
 AliEmcalAodTrackFilterTask.cxx:148
 AliEmcalAodTrackFilterTask.cxx:149
 AliEmcalAodTrackFilterTask.cxx:150
 AliEmcalAodTrackFilterTask.cxx:151
 AliEmcalAodTrackFilterTask.cxx:152
 AliEmcalAodTrackFilterTask.cxx:153
 AliEmcalAodTrackFilterTask.cxx:154
 AliEmcalAodTrackFilterTask.cxx:155
 AliEmcalAodTrackFilterTask.cxx:156
 AliEmcalAodTrackFilterTask.cxx:157
 AliEmcalAodTrackFilterTask.cxx:158
 AliEmcalAodTrackFilterTask.cxx:159
 AliEmcalAodTrackFilterTask.cxx:160
 AliEmcalAodTrackFilterTask.cxx:161
 AliEmcalAodTrackFilterTask.cxx:162
 AliEmcalAodTrackFilterTask.cxx:163
 AliEmcalAodTrackFilterTask.cxx:164
 AliEmcalAodTrackFilterTask.cxx:165
 AliEmcalAodTrackFilterTask.cxx:166
 AliEmcalAodTrackFilterTask.cxx:167
 AliEmcalAodTrackFilterTask.cxx:168
 AliEmcalAodTrackFilterTask.cxx:169
 AliEmcalAodTrackFilterTask.cxx:170
 AliEmcalAodTrackFilterTask.cxx:171
 AliEmcalAodTrackFilterTask.cxx:172
 AliEmcalAodTrackFilterTask.cxx:173
 AliEmcalAodTrackFilterTask.cxx:174
 AliEmcalAodTrackFilterTask.cxx:175
 AliEmcalAodTrackFilterTask.cxx:176
 AliEmcalAodTrackFilterTask.cxx:177
 AliEmcalAodTrackFilterTask.cxx:178
 AliEmcalAodTrackFilterTask.cxx:179
 AliEmcalAodTrackFilterTask.cxx:180
 AliEmcalAodTrackFilterTask.cxx:181
 AliEmcalAodTrackFilterTask.cxx:182
 AliEmcalAodTrackFilterTask.cxx:183
 AliEmcalAodTrackFilterTask.cxx:184
 AliEmcalAodTrackFilterTask.cxx:185
 AliEmcalAodTrackFilterTask.cxx:186
 AliEmcalAodTrackFilterTask.cxx:187
 AliEmcalAodTrackFilterTask.cxx:188
 AliEmcalAodTrackFilterTask.cxx:189
 AliEmcalAodTrackFilterTask.cxx:190
 AliEmcalAodTrackFilterTask.cxx:191
 AliEmcalAodTrackFilterTask.cxx:192
 AliEmcalAodTrackFilterTask.cxx:193
 AliEmcalAodTrackFilterTask.cxx:194
 AliEmcalAodTrackFilterTask.cxx:195
 AliEmcalAodTrackFilterTask.cxx:196