ROOT logo
#include "AliAODExtension.h"

//-------------------------------------------------------------------------
//     Support class for AOD extensions. This is created by the user analysis
//     that requires a separate file for some AOD branches. The name of the 
//     AliAODExtension object is the file name where the AOD branches will be
//     stored.
//-------------------------------------------------------------------------

#include "AliAODBranchReplicator.h"
#include "AliAODEvent.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include "Riostream.h"
#include "TDirectory.h"
#include "TFile.h"
#include "TList.h"
#include "TMap.h"
#include "TMap.h"
#include "TObjString.h"
#include "TROOT.h"
#include "TString.h"
#include "TTree.h"

using std::endl;
using std::cout;
ClassImp(AliAODExtension)

//______________________________________________________________________________
AliAODExtension::AliAODExtension() : TNamed(), 
fAODEvent(0), fTreeE(0), fFileE(0), fNtotal(0), fNpassed(0), 
fSelected(kFALSE), fTreeBuffSize(30000000), fMemCountAOD(0),
fRepFiMap(0x0), fRepFiList(0x0), fEnableReferences(kTRUE), fObjectList(0)
{
  // default ctor
}

//______________________________________________________________________________
AliAODExtension::AliAODExtension(const char* name, const char* title, Bool_t isfilter)
:TNamed(name,title), 
fAODEvent(0), 
fTreeE(0), 
fFileE(0), 
fNtotal(0), 
fNpassed(0),
fSelected(kFALSE),
fTreeBuffSize(30000000),
fMemCountAOD(0),
fRepFiMap(0x0),
fRepFiList(0x0),
fEnableReferences(kTRUE),
fObjectList(0x0)
{
  // Constructor.
  if (isfilter) {
    TObject::SetBit(kFilteredAOD);
    printf("####### Added AOD filter %s\n", name);
  } else printf("####### Added AOD extension %s\n", name);
  KeepUnspecifiedBranches();
}   

//______________________________________________________________________________
AliAODExtension::~AliAODExtension()
{
  // Destructor.
  if(fFileE){
    // is already handled in TerminateIO
    fFileE->Close();
    delete fFileE;
    fTreeE = 0;
    fAODEvent = 0;
  }
  if (fTreeE) delete fTreeE;
  if (fRepFiMap) fRepFiMap->DeleteAll();
  delete fRepFiMap; // the map is owner
  delete fRepFiList; // the list is not
  delete fObjectList; // not owner
}

//______________________________________________________________________________
void AliAODExtension::AddBranch(const char* cname, void* addobj)
{
  // Add a new branch to the aod 
  
  if (!fAODEvent) {
    char type[20];
    gROOT->ProcessLine(Form("TString s_tmp; AliAnalysisManager::GetAnalysisManager()->GetAnalysisTypeString(s_tmp); sprintf((char*)%p, \"%%s\", s_tmp.Data());", type));
    Init(type);
  }
  TDirectory *owd = gDirectory;
  if (fFileE) {
    fFileE->cd();
  }
  char** apointer = (char**) addobj;
  TObject* obj = (TObject*) *apointer;
  
  fAODEvent->AddObject(obj);
  
  TString bname(obj->GetName());
  
  if (!fTreeE->FindBranch(bname.Data())) 
  {
    Bool_t acceptAdd(kTRUE);
    
    if ( TestBit(kDropUnspecifiedBranches) )
    {
      // check that this branch is in our list of specified ones...
      // otherwise do not add it !
      TIter next(fRepFiMap);
      TObjString* p;
      
      acceptAdd=kFALSE;
      
      while ( ( p = static_cast<TObjString*>(next()) ) && !acceptAdd )
      {
        if ( p->String() == bname ) acceptAdd=kTRUE;
      }
    }
    
    if ( acceptAdd ) 
    {
      // Do the same as if we book via 
      // TTree::Branch(TCollection*)
      
      fObjectList->Add(obj);

      const Int_t kSplitlevel = 99; // default value in TTree::Branch()
      const Int_t kBufsize = 32000; // default value in TTree::Branch()
      
      fTreeE->Bronch(bname.Data(), cname, 
                     fAODEvent->GetList()->GetObjectRef(obj),
                     kBufsize, kSplitlevel - 1);
    }
  }
  owd->cd();
}

//______________________________________________________________________________
Bool_t AliAODExtension::FinishEvent()
{
  // Fill current event.
  fNtotal++;
  if (!IsFilteredAOD()) {
    fAODEvent->MakeEntriesReferencable();
    FillTree();
    return kTRUE;
  }  
  // Filtered AOD. Fill only if event is selected.
  if (!fSelected) return kTRUE;
  
  TIter next(fRepFiList);
  
  AliAODBranchReplicator* repfi;
  
  while ( ( repfi = static_cast<AliAODBranchReplicator*>(next()) ) )
  {
    repfi->ReplicateAndFilter(*fAODEvent);
  }
  fNpassed++;
  FillTree();
  fSelected = kFALSE; // so that next event will not be selected unless demanded
  return kTRUE;
}  

//______________________________________________________________________________
void AliAODExtension::FillTree() 
{
  //
  //   Fill AOD extension tree and check AutoFlush settings
  //
  
  Long64_t nbf = fTreeE->Fill();
  
  // Check buffer size and set autoflush if fTreeBuffSize is reached
  if (fTreeBuffSize>0 && fTreeE->GetAutoFlush()<0 && 
      (fMemCountAOD += nbf)>fTreeBuffSize ) { // default limit is still not reached
    nbf = fTreeE->GetZipBytes();
    if (nbf>0) nbf = -nbf;
    else       nbf = fTreeE->GetEntries();
    fTreeE->SetAutoFlush(nbf);
    AliInfo(Form("Calling fTreeE->SetAutoFlush(%lld) | W:%lld T:%lld Z:%lld", 
		 nbf,fMemCountAOD,fTreeE->GetTotBytes(),fTreeE->GetZipBytes()));  
    
  }
}

//______________________________________________________________________________
Bool_t AliAODExtension::Init(Option_t *option)
{
  // Initialize IO.
  
  AliCodeTimerAuto(GetName(),0);
  
  if(!fAODEvent) 
  {
    fAODEvent = new AliAODEvent();    
  }
  
  TDirectory *owd = gDirectory;
  TString opt(option);
  opt.ToLower();
  
  if (opt.Contains("proof")) 
  {
    // proof
    // Merging via files. Need to access analysis manager via interpreter.
    gROOT->ProcessLine(Form("AliAnalysisDataContainer *c_common_out = AliAnalysisManager::GetAnalysisManager()->GetCommonOutputContainer();"));
    gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->OpenProofFile(c_common_out, \"RECREATE\", \"%s\");", fName.Data()));
    fFileE = gFile;
  } 
  else 
  {
    fFileE = new TFile(GetName(), "RECREATE");
  }  
  fTreeE = new TTree("aodTree", "AliAOD tree");
  
  delete fObjectList;
  fObjectList = new TList;
  fObjectList->SetOwner(kFALSE); // be explicit we're not the owner...
  TList* inputList = fAODEvent->GetList();
  TIter next(inputList);
  TObject* o;
  
  while ( ( o = next() ) )
  {
    // Loop on the objects that are within the main AOD, and see what to do with them :
    // - transmit them to our AOD as they are
    // - filter them (by means of an AliAODBranchReplicator)
    // - drop them completely
    
    Bool_t mustKeep(kFALSE);
    
    TString test(o->ClassName());
    test.ToUpper();
    // check if there is a replicator for the header
    Bool_t headerHasReplicator = fRepFiMap && (fRepFiMap->FindObject(o->GetName())!=0x0);
    if (test.BeginsWith("ALIAODHEADER") && !headerHasReplicator)
    {
      // do not allow to drop header branch
      mustKeep=kTRUE;
    }
    
    if ( fRepFiMap && !mustKeep )
    {
      // we have some replicators, so let's see what the relevant one decides about this object
      TObject* specified = fRepFiMap->FindObject(o->GetName()); // FindObject finds key=o->GetName() in the map
      if (specified)
      {
        AliAODBranchReplicator* repfi = dynamic_cast<AliAODBranchReplicator*>(fRepFiMap->GetValue(o->GetName())); // GetValue gets the replicator corresponding to key=o->GetName()
        if ( repfi ) 
        {        
          TList* replicatedList = repfi->GetList();
          if (replicatedList)
          {
            AliAODEvent::AssignIDtoCollection(replicatedList);
            TIter nextRep(replicatedList);
            TObject* objRep;
            while ( ( objRep = nextRep() ) )
            {
              if ( !fObjectList->FindObject(objRep) ) // insure we're not adding several times the same object
              {                
                fObjectList->Add(objRep);                  
              }
            }
          }
          else
          {
            AliError(Form("replicatedList from %s is null !",repfi->GetName()));
          }
        }
      }
      else
      {
        if ( !TestBit(kDropUnspecifiedBranches) ) 
        {
          // object o will be transmitted to the output AOD, unchanged
          fObjectList->Add(o);
        }
      }
    } 
    else
    {
      // no replicator, so decide based on the policy about dropping unspecified branches
      if ( mustKeep || !TestBit(kDropUnspecifiedBranches) )
      {
        // object o will be transmitted to the output AOD, unchanged
        fObjectList->Add(o);
      }
    }
  }
    
  if (fEnableReferences) 
  {
    fTreeE->BranchRef();    
  }
    
  fTreeE->Branch(fObjectList);
  
  owd->cd();
  
  return kTRUE;
}

//______________________________________________________________________________
void AliAODExtension::Print(Option_t* opt) const
{
  // Print info about this extension
  
  cout << opt << Form("%s - %s - %s - aod %p",IsFilteredAOD() ? "FilteredAOD" : "Extension",
                      GetName(),GetTitle(),GetAOD()) << endl;
  if ( !fEnableReferences ) 
  {
    cout << opt << opt << "References are disabled ! Hope you know what you are doing !" << endl;
  }
  if ( TestBit(kDropUnspecifiedBranches) )
  {
    cout << opt << opt << "All branches not explicitely specified will be dropped" << endl;
  }
  
  TIter next(fRepFiMap);
  TObjString* s;
  
  while ( ( s = static_cast<TObjString*>(next()) ) )
  {
    AliAODBranchReplicator* br = static_cast<AliAODBranchReplicator*>(fRepFiMap->GetValue(s->String().Data()));
    
    cout << opt << opt << "Branch " << s->String();
    if (br)
    {
      cout << " will be filtered by class " << br->ClassName();
    }
    else
    {
      cout << " will be transmitted as is";
    }
    cout << endl;
  }
}

//______________________________________________________________________________
void AliAODExtension::SetEvent(AliAODEvent* event)
{
  // Connects to an external event
  if (!IsFilteredAOD()) {
    Error("SetEvent", "Not allowed to set external event for non filtered AOD's");   
    return;
  }
  fAODEvent = event;
}

//______________________________________________________________________________
void AliAODExtension::AddAODtoTreeUserInfo()
{
  // Add aod event to tree user info
  
  if (!fTreeE) return;
  
  AliAODEvent* aodEvent(fAODEvent);
  
  if ( IsFilteredAOD() )
  {
    // cannot attach fAODEvent (which is shared with our AliAODHandler mother)
    // so we create a custom (empty) AliAODEvent 
    // Has also the advantage we can specify only the list of objects
    // that are actually there in this filtered aod
    //
    aodEvent = new AliAODEvent;
    TIter nextObj(fObjectList);
    TObject* o;
    while ( ( o = nextObj() ) ) 
    {
      aodEvent->AddObject(o);
    }    
  }

  TList *l = aodEvent->GetList();
  if (l) {
    for(int i = 0;i < l->GetEntries(); ++i){
      TObject *pObject = l->At(i);
      if(pObject->InheritsFrom(TClonesArray::Class())){
       ((TClonesArray*)pObject)->Delete();
      } else if(!pObject->InheritsFrom(TCollection::Class())){
       TClass *pClass = TClass::GetClass(pObject->ClassName());
       if (pClass && pClass->GetListOfMethods()->FindObject("Clear")) {
         AliDebug(1, Form("Clear for object %s class %s", pObject->GetName(), pObject->ClassName()));
         pObject->Clear();
       }
      } else {
         AliWarning(Form("No method to clear for object %s class %s", pObject->GetName(), pObject->ClassName()));
      }
    }
  }
  fTreeE->GetUserInfo()->Add(aodEvent);
}

//______________________________________________________________________________
Bool_t AliAODExtension::TerminateIO()
{
  // Terminate IO
  if (TObject::TestBit(kFilteredAOD))
    printf("AOD Filter %s: events processed: %d   passed: %d\n", GetName(), fNtotal, fNpassed);
  else
    printf("AOD extension %s: events processed: %d\n", GetName(), fNtotal);
  if (fFileE) 
  {
    fFileE->Write();
    fFileE->Close();
    delete fFileE;
    fFileE = 0;
    fTreeE = 0;
    fAODEvent = 0;
  }
  return kTRUE;
}

//______________________________________________________________________________
void AliAODExtension::FilterBranch(const char* branchName, AliAODBranchReplicator* repfi)
{
  // Specify a filter/replicator for a given branch
  //
  // If repfi=0x0, this will disable the branch (in the output) completely.
  //
  // repfi is adopted by this class, i.e. user should not delete it.
  //
  // WARNING : branch name must be exact.
  //
  // See also the documentation for AliAODBranchReplicator class.
  //
  
  if (!fRepFiMap)
  {
    fRepFiMap = new TMap;
    fRepFiMap->SetOwnerKeyValue(kTRUE,kTRUE);
    fRepFiList = new TList;
    fRepFiList->SetOwner(kFALSE);
  }
  
  fRepFiMap->Add(new TObjString(branchName),repfi);
  
  if (repfi && !fRepFiList->FindObject(repfi))
  {
    // insure we get unique and non-null replicators in this list
    fRepFiList->Add(repfi);
  }
}

 AliAODExtension.cxx:1
 AliAODExtension.cxx:2
 AliAODExtension.cxx:3
 AliAODExtension.cxx:4
 AliAODExtension.cxx:5
 AliAODExtension.cxx:6
 AliAODExtension.cxx:7
 AliAODExtension.cxx:8
 AliAODExtension.cxx:9
 AliAODExtension.cxx:10
 AliAODExtension.cxx:11
 AliAODExtension.cxx:12
 AliAODExtension.cxx:13
 AliAODExtension.cxx:14
 AliAODExtension.cxx:15
 AliAODExtension.cxx:16
 AliAODExtension.cxx:17
 AliAODExtension.cxx:18
 AliAODExtension.cxx:19
 AliAODExtension.cxx:20
 AliAODExtension.cxx:21
 AliAODExtension.cxx:22
 AliAODExtension.cxx:23
 AliAODExtension.cxx:24
 AliAODExtension.cxx:25
 AliAODExtension.cxx:26
 AliAODExtension.cxx:27
 AliAODExtension.cxx:28
 AliAODExtension.cxx:29
 AliAODExtension.cxx:30
 AliAODExtension.cxx:31
 AliAODExtension.cxx:32
 AliAODExtension.cxx:33
 AliAODExtension.cxx:34
 AliAODExtension.cxx:35
 AliAODExtension.cxx:36
 AliAODExtension.cxx:37
 AliAODExtension.cxx:38
 AliAODExtension.cxx:39
 AliAODExtension.cxx:40
 AliAODExtension.cxx:41
 AliAODExtension.cxx:42
 AliAODExtension.cxx:43
 AliAODExtension.cxx:44
 AliAODExtension.cxx:45
 AliAODExtension.cxx:46
 AliAODExtension.cxx:47
 AliAODExtension.cxx:48
 AliAODExtension.cxx:49
 AliAODExtension.cxx:50
 AliAODExtension.cxx:51
 AliAODExtension.cxx:52
 AliAODExtension.cxx:53
 AliAODExtension.cxx:54
 AliAODExtension.cxx:55
 AliAODExtension.cxx:56
 AliAODExtension.cxx:57
 AliAODExtension.cxx:58
 AliAODExtension.cxx:59
 AliAODExtension.cxx:60
 AliAODExtension.cxx:61
 AliAODExtension.cxx:62
 AliAODExtension.cxx:63
 AliAODExtension.cxx:64
 AliAODExtension.cxx:65
 AliAODExtension.cxx:66
 AliAODExtension.cxx:67
 AliAODExtension.cxx:68
 AliAODExtension.cxx:69
 AliAODExtension.cxx:70
 AliAODExtension.cxx:71
 AliAODExtension.cxx:72
 AliAODExtension.cxx:73
 AliAODExtension.cxx:74
 AliAODExtension.cxx:75
 AliAODExtension.cxx:76
 AliAODExtension.cxx:77
 AliAODExtension.cxx:78
 AliAODExtension.cxx:79
 AliAODExtension.cxx:80
 AliAODExtension.cxx:81
 AliAODExtension.cxx:82
 AliAODExtension.cxx:83
 AliAODExtension.cxx:84
 AliAODExtension.cxx:85
 AliAODExtension.cxx:86
 AliAODExtension.cxx:87
 AliAODExtension.cxx:88
 AliAODExtension.cxx:89
 AliAODExtension.cxx:90
 AliAODExtension.cxx:91
 AliAODExtension.cxx:92
 AliAODExtension.cxx:93
 AliAODExtension.cxx:94
 AliAODExtension.cxx:95
 AliAODExtension.cxx:96
 AliAODExtension.cxx:97
 AliAODExtension.cxx:98
 AliAODExtension.cxx:99
 AliAODExtension.cxx:100
 AliAODExtension.cxx:101
 AliAODExtension.cxx:102
 AliAODExtension.cxx:103
 AliAODExtension.cxx:104
 AliAODExtension.cxx:105
 AliAODExtension.cxx:106
 AliAODExtension.cxx:107
 AliAODExtension.cxx:108
 AliAODExtension.cxx:109
 AliAODExtension.cxx:110
 AliAODExtension.cxx:111
 AliAODExtension.cxx:112
 AliAODExtension.cxx:113
 AliAODExtension.cxx:114
 AliAODExtension.cxx:115
 AliAODExtension.cxx:116
 AliAODExtension.cxx:117
 AliAODExtension.cxx:118
 AliAODExtension.cxx:119
 AliAODExtension.cxx:120
 AliAODExtension.cxx:121
 AliAODExtension.cxx:122
 AliAODExtension.cxx:123
 AliAODExtension.cxx:124
 AliAODExtension.cxx:125
 AliAODExtension.cxx:126
 AliAODExtension.cxx:127
 AliAODExtension.cxx:128
 AliAODExtension.cxx:129
 AliAODExtension.cxx:130
 AliAODExtension.cxx:131
 AliAODExtension.cxx:132
 AliAODExtension.cxx:133
 AliAODExtension.cxx:134
 AliAODExtension.cxx:135
 AliAODExtension.cxx:136
 AliAODExtension.cxx:137
 AliAODExtension.cxx:138
 AliAODExtension.cxx:139
 AliAODExtension.cxx:140
 AliAODExtension.cxx:141
 AliAODExtension.cxx:142
 AliAODExtension.cxx:143
 AliAODExtension.cxx:144
 AliAODExtension.cxx:145
 AliAODExtension.cxx:146
 AliAODExtension.cxx:147
 AliAODExtension.cxx:148
 AliAODExtension.cxx:149
 AliAODExtension.cxx:150
 AliAODExtension.cxx:151
 AliAODExtension.cxx:152
 AliAODExtension.cxx:153
 AliAODExtension.cxx:154
 AliAODExtension.cxx:155
 AliAODExtension.cxx:156
 AliAODExtension.cxx:157
 AliAODExtension.cxx:158
 AliAODExtension.cxx:159
 AliAODExtension.cxx:160
 AliAODExtension.cxx:161
 AliAODExtension.cxx:162
 AliAODExtension.cxx:163
 AliAODExtension.cxx:164
 AliAODExtension.cxx:165
 AliAODExtension.cxx:166
 AliAODExtension.cxx:167
 AliAODExtension.cxx:168
 AliAODExtension.cxx:169
 AliAODExtension.cxx:170
 AliAODExtension.cxx:171
 AliAODExtension.cxx:172
 AliAODExtension.cxx:173
 AliAODExtension.cxx:174
 AliAODExtension.cxx:175
 AliAODExtension.cxx:176
 AliAODExtension.cxx:177
 AliAODExtension.cxx:178
 AliAODExtension.cxx:179
 AliAODExtension.cxx:180
 AliAODExtension.cxx:181
 AliAODExtension.cxx:182
 AliAODExtension.cxx:183
 AliAODExtension.cxx:184
 AliAODExtension.cxx:185
 AliAODExtension.cxx:186
 AliAODExtension.cxx:187
 AliAODExtension.cxx:188
 AliAODExtension.cxx:189
 AliAODExtension.cxx:190
 AliAODExtension.cxx:191
 AliAODExtension.cxx:192
 AliAODExtension.cxx:193
 AliAODExtension.cxx:194
 AliAODExtension.cxx:195
 AliAODExtension.cxx:196
 AliAODExtension.cxx:197
 AliAODExtension.cxx:198
 AliAODExtension.cxx:199
 AliAODExtension.cxx:200
 AliAODExtension.cxx:201
 AliAODExtension.cxx:202
 AliAODExtension.cxx:203
 AliAODExtension.cxx:204
 AliAODExtension.cxx:205
 AliAODExtension.cxx:206
 AliAODExtension.cxx:207
 AliAODExtension.cxx:208
 AliAODExtension.cxx:209
 AliAODExtension.cxx:210
 AliAODExtension.cxx:211
 AliAODExtension.cxx:212
 AliAODExtension.cxx:213
 AliAODExtension.cxx:214
 AliAODExtension.cxx:215
 AliAODExtension.cxx:216
 AliAODExtension.cxx:217
 AliAODExtension.cxx:218
 AliAODExtension.cxx:219
 AliAODExtension.cxx:220
 AliAODExtension.cxx:221
 AliAODExtension.cxx:222
 AliAODExtension.cxx:223
 AliAODExtension.cxx:224
 AliAODExtension.cxx:225
 AliAODExtension.cxx:226
 AliAODExtension.cxx:227
 AliAODExtension.cxx:228
 AliAODExtension.cxx:229
 AliAODExtension.cxx:230
 AliAODExtension.cxx:231
 AliAODExtension.cxx:232
 AliAODExtension.cxx:233
 AliAODExtension.cxx:234
 AliAODExtension.cxx:235
 AliAODExtension.cxx:236
 AliAODExtension.cxx:237
 AliAODExtension.cxx:238
 AliAODExtension.cxx:239
 AliAODExtension.cxx:240
 AliAODExtension.cxx:241
 AliAODExtension.cxx:242
 AliAODExtension.cxx:243
 AliAODExtension.cxx:244
 AliAODExtension.cxx:245
 AliAODExtension.cxx:246
 AliAODExtension.cxx:247
 AliAODExtension.cxx:248
 AliAODExtension.cxx:249
 AliAODExtension.cxx:250
 AliAODExtension.cxx:251
 AliAODExtension.cxx:252
 AliAODExtension.cxx:253
 AliAODExtension.cxx:254
 AliAODExtension.cxx:255
 AliAODExtension.cxx:256
 AliAODExtension.cxx:257
 AliAODExtension.cxx:258
 AliAODExtension.cxx:259
 AliAODExtension.cxx:260
 AliAODExtension.cxx:261
 AliAODExtension.cxx:262
 AliAODExtension.cxx:263
 AliAODExtension.cxx:264
 AliAODExtension.cxx:265
 AliAODExtension.cxx:266
 AliAODExtension.cxx:267
 AliAODExtension.cxx:268
 AliAODExtension.cxx:269
 AliAODExtension.cxx:270
 AliAODExtension.cxx:271
 AliAODExtension.cxx:272
 AliAODExtension.cxx:273
 AliAODExtension.cxx:274
 AliAODExtension.cxx:275
 AliAODExtension.cxx:276
 AliAODExtension.cxx:277
 AliAODExtension.cxx:278
 AliAODExtension.cxx:279
 AliAODExtension.cxx:280
 AliAODExtension.cxx:281
 AliAODExtension.cxx:282
 AliAODExtension.cxx:283
 AliAODExtension.cxx:284
 AliAODExtension.cxx:285
 AliAODExtension.cxx:286
 AliAODExtension.cxx:287
 AliAODExtension.cxx:288
 AliAODExtension.cxx:289
 AliAODExtension.cxx:290
 AliAODExtension.cxx:291
 AliAODExtension.cxx:292
 AliAODExtension.cxx:293
 AliAODExtension.cxx:294
 AliAODExtension.cxx:295
 AliAODExtension.cxx:296
 AliAODExtension.cxx:297
 AliAODExtension.cxx:298
 AliAODExtension.cxx:299
 AliAODExtension.cxx:300
 AliAODExtension.cxx:301
 AliAODExtension.cxx:302
 AliAODExtension.cxx:303
 AliAODExtension.cxx:304
 AliAODExtension.cxx:305
 AliAODExtension.cxx:306
 AliAODExtension.cxx:307
 AliAODExtension.cxx:308
 AliAODExtension.cxx:309
 AliAODExtension.cxx:310
 AliAODExtension.cxx:311
 AliAODExtension.cxx:312
 AliAODExtension.cxx:313
 AliAODExtension.cxx:314
 AliAODExtension.cxx:315
 AliAODExtension.cxx:316
 AliAODExtension.cxx:317
 AliAODExtension.cxx:318
 AliAODExtension.cxx:319
 AliAODExtension.cxx:320
 AliAODExtension.cxx:321
 AliAODExtension.cxx:322
 AliAODExtension.cxx:323
 AliAODExtension.cxx:324
 AliAODExtension.cxx:325
 AliAODExtension.cxx:326
 AliAODExtension.cxx:327
 AliAODExtension.cxx:328
 AliAODExtension.cxx:329
 AliAODExtension.cxx:330
 AliAODExtension.cxx:331
 AliAODExtension.cxx:332
 AliAODExtension.cxx:333
 AliAODExtension.cxx:334
 AliAODExtension.cxx:335
 AliAODExtension.cxx:336
 AliAODExtension.cxx:337
 AliAODExtension.cxx:338
 AliAODExtension.cxx:339
 AliAODExtension.cxx:340
 AliAODExtension.cxx:341
 AliAODExtension.cxx:342
 AliAODExtension.cxx:343
 AliAODExtension.cxx:344
 AliAODExtension.cxx:345
 AliAODExtension.cxx:346
 AliAODExtension.cxx:347
 AliAODExtension.cxx:348
 AliAODExtension.cxx:349
 AliAODExtension.cxx:350
 AliAODExtension.cxx:351
 AliAODExtension.cxx:352
 AliAODExtension.cxx:353
 AliAODExtension.cxx:354
 AliAODExtension.cxx:355
 AliAODExtension.cxx:356
 AliAODExtension.cxx:357
 AliAODExtension.cxx:358
 AliAODExtension.cxx:359
 AliAODExtension.cxx:360
 AliAODExtension.cxx:361
 AliAODExtension.cxx:362
 AliAODExtension.cxx:363
 AliAODExtension.cxx:364
 AliAODExtension.cxx:365
 AliAODExtension.cxx:366
 AliAODExtension.cxx:367
 AliAODExtension.cxx:368
 AliAODExtension.cxx:369
 AliAODExtension.cxx:370
 AliAODExtension.cxx:371
 AliAODExtension.cxx:372
 AliAODExtension.cxx:373
 AliAODExtension.cxx:374
 AliAODExtension.cxx:375
 AliAODExtension.cxx:376
 AliAODExtension.cxx:377
 AliAODExtension.cxx:378
 AliAODExtension.cxx:379
 AliAODExtension.cxx:380
 AliAODExtension.cxx:381
 AliAODExtension.cxx:382
 AliAODExtension.cxx:383
 AliAODExtension.cxx:384
 AliAODExtension.cxx:385
 AliAODExtension.cxx:386
 AliAODExtension.cxx:387
 AliAODExtension.cxx:388
 AliAODExtension.cxx:389
 AliAODExtension.cxx:390
 AliAODExtension.cxx:391
 AliAODExtension.cxx:392
 AliAODExtension.cxx:393
 AliAODExtension.cxx:394
 AliAODExtension.cxx:395
 AliAODExtension.cxx:396
 AliAODExtension.cxx:397
 AliAODExtension.cxx:398
 AliAODExtension.cxx:399
 AliAODExtension.cxx:400
 AliAODExtension.cxx:401
 AliAODExtension.cxx:402
 AliAODExtension.cxx:403
 AliAODExtension.cxx:404
 AliAODExtension.cxx:405
 AliAODExtension.cxx:406
 AliAODExtension.cxx:407
 AliAODExtension.cxx:408
 AliAODExtension.cxx:409
 AliAODExtension.cxx:410
 AliAODExtension.cxx:411
 AliAODExtension.cxx:412
 AliAODExtension.cxx:413
 AliAODExtension.cxx:414
 AliAODExtension.cxx:415
 AliAODExtension.cxx:416
 AliAODExtension.cxx:417
 AliAODExtension.cxx:418
 AliAODExtension.cxx:419
 AliAODExtension.cxx:420
 AliAODExtension.cxx:421
 AliAODExtension.cxx:422
 AliAODExtension.cxx:423
 AliAODExtension.cxx:424
 AliAODExtension.cxx:425
 AliAODExtension.cxx:426
 AliAODExtension.cxx:427
 AliAODExtension.cxx:428
 AliAODExtension.cxx:429
 AliAODExtension.cxx:430
 AliAODExtension.cxx:431
 AliAODExtension.cxx:432
 AliAODExtension.cxx:433
 AliAODExtension.cxx:434
 AliAODExtension.cxx:435
 AliAODExtension.cxx:436
 AliAODExtension.cxx:437
 AliAODExtension.cxx:438
 AliAODExtension.cxx:439
 AliAODExtension.cxx:440
 AliAODExtension.cxx:441
 AliAODExtension.cxx:442
 AliAODExtension.cxx:443
 AliAODExtension.cxx:444
 AliAODExtension.cxx:445
 AliAODExtension.cxx:446