ROOT logo
//
// This class is the task for connecting together 
// MC information and the RC information 
//
// The task is a wrapper over two components
// AliGenInfoMaker
// AliESDRecInfoMaker.h

// ROOT includes
#include <TChain.h>
#include <TMath.h>

// ALIROOT includes
#include <TTreeStream.h>
#include <AliAnalysisManager.h>
#include <AliESDInputHandler.h>
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliMCEventHandler.h"

#include <AliESD.h>
#include "AliGenInfoTask.h"
#include "AliGenInfoMaker.h"
#include "AliHelix.h"

//
#include "AliMCInfo.h"
#include "AliComparisonObject.h"
#include "AliESDRecInfo.h"
#include "AliTPCParamSR.h"
#include "TSystem.h"
#include "TTimeStamp.h"
#include "TFile.h"
#include "AliTPCseed.h"

// STL includes
#include <iostream>

using namespace std;

ClassImp(AliGenInfoTask)

//________________________________________________________________________
AliGenInfoTask::AliGenInfoTask() : 
  AliAnalysisTask(), 
  fMCinfo(0),     //! MC event handler
  fESD(0),
  fESDfriend(0),
  fCompList(0),         //array of comparison objects
  fGenTracksArray(0),  //clones array with filtered particles
  fGenKinkArray(0),    //clones array with filtered Kinks
  fGenV0Array(0),      //clones array with filtered V0s
  fRecTracksArray(0),  //clones array with filtered particles
  fDebugStreamer(0),
  fStreamLevel(0),
  fDebugLevel(0),
  fDebugOutputPath()
{
  //
  // Default constructor (should not be used)
  //
}

AliGenInfoTask::AliGenInfoTask(const AliGenInfoTask& /*info*/) : 
  AliAnalysisTask(), 
  fMCinfo(0),     //! MC event handler
  fESD(0),
  fESDfriend(0),
  fCompList(0),
  fGenTracksArray(0),  //clones array with filtered particles
  fGenKinkArray(0),    //clones array with filtered Kinks
  fGenV0Array(0),      //clones array with filtered V0s
  fRecTracksArray(0),  //clones array with filtered particles
  //
  fDebugStreamer(0),
  fStreamLevel(0),
  fDebugLevel(),
  fDebugOutputPath()
{
  //
  // Default constructor 
  //
}



//________________________________________________________________________
AliGenInfoTask::AliGenInfoTask(const char *name) : 
  AliAnalysisTask(name, "AliGenInfoTask"), 
  fMCinfo(0),     //! MC event handler
  fESD(0),
  fESDfriend(0),
  fCompList(0),
  fGenTracksArray(0),  //clones array with filtered particles
  fGenKinkArray(0),    //clones array with filtered Kinks
  fGenV0Array(0),      //clones array with filtered V0s
  fRecTracksArray(0),  //clones array with filtered particles
  fDebugStreamer(0),
  fStreamLevel(0),
  fDebugLevel(0),
  fDebugOutputPath()
{
  //
  // Normal constructor
  //
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #0 writes into a TList
  DefineOutput(0, TObjArray::Class());
  //
  //
  fCompList = new TObjArray;
}

AliGenInfoTask::~AliGenInfoTask(){
  //
  //
  //
  if (fDebugLevel>0)  printf("AliGenInfoTask::~AliGenInfoTask\n");
  if (fDebugStreamer) delete fDebugStreamer;
  fDebugStreamer=0;
  if(fCompList)   delete fCompList;  
  fCompList =0; 
}


//________________________________________________________________________
void AliGenInfoTask::ConnectInputData(Option_t *) 
{
  //
  // Connect the input data
  //
  if(fDebugLevel>3)
    cout << "AnalysisTaskTPCCluster::ConnectInputData()" << endl;

  TTree* tree=dynamic_cast<TTree*>(GetInputData(0));
  if (!tree) {
    //Printf("ERROR: Could not read chain from input slot 0");
  }
  else {
    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
    if (!esdH) {
      //Printf("ERROR: Could not get ESDInputHandler");
    }
    else {
      fESD = esdH->GetEvent();
      fESDfriend=static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
      fESD->SetESDfriend(fESDfriend);
      //Printf("*** CONNECTED NEW EVENT ****");
    }  
  }
  AliMCEventHandler* mcinfo = (AliMCEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());  
  mcinfo->SetReadTR(kTRUE);
  
  fMCinfo = mcinfo->MCEvent();


}


//_____________________________________________________________________________
Bool_t AliGenInfoTask::AddComparisonObject(AliComparisonObject *pObj) 
{
  // add comparison object to the list
  if(pObj == 0) {
      Printf("ERROR: Could not add comparison object");
	  return kFALSE;
  }
  // add object to the list
  fCompList->AddLast(pObj);       
  return kTRUE;
}




//________________________________________________________________________
void AliGenInfoTask::CreateOutputObjects() 
{
  //
  // Connect the output objects
  //
  if(fDebugLevel>3)
    cout << "AnalysisTaskTPCCluster::CreateOutputObjects()" << endl;
  
}


//________________________________________________________________________
void AliGenInfoTask::Exec(Option_t *) {
  //
  // Execute analysis for current event 
  //

  if(fDebugLevel>3)
    cout << "AliGenInfoTask::Exec()" << endl;
    

  // If MC has been connected   
  if (fGenTracksArray) fGenTracksArray->Delete();
  if (fRecTracksArray) fRecTracksArray->Delete();

  if (!fMCinfo){
    cout << "Not MC info\n" << endl;
  }else{
    //mcinfo->Print();
    ProcessMCInfo();
    ProcessESDInfo();
    DumpInfo();
    ProcessComparison();
  }
  //
}      




//________________________________________________________________________
void AliGenInfoTask::Terminate(Option_t *) {
    //
    // Terminate loop
    //
  if(fDebugLevel>3)
    printf("AliGenInfoTask: Terminate() \n");  
  //
  if (fDebugLevel>0) printf("AliTPCcalibBase::Terminate\n");
  if (fDebugStreamer) delete fDebugStreamer;
  fDebugStreamer = 0;
  return;
}





TTreeSRedirector *AliGenInfoTask::GetDebugStreamer(){
  //
  // Get Debug streamer
  // In case debug streamer not yet initialized and StreamLevel>0 create new one
  //
  if (fStreamLevel==0) return 0;
  if (fDebugStreamer) return fDebugStreamer;
  TString dsName;
  dsName=GetName();
  dsName+="Debug.root";
  dsName.ReplaceAll(" ","");
  fDebugStreamer = new TTreeSRedirector(dsName.Data());
  return fDebugStreamer;
}



AliMCInfo*  AliGenInfoTask::GetTrack(Int_t index, Bool_t force){
  //
  // Get the MC info for given track
  //
  if (!fGenTracksArray) fGenTracksArray = new TClonesArray("AliMCInfo",1000);
  if (index>fGenTracksArray->GetEntriesFast()) fGenTracksArray->Expand(index*2+10);
  AliMCInfo * info = (AliMCInfo*)fGenTracksArray->At(index);
  if (!force) return info;
  if (!info){
    info = new ((*fGenTracksArray)[index]) AliMCInfo;
  }
  return info;
}

AliESDRecInfo*  AliGenInfoTask::GetRecTrack(Int_t index, Bool_t force){
  //
  // Get the MC info for given track
  //
  if (!fRecTracksArray) fRecTracksArray = new TClonesArray("AliESDRecInfo",1000);
  if (index>fRecTracksArray->GetEntriesFast()) fRecTracksArray->Expand(index*2+10);
  AliESDRecInfo * info = (AliESDRecInfo*)fRecTracksArray->At(index);
  if (!force) return info;
  if (!info){
    info = new ((*fRecTracksArray)[index]) AliESDRecInfo;
  }
  return info;
}




void  AliGenInfoTask::ProcessMCInfo(){
  //
  // Dump information from MC to the array
  //
  //
  TParticle * particle= new TParticle;
  TClonesArray * trefs = new TClonesArray("AliTrackReference");
  //
  //
  // Process tracks
  //
  Int_t npart = fMCinfo->GetNumberOfTracks();
  if (npart==0) return;
  Double_t vertex[4]={0,0,0,0};
  fMCinfo->GetParticleAndTR(0, particle, trefs);
  if (particle){
    vertex[0]=particle->Vx();
    vertex[1]=particle->Vy();
    vertex[2]=particle->Vz();
    vertex[3]=particle->R();
  }

  for (Int_t ipart=0;ipart<npart;ipart++){
    Int_t status = fMCinfo->GetParticleAndTR(ipart, particle, trefs);
    if (status<0) continue;
    if (!particle) continue;
    if (!trefs) continue;
    if (!AcceptParticle(particle)) continue;
    //if (trefs->GetEntries()<1) continue;
    AliMCInfo * mcinfo = GetTrack(ipart,kTRUE);
    mcinfo->Update(particle,trefs,vertex,ipart);
    //
    TTreeSRedirector *pcstream = GetDebugStreamer();
    if (pcstream){
      (*pcstream)<<"MC"<<
	"p.="<<particle<<
	"MC.="<<mcinfo<<
	"\n";
    }
  }
}

void AliGenInfoTask::ProcessESDInfo(){
  //
  //
  //
  if (!fESD) return;
  static AliTPCParamSR param;
  fESDfriend=static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
  if (!fESDfriend) {
    //Printf("ERROR: fESDfriend not available");
    return;
  }
  fESD->SetESDfriend(fESDfriend);
  //
  //
  Int_t ntracks = fESD->GetNumberOfTracks();
  for (Int_t itrack=0; itrack<ntracks; itrack++){
    AliESDtrack *track = fESD->GetTrack(itrack);
    Int_t label = TMath::Abs(track->GetLabel());
    AliMCInfo * mcinfo = GetTrack(label,kFALSE);
    if (!mcinfo) continue;
    AliESDRecInfo *recInfo= GetRecTrack(label,kTRUE);
    recInfo->AddESDtrack(track,mcinfo);
    recInfo->Update(mcinfo,&param,kTRUE);
  }
  //


} 


void AliGenInfoTask::ProcessComparison(){
  //
  //
  //
  static AliESDRecInfo dummy;
  Int_t npart = fMCinfo->GetNumberOfTracks();
  for (Int_t ipart=0;ipart<npart;ipart++){
    AliMCInfo * mcinfo = GetTrack(ipart,kFALSE);
    if (!mcinfo) continue;
    AliESDRecInfo *recInfo= GetRecTrack(ipart,kFALSE);
    if (!recInfo) recInfo=&dummy; 
    //
    for (Int_t icomp = 0; icomp<fCompList->GetEntries(); icomp++){
      AliComparisonObject *pObj= (AliComparisonObject *)fCompList->At(icomp);
      if (pObj){
	pObj->Exec(mcinfo,recInfo);
      }
    }    
  }
  PostData(0, fCompList);
}

void AliGenInfoTask::DumpInfo(){
  //
  //
  //
  TParticle * particle= new TParticle;
  TClonesArray * trefs = new TClonesArray("AliTrackReference");
  //

  static AliESDRecInfo dummy;
  Int_t npart = fMCinfo->GetNumberOfTracks();
  for (Int_t ipart=0;ipart<npart;ipart++){
    AliMCInfo * mcinfo = GetTrack(ipart,kFALSE);
    if (!mcinfo) continue;
    AliESDRecInfo *recInfo= GetRecTrack(ipart,kFALSE);
    if (!recInfo) recInfo=&dummy; 
    TTreeSRedirector *pcstream = GetDebugStreamer();
    
    fMCinfo->GetParticleAndTR(ipart, particle, trefs);
    Int_t counter=0;
    Float_t length=0;
    if (trefs!=0 && particle!=0){
      length = GetTPCTrackLength(*trefs, particle , fESD->GetMagneticField(), counter, 3.0);
    }

    if (pcstream){
      (*pcstream)<<"RC"<<	
	"MC.="<<mcinfo<<
	"RC.="<<recInfo<<
	"length="<<length<<
	"counter="<<counter<<
	//	"tr.="<<tpctrack<<
	"\n";
    }    
  }
}



Bool_t AliGenInfoTask::AcceptParticle(TParticle *part){
  //
  /*
    MC cuts
    TCut cutPt("p.Pt()>0.1");
    TCut cutZ("abs(p.Vz())<250");
    TCut cutR("abs(p.R())<250");
    //
  */
  //
  //
  if (part->Pt()<0.1) return kFALSE;
  if (TMath::Abs(part->Vz())>250) return kFALSE;
  if (part->R()>360)  return kFALSE;
  if (part->GetPDG()){
    if (part->GetPDG()->Charge()==0) return kFALSE;
  }
  return kTRUE;
}



void AliGenInfoTask::FinishTaskOutput()
{
  //
  // According description in AliAnalisysTask this method is call
  // on the slaves before sending data
  //
  Terminate("slave");
  RegisterDebugOutput(fDebugOutputPath.Data());

}



void AliGenInfoTask::RegisterDebugOutput(const char */*path*/){
  //
  // store  - copy debug output to the destination position
  // currently ONLY for local copy
  TString dsName;
  dsName=GetName();
  dsName+="Debug.root";
  dsName.ReplaceAll(" ","");
  TString dsName2=fDebugOutputPath.Data();
  gSystem->MakeDirectory(dsName2.Data());
  dsName2+="/";;
  dsName2+=gSystem->HostName();
  gSystem->MakeDirectory(dsName2.Data());
  dsName2+="/";
  dsName2+=gSystem->BaseName(gSystem->pwd());
  dsName2+="/";
  gSystem->MakeDirectory(dsName2.Data());
  dsName2+=dsName;
  AliInfo(Form("copy %s\t%s\n",dsName.Data(),dsName2.Data()));
  printf("copy %s\t%s\n",dsName.Data(),dsName2.Data());
  TFile::Cp(dsName.Data(),dsName2.Data());
}


Float_t  AliGenInfoTask::GetTPCTrackLength(const TClonesArray& trackRefs, TParticle*part, Float_t bz,  Int_t &counter, Float_t deadWidth){
  //
  // return track length in geometrically active volume of TPC.
  // z nad rphi acceptance is included
  // doesn't take into account dead channel and ExB  
  // Intput:
  // trackRefs
  // bz - magnetic field
  // deadWidth - dead zone in r-phi
  // Additional output:
  // counter   - number of circles
  const Float_t kRMin = 90;
  const Float_t kRMax = 245;
  const Float_t kZMax = 250;
  const Float_t kMinPt= 0.01; 
  Float_t length =0;
  Int_t nrefs = trackRefs.GetEntriesFast();
  AliExternalTrackParam param;
  Double_t cv[21];
  for (Int_t i=0; i<21;i++) cv[i]=0;
  counter=0;
  //
  //
  AliTrackReference *ref0 = (AliTrackReference*)trackRefs.At(0);
  Float_t direction = 0;
  //
  for (Int_t iref=1; iref<nrefs;iref++){
    AliTrackReference *ref = (AliTrackReference*)trackRefs.At(iref);
    if (!ref) continue;
    if (!ref0 || ref0->DetectorId()!= AliTrackReference::kTPC){
      ref0 = ref;
      direction = ((ref0->X()*ref0->Px()+ref0->Y()*ref0->Py())>0)? 1.:-1.;
      continue;
    }
    Float_t newdirection = ((ref->X()*ref->Px()+ref->Y()*ref->Py())>0)? 1.:-1.;
    if (newdirection*direction<0) {
      counter++;  //circle counter 
      direction = newdirection;
      continue;
    }
    if (counter>0) continue;
    if (ref0->Pt()<kMinPt) break;
    Float_t radius0 = TMath::Max(TMath::Min(ref0->R(),kRMax),kRMin);;
    Float_t radius1 = TMath::Max(TMath::Min(ref->R(),kRMax),kRMin);
    Double_t xyz[3]={ref0->X(),ref0->Y(),ref0->Z()};
    Double_t pxyz[3]={ref0->Px(),ref0->Py(),ref0->Pz()};
    Double_t alpha;
       param.Set(xyz,pxyz,cv,TMath::Nint(part->GetPDG()->Charge()/3.));
    
    for (Float_t radius = radius0; radius<radius1; radius+=1){
      param.GetXYZAt(radius, bz, xyz);
      if (TMath::Abs(xyz[2])>kZMax) continue;
      Float_t gradius = TMath::Sqrt(xyz[1]*xyz[1]+xyz[0]*xyz[0]);
      if (gradius>kRMax) continue;
      alpha = TMath::ATan2(xyz[1],xyz[0]);
      if (alpha<0) alpha+=TMath::TwoPi();
      //
      Int_t sector  = Int_t(9*alpha/TMath::Pi());
      Float_t lalpha = alpha-((sector+0.5)*TMath::Pi()/9.);
      Float_t dedge  = (TMath::Tan(TMath::Pi()/18.)-TMath::Abs(TMath::Tan(lalpha)))*gradius; 
      if (dedge>deadWidth) length++;
    }
    if (ref->DetectorId()!= AliTrackReference::kTPC) break; 
    ref0 = ref;
  }
  return length;
}
 AliGenInfoTask.cxx:1
 AliGenInfoTask.cxx:2
 AliGenInfoTask.cxx:3
 AliGenInfoTask.cxx:4
 AliGenInfoTask.cxx:5
 AliGenInfoTask.cxx:6
 AliGenInfoTask.cxx:7
 AliGenInfoTask.cxx:8
 AliGenInfoTask.cxx:9
 AliGenInfoTask.cxx:10
 AliGenInfoTask.cxx:11
 AliGenInfoTask.cxx:12
 AliGenInfoTask.cxx:13
 AliGenInfoTask.cxx:14
 AliGenInfoTask.cxx:15
 AliGenInfoTask.cxx:16
 AliGenInfoTask.cxx:17
 AliGenInfoTask.cxx:18
 AliGenInfoTask.cxx:19
 AliGenInfoTask.cxx:20
 AliGenInfoTask.cxx:21
 AliGenInfoTask.cxx:22
 AliGenInfoTask.cxx:23
 AliGenInfoTask.cxx:24
 AliGenInfoTask.cxx:25
 AliGenInfoTask.cxx:26
 AliGenInfoTask.cxx:27
 AliGenInfoTask.cxx:28
 AliGenInfoTask.cxx:29
 AliGenInfoTask.cxx:30
 AliGenInfoTask.cxx:31
 AliGenInfoTask.cxx:32
 AliGenInfoTask.cxx:33
 AliGenInfoTask.cxx:34
 AliGenInfoTask.cxx:35
 AliGenInfoTask.cxx:36
 AliGenInfoTask.cxx:37
 AliGenInfoTask.cxx:38
 AliGenInfoTask.cxx:39
 AliGenInfoTask.cxx:40
 AliGenInfoTask.cxx:41
 AliGenInfoTask.cxx:42
 AliGenInfoTask.cxx:43
 AliGenInfoTask.cxx:44
 AliGenInfoTask.cxx:45
 AliGenInfoTask.cxx:46
 AliGenInfoTask.cxx:47
 AliGenInfoTask.cxx:48
 AliGenInfoTask.cxx:49
 AliGenInfoTask.cxx:50
 AliGenInfoTask.cxx:51
 AliGenInfoTask.cxx:52
 AliGenInfoTask.cxx:53
 AliGenInfoTask.cxx:54
 AliGenInfoTask.cxx:55
 AliGenInfoTask.cxx:56
 AliGenInfoTask.cxx:57
 AliGenInfoTask.cxx:58
 AliGenInfoTask.cxx:59
 AliGenInfoTask.cxx:60
 AliGenInfoTask.cxx:61
 AliGenInfoTask.cxx:62
 AliGenInfoTask.cxx:63
 AliGenInfoTask.cxx:64
 AliGenInfoTask.cxx:65
 AliGenInfoTask.cxx:66
 AliGenInfoTask.cxx:67
 AliGenInfoTask.cxx:68
 AliGenInfoTask.cxx:69
 AliGenInfoTask.cxx:70
 AliGenInfoTask.cxx:71
 AliGenInfoTask.cxx:72
 AliGenInfoTask.cxx:73
 AliGenInfoTask.cxx:74
 AliGenInfoTask.cxx:75
 AliGenInfoTask.cxx:76
 AliGenInfoTask.cxx:77
 AliGenInfoTask.cxx:78
 AliGenInfoTask.cxx:79
 AliGenInfoTask.cxx:80
 AliGenInfoTask.cxx:81
 AliGenInfoTask.cxx:82
 AliGenInfoTask.cxx:83
 AliGenInfoTask.cxx:84
 AliGenInfoTask.cxx:85
 AliGenInfoTask.cxx:86
 AliGenInfoTask.cxx:87
 AliGenInfoTask.cxx:88
 AliGenInfoTask.cxx:89
 AliGenInfoTask.cxx:90
 AliGenInfoTask.cxx:91
 AliGenInfoTask.cxx:92
 AliGenInfoTask.cxx:93
 AliGenInfoTask.cxx:94
 AliGenInfoTask.cxx:95
 AliGenInfoTask.cxx:96
 AliGenInfoTask.cxx:97
 AliGenInfoTask.cxx:98
 AliGenInfoTask.cxx:99
 AliGenInfoTask.cxx:100
 AliGenInfoTask.cxx:101
 AliGenInfoTask.cxx:102
 AliGenInfoTask.cxx:103
 AliGenInfoTask.cxx:104
 AliGenInfoTask.cxx:105
 AliGenInfoTask.cxx:106
 AliGenInfoTask.cxx:107
 AliGenInfoTask.cxx:108
 AliGenInfoTask.cxx:109
 AliGenInfoTask.cxx:110
 AliGenInfoTask.cxx:111
 AliGenInfoTask.cxx:112
 AliGenInfoTask.cxx:113
 AliGenInfoTask.cxx:114
 AliGenInfoTask.cxx:115
 AliGenInfoTask.cxx:116
 AliGenInfoTask.cxx:117
 AliGenInfoTask.cxx:118
 AliGenInfoTask.cxx:119
 AliGenInfoTask.cxx:120
 AliGenInfoTask.cxx:121
 AliGenInfoTask.cxx:122
 AliGenInfoTask.cxx:123
 AliGenInfoTask.cxx:124
 AliGenInfoTask.cxx:125
 AliGenInfoTask.cxx:126
 AliGenInfoTask.cxx:127
 AliGenInfoTask.cxx:128
 AliGenInfoTask.cxx:129
 AliGenInfoTask.cxx:130
 AliGenInfoTask.cxx:131
 AliGenInfoTask.cxx:132
 AliGenInfoTask.cxx:133
 AliGenInfoTask.cxx:134
 AliGenInfoTask.cxx:135
 AliGenInfoTask.cxx:136
 AliGenInfoTask.cxx:137
 AliGenInfoTask.cxx:138
 AliGenInfoTask.cxx:139
 AliGenInfoTask.cxx:140
 AliGenInfoTask.cxx:141
 AliGenInfoTask.cxx:142
 AliGenInfoTask.cxx:143
 AliGenInfoTask.cxx:144
 AliGenInfoTask.cxx:145
 AliGenInfoTask.cxx:146
 AliGenInfoTask.cxx:147
 AliGenInfoTask.cxx:148
 AliGenInfoTask.cxx:149
 AliGenInfoTask.cxx:150
 AliGenInfoTask.cxx:151
 AliGenInfoTask.cxx:152
 AliGenInfoTask.cxx:153
 AliGenInfoTask.cxx:154
 AliGenInfoTask.cxx:155
 AliGenInfoTask.cxx:156
 AliGenInfoTask.cxx:157
 AliGenInfoTask.cxx:158
 AliGenInfoTask.cxx:159
 AliGenInfoTask.cxx:160
 AliGenInfoTask.cxx:161
 AliGenInfoTask.cxx:162
 AliGenInfoTask.cxx:163
 AliGenInfoTask.cxx:164
 AliGenInfoTask.cxx:165
 AliGenInfoTask.cxx:166
 AliGenInfoTask.cxx:167
 AliGenInfoTask.cxx:168
 AliGenInfoTask.cxx:169
 AliGenInfoTask.cxx:170
 AliGenInfoTask.cxx:171
 AliGenInfoTask.cxx:172
 AliGenInfoTask.cxx:173
 AliGenInfoTask.cxx:174
 AliGenInfoTask.cxx:175
 AliGenInfoTask.cxx:176
 AliGenInfoTask.cxx:177
 AliGenInfoTask.cxx:178
 AliGenInfoTask.cxx:179
 AliGenInfoTask.cxx:180
 AliGenInfoTask.cxx:181
 AliGenInfoTask.cxx:182
 AliGenInfoTask.cxx:183
 AliGenInfoTask.cxx:184
 AliGenInfoTask.cxx:185
 AliGenInfoTask.cxx:186
 AliGenInfoTask.cxx:187
 AliGenInfoTask.cxx:188
 AliGenInfoTask.cxx:189
 AliGenInfoTask.cxx:190
 AliGenInfoTask.cxx:191
 AliGenInfoTask.cxx:192
 AliGenInfoTask.cxx:193
 AliGenInfoTask.cxx:194
 AliGenInfoTask.cxx:195
 AliGenInfoTask.cxx:196
 AliGenInfoTask.cxx:197
 AliGenInfoTask.cxx:198
 AliGenInfoTask.cxx:199
 AliGenInfoTask.cxx:200
 AliGenInfoTask.cxx:201
 AliGenInfoTask.cxx:202
 AliGenInfoTask.cxx:203
 AliGenInfoTask.cxx:204
 AliGenInfoTask.cxx:205
 AliGenInfoTask.cxx:206
 AliGenInfoTask.cxx:207
 AliGenInfoTask.cxx:208
 AliGenInfoTask.cxx:209
 AliGenInfoTask.cxx:210
 AliGenInfoTask.cxx:211
 AliGenInfoTask.cxx:212
 AliGenInfoTask.cxx:213
 AliGenInfoTask.cxx:214
 AliGenInfoTask.cxx:215
 AliGenInfoTask.cxx:216
 AliGenInfoTask.cxx:217
 AliGenInfoTask.cxx:218
 AliGenInfoTask.cxx:219
 AliGenInfoTask.cxx:220
 AliGenInfoTask.cxx:221
 AliGenInfoTask.cxx:222
 AliGenInfoTask.cxx:223
 AliGenInfoTask.cxx:224
 AliGenInfoTask.cxx:225
 AliGenInfoTask.cxx:226
 AliGenInfoTask.cxx:227
 AliGenInfoTask.cxx:228
 AliGenInfoTask.cxx:229
 AliGenInfoTask.cxx:230
 AliGenInfoTask.cxx:231
 AliGenInfoTask.cxx:232
 AliGenInfoTask.cxx:233
 AliGenInfoTask.cxx:234
 AliGenInfoTask.cxx:235
 AliGenInfoTask.cxx:236
 AliGenInfoTask.cxx:237
 AliGenInfoTask.cxx:238
 AliGenInfoTask.cxx:239
 AliGenInfoTask.cxx:240
 AliGenInfoTask.cxx:241
 AliGenInfoTask.cxx:242
 AliGenInfoTask.cxx:243
 AliGenInfoTask.cxx:244
 AliGenInfoTask.cxx:245
 AliGenInfoTask.cxx:246
 AliGenInfoTask.cxx:247
 AliGenInfoTask.cxx:248
 AliGenInfoTask.cxx:249
 AliGenInfoTask.cxx:250
 AliGenInfoTask.cxx:251
 AliGenInfoTask.cxx:252
 AliGenInfoTask.cxx:253
 AliGenInfoTask.cxx:254
 AliGenInfoTask.cxx:255
 AliGenInfoTask.cxx:256
 AliGenInfoTask.cxx:257
 AliGenInfoTask.cxx:258
 AliGenInfoTask.cxx:259
 AliGenInfoTask.cxx:260
 AliGenInfoTask.cxx:261
 AliGenInfoTask.cxx:262
 AliGenInfoTask.cxx:263
 AliGenInfoTask.cxx:264
 AliGenInfoTask.cxx:265
 AliGenInfoTask.cxx:266
 AliGenInfoTask.cxx:267
 AliGenInfoTask.cxx:268
 AliGenInfoTask.cxx:269
 AliGenInfoTask.cxx:270
 AliGenInfoTask.cxx:271
 AliGenInfoTask.cxx:272
 AliGenInfoTask.cxx:273
 AliGenInfoTask.cxx:274
 AliGenInfoTask.cxx:275
 AliGenInfoTask.cxx:276
 AliGenInfoTask.cxx:277
 AliGenInfoTask.cxx:278
 AliGenInfoTask.cxx:279
 AliGenInfoTask.cxx:280
 AliGenInfoTask.cxx:281
 AliGenInfoTask.cxx:282
 AliGenInfoTask.cxx:283
 AliGenInfoTask.cxx:284
 AliGenInfoTask.cxx:285
 AliGenInfoTask.cxx:286
 AliGenInfoTask.cxx:287
 AliGenInfoTask.cxx:288
 AliGenInfoTask.cxx:289
 AliGenInfoTask.cxx:290
 AliGenInfoTask.cxx:291
 AliGenInfoTask.cxx:292
 AliGenInfoTask.cxx:293
 AliGenInfoTask.cxx:294
 AliGenInfoTask.cxx:295
 AliGenInfoTask.cxx:296
 AliGenInfoTask.cxx:297
 AliGenInfoTask.cxx:298
 AliGenInfoTask.cxx:299
 AliGenInfoTask.cxx:300
 AliGenInfoTask.cxx:301
 AliGenInfoTask.cxx:302
 AliGenInfoTask.cxx:303
 AliGenInfoTask.cxx:304
 AliGenInfoTask.cxx:305
 AliGenInfoTask.cxx:306
 AliGenInfoTask.cxx:307
 AliGenInfoTask.cxx:308
 AliGenInfoTask.cxx:309
 AliGenInfoTask.cxx:310
 AliGenInfoTask.cxx:311
 AliGenInfoTask.cxx:312
 AliGenInfoTask.cxx:313
 AliGenInfoTask.cxx:314
 AliGenInfoTask.cxx:315
 AliGenInfoTask.cxx:316
 AliGenInfoTask.cxx:317
 AliGenInfoTask.cxx:318
 AliGenInfoTask.cxx:319
 AliGenInfoTask.cxx:320
 AliGenInfoTask.cxx:321
 AliGenInfoTask.cxx:322
 AliGenInfoTask.cxx:323
 AliGenInfoTask.cxx:324
 AliGenInfoTask.cxx:325
 AliGenInfoTask.cxx:326
 AliGenInfoTask.cxx:327
 AliGenInfoTask.cxx:328
 AliGenInfoTask.cxx:329
 AliGenInfoTask.cxx:330
 AliGenInfoTask.cxx:331
 AliGenInfoTask.cxx:332
 AliGenInfoTask.cxx:333
 AliGenInfoTask.cxx:334
 AliGenInfoTask.cxx:335
 AliGenInfoTask.cxx:336
 AliGenInfoTask.cxx:337
 AliGenInfoTask.cxx:338
 AliGenInfoTask.cxx:339
 AliGenInfoTask.cxx:340
 AliGenInfoTask.cxx:341
 AliGenInfoTask.cxx:342
 AliGenInfoTask.cxx:343
 AliGenInfoTask.cxx:344
 AliGenInfoTask.cxx:345
 AliGenInfoTask.cxx:346
 AliGenInfoTask.cxx:347
 AliGenInfoTask.cxx:348
 AliGenInfoTask.cxx:349
 AliGenInfoTask.cxx:350
 AliGenInfoTask.cxx:351
 AliGenInfoTask.cxx:352
 AliGenInfoTask.cxx:353
 AliGenInfoTask.cxx:354
 AliGenInfoTask.cxx:355
 AliGenInfoTask.cxx:356
 AliGenInfoTask.cxx:357
 AliGenInfoTask.cxx:358
 AliGenInfoTask.cxx:359
 AliGenInfoTask.cxx:360
 AliGenInfoTask.cxx:361
 AliGenInfoTask.cxx:362
 AliGenInfoTask.cxx:363
 AliGenInfoTask.cxx:364
 AliGenInfoTask.cxx:365
 AliGenInfoTask.cxx:366
 AliGenInfoTask.cxx:367
 AliGenInfoTask.cxx:368
 AliGenInfoTask.cxx:369
 AliGenInfoTask.cxx:370
 AliGenInfoTask.cxx:371
 AliGenInfoTask.cxx:372
 AliGenInfoTask.cxx:373
 AliGenInfoTask.cxx:374
 AliGenInfoTask.cxx:375
 AliGenInfoTask.cxx:376
 AliGenInfoTask.cxx:377
 AliGenInfoTask.cxx:378
 AliGenInfoTask.cxx:379
 AliGenInfoTask.cxx:380
 AliGenInfoTask.cxx:381
 AliGenInfoTask.cxx:382
 AliGenInfoTask.cxx:383
 AliGenInfoTask.cxx:384
 AliGenInfoTask.cxx:385
 AliGenInfoTask.cxx:386
 AliGenInfoTask.cxx:387
 AliGenInfoTask.cxx:388
 AliGenInfoTask.cxx:389
 AliGenInfoTask.cxx:390
 AliGenInfoTask.cxx:391
 AliGenInfoTask.cxx:392
 AliGenInfoTask.cxx:393
 AliGenInfoTask.cxx:394
 AliGenInfoTask.cxx:395
 AliGenInfoTask.cxx:396
 AliGenInfoTask.cxx:397
 AliGenInfoTask.cxx:398
 AliGenInfoTask.cxx:399
 AliGenInfoTask.cxx:400
 AliGenInfoTask.cxx:401
 AliGenInfoTask.cxx:402
 AliGenInfoTask.cxx:403
 AliGenInfoTask.cxx:404
 AliGenInfoTask.cxx:405
 AliGenInfoTask.cxx:406
 AliGenInfoTask.cxx:407
 AliGenInfoTask.cxx:408
 AliGenInfoTask.cxx:409
 AliGenInfoTask.cxx:410
 AliGenInfoTask.cxx:411
 AliGenInfoTask.cxx:412
 AliGenInfoTask.cxx:413
 AliGenInfoTask.cxx:414
 AliGenInfoTask.cxx:415
 AliGenInfoTask.cxx:416
 AliGenInfoTask.cxx:417
 AliGenInfoTask.cxx:418
 AliGenInfoTask.cxx:419
 AliGenInfoTask.cxx:420
 AliGenInfoTask.cxx:421
 AliGenInfoTask.cxx:422
 AliGenInfoTask.cxx:423
 AliGenInfoTask.cxx:424
 AliGenInfoTask.cxx:425
 AliGenInfoTask.cxx:426
 AliGenInfoTask.cxx:427
 AliGenInfoTask.cxx:428
 AliGenInfoTask.cxx:429
 AliGenInfoTask.cxx:430
 AliGenInfoTask.cxx:431
 AliGenInfoTask.cxx:432
 AliGenInfoTask.cxx:433
 AliGenInfoTask.cxx:434
 AliGenInfoTask.cxx:435
 AliGenInfoTask.cxx:436
 AliGenInfoTask.cxx:437
 AliGenInfoTask.cxx:438
 AliGenInfoTask.cxx:439
 AliGenInfoTask.cxx:440
 AliGenInfoTask.cxx:441
 AliGenInfoTask.cxx:442
 AliGenInfoTask.cxx:443
 AliGenInfoTask.cxx:444
 AliGenInfoTask.cxx:445
 AliGenInfoTask.cxx:446
 AliGenInfoTask.cxx:447
 AliGenInfoTask.cxx:448
 AliGenInfoTask.cxx:449
 AliGenInfoTask.cxx:450
 AliGenInfoTask.cxx:451
 AliGenInfoTask.cxx:452
 AliGenInfoTask.cxx:453
 AliGenInfoTask.cxx:454
 AliGenInfoTask.cxx:455
 AliGenInfoTask.cxx:456
 AliGenInfoTask.cxx:457
 AliGenInfoTask.cxx:458
 AliGenInfoTask.cxx:459
 AliGenInfoTask.cxx:460
 AliGenInfoTask.cxx:461
 AliGenInfoTask.cxx:462
 AliGenInfoTask.cxx:463
 AliGenInfoTask.cxx:464
 AliGenInfoTask.cxx:465
 AliGenInfoTask.cxx:466
 AliGenInfoTask.cxx:467
 AliGenInfoTask.cxx:468
 AliGenInfoTask.cxx:469
 AliGenInfoTask.cxx:470
 AliGenInfoTask.cxx:471
 AliGenInfoTask.cxx:472
 AliGenInfoTask.cxx:473
 AliGenInfoTask.cxx:474
 AliGenInfoTask.cxx:475
 AliGenInfoTask.cxx:476
 AliGenInfoTask.cxx:477
 AliGenInfoTask.cxx:478
 AliGenInfoTask.cxx:479
 AliGenInfoTask.cxx:480
 AliGenInfoTask.cxx:481
 AliGenInfoTask.cxx:482
 AliGenInfoTask.cxx:483
 AliGenInfoTask.cxx:484
 AliGenInfoTask.cxx:485
 AliGenInfoTask.cxx:486
 AliGenInfoTask.cxx:487
 AliGenInfoTask.cxx:488
 AliGenInfoTask.cxx:489
 AliGenInfoTask.cxx:490
 AliGenInfoTask.cxx:491
 AliGenInfoTask.cxx:492
 AliGenInfoTask.cxx:493
 AliGenInfoTask.cxx:494
 AliGenInfoTask.cxx:495
 AliGenInfoTask.cxx:496
 AliGenInfoTask.cxx:497
 AliGenInfoTask.cxx:498
 AliGenInfoTask.cxx:499
 AliGenInfoTask.cxx:500
 AliGenInfoTask.cxx:501
 AliGenInfoTask.cxx:502
 AliGenInfoTask.cxx:503
 AliGenInfoTask.cxx:504
 AliGenInfoTask.cxx:505
 AliGenInfoTask.cxx:506
 AliGenInfoTask.cxx:507
 AliGenInfoTask.cxx:508
 AliGenInfoTask.cxx:509
 AliGenInfoTask.cxx:510
 AliGenInfoTask.cxx:511
 AliGenInfoTask.cxx:512
 AliGenInfoTask.cxx:513
 AliGenInfoTask.cxx:514
 AliGenInfoTask.cxx:515
 AliGenInfoTask.cxx:516
 AliGenInfoTask.cxx:517
 AliGenInfoTask.cxx:518
 AliGenInfoTask.cxx:519
 AliGenInfoTask.cxx:520
 AliGenInfoTask.cxx:521
 AliGenInfoTask.cxx:522
 AliGenInfoTask.cxx:523
 AliGenInfoTask.cxx:524
 AliGenInfoTask.cxx:525
 AliGenInfoTask.cxx:526
 AliGenInfoTask.cxx:527
 AliGenInfoTask.cxx:528
 AliGenInfoTask.cxx:529
 AliGenInfoTask.cxx:530
 AliGenInfoTask.cxx:531
 AliGenInfoTask.cxx:532
 AliGenInfoTask.cxx:533
 AliGenInfoTask.cxx:534
 AliGenInfoTask.cxx:535
 AliGenInfoTask.cxx:536
 AliGenInfoTask.cxx:537
 AliGenInfoTask.cxx:538
 AliGenInfoTask.cxx:539
 AliGenInfoTask.cxx:540
 AliGenInfoTask.cxx:541