ROOT logo
#if 0
  #include "$(ALICE_ROOT)/TPC/alles.h"
  #include "AliReader.h"
  #include "AliReaderKineTree.h"
  #include "AliReaderESDTree.h"
  #include "AliAODParticleCut.h"
  #include "AliAOD.h"
  #include "AliAODPairCut.h"
  #include "TSystem.h"
  #include "TObjString.h"
  #include "TString.h"
  #include "AliPDG.h"
#endif


void WriteAOD(Option_t* datatype, Int_t first = -1,Int_t last = -1,
                Option_t* processopt="TracksAndParticles",
                char *outfile = "AOD.root")
 {
//datatype defines type of data to be read
//  Kine  - analyzes Kine Tree: simulated particles
//  ESD
//  AOD

// default: TracksAndParticles - process both recontructed tracks and sim. particles corresponding to them 
//          Tracks - process only recontructed tracks
//          Particles - process only simulated particles

//Reads data from diroctories from first to last(including)
// For examples if first=3 and last=5 it reads from
//  ./3/
//  ./4/
//  ./5/
//if first or last is negative (or both), it reads from current directory
//
//these names I use when analysis is done directly from CASTOR files via RFIO

  Bool_t multcheck = kTRUE;

  const char* basedir=".";
  const char* serie="";
  const char* field = "";
  cout<<"WriteAOD.C: datatype is "<<datatype<<" dir is basedir"<<endl;
  // Dynamically link some shared libs                    
  
  cout<<"WriteAOD.C: Loading  ANALYSIS .....\n";
  gSystem->Load("$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET)/libANALYSIS");
  cout<<"WriteAOD.C: ..... Loaded\n";
  
  Int_t PID[11];

  PID[0]=kProton;
  PID[1]=kProtonBar;
  PID[2]=kKPlus;
  PID[3]=kKMinus;
  PID[4]=kPiPlus;
  PID[5]=kPiMinus;
  PID[6]=kElectron;
  PID[7]=kPositron;
  PID[8]=kMuonMinus;
  PID[9]=kMuonPlus;
  PID[10]=0;//Last must be 0!!!!!!!!!!!!!!!!!!
  
  Float_t PIDprob[11];
  PIDprob[0] = 0.5;
  PIDprob[1] = 0.5;
  PIDprob[2] = 0.5;
  PIDprob[3] = 0.5;
  PIDprob[4] = 0.5;
  PIDprob[5] = 0.5;
  PIDprob[6] = 0.5;
  PIDprob[7] = 0.5;
  PIDprob[8] = 0.5;
  PIDprob[9] = 0.5;
  PIDprob[10] = 0.5;
  /***********************************************************/
   
  AliReader* reader;
  Int_t kine = strcmp(datatype,"Kine");
  Int_t ESD = strcmp(datatype,"ESD");
  Int_t ESDMuon = strcmp(datatype,"ESDMuon");
  Int_t intern = strcmp(datatype,"AOD");

  if(!kine)
   {
    reader = new AliReaderKineTree();
    processopt="Particles"; //this reader by definition reads only simulated particles
    multcheck = kFALSE;
   }
  else if(!ESD)
   {
    AliReaderESD* esdreader = new AliReaderESD();
    esdreader->ReadSimulatedData(kTRUE);
    esdreader->SetNumberOfTrackPoints(5,30.);//5 points every 30 cm
    esdreader->SetITSTrackPoints(kTRUE);
    esdreader->SetClusterMap(kTRUE);
    
    reader = esdreader;
    multcheck = kTRUE;
   }

  else if(!intern)
   {
    AliReaderAOD* aodreader = new AliReaderAOD("AOD.root");
    if (strstr(processopt,"Particles"))
      aodreader->ReadSimulatedData(kTRUE);
    else
      aodreader->ReadSimulatedData(kFALSE);
    
    reader = aodreader;
    
    multcheck = kTRUE;
   }

  else if (!ESDMuon)
   {
     // set reader for ESD
     AliReaderESDTree* muonreader = new AliReaderESDTree("AliESDs.root");
     // active muon ESD reader
     muonreader->SetReadMuon(kTRUE);
     // disable central barrel (default = kTRUE)
     muonreader->SetReadCentralBarrel(kFALSE);
     // disable simulated data (not implemented yet)
     muonreader->ReadSimulatedData(kFALSE);

     reader = muonreader;
     multcheck = kFALSE;
   }
  else
   {
    cerr<<"Option "<<datatype<<"  not recognized. Exiting"<<endl;
    return;
   }

  TObjArray* dirs=0;
  if ( (first >= 0) && (last>=0) && ( (last-first)>=0 ) )
   {//read from many dirs dirs
     cout<<"WriteAOD.C: ..... Setting dirs first="<<first<<" last="<<last<<"\n";
     char buff[50];
     dirs = new TObjArray(last-first+1);
     dirs->SetOwner();
     for (Int_t i = first; i<=last; i++)
      { 
        sprintf(buff,"%s/%s/%s/%d",basedir,field,serie,i);
        TObjString *odir= new TObjString(buff);
        dirs->Add(odir);
      }
    }

  reader->SetDirs(dirs);

  AliAODParticleCut* readerpartcut= new AliAODParticleCut();

  Int_t l = 0;
  while (PID[l] != 0)
   {
     cout<<"WriteAOD.C: Adding PID  = "<<PID[l]<<" l = "<<l<<endl;
     readerpartcut->SetPID(PID[l]);
     AliAODParticleCut * pcut = (AliAODParticleCut*)readerpartcut->Clone();
     AliAODPIDCut* pidcut = new AliAODPIDCut(PID[l],PIDprob[l]);
     pcut->AddBasePartCut(pidcut);
     reader->AddParticleCut(pcut);//read this particle type with this cut
     delete pcut;
     l++;
   }
  
//   readerpartcut->SetPtRange(0.0,1.2);

   cout<<"WriteAOD.C:   P R O C S E S S I N G .....\n\n";
   AliReaderAOD::WriteAOD(reader,outfile,"AliAODParticle",multcheck);
   cout<<"\n\nWriteAOD.C:   F I N I S H E D\n";
   
   if (dirs) delete dirs;
   delete reader;
 }

 WriteAOD.C:1
 WriteAOD.C:2
 WriteAOD.C:3
 WriteAOD.C:4
 WriteAOD.C:5
 WriteAOD.C:6
 WriteAOD.C:7
 WriteAOD.C:8
 WriteAOD.C:9
 WriteAOD.C:10
 WriteAOD.C:11
 WriteAOD.C:12
 WriteAOD.C:13
 WriteAOD.C:14
 WriteAOD.C:15
 WriteAOD.C:16
 WriteAOD.C:17
 WriteAOD.C:18
 WriteAOD.C:19
 WriteAOD.C:20
 WriteAOD.C:21
 WriteAOD.C:22
 WriteAOD.C:23
 WriteAOD.C:24
 WriteAOD.C:25
 WriteAOD.C:26
 WriteAOD.C:27
 WriteAOD.C:28
 WriteAOD.C:29
 WriteAOD.C:30
 WriteAOD.C:31
 WriteAOD.C:32
 WriteAOD.C:33
 WriteAOD.C:34
 WriteAOD.C:35
 WriteAOD.C:36
 WriteAOD.C:37
 WriteAOD.C:38
 WriteAOD.C:39
 WriteAOD.C:40
 WriteAOD.C:41
 WriteAOD.C:42
 WriteAOD.C:43
 WriteAOD.C:44
 WriteAOD.C:45
 WriteAOD.C:46
 WriteAOD.C:47
 WriteAOD.C:48
 WriteAOD.C:49
 WriteAOD.C:50
 WriteAOD.C:51
 WriteAOD.C:52
 WriteAOD.C:53
 WriteAOD.C:54
 WriteAOD.C:55
 WriteAOD.C:56
 WriteAOD.C:57
 WriteAOD.C:58
 WriteAOD.C:59
 WriteAOD.C:60
 WriteAOD.C:61
 WriteAOD.C:62
 WriteAOD.C:63
 WriteAOD.C:64
 WriteAOD.C:65
 WriteAOD.C:66
 WriteAOD.C:67
 WriteAOD.C:68
 WriteAOD.C:69
 WriteAOD.C:70
 WriteAOD.C:71
 WriteAOD.C:72
 WriteAOD.C:73
 WriteAOD.C:74
 WriteAOD.C:75
 WriteAOD.C:76
 WriteAOD.C:77
 WriteAOD.C:78
 WriteAOD.C:79
 WriteAOD.C:80
 WriteAOD.C:81
 WriteAOD.C:82
 WriteAOD.C:83
 WriteAOD.C:84
 WriteAOD.C:85
 WriteAOD.C:86
 WriteAOD.C:87
 WriteAOD.C:88
 WriteAOD.C:89
 WriteAOD.C:90
 WriteAOD.C:91
 WriteAOD.C:92
 WriteAOD.C:93
 WriteAOD.C:94
 WriteAOD.C:95
 WriteAOD.C:96
 WriteAOD.C:97
 WriteAOD.C:98
 WriteAOD.C:99
 WriteAOD.C:100
 WriteAOD.C:101
 WriteAOD.C:102
 WriteAOD.C:103
 WriteAOD.C:104
 WriteAOD.C:105
 WriteAOD.C:106
 WriteAOD.C:107
 WriteAOD.C:108
 WriteAOD.C:109
 WriteAOD.C:110
 WriteAOD.C:111
 WriteAOD.C:112
 WriteAOD.C:113
 WriteAOD.C:114
 WriteAOD.C:115
 WriteAOD.C:116
 WriteAOD.C:117
 WriteAOD.C:118
 WriteAOD.C:119
 WriteAOD.C:120
 WriteAOD.C:121
 WriteAOD.C:122
 WriteAOD.C:123
 WriteAOD.C:124
 WriteAOD.C:125
 WriteAOD.C:126
 WriteAOD.C:127
 WriteAOD.C:128
 WriteAOD.C:129
 WriteAOD.C:130
 WriteAOD.C:131
 WriteAOD.C:132
 WriteAOD.C:133
 WriteAOD.C:134
 WriteAOD.C:135
 WriteAOD.C:136
 WriteAOD.C:137
 WriteAOD.C:138
 WriteAOD.C:139
 WriteAOD.C:140
 WriteAOD.C:141
 WriteAOD.C:142
 WriteAOD.C:143
 WriteAOD.C:144
 WriteAOD.C:145
 WriteAOD.C:146
 WriteAOD.C:147
 WriteAOD.C:148
 WriteAOD.C:149
 WriteAOD.C:150
 WriteAOD.C:151
 WriteAOD.C:152
 WriteAOD.C:153
 WriteAOD.C:154
 WriteAOD.C:155
 WriteAOD.C:156
 WriteAOD.C:157
 WriteAOD.C:158
 WriteAOD.C:159
 WriteAOD.C:160
 WriteAOD.C:161
 WriteAOD.C:162
 WriteAOD.C:163
 WriteAOD.C:164
 WriteAOD.C:165
 WriteAOD.C:166
 WriteAOD.C:167
 WriteAOD.C:168
 WriteAOD.C:169
 WriteAOD.C:170
 WriteAOD.C:171
 WriteAOD.C:172
 WriteAOD.C:173
 WriteAOD.C:174
 WriteAOD.C:175
 WriteAOD.C:176
 WriteAOD.C:177