ROOT logo
#include "AliOADBPhysicsSelection.h"
#include "TList.h"
#include "TString.h"
#include "TObjString.h"
#include "AliLog.h"
#include "TBrowser.h"
#include "TFolder.h"
#include "TIterator.h"
#include <iostream>

using namespace std;

ClassImp(AliOADBPhysicsSelection)


AliOADBPhysicsSelection::AliOADBPhysicsSelection() : 
TNamed("AliOADBPhysicsSelection", "OADB object for the physics selection"), fNtriggerBits(NTRIGGERBITS), fNtriggerLogics(NTRIGGERLOGICS),fCollTrigClasses(0),fBGTrigClasses(0),fHardwareTrigger(0),fOfflineTrigger(0),fBeamSide(0)
{
  // default ctor
  
}
AliOADBPhysicsSelection::AliOADBPhysicsSelection(const char* name) : 
  TNamed(name, "OADB object for the physics selection"), fNtriggerBits(NTRIGGERBITS), fNtriggerLogics(NTRIGGERLOGICS),fCollTrigClasses(0),fBGTrigClasses(0),fHardwareTrigger(0),fOfflineTrigger(0),fBeamSide(0)
{
  // ctor, better use this one
  Init();
}

void AliOADBPhysicsSelection::Init() {
  //Initialization of pointers

  if(fCollTrigClasses) {
    AliInfo("Already initialized");
    return;
  }

  fNtriggerBits = NTRIGGERBITS;
  fCollTrigClasses = new TList*[fNtriggerBits];
  fBGTrigClasses   = new TList*[fNtriggerBits];
  fHardwareTrigger = new TObjString[fNtriggerLogics];
  fOfflineTrigger  = new TObjString[fNtriggerLogics];  
  fBeamSide = new TMap;
  for(UInt_t ibit = 0; ibit < fNtriggerBits; ibit++){
    fCollTrigClasses[ibit] = new TList;
    fBGTrigClasses  [ibit] = new TList;
  }
  for(UInt_t ilogic = 0; ilogic < fNtriggerLogics; ilogic++){
    fHardwareTrigger[ilogic] = "";
    fOfflineTrigger [ilogic] = "";
  }
  

}

AliOADBPhysicsSelection::~AliOADBPhysicsSelection(){
  // dtor

  if(fHardwareTrigger) delete [] fHardwareTrigger;
  if(fOfflineTrigger)  delete [] fOfflineTrigger ;
  
  for(Int_t ibit = 0; ibit < NTRIGGERBITS; ibit++){
    
    if(fCollTrigClasses)
      if(fCollTrigClasses[ibit]) delete fCollTrigClasses[ibit];
    if(fBGTrigClasses)
      if(fBGTrigClasses  [ibit]) delete fBGTrigClasses  [ibit];
  }

}

AliOADBPhysicsSelection::AliOADBPhysicsSelection(const AliOADBPhysicsSelection& cont) :TNamed("AliOADBPhysicsSelection", "OADB object for the physics selection"), fNtriggerBits(NTRIGGERBITS), fNtriggerLogics(NTRIGGERLOGICS),fCollTrigClasses(0),fBGTrigClasses(0),fHardwareTrigger(0),fOfflineTrigger(0),fBeamSide(0) {
  // Copy ctor
  fCollTrigClasses = cont.fCollTrigClasses;
  fBGTrigClasses = cont.fBGTrigClasses;
  fHardwareTrigger = cont.fHardwareTrigger;
  fOfflineTrigger = cont.fOfflineTrigger;
  fBeamSide = cont.fBeamSide;
  
}

AliOADBPhysicsSelection& AliOADBPhysicsSelection::operator=(const AliOADBPhysicsSelection& other)  {
  //Assignment operator
  if(&other == this) return *this;
  TNamed::operator=(other);

  fCollTrigClasses = other.fCollTrigClasses;
  fBGTrigClasses = other.fBGTrigClasses;
  fHardwareTrigger = other.fHardwareTrigger;
  fOfflineTrigger = other.fOfflineTrigger;
  fBeamSide = other.fBeamSide;
  

  return *this;
}
 
void AliOADBPhysicsSelection::AddCollisionTriggerClass(AliVEvent::EOfflineTriggerTypes triggerMask, const char* className,const char * beamSide, UInt_t triggerLogic) {
  // add collision trigger class
  TObjString * tclass = new TObjString(Form("%s &%u *%u",ExpandTriggerString(className),triggerMask, triggerLogic));
  fCollTrigClasses[GetActiveBit(triggerMask)]->Add(tclass); 
  SetBeamSide(tclass->String().Data(),beamSide);
}
void AliOADBPhysicsSelection::AddBGTriggerClass       (AliVEvent::EOfflineTriggerTypes triggerMask, const char* className,const char * beamSide, UInt_t triggerLogic) 
{ 
  // add bg trigger class
  TObjString * tclass = new TObjString(Form("%s &%u *%u",ExpandTriggerString(className),triggerMask, triggerLogic));
  fBGTrigClasses  [GetActiveBit(triggerMask)]->Add(tclass);
  SetBeamSide(tclass->String().Data(),beamSide);
}

const TString AliOADBPhysicsSelection::GetBeamSide (const char * trigger)  {
  // Associate beam side to trigger class name
  TObjString * cname = new TObjString(trigger);
  CleanKey(cname->String());  
  static TString retValue="";
  retValue = ((TObjString*)fBeamSide->GetValue(cname->String().Data())) ?  
    ((TObjString*)fBeamSide->GetValue(cname->String().Data()))->String() : "" ;
  delete cname;
  return retValue;
}
void AliOADBPhysicsSelection::SetBeamSide (const char * className, const char * side)
{ 
  // return beam side
  TObjString * cname = new TObjString(className);
  CleanKey(cname->String());
  fBeamSide->Add(new TObjString(cname->String().Data()), new TObjString(side));
  delete cname;
}

void AliOADBPhysicsSelection::CleanKey(TString & str) {

  //  Remove all wite spaces and "goodies" of the trigger class string (bx ids, trigger logic...)
  if(str.Index("*")>0)
    str.Remove(str.Index("*")); // keep only the class name (no bx, offline trigger...)   
  if(str.Index("#")>0)
    str.Remove(str.Index("#")); // keep only the class name (no bx, offline trigger...)   
  if(str.Index("&")>0)
    str.Remove(str.Index("&")); // keep only the class name (no bx, offline trigger...)   
  str.ReplaceAll(" ","");

}
 
// Getters

// FIXME: decide about these getters
// TList * AliOADBPhysicsSelection::GetCollTrigClass(AliVEvent::EOfflineTriggerTypes trig) const { 
//   // Returns list of collision trigger classes for the requested bits
//   return GetTrigClass(trig,fCollTrigClasses);
// }

// TList * AliOADBPhysicsSelection::GetBGTrigClass(AliVEvent::EOfflineTriggerTypes trig) const { 
//   // Returns list of background trigger classes for the requested bits
//   return GetTrigClass(trig,fBGTrigClasses);
// }

// TList * AliOADBPhysicsSelection::GetTrigClass(AliVEvent::EOfflineTriggerTypes trig, TList ** listClasses) const { 
//   // Returns list of trigger classes for the requested bits

//   TList * list= new TList;  
//   // Check which bits are on and build the final list
//   for(UInt_t ibit = 0; ibit < fNtriggerBits; ibit++){
//     if ((trig&(0x1<<ibit))) {
//       if(listClasses[ibit]) list->AddAll(listClasses[ibit]);
//       else AliError(Form("List %d not initialized?",ibit));
//     }
//   }
  
//   return list;
// }

void AliOADBPhysicsSelection::Print(Option_t* option) const {

  for(UInt_t ibit = 0; ibit < fNtriggerBits; ibit++){
    cout << "Bit " << ibit << endl;
    
    fCollTrigClasses[ibit]->Print(option);
    fBGTrigClasses[ibit]->Print(option);
    cout << "HW trig " << fHardwareTrigger[ibit].String().Data() << endl;
    cout << "Offline trig " << fHardwareTrigger[ibit].String().Data() << endl;
    
  }
  cout << "Beams: " << endl;
  fBeamSide->Print();

}


void AliOADBPhysicsSelection::Browse(TBrowser *b)
{
   // Browse this object.
   // If b=0, there is no Browse call TObject::Browse(0) instead.
   //         This means TObject::Inspect() will be invoked indirectly
  static TFolder  ** bitFolders = 0;
  if(!bitFolders) {
    bitFolders = new TFolder*[fNtriggerBits];
    for(UInt_t ibit = 0; ibit < fNtriggerBits; ibit++){
      bitFolders[ibit] = 0;
    }
    
  }

  if (b) {
    for(UInt_t ibit = 0; ibit < fNtriggerBits; ibit++){
      if(bitFolders[ibit]) delete bitFolders[ibit];
      bitFolders[ibit] = new TFolder (Form("Bit %2.2d", ibit), "Trigger bit folder");
      bitFolders[ibit]->SetOwner(); // Delete also the TObjString when deleting the folder
      for(UInt_t ilogic = 0; ilogic < fNtriggerLogics; ilogic++){
	if(GetHardwareTrigger(ilogic) != "" || 	GetOfflineTrigger(ilogic) != "")  {
	  bitFolders[ibit]->Add(new TObjString(Form("Hardware Trig    [*%d][%s]",ilogic,GetHardwareTrigger(ilogic).Data())));
	  bitFolders[ibit]->Add(new TObjString(Form("Offline  Trig    [*%d][%s]",ilogic,GetOfflineTrigger(ilogic).Data())));      
	}
      }
      
      TIterator *itColl = fCollTrigClasses[ibit]->MakeIterator();
      TObjString * coll = 0;

      while ((coll = (TObjString*)itColl->Next())) {
	bitFolders[ibit]->Add(new TObjString(Form("Collision Class  [%s] [%s]", coll->String().Data(), 
						  GetBeamSide(coll->String().Data()).Data())));
      }
      delete itColl;

      TIterator *itBG = fBGTrigClasses[ibit]->MakeIterator();
      TObjString * bg = 0;
      while ((bg = (TObjString*)itBG->Next())) {
	bitFolders[ibit]->Add(new TObjString(Form("Background Class [%s] [%s]", bg->String().Data(), 
						  GetBeamSide(bg->String().Data()).Data())));
      }
      delete itBG;

      b->Add(bitFolders[ibit]);

    }    
  }     
   else
      TObject::Browse(b);
}

UInt_t AliOADBPhysicsSelection::GetActiveBit(UInt_t mask) {
  // Returns the active bit index in the mask
  // Assumes only one bit is on.
  // If more than one bit is lit, prints an error and returns the first.
  // If no bit is on, prints an error and returns 0

  const Int_t kNBitsToCheck = 29;

  //  Int_t nbit = sizeof(mask)*8;
  Int_t nbit = kNBitsToCheck;
  Int_t activeBit = -1;
  for(Int_t ibit = 0; ibit < nbit; ibit++){
    if ( mask & (0x1 << ibit) ) {
      if (activeBit == -1) activeBit = ibit;
      else Printf("ERROR (AliTriggerAnalysis::GetActiveBit): More than one bit is on in this mask 0x%x", mask);
    }
  }
  if (activeBit == -1) {
    Printf("ERROR (AliTriggerAnalysis::GetActiveBit): No bit is on");
    activeBit=0;
  }

  return activeBit;

}

const char* AliOADBPhysicsSelection::ExpandTriggerString(const char* className)
{
  // expands [] syntax
  // E.g. +CVHN-B-[NOPF|PF]-[ALL|CENT]NOTRD goes to +CVHN-B-NOPF-ALLNOTRD,CVHN-B-NOPF-CENTNOTRD,CVHN-B-PF-ALLNOTRD,CVHN-B-PF-CENTNOTRD
  
  static TString str;
  str = className;
  TObjArray* triggers = str.Tokenize(" ");
  for (Int_t j=0; j<triggers->GetEntries(); j++)
  {
    str = triggers->At(j)->GetName();
    str = str(1, str.Length());
    
    TList list;
    list.SetOwner();

    TObjArray* triggers2 = str.Tokenize(",");
    for (Int_t k=0; k<triggers2->GetEntries(); k++)
      list.Add(new TObjString(triggers2->At(k)->GetName()));
    delete triggers2;
    
//     list.Print();
    
    while (1)
    {
      Int_t i=0;
      for (i=0; i<list.GetEntries(); i++)
      {
	str = list.At(i)->GetName();
      
	Int_t begin = str.Index("[");
	Int_t end = str.Index("]");
	if (begin >= 0 && end >= 0)
	{
	  TString before = str(0, begin);
	  TString after = str(end+1, str.Length());
	  TString tokens = str(begin+1, end-begin-1);
  // 	Printf("%s %s %s", before.Data(), tokens.Data(), after.Data());
	  Int_t pos = 0;
	  while (tokens.Index("|", pos) >= 0)
	  {
	    list.Add(new TObjString(before + tokens(pos, tokens.Index("|", pos) - pos) + after));
	    pos = tokens.Index("|", pos) + 1;
	  }
	  list.Add(new TObjString(before + tokens(pos, tokens.Length()) + after));
	  delete list.RemoveAt(i);
	  
  // 	list.Print();
	  i=-1;
	}
      }

      str = "";
      for (i=0; i<list.GetEntries(); i++)
      {
	str += list.At(i)->GetName();
	str += ",";
      }
      str = str(0, str.Length() - 1);
      break;
    }
      
    TString& target = ((TObjString*) triggers->At(j))->String();
    target.Form("%c%s", target[0], str.Data());
  }
  
  str = "";
  for (Int_t j=0; j<triggers->GetEntries(); j++)
  {
    str += triggers->At(j)->GetName();
    str += " ";
  }
  str = str(0, str.Length() - 1);

  delete triggers;
  if (strcmp(className, str.Data()))
    Printf("AliOADBPhysicsSelection::ExpandTriggerString: In: <%s> Out: <%s>", className, str.Data());
  return str;
}
 AliOADBPhysicsSelection.cxx:1
 AliOADBPhysicsSelection.cxx:2
 AliOADBPhysicsSelection.cxx:3
 AliOADBPhysicsSelection.cxx:4
 AliOADBPhysicsSelection.cxx:5
 AliOADBPhysicsSelection.cxx:6
 AliOADBPhysicsSelection.cxx:7
 AliOADBPhysicsSelection.cxx:8
 AliOADBPhysicsSelection.cxx:9
 AliOADBPhysicsSelection.cxx:10
 AliOADBPhysicsSelection.cxx:11
 AliOADBPhysicsSelection.cxx:12
 AliOADBPhysicsSelection.cxx:13
 AliOADBPhysicsSelection.cxx:14
 AliOADBPhysicsSelection.cxx:15
 AliOADBPhysicsSelection.cxx:16
 AliOADBPhysicsSelection.cxx:17
 AliOADBPhysicsSelection.cxx:18
 AliOADBPhysicsSelection.cxx:19
 AliOADBPhysicsSelection.cxx:20
 AliOADBPhysicsSelection.cxx:21
 AliOADBPhysicsSelection.cxx:22
 AliOADBPhysicsSelection.cxx:23
 AliOADBPhysicsSelection.cxx:24
 AliOADBPhysicsSelection.cxx:25
 AliOADBPhysicsSelection.cxx:26
 AliOADBPhysicsSelection.cxx:27
 AliOADBPhysicsSelection.cxx:28
 AliOADBPhysicsSelection.cxx:29
 AliOADBPhysicsSelection.cxx:30
 AliOADBPhysicsSelection.cxx:31
 AliOADBPhysicsSelection.cxx:32
 AliOADBPhysicsSelection.cxx:33
 AliOADBPhysicsSelection.cxx:34
 AliOADBPhysicsSelection.cxx:35
 AliOADBPhysicsSelection.cxx:36
 AliOADBPhysicsSelection.cxx:37
 AliOADBPhysicsSelection.cxx:38
 AliOADBPhysicsSelection.cxx:39
 AliOADBPhysicsSelection.cxx:40
 AliOADBPhysicsSelection.cxx:41
 AliOADBPhysicsSelection.cxx:42
 AliOADBPhysicsSelection.cxx:43
 AliOADBPhysicsSelection.cxx:44
 AliOADBPhysicsSelection.cxx:45
 AliOADBPhysicsSelection.cxx:46
 AliOADBPhysicsSelection.cxx:47
 AliOADBPhysicsSelection.cxx:48
 AliOADBPhysicsSelection.cxx:49
 AliOADBPhysicsSelection.cxx:50
 AliOADBPhysicsSelection.cxx:51
 AliOADBPhysicsSelection.cxx:52
 AliOADBPhysicsSelection.cxx:53
 AliOADBPhysicsSelection.cxx:54
 AliOADBPhysicsSelection.cxx:55
 AliOADBPhysicsSelection.cxx:56
 AliOADBPhysicsSelection.cxx:57
 AliOADBPhysicsSelection.cxx:58
 AliOADBPhysicsSelection.cxx:59
 AliOADBPhysicsSelection.cxx:60
 AliOADBPhysicsSelection.cxx:61
 AliOADBPhysicsSelection.cxx:62
 AliOADBPhysicsSelection.cxx:63
 AliOADBPhysicsSelection.cxx:64
 AliOADBPhysicsSelection.cxx:65
 AliOADBPhysicsSelection.cxx:66
 AliOADBPhysicsSelection.cxx:67
 AliOADBPhysicsSelection.cxx:68
 AliOADBPhysicsSelection.cxx:69
 AliOADBPhysicsSelection.cxx:70
 AliOADBPhysicsSelection.cxx:71
 AliOADBPhysicsSelection.cxx:72
 AliOADBPhysicsSelection.cxx:73
 AliOADBPhysicsSelection.cxx:74
 AliOADBPhysicsSelection.cxx:75
 AliOADBPhysicsSelection.cxx:76
 AliOADBPhysicsSelection.cxx:77
 AliOADBPhysicsSelection.cxx:78
 AliOADBPhysicsSelection.cxx:79
 AliOADBPhysicsSelection.cxx:80
 AliOADBPhysicsSelection.cxx:81
 AliOADBPhysicsSelection.cxx:82
 AliOADBPhysicsSelection.cxx:83
 AliOADBPhysicsSelection.cxx:84
 AliOADBPhysicsSelection.cxx:85
 AliOADBPhysicsSelection.cxx:86
 AliOADBPhysicsSelection.cxx:87
 AliOADBPhysicsSelection.cxx:88
 AliOADBPhysicsSelection.cxx:89
 AliOADBPhysicsSelection.cxx:90
 AliOADBPhysicsSelection.cxx:91
 AliOADBPhysicsSelection.cxx:92
 AliOADBPhysicsSelection.cxx:93
 AliOADBPhysicsSelection.cxx:94
 AliOADBPhysicsSelection.cxx:95
 AliOADBPhysicsSelection.cxx:96
 AliOADBPhysicsSelection.cxx:97
 AliOADBPhysicsSelection.cxx:98
 AliOADBPhysicsSelection.cxx:99
 AliOADBPhysicsSelection.cxx:100
 AliOADBPhysicsSelection.cxx:101
 AliOADBPhysicsSelection.cxx:102
 AliOADBPhysicsSelection.cxx:103
 AliOADBPhysicsSelection.cxx:104
 AliOADBPhysicsSelection.cxx:105
 AliOADBPhysicsSelection.cxx:106
 AliOADBPhysicsSelection.cxx:107
 AliOADBPhysicsSelection.cxx:108
 AliOADBPhysicsSelection.cxx:109
 AliOADBPhysicsSelection.cxx:110
 AliOADBPhysicsSelection.cxx:111
 AliOADBPhysicsSelection.cxx:112
 AliOADBPhysicsSelection.cxx:113
 AliOADBPhysicsSelection.cxx:114
 AliOADBPhysicsSelection.cxx:115
 AliOADBPhysicsSelection.cxx:116
 AliOADBPhysicsSelection.cxx:117
 AliOADBPhysicsSelection.cxx:118
 AliOADBPhysicsSelection.cxx:119
 AliOADBPhysicsSelection.cxx:120
 AliOADBPhysicsSelection.cxx:121
 AliOADBPhysicsSelection.cxx:122
 AliOADBPhysicsSelection.cxx:123
 AliOADBPhysicsSelection.cxx:124
 AliOADBPhysicsSelection.cxx:125
 AliOADBPhysicsSelection.cxx:126
 AliOADBPhysicsSelection.cxx:127
 AliOADBPhysicsSelection.cxx:128
 AliOADBPhysicsSelection.cxx:129
 AliOADBPhysicsSelection.cxx:130
 AliOADBPhysicsSelection.cxx:131
 AliOADBPhysicsSelection.cxx:132
 AliOADBPhysicsSelection.cxx:133
 AliOADBPhysicsSelection.cxx:134
 AliOADBPhysicsSelection.cxx:135
 AliOADBPhysicsSelection.cxx:136
 AliOADBPhysicsSelection.cxx:137
 AliOADBPhysicsSelection.cxx:138
 AliOADBPhysicsSelection.cxx:139
 AliOADBPhysicsSelection.cxx:140
 AliOADBPhysicsSelection.cxx:141
 AliOADBPhysicsSelection.cxx:142
 AliOADBPhysicsSelection.cxx:143
 AliOADBPhysicsSelection.cxx:144
 AliOADBPhysicsSelection.cxx:145
 AliOADBPhysicsSelection.cxx:146
 AliOADBPhysicsSelection.cxx:147
 AliOADBPhysicsSelection.cxx:148
 AliOADBPhysicsSelection.cxx:149
 AliOADBPhysicsSelection.cxx:150
 AliOADBPhysicsSelection.cxx:151
 AliOADBPhysicsSelection.cxx:152
 AliOADBPhysicsSelection.cxx:153
 AliOADBPhysicsSelection.cxx:154
 AliOADBPhysicsSelection.cxx:155
 AliOADBPhysicsSelection.cxx:156
 AliOADBPhysicsSelection.cxx:157
 AliOADBPhysicsSelection.cxx:158
 AliOADBPhysicsSelection.cxx:159
 AliOADBPhysicsSelection.cxx:160
 AliOADBPhysicsSelection.cxx:161
 AliOADBPhysicsSelection.cxx:162
 AliOADBPhysicsSelection.cxx:163
 AliOADBPhysicsSelection.cxx:164
 AliOADBPhysicsSelection.cxx:165
 AliOADBPhysicsSelection.cxx:166
 AliOADBPhysicsSelection.cxx:167
 AliOADBPhysicsSelection.cxx:168
 AliOADBPhysicsSelection.cxx:169
 AliOADBPhysicsSelection.cxx:170
 AliOADBPhysicsSelection.cxx:171
 AliOADBPhysicsSelection.cxx:172
 AliOADBPhysicsSelection.cxx:173
 AliOADBPhysicsSelection.cxx:174
 AliOADBPhysicsSelection.cxx:175
 AliOADBPhysicsSelection.cxx:176
 AliOADBPhysicsSelection.cxx:177
 AliOADBPhysicsSelection.cxx:178
 AliOADBPhysicsSelection.cxx:179
 AliOADBPhysicsSelection.cxx:180
 AliOADBPhysicsSelection.cxx:181
 AliOADBPhysicsSelection.cxx:182
 AliOADBPhysicsSelection.cxx:183
 AliOADBPhysicsSelection.cxx:184
 AliOADBPhysicsSelection.cxx:185
 AliOADBPhysicsSelection.cxx:186
 AliOADBPhysicsSelection.cxx:187
 AliOADBPhysicsSelection.cxx:188
 AliOADBPhysicsSelection.cxx:189
 AliOADBPhysicsSelection.cxx:190
 AliOADBPhysicsSelection.cxx:191
 AliOADBPhysicsSelection.cxx:192
 AliOADBPhysicsSelection.cxx:193
 AliOADBPhysicsSelection.cxx:194
 AliOADBPhysicsSelection.cxx:195
 AliOADBPhysicsSelection.cxx:196
 AliOADBPhysicsSelection.cxx:197
 AliOADBPhysicsSelection.cxx:198
 AliOADBPhysicsSelection.cxx:199
 AliOADBPhysicsSelection.cxx:200
 AliOADBPhysicsSelection.cxx:201
 AliOADBPhysicsSelection.cxx:202
 AliOADBPhysicsSelection.cxx:203
 AliOADBPhysicsSelection.cxx:204
 AliOADBPhysicsSelection.cxx:205
 AliOADBPhysicsSelection.cxx:206
 AliOADBPhysicsSelection.cxx:207
 AliOADBPhysicsSelection.cxx:208
 AliOADBPhysicsSelection.cxx:209
 AliOADBPhysicsSelection.cxx:210
 AliOADBPhysicsSelection.cxx:211
 AliOADBPhysicsSelection.cxx:212
 AliOADBPhysicsSelection.cxx:213
 AliOADBPhysicsSelection.cxx:214
 AliOADBPhysicsSelection.cxx:215
 AliOADBPhysicsSelection.cxx:216
 AliOADBPhysicsSelection.cxx:217
 AliOADBPhysicsSelection.cxx:218
 AliOADBPhysicsSelection.cxx:219
 AliOADBPhysicsSelection.cxx:220
 AliOADBPhysicsSelection.cxx:221
 AliOADBPhysicsSelection.cxx:222
 AliOADBPhysicsSelection.cxx:223
 AliOADBPhysicsSelection.cxx:224
 AliOADBPhysicsSelection.cxx:225
 AliOADBPhysicsSelection.cxx:226
 AliOADBPhysicsSelection.cxx:227
 AliOADBPhysicsSelection.cxx:228
 AliOADBPhysicsSelection.cxx:229
 AliOADBPhysicsSelection.cxx:230
 AliOADBPhysicsSelection.cxx:231
 AliOADBPhysicsSelection.cxx:232
 AliOADBPhysicsSelection.cxx:233
 AliOADBPhysicsSelection.cxx:234
 AliOADBPhysicsSelection.cxx:235
 AliOADBPhysicsSelection.cxx:236
 AliOADBPhysicsSelection.cxx:237
 AliOADBPhysicsSelection.cxx:238
 AliOADBPhysicsSelection.cxx:239
 AliOADBPhysicsSelection.cxx:240
 AliOADBPhysicsSelection.cxx:241
 AliOADBPhysicsSelection.cxx:242
 AliOADBPhysicsSelection.cxx:243
 AliOADBPhysicsSelection.cxx:244
 AliOADBPhysicsSelection.cxx:245
 AliOADBPhysicsSelection.cxx:246
 AliOADBPhysicsSelection.cxx:247
 AliOADBPhysicsSelection.cxx:248
 AliOADBPhysicsSelection.cxx:249
 AliOADBPhysicsSelection.cxx:250
 AliOADBPhysicsSelection.cxx:251
 AliOADBPhysicsSelection.cxx:252
 AliOADBPhysicsSelection.cxx:253
 AliOADBPhysicsSelection.cxx:254
 AliOADBPhysicsSelection.cxx:255
 AliOADBPhysicsSelection.cxx:256
 AliOADBPhysicsSelection.cxx:257
 AliOADBPhysicsSelection.cxx:258
 AliOADBPhysicsSelection.cxx:259
 AliOADBPhysicsSelection.cxx:260
 AliOADBPhysicsSelection.cxx:261
 AliOADBPhysicsSelection.cxx:262
 AliOADBPhysicsSelection.cxx:263
 AliOADBPhysicsSelection.cxx:264
 AliOADBPhysicsSelection.cxx:265
 AliOADBPhysicsSelection.cxx:266
 AliOADBPhysicsSelection.cxx:267
 AliOADBPhysicsSelection.cxx:268
 AliOADBPhysicsSelection.cxx:269
 AliOADBPhysicsSelection.cxx:270
 AliOADBPhysicsSelection.cxx:271
 AliOADBPhysicsSelection.cxx:272
 AliOADBPhysicsSelection.cxx:273
 AliOADBPhysicsSelection.cxx:274
 AliOADBPhysicsSelection.cxx:275
 AliOADBPhysicsSelection.cxx:276
 AliOADBPhysicsSelection.cxx:277
 AliOADBPhysicsSelection.cxx:278
 AliOADBPhysicsSelection.cxx:279
 AliOADBPhysicsSelection.cxx:280
 AliOADBPhysicsSelection.cxx:281
 AliOADBPhysicsSelection.cxx:282
 AliOADBPhysicsSelection.cxx:283
 AliOADBPhysicsSelection.cxx:284
 AliOADBPhysicsSelection.cxx:285
 AliOADBPhysicsSelection.cxx:286
 AliOADBPhysicsSelection.cxx:287
 AliOADBPhysicsSelection.cxx:288
 AliOADBPhysicsSelection.cxx:289
 AliOADBPhysicsSelection.cxx:290
 AliOADBPhysicsSelection.cxx:291
 AliOADBPhysicsSelection.cxx:292
 AliOADBPhysicsSelection.cxx:293
 AliOADBPhysicsSelection.cxx:294
 AliOADBPhysicsSelection.cxx:295
 AliOADBPhysicsSelection.cxx:296
 AliOADBPhysicsSelection.cxx:297
 AliOADBPhysicsSelection.cxx:298
 AliOADBPhysicsSelection.cxx:299
 AliOADBPhysicsSelection.cxx:300
 AliOADBPhysicsSelection.cxx:301
 AliOADBPhysicsSelection.cxx:302
 AliOADBPhysicsSelection.cxx:303
 AliOADBPhysicsSelection.cxx:304
 AliOADBPhysicsSelection.cxx:305
 AliOADBPhysicsSelection.cxx:306
 AliOADBPhysicsSelection.cxx:307
 AliOADBPhysicsSelection.cxx:308
 AliOADBPhysicsSelection.cxx:309
 AliOADBPhysicsSelection.cxx:310
 AliOADBPhysicsSelection.cxx:311
 AliOADBPhysicsSelection.cxx:312
 AliOADBPhysicsSelection.cxx:313
 AliOADBPhysicsSelection.cxx:314
 AliOADBPhysicsSelection.cxx:315
 AliOADBPhysicsSelection.cxx:316
 AliOADBPhysicsSelection.cxx:317
 AliOADBPhysicsSelection.cxx:318
 AliOADBPhysicsSelection.cxx:319
 AliOADBPhysicsSelection.cxx:320
 AliOADBPhysicsSelection.cxx:321
 AliOADBPhysicsSelection.cxx:322
 AliOADBPhysicsSelection.cxx:323
 AliOADBPhysicsSelection.cxx:324
 AliOADBPhysicsSelection.cxx:325
 AliOADBPhysicsSelection.cxx:326
 AliOADBPhysicsSelection.cxx:327
 AliOADBPhysicsSelection.cxx:328
 AliOADBPhysicsSelection.cxx:329
 AliOADBPhysicsSelection.cxx:330
 AliOADBPhysicsSelection.cxx:331
 AliOADBPhysicsSelection.cxx:332
 AliOADBPhysicsSelection.cxx:333
 AliOADBPhysicsSelection.cxx:334
 AliOADBPhysicsSelection.cxx:335
 AliOADBPhysicsSelection.cxx:336
 AliOADBPhysicsSelection.cxx:337
 AliOADBPhysicsSelection.cxx:338
 AliOADBPhysicsSelection.cxx:339
 AliOADBPhysicsSelection.cxx:340
 AliOADBPhysicsSelection.cxx:341
 AliOADBPhysicsSelection.cxx:342