ROOT logo
// AliTRDonlineTrackletFilter implements an analysis task which reads
// the tracklets from the TRD.Tracklets.root file and makes them
// available to other analysis tasks. This allows to access the full
// tracklet information without repeating the techncicalities in each
// analysis task. The tracklets are made available in an exchange
// container on the output slot 1.

#include "TFile.h"
#include "TTree.h"
#include "TChain.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TProfile.h"
#include "TCanvas.h"

#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliMCEvent.h"
#include "AliESDInputHandler.h"
#include "AliAODHandler.h"
#include "AliMCEventHandler.h"
#include "AliLog.h"
#include "AliESDTrdTrack.h"

#include "AliTRDtrackletMCM.h"
#include "AliTRDtrackletWord.h"
#include "AliVParticle.h"
#include "AliMCParticle.h" 

#include "AliTRDonlineTrackletFilter.h"

ClassImp(AliTRDonlineTrackletFilter)

AliTRDonlineTrackletFilter::AliTRDonlineTrackletFilter(const char *name) :
  AliAnalysisTask(name, ""),
  fESD(0x0),
  fInputHandler(0x0),
  fInputEvent(0x0),
  fOutputAOD(0x0),
  fMCEvent(0x0),
  fTrackletsRaw(new TClonesArray("AliTRDtrackletWord")),
  fTrackletsSim(new TClonesArray("AliTRDtrackletMCM")),
  fTrackletTree(0x0),
  fGeo(new AliTRDgeometry),
  fNevent(0),
  fPath(""),
  fTrackletFile(0x0),
  fNEventsPerFile(0),
  fEvent(0),
  fFileNumber(0),
  fTrackletTreeSim(0x0),
  fTrackletTreeRaw(0x0)
{
  // ctor

  DefineInput(0, TChain::Class());

  DefineOutput(0, TTree::Class()); 
  DefineOutput(1, TTree::Class());
}

AliTRDonlineTrackletFilter::~AliTRDonlineTrackletFilter()
{
  // dtor

  delete fTrackletsRaw;
  delete fTrackletsSim;
  delete fGeo;
}

void AliTRDonlineTrackletFilter::ConnectInputData(const Option_t */* option */)
{
  // connect all the input handlers to access the data

  fInputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
  if (fInputHandler)
    fInputEvent = fInputHandler->GetEvent();

  AliMCEventHandler *mcH = (AliMCEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler();
  if (mcH)
    fMCEvent = mcH->MCEvent();
}

void AliTRDonlineTrackletFilter::CreateOutputObjects()
{
  // create the output objects used to make the tracklets available to
  // other tasks

  OpenFile(1); 
  
  fTrackletTree = new TTree("TRDtrackletfilter", "on-line tracklets");
  fTrackletTree->Branch("tracklets_sim", fTrackletsSim);
  fTrackletTree->Branch("tracklets_raw", fTrackletsRaw);

  PostData(1, fTrackletTree);
}

Bool_t AliTRDonlineTrackletFilter::Notify()
{
  // we use notify to figure out which TRD.Tracklets.root file we have
  // to use for accessing the tracklets

  TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());

  AliDebug(1, Form("Now reading from %s", filename.Data()));

  if (filename.Contains("AliAOD.root")) 
    filename.ReplaceAll("AliAOD.root", "");
  else if (filename.Contains("NewAliESDs.root"))
    filename.ReplaceAll("NewAliESDs.root", "");
  else if (filename.Contains("AliESDs.root"))
    filename.ReplaceAll("AliESDs.root", "");
  else if (filename.Contains("galice.root"))
    filename.ReplaceAll("galice.root", "");
  else if (filename.BeginsWith("root:"))
    filename.Append("?ZIP=");

  fPath = filename;

  fTrackletFile = TFile::Open(Form("%sTRD.Tracklets.root", fPath.Data()));

  if (!fTrackletFile) {
    AliError(Form("No tracklet file in %s", fPath.Data()));
    return kFALSE;
  }

  fNEventsPerFile = fTrackletFile->GetNkeys() - fTrackletFile->GetNProcessIDs(); //???

  fEvent = -1;
  fFileNumber = 0;

  return kTRUE;
}


void AliTRDonlineTrackletFilter::Exec(const Option_t * /* option */)
{
  // execute this for each event

  if (!LoadEvent())
    return;

  // ----- simulated tracklets -----
  if (fTrackletTreeSim) {
    AliTRDtrackletMCM *trkl = 0x0;

    TBranch *br = fTrackletTreeSim->GetBranch("mcmtrklbranch");
    br->SetAddress(&trkl);
    
    for (Int_t iTracklet = 0; iTracklet < br->GetEntries(); iTracklet++) {
      br->GetEntry(iTracklet);
      new ((*fTrackletsSim)[fTrackletsSim->GetEntriesFast()]) AliTRDtrackletMCM(*trkl);
    }
  }

  // ----- raw tracklets -----
  if (fTrackletTreeRaw) {
    Int_t hc;
    TClonesArray *trklArray = 0x0;
    fTrackletTreeRaw->SetBranchAddress("hc", &hc);
    fTrackletTreeRaw->SetBranchAddress("trkl", &trklArray);
    for (Int_t iHCidx = 0; iHCidx < fTrackletTreeRaw->GetEntries(); iHCidx++) {
      fTrackletTreeRaw->GetEntry(iHCidx);
      if (trklArray) {
	for (Int_t iTracklet = 0; iTracklet < trklArray->GetEntries(); iTracklet++) {
	  AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) ((*trklArray)[iTracklet]);
	  trklWord->SetDetector(hc/2);
	  new ((*fTrackletsRaw)[fTrackletsRaw->GetEntriesFast()]) AliTRDtrackletWord(*trklWord);
	}
      }
    }
  }

  AliDebug(1, Form("%i tracklets", fTrackletsSim->GetEntriesFast()));
  fTrackletTree->SetBranchAddress("tracklets_sim", &fTrackletsSim);
  fTrackletTree->SetBranchAddress("tracklets_raw", &fTrackletsRaw);
  fTrackletTree->Fill();
  PostData(1, fTrackletTree);  
}

void AliTRDonlineTrackletFilter::LocalInit()
{

}

void AliTRDonlineTrackletFilter::Terminate(const Option_t * /* option */)
{

}

Bool_t AliTRDonlineTrackletFilter::LoadEvent()
{
  // load tracklets for the current event

  // ----- cleaning -----
  fTrackletsSim->Delete();
  fTrackletsRaw->Delete();

  // ----- initialization -----
  if (!fInputEvent) {
    AliError("No event found!");
    return kFALSE;
  }
  fESD = dynamic_cast<AliESDEvent*> (fInputEvent);

  fEvent++;
  Int_t inew = fNEventsPerFile > 0 ? fEvent / fNEventsPerFile : 0;
  if ( inew != fFileNumber) {
    fFileNumber++;

    delete fTrackletFile;
    fTrackletFile = TFile::Open(Form("%sTRD.Tracklets%d.root", fPath.Data(), fFileNumber));

    if (!fTrackletFile) {
      AliError("No tracklet file");
      return kFALSE;
    }
  }

  if (!fTrackletFile) {
    AliError("no tracklet file");
    return kFALSE;
  }

  // tracklets from simulation
  char treename[30];
  snprintf(treename, 30, "Event%d/tracklets", fEvent);

  fTrackletTreeSim = (TTree*) fTrackletFile->Get(treename);

  // tracklets from raw
  char treenameRaw[30];
  snprintf(treenameRaw, 30, "Event%d/tracklets-raw", fEvent);
  fTrackletTreeRaw = (TTree*) fTrackletFile->Get(treenameRaw);

  return kTRUE;
}

 AliTRDonlineTrackletFilter.cxx:1
 AliTRDonlineTrackletFilter.cxx:2
 AliTRDonlineTrackletFilter.cxx:3
 AliTRDonlineTrackletFilter.cxx:4
 AliTRDonlineTrackletFilter.cxx:5
 AliTRDonlineTrackletFilter.cxx:6
 AliTRDonlineTrackletFilter.cxx:7
 AliTRDonlineTrackletFilter.cxx:8
 AliTRDonlineTrackletFilter.cxx:9
 AliTRDonlineTrackletFilter.cxx:10
 AliTRDonlineTrackletFilter.cxx:11
 AliTRDonlineTrackletFilter.cxx:12
 AliTRDonlineTrackletFilter.cxx:13
 AliTRDonlineTrackletFilter.cxx:14
 AliTRDonlineTrackletFilter.cxx:15
 AliTRDonlineTrackletFilter.cxx:16
 AliTRDonlineTrackletFilter.cxx:17
 AliTRDonlineTrackletFilter.cxx:18
 AliTRDonlineTrackletFilter.cxx:19
 AliTRDonlineTrackletFilter.cxx:20
 AliTRDonlineTrackletFilter.cxx:21
 AliTRDonlineTrackletFilter.cxx:22
 AliTRDonlineTrackletFilter.cxx:23
 AliTRDonlineTrackletFilter.cxx:24
 AliTRDonlineTrackletFilter.cxx:25
 AliTRDonlineTrackletFilter.cxx:26
 AliTRDonlineTrackletFilter.cxx:27
 AliTRDonlineTrackletFilter.cxx:28
 AliTRDonlineTrackletFilter.cxx:29
 AliTRDonlineTrackletFilter.cxx:30
 AliTRDonlineTrackletFilter.cxx:31
 AliTRDonlineTrackletFilter.cxx:32
 AliTRDonlineTrackletFilter.cxx:33
 AliTRDonlineTrackletFilter.cxx:34
 AliTRDonlineTrackletFilter.cxx:35
 AliTRDonlineTrackletFilter.cxx:36
 AliTRDonlineTrackletFilter.cxx:37
 AliTRDonlineTrackletFilter.cxx:38
 AliTRDonlineTrackletFilter.cxx:39
 AliTRDonlineTrackletFilter.cxx:40
 AliTRDonlineTrackletFilter.cxx:41
 AliTRDonlineTrackletFilter.cxx:42
 AliTRDonlineTrackletFilter.cxx:43
 AliTRDonlineTrackletFilter.cxx:44
 AliTRDonlineTrackletFilter.cxx:45
 AliTRDonlineTrackletFilter.cxx:46
 AliTRDonlineTrackletFilter.cxx:47
 AliTRDonlineTrackletFilter.cxx:48
 AliTRDonlineTrackletFilter.cxx:49
 AliTRDonlineTrackletFilter.cxx:50
 AliTRDonlineTrackletFilter.cxx:51
 AliTRDonlineTrackletFilter.cxx:52
 AliTRDonlineTrackletFilter.cxx:53
 AliTRDonlineTrackletFilter.cxx:54
 AliTRDonlineTrackletFilter.cxx:55
 AliTRDonlineTrackletFilter.cxx:56
 AliTRDonlineTrackletFilter.cxx:57
 AliTRDonlineTrackletFilter.cxx:58
 AliTRDonlineTrackletFilter.cxx:59
 AliTRDonlineTrackletFilter.cxx:60
 AliTRDonlineTrackletFilter.cxx:61
 AliTRDonlineTrackletFilter.cxx:62
 AliTRDonlineTrackletFilter.cxx:63
 AliTRDonlineTrackletFilter.cxx:64
 AliTRDonlineTrackletFilter.cxx:65
 AliTRDonlineTrackletFilter.cxx:66
 AliTRDonlineTrackletFilter.cxx:67
 AliTRDonlineTrackletFilter.cxx:68
 AliTRDonlineTrackletFilter.cxx:69
 AliTRDonlineTrackletFilter.cxx:70
 AliTRDonlineTrackletFilter.cxx:71
 AliTRDonlineTrackletFilter.cxx:72
 AliTRDonlineTrackletFilter.cxx:73
 AliTRDonlineTrackletFilter.cxx:74
 AliTRDonlineTrackletFilter.cxx:75
 AliTRDonlineTrackletFilter.cxx:76
 AliTRDonlineTrackletFilter.cxx:77
 AliTRDonlineTrackletFilter.cxx:78
 AliTRDonlineTrackletFilter.cxx:79
 AliTRDonlineTrackletFilter.cxx:80
 AliTRDonlineTrackletFilter.cxx:81
 AliTRDonlineTrackletFilter.cxx:82
 AliTRDonlineTrackletFilter.cxx:83
 AliTRDonlineTrackletFilter.cxx:84
 AliTRDonlineTrackletFilter.cxx:85
 AliTRDonlineTrackletFilter.cxx:86
 AliTRDonlineTrackletFilter.cxx:87
 AliTRDonlineTrackletFilter.cxx:88
 AliTRDonlineTrackletFilter.cxx:89
 AliTRDonlineTrackletFilter.cxx:90
 AliTRDonlineTrackletFilter.cxx:91
 AliTRDonlineTrackletFilter.cxx:92
 AliTRDonlineTrackletFilter.cxx:93
 AliTRDonlineTrackletFilter.cxx:94
 AliTRDonlineTrackletFilter.cxx:95
 AliTRDonlineTrackletFilter.cxx:96
 AliTRDonlineTrackletFilter.cxx:97
 AliTRDonlineTrackletFilter.cxx:98
 AliTRDonlineTrackletFilter.cxx:99
 AliTRDonlineTrackletFilter.cxx:100
 AliTRDonlineTrackletFilter.cxx:101
 AliTRDonlineTrackletFilter.cxx:102
 AliTRDonlineTrackletFilter.cxx:103
 AliTRDonlineTrackletFilter.cxx:104
 AliTRDonlineTrackletFilter.cxx:105
 AliTRDonlineTrackletFilter.cxx:106
 AliTRDonlineTrackletFilter.cxx:107
 AliTRDonlineTrackletFilter.cxx:108
 AliTRDonlineTrackletFilter.cxx:109
 AliTRDonlineTrackletFilter.cxx:110
 AliTRDonlineTrackletFilter.cxx:111
 AliTRDonlineTrackletFilter.cxx:112
 AliTRDonlineTrackletFilter.cxx:113
 AliTRDonlineTrackletFilter.cxx:114
 AliTRDonlineTrackletFilter.cxx:115
 AliTRDonlineTrackletFilter.cxx:116
 AliTRDonlineTrackletFilter.cxx:117
 AliTRDonlineTrackletFilter.cxx:118
 AliTRDonlineTrackletFilter.cxx:119
 AliTRDonlineTrackletFilter.cxx:120
 AliTRDonlineTrackletFilter.cxx:121
 AliTRDonlineTrackletFilter.cxx:122
 AliTRDonlineTrackletFilter.cxx:123
 AliTRDonlineTrackletFilter.cxx:124
 AliTRDonlineTrackletFilter.cxx:125
 AliTRDonlineTrackletFilter.cxx:126
 AliTRDonlineTrackletFilter.cxx:127
 AliTRDonlineTrackletFilter.cxx:128
 AliTRDonlineTrackletFilter.cxx:129
 AliTRDonlineTrackletFilter.cxx:130
 AliTRDonlineTrackletFilter.cxx:131
 AliTRDonlineTrackletFilter.cxx:132
 AliTRDonlineTrackletFilter.cxx:133
 AliTRDonlineTrackletFilter.cxx:134
 AliTRDonlineTrackletFilter.cxx:135
 AliTRDonlineTrackletFilter.cxx:136
 AliTRDonlineTrackletFilter.cxx:137
 AliTRDonlineTrackletFilter.cxx:138
 AliTRDonlineTrackletFilter.cxx:139
 AliTRDonlineTrackletFilter.cxx:140
 AliTRDonlineTrackletFilter.cxx:141
 AliTRDonlineTrackletFilter.cxx:142
 AliTRDonlineTrackletFilter.cxx:143
 AliTRDonlineTrackletFilter.cxx:144
 AliTRDonlineTrackletFilter.cxx:145
 AliTRDonlineTrackletFilter.cxx:146
 AliTRDonlineTrackletFilter.cxx:147
 AliTRDonlineTrackletFilter.cxx:148
 AliTRDonlineTrackletFilter.cxx:149
 AliTRDonlineTrackletFilter.cxx:150
 AliTRDonlineTrackletFilter.cxx:151
 AliTRDonlineTrackletFilter.cxx:152
 AliTRDonlineTrackletFilter.cxx:153
 AliTRDonlineTrackletFilter.cxx:154
 AliTRDonlineTrackletFilter.cxx:155
 AliTRDonlineTrackletFilter.cxx:156
 AliTRDonlineTrackletFilter.cxx:157
 AliTRDonlineTrackletFilter.cxx:158
 AliTRDonlineTrackletFilter.cxx:159
 AliTRDonlineTrackletFilter.cxx:160
 AliTRDonlineTrackletFilter.cxx:161
 AliTRDonlineTrackletFilter.cxx:162
 AliTRDonlineTrackletFilter.cxx:163
 AliTRDonlineTrackletFilter.cxx:164
 AliTRDonlineTrackletFilter.cxx:165
 AliTRDonlineTrackletFilter.cxx:166
 AliTRDonlineTrackletFilter.cxx:167
 AliTRDonlineTrackletFilter.cxx:168
 AliTRDonlineTrackletFilter.cxx:169
 AliTRDonlineTrackletFilter.cxx:170
 AliTRDonlineTrackletFilter.cxx:171
 AliTRDonlineTrackletFilter.cxx:172
 AliTRDonlineTrackletFilter.cxx:173
 AliTRDonlineTrackletFilter.cxx:174
 AliTRDonlineTrackletFilter.cxx:175
 AliTRDonlineTrackletFilter.cxx:176
 AliTRDonlineTrackletFilter.cxx:177
 AliTRDonlineTrackletFilter.cxx:178
 AliTRDonlineTrackletFilter.cxx:179
 AliTRDonlineTrackletFilter.cxx:180
 AliTRDonlineTrackletFilter.cxx:181
 AliTRDonlineTrackletFilter.cxx:182
 AliTRDonlineTrackletFilter.cxx:183
 AliTRDonlineTrackletFilter.cxx:184
 AliTRDonlineTrackletFilter.cxx:185
 AliTRDonlineTrackletFilter.cxx:186
 AliTRDonlineTrackletFilter.cxx:187
 AliTRDonlineTrackletFilter.cxx:188
 AliTRDonlineTrackletFilter.cxx:189
 AliTRDonlineTrackletFilter.cxx:190
 AliTRDonlineTrackletFilter.cxx:191
 AliTRDonlineTrackletFilter.cxx:192
 AliTRDonlineTrackletFilter.cxx:193
 AliTRDonlineTrackletFilter.cxx:194
 AliTRDonlineTrackletFilter.cxx:195
 AliTRDonlineTrackletFilter.cxx:196
 AliTRDonlineTrackletFilter.cxx:197
 AliTRDonlineTrackletFilter.cxx:198
 AliTRDonlineTrackletFilter.cxx:199
 AliTRDonlineTrackletFilter.cxx:200
 AliTRDonlineTrackletFilter.cxx:201
 AliTRDonlineTrackletFilter.cxx:202
 AliTRDonlineTrackletFilter.cxx:203
 AliTRDonlineTrackletFilter.cxx:204
 AliTRDonlineTrackletFilter.cxx:205
 AliTRDonlineTrackletFilter.cxx:206
 AliTRDonlineTrackletFilter.cxx:207
 AliTRDonlineTrackletFilter.cxx:208
 AliTRDonlineTrackletFilter.cxx:209
 AliTRDonlineTrackletFilter.cxx:210
 AliTRDonlineTrackletFilter.cxx:211
 AliTRDonlineTrackletFilter.cxx:212
 AliTRDonlineTrackletFilter.cxx:213
 AliTRDonlineTrackletFilter.cxx:214
 AliTRDonlineTrackletFilter.cxx:215
 AliTRDonlineTrackletFilter.cxx:216
 AliTRDonlineTrackletFilter.cxx:217
 AliTRDonlineTrackletFilter.cxx:218
 AliTRDonlineTrackletFilter.cxx:219
 AliTRDonlineTrackletFilter.cxx:220
 AliTRDonlineTrackletFilter.cxx:221
 AliTRDonlineTrackletFilter.cxx:222
 AliTRDonlineTrackletFilter.cxx:223
 AliTRDonlineTrackletFilter.cxx:224
 AliTRDonlineTrackletFilter.cxx:225
 AliTRDonlineTrackletFilter.cxx:226
 AliTRDonlineTrackletFilter.cxx:227
 AliTRDonlineTrackletFilter.cxx:228
 AliTRDonlineTrackletFilter.cxx:229
 AliTRDonlineTrackletFilter.cxx:230
 AliTRDonlineTrackletFilter.cxx:231
 AliTRDonlineTrackletFilter.cxx:232
 AliTRDonlineTrackletFilter.cxx:233
 AliTRDonlineTrackletFilter.cxx:234
 AliTRDonlineTrackletFilter.cxx:235
 AliTRDonlineTrackletFilter.cxx:236
 AliTRDonlineTrackletFilter.cxx:237
 AliTRDonlineTrackletFilter.cxx:238
 AliTRDonlineTrackletFilter.cxx:239