ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TFile.h>
#include <TTree.h>
#include <TMath.h>
#include <TPDGCode.h>
#include <TParticle.h>
#include <TDatabasePDG.h>
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODVertex.h"
#include "AliAODTrack.h"
#include "AliAODCluster.h"
#include "AliGenAmpt.h"
#include "AliPDG.h"
#endif

// function declarations
void SetVertexType(TParticle *part, AliAODVertex *vertex);
void SetChargeAndPID(Int_t pdgCode, AliAODTrack *track);
Int_t LoopOverSecondaries(TParticle *mother);
void genAmptAOD(Int_t nEvents,
                const char *outFileName = "AliAOD.root");

// global variables
AliAODEvent *aod = NULL;
AliStack *stack = NULL;

Int_t jVertices = 0;
Int_t jTracks = 0; 
Int_t jKinks = 0;
Int_t jV0s = 0;
Int_t jCascades = 0;
Int_t jMultis = 0;
Int_t nPos = 0;
Int_t nNeg = 0;

Int_t nGamma = 0;
Int_t nElectron = 0;
Int_t nPositron = 0;
Int_t nMuon = 0;
Int_t nAntiMuon = 0;
Int_t nProton = 0;
Int_t nAntiProton = 0;
Int_t nNeutron = 0;
Int_t nAntiNeutron = 0;
Int_t nPi0 = 0;
Int_t nPiMinus = 0;
Int_t nPiPlus = 0;
Int_t nK0 = 0;
Int_t nKPlus = 0;
Int_t nKMinus = 0;

// global arrays and pointers
Float_t p[3];
Float_t x[3];
Float_t *cov = NULL; // set to NULL because not provided
Float_t *pid = NULL; // set to NULL because not provided
AliAODVertex *primary = NULL; 
AliAODVertex *secondary = NULL;
AliAODTrack *currTrack = NULL;

void genAmptAOD(Int_t nEvents,
                const char *outFileName) 
{
  AliPDG::AddParticlesToPdgDataBase();
  TDatabasePDG::Instance();

  // create an AliAOD object 
  aod = new AliAODEvent();
  aod->CreateStdContent();

  // open the file
  TFile *outFile = TFile::Open(outFileName, "RECREATE");

  // create the tree
  TTree *aodTree = new TTree("aodTree", "AliAOD tree");
  aodTree->Branch(aod->GetList());

  // Run loader
  TFolder *folder = new TFolder("myfolder","myfolder");
  AliRunLoader* rl = new AliRunLoader(folder);
  rl->MakeHeader();
  rl->MakeStack();
  AliStack* stack = rl->Stack();
  AliHeader* rheader = rl->GetHeader();

  AliGenAmpt *genHi = new AliGenAmpt(-1);
  genHi->SetEnergyCMS(2760);
  genHi->SetReferenceFrame("CMS");
  genHi->SetProjectile("A", 208, 82);
  genHi->SetTarget    ("A", 208, 82);
  genHi->SetPtHardMin (5);
  genHi->SetImpactParameterRange(12.,30);
  genHi->SetJetQuenching(0); // enable jet quenching
  genHi->SetShadowing(1);    // enable shadowing
  genHi->SetDecaysOff(1);    // neutral pion and heavy particle decays switched off
  genHi->SetSpectators(1);   // track spectators 
  genHi->Init();
  genHi->SetStack(stack);

  // create events and fill them
  for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) {

    stack->Reset();
    genHi->Generate();
    rheader->Reset(0,iEvent);
    rheader->SetNprimary(stack->GetNprimary());
    rheader->SetNtrack(stack->GetNtrack());  
    rheader->SetStack(stack);
    stack->FinishEvent();

    cout << "Event " << iEvent+1 << "/" << nEvents;

    Int_t nTracks = stack->GetNtrack();
    Int_t nPrims = stack->GetNprimary();

    nPos = 0;
    nNeg = 0;
 
    nGamma = 0;
    nElectron = 0;
    nPositron = 0;
    nMuon = 0;
    nAntiMuon = 0;
    nProton = 0;
    nAntiProton = 0;
    nNeutron = 0;
    nAntiNeutron = 0;
    nPi0 = 0;
    nPiMinus = 0;
    nPiPlus = 0;
    nK0 = 0;
    nKPlus = 0;
    nKMinus = 0;

    // Access to the header
    AliAODHeader *header = aod->GetHeader();

    Double_t emEnergy[2] = {-999., -999.};

    // fill the header
    *header = AliAODHeader(123456,
			   0, // bunchX number
			   0, // orbit number
			   0, // period number
			   nTracks,
			   nPos,
			   nNeg,
			   -999, // mag. field
			   -999., // muon mag. field
			   -999., // centrality
			   -999., // ZDCN1Energy
			   -999., // ZDCP1Energy
			   -999., // ZDCN2Energy
			   -999., // ZDCP2Energy
			   emEnergy, // emEnergy
			   0, // TriggerMask
			   0, // TriggerCluster
			   0, // EventType
			   ""); // title
  
    // Access to the AOD container of vertices
    TClonesArray &vertices = *(aod->GetVertices());
    jVertices=0;
    jKinks=0;
    jV0s=0;
    jCascades=0;
    jMultis=0;

    // Access to the AOD container of tracks
    TClonesArray &tracks = *(aod->GetTracks());
    jTracks=0; 
 
    aod->ResetStd(nTracks, 1);

    // track loop
    for (Int_t iTrack = 0; iTrack < nPrims; ++iTrack) {
								
      TParticle *part = stack->Particle(iTrack);

      //if (part->IsPrimary()) { // this will exclude 'funny' primaries, too
      if (kTRUE) { // this won't
	p[0] = part->Px(); p[1] = part->Py(); p[2] = part->Pz();
	x[0] = part->Vx(); x[1] = part->Vy(); x[2] = part->Vz();
	
	if (iTrack == 0) {
	  // add primary vertex
	  primary = new(vertices[jVertices++])
	    AliAODVertex(x, NULL, -999., NULL, AliAODVertex::kPrimary);
	}
	
	// add primary tracks
	primary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID,
								0, // Label
								p,
								kTRUE,
								x,
								kFALSE,
								cov, 
								(Short_t)-99,
								0, // no ITSClusterMap
								pid,
								primary,
					                        kFALSE,  // no fit performed
								kFALSE, // no fit preformed
								AliAODTrack::kPrimary));
	currTrack = (AliAODTrack*)tracks.Last();
	SetChargeAndPID(part->GetPdgCode(), currTrack);
	if (currTrack->Charge() != -99) {
	  if (currTrack->Charge() > 0) {
	    nPos++;
	  } else if (currTrack->Charge() < 0) {
	    nNeg++;
	  }	    
	}
	
	LoopOverSecondaries(part);
      } 
    } // end of track loop
    
    header->SetRefMultiplicityPos(nPos);
    header->SetRefMultiplicityNeg(nNeg);
    
    cout << ":: primaries: " << nPrims << " secondaries: " << tracks.GetEntriesFast()-nPrims << 
      " (pos: " << nPos << ", neg: " << nNeg << "), vertices: " << vertices.GetEntriesFast() << 
      " (kinks: " << jKinks << ", V0: " << jV0s << ", cascades: " << jCascades << 
      ", multi: " << jMultis << ")" << endl;

    // fill the tree for this event
    aodTree->Fill();
  } // end of event loop

  aodTree->GetUserInfo()->Add(aod);
  
  // write the tree to the specified file
  outFile = aodTree->GetCurrentFile();
  outFile->cd();
  aodTree->Write();
  outFile->Close();
}


Int_t LoopOverSecondaries(TParticle *mother) {
  
  if (mother->GetNDaughters() > 0) {

    TClonesArray &vertices = *(aod->GetVertices());
    TClonesArray &tracks = *(aod->GetTracks());

    for (Int_t iDaughter = mother->GetFirstDaughter(); iDaughter <= mother->GetLastDaughter(); iDaughter++) {
      TParticle *part = stack->Particle(iDaughter);
      p[0] = part->Px(); 
      p[1] = part->Py(); 
      p[2] = part->Pz();
      x[0] = part->Vx(); 
      x[1] = part->Vy(); 
      x[2] = part->Vz();

      if (iDaughter == mother->GetFirstDaughter()) {
	// add secondary vertex
	secondary = new(vertices[jVertices++])
	  AliAODVertex(x, NULL, -999., tracks.Last(), AliAODVertex::kUndef);
	
	SetVertexType(part, secondary);
      }
	
      // add secondary tracks
      secondary->AddDaughter(new(tracks[jTracks++]) AliAODTrack(0, // ID
								0, // label
								p,
								kTRUE,
								x,
								kFALSE,
								cov, 
								(Short_t)-99,
								0, // no cluster map available
								pid,
								secondary,
								kFALSE, // no fit performed
					                        kFALSE, // no fit performed
								AliAODTrack::kSecondary));

      currTrack = (AliAODTrack*)tracks.Last();
      SetChargeAndPID(part->GetPdgCode(), currTrack);
      if (currTrack->Charge() != -99) {
	if (currTrack->Charge() > 0) {
	  nPos++;
	} else if (currTrack->Charge() < 0) {
	  nNeg++;
	}	    
      }

      LoopOverSecondaries(part);
    }
    return 1;
  } else {
    return 0;
  }
}


void SetChargeAndPID(Int_t pdgCode, AliAODTrack *track) {

  Float_t PID[10] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};

  switch (pdgCode) {

  case 22: // gamma
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nGamma++;
    break;

  case 11: // e- 
    track->SetCharge(-1);
    PID[AliAODTrack::kElectron] = 1.;
    track->SetPID(PID);
    nElectron++;
    break;
    
  case -11: // e+
    track->SetCharge(+1);
    PID[AliAODTrack::kElectron] = 1.;
    track->SetPID(PID);
    nPositron++;
    break;
    
  case 13: // mu- 
    track->SetCharge(-1);
    PID[AliAODTrack::kMuon] = 1.;
    track->SetPID(PID);
    nMuon++;
    break;
    
  case -13: // mu+
    track->SetCharge(+1);
    PID[AliAODTrack::kMuon] = 1.;
    track->SetPID(PID);
    nAntiMuon++;
    break;
    
  case 111: // pi0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nPi0++;
    break;
    
  case 211: // pi+
    track->SetCharge(+1);
    PID[AliAODTrack::kPion] = 1.;
    track->SetPID(PID);
    nPiPlus++;
    break;
    
  case -211: // pi-
    track->SetCharge(-1);
    PID[AliAODTrack::kPion] = 1.;
    track->SetPID(PID);
    nPiMinus++;
    break;
    
  case 130: // K0L
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nK0++;
    break;
    
  case 321: // K+
    track->SetCharge(+1);
    PID[AliAODTrack::kKaon] = 1.;
    track->SetPID(PID);
    nKPlus++;
    break;
    
  case -321: // K- 
    track->SetCharge(-1);
    PID[AliAODTrack::kKaon] = 1.;
    track->SetPID(PID);
    nKMinus++;
    break;
    
  case 2112: // n
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nNeutron++;
    break;
    
  case 2212: // p
    track->SetCharge(+1);
    PID[AliAODTrack::kProton] = 1.;
    track->SetPID(PID);
    nProton++;
    break;
    
  case -2212: // anti-p
    track->SetCharge(-1);
    PID[AliAODTrack::kProton] = 1.;
    track->SetPID(PID);
    nAntiProton++;
    break;

  case 310: // K0S
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nK0++;
    break;
    
  case 311: // K0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nK0++;
    break;
    
  case -311: // anti-K0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    nK0++;
    break;
    
  case 221: // eta
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3122: // lambda
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3222: // Sigma+
    track->SetCharge(+1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3212: // Sigma0
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3112: // Sigma-
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3322: // Xi0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3312: // Xi-
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 3334: // Omega-
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -2112: // n-bar
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3122: // anti-Lambda
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3222: // anti-Sigma-
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3212: // anti-Sigma0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3112: // anti-Sigma+
    track->SetCharge(+1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3322: // anti-Xi0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -3312: // anti-Xi+
    track->SetCharge(+1);
    break;

  case -3334: // anti-Omega+
    track->SetCharge(+1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 411: // D+
    track->SetCharge(+1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -411: // D- 
    track->SetCharge(-1);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case 421: // D0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  case -421: // anti-D0
    track->SetCharge(0);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
    break;

  default : // unknown
    track->SetCharge(-99);
    PID[AliAODTrack::kUnknown] = 1.;
    track->SetPID(PID);
 }

  return;
}


void SetVertexType(TParticle *part, AliAODVertex *vertex) {
  // this whole thing doesn't make much sense. but anyhow...

  TParticle *mother = stack->Particle(part->GetFirstMother());
  Int_t pdgMother = mother->GetPdgCode();
  Int_t pdgPart = part->GetPdgCode();
  
  // kinks
  if (mother->GetNDaughters() == 2) {
    Int_t firstPdgCode = stack->Particle(mother->GetFirstDaughter())->GetPdgCode();
    Int_t lastPdgCode = stack->Particle(mother->GetLastDaughter())->GetPdgCode();

    if (!(pdgMother == 22 || pdgMother == 111 || pdgMother == 130 || 
	  TMath::Abs(pdgMother) == 2112 || pdgMother == 310 || pdgMother == 221 || 
	  TMath::Abs(pdgMother) == 3122 || TMath::Abs(pdgMother) == 3322 || 
	  pdgMother == -3212 || TMath::Abs(pdgMother) == 421 || 
	  TMath::Abs(pdgMother) == 311) // not neutral
	&& (((firstPdgCode == 22 || firstPdgCode == 111 || firstPdgCode == 130 || 
	      TMath::Abs(firstPdgCode) == 2112 || firstPdgCode == 310 || 
	      firstPdgCode == 221 || TMath::Abs(firstPdgCode) == 3122 || 
	      TMath::Abs(firstPdgCode) == 3322 || firstPdgCode == -3212 || 
	      TMath::Abs(firstPdgCode) == 421 || TMath::Abs(pdgMother) == 311) // neutral
	     && !(lastPdgCode == 22 || lastPdgCode == 111 || lastPdgCode == 130 || 
		  TMath::Abs(lastPdgCode) == 2112 || lastPdgCode == 310 || 
		  lastPdgCode == 221 || TMath::Abs(lastPdgCode) == 3122 || 
		  TMath::Abs(lastPdgCode) == 3322 || lastPdgCode == -3212 || 
		  TMath::Abs(lastPdgCode) == 421 || TMath::Abs(pdgMother) == 311)) // not neutral
	    || !((firstPdgCode == 22 || firstPdgCode == 111 || firstPdgCode == 130 || 
		  TMath::Abs(firstPdgCode) == 2112 || firstPdgCode == 310 || 
		  firstPdgCode == 221 || TMath::Abs(firstPdgCode) == 3122 || 
		  TMath::Abs(firstPdgCode) == 3322 || firstPdgCode == -3212 || 
		  TMath::Abs(firstPdgCode) == 421 || TMath::Abs(pdgMother) == 311) // not neutral
		 && (lastPdgCode == 22 || lastPdgCode == 111 || lastPdgCode == 130 || 
		     TMath::Abs(lastPdgCode) == 2112 || lastPdgCode == 310 || 
		     lastPdgCode == 221 || TMath::Abs(lastPdgCode) == 3122 || 
		     TMath::Abs(lastPdgCode) == 3322 || lastPdgCode == -3212 || 
		     TMath::Abs(lastPdgCode) == 421 || TMath::Abs(pdgMother) == 311)))) { // neutral
      
      vertex->SetType(AliAODVertex::kKink);
      jKinks++;
    }
  }

  // V0
  else if (mother->GetNDaughters() == 2) {
    Int_t firstPdgCode = stack->Particle(mother->GetFirstDaughter())->GetPdgCode();
    Int_t lastPdgCode = stack->Particle(mother->GetLastDaughter())->GetPdgCode();

    if ((pdgMother == 22 || pdgMother == 111 || pdgMother == 130 || 
	 TMath::Abs(pdgMother) == 2112 || pdgMother == 310 || 
	 pdgMother == 221 || TMath::Abs(pdgMother) == 3122 || 
	 TMath::Abs(pdgMother) == 3322 || pdgMother == -3212 || 
	 TMath::Abs(pdgMother) == 421 || TMath::Abs(pdgMother) == 311) // neutral
	&& !(lastPdgCode == 22 || lastPdgCode == 111 || lastPdgCode == 130 || 
	     TMath::Abs(lastPdgCode) == 2112 || lastPdgCode == 310 || 
	     lastPdgCode == 221 || TMath::Abs(lastPdgCode) == 3122 || 
	     TMath::Abs(lastPdgCode) == 3322 || lastPdgCode == -3212 || 
	     TMath::Abs(lastPdgCode) == 421 || TMath::Abs(pdgMother) == 311) // not neutral
	&& !(firstPdgCode == 22 || firstPdgCode == 111 || firstPdgCode == 130 || 
	     TMath::Abs(firstPdgCode) == 2112 || firstPdgCode == 310 || 
	     firstPdgCode == 221 || TMath::Abs(firstPdgCode) == 3122 || 
	     TMath::Abs(firstPdgCode) == 3322 || firstPdgCode == -3212 || 
	     TMath::Abs(firstPdgCode) == 421 || TMath::Abs(pdgMother) == 311)) { // not neutral
      
      vertex->SetType(AliAODVertex::kV0);
      jV0s++;
    }
  }

  // Cascade
  else if (mother->GetNDaughters() == 2) {
    Int_t firstPdgCode = stack->Particle(mother->GetFirstDaughter())->GetPdgCode();
    Int_t lastPdgCode = stack->Particle(mother->GetLastDaughter())->GetPdgCode();
    
    if ((TMath::Abs(pdgMother) == 3334 || TMath::Abs(pdgMother) == 3312 || TMath::Abs(pdgMother) == 3322) &&
	(TMath::Abs(pdgPart) == 3122 || TMath::Abs(pdgPart) == 211 || TMath::Abs(pdgPart) == 321)
	&& ((!(firstPdgCode == 22 || firstPdgCode == 111 || firstPdgCode == 130 || 
	       TMath::Abs(firstPdgCode) == 2112 || firstPdgCode == 310 || 
	       firstPdgCode == 221 || TMath::Abs(firstPdgCode) == 3122 || 
	       TMath::Abs(firstPdgCode) == 3322 || firstPdgCode == -3212 || 
	       TMath::Abs(firstPdgCode) == 421 || TMath::Abs(pdgMother) == 311) // not neutral   
	     && TMath::Abs(lastPdgCode) == 3122) // labmda or anti-lambda
	    || ((!(lastPdgCode == 22 || lastPdgCode == 111 || lastPdgCode == 130 || 
		   TMath::Abs(lastPdgCode) == 2112 || lastPdgCode == 310 || 
		   lastPdgCode == 221 || TMath::Abs(lastPdgCode) == 3122 || 
		   TMath::Abs(lastPdgCode) == 3322 || lastPdgCode == -3212 || 
		   TMath::Abs(lastPdgCode) == 421 || TMath::Abs(pdgMother) == 311) // not neutral
		 && TMath::Abs(firstPdgCode) == 3122)))) { // lambda or anti-lambda
      vertex->SetType(AliAODVertex::kCascade);
      jCascades++;
    }
  }

  // Multi
  else if (mother->GetNDaughters() > 2) {

    vertex->SetType(AliAODVertex::kMulti);
    jMultis++;
  }

  else {
    vertex->SetType(AliAODVertex::kUndef);
  }
}
//  LocalWords:  SetCharge
 genAmptAOD.C:1
 genAmptAOD.C:2
 genAmptAOD.C:3
 genAmptAOD.C:4
 genAmptAOD.C:5
 genAmptAOD.C:6
 genAmptAOD.C:7
 genAmptAOD.C:8
 genAmptAOD.C:9
 genAmptAOD.C:10
 genAmptAOD.C:11
 genAmptAOD.C:12
 genAmptAOD.C:13
 genAmptAOD.C:14
 genAmptAOD.C:15
 genAmptAOD.C:16
 genAmptAOD.C:17
 genAmptAOD.C:18
 genAmptAOD.C:19
 genAmptAOD.C:20
 genAmptAOD.C:21
 genAmptAOD.C:22
 genAmptAOD.C:23
 genAmptAOD.C:24
 genAmptAOD.C:25
 genAmptAOD.C:26
 genAmptAOD.C:27
 genAmptAOD.C:28
 genAmptAOD.C:29
 genAmptAOD.C:30
 genAmptAOD.C:31
 genAmptAOD.C:32
 genAmptAOD.C:33
 genAmptAOD.C:34
 genAmptAOD.C:35
 genAmptAOD.C:36
 genAmptAOD.C:37
 genAmptAOD.C:38
 genAmptAOD.C:39
 genAmptAOD.C:40
 genAmptAOD.C:41
 genAmptAOD.C:42
 genAmptAOD.C:43
 genAmptAOD.C:44
 genAmptAOD.C:45
 genAmptAOD.C:46
 genAmptAOD.C:47
 genAmptAOD.C:48
 genAmptAOD.C:49
 genAmptAOD.C:50
 genAmptAOD.C:51
 genAmptAOD.C:52
 genAmptAOD.C:53
 genAmptAOD.C:54
 genAmptAOD.C:55
 genAmptAOD.C:56
 genAmptAOD.C:57
 genAmptAOD.C:58
 genAmptAOD.C:59
 genAmptAOD.C:60
 genAmptAOD.C:61
 genAmptAOD.C:62
 genAmptAOD.C:63
 genAmptAOD.C:64
 genAmptAOD.C:65
 genAmptAOD.C:66
 genAmptAOD.C:67
 genAmptAOD.C:68
 genAmptAOD.C:69
 genAmptAOD.C:70
 genAmptAOD.C:71
 genAmptAOD.C:72
 genAmptAOD.C:73
 genAmptAOD.C:74
 genAmptAOD.C:75
 genAmptAOD.C:76
 genAmptAOD.C:77
 genAmptAOD.C:78
 genAmptAOD.C:79
 genAmptAOD.C:80
 genAmptAOD.C:81
 genAmptAOD.C:82
 genAmptAOD.C:83
 genAmptAOD.C:84
 genAmptAOD.C:85
 genAmptAOD.C:86
 genAmptAOD.C:87
 genAmptAOD.C:88
 genAmptAOD.C:89
 genAmptAOD.C:90
 genAmptAOD.C:91
 genAmptAOD.C:92
 genAmptAOD.C:93
 genAmptAOD.C:94
 genAmptAOD.C:95
 genAmptAOD.C:96
 genAmptAOD.C:97
 genAmptAOD.C:98
 genAmptAOD.C:99
 genAmptAOD.C:100
 genAmptAOD.C:101
 genAmptAOD.C:102
 genAmptAOD.C:103
 genAmptAOD.C:104
 genAmptAOD.C:105
 genAmptAOD.C:106
 genAmptAOD.C:107
 genAmptAOD.C:108
 genAmptAOD.C:109
 genAmptAOD.C:110
 genAmptAOD.C:111
 genAmptAOD.C:112
 genAmptAOD.C:113
 genAmptAOD.C:114
 genAmptAOD.C:115
 genAmptAOD.C:116
 genAmptAOD.C:117
 genAmptAOD.C:118
 genAmptAOD.C:119
 genAmptAOD.C:120
 genAmptAOD.C:121
 genAmptAOD.C:122
 genAmptAOD.C:123
 genAmptAOD.C:124
 genAmptAOD.C:125
 genAmptAOD.C:126
 genAmptAOD.C:127
 genAmptAOD.C:128
 genAmptAOD.C:129
 genAmptAOD.C:130
 genAmptAOD.C:131
 genAmptAOD.C:132
 genAmptAOD.C:133
 genAmptAOD.C:134
 genAmptAOD.C:135
 genAmptAOD.C:136
 genAmptAOD.C:137
 genAmptAOD.C:138
 genAmptAOD.C:139
 genAmptAOD.C:140
 genAmptAOD.C:141
 genAmptAOD.C:142
 genAmptAOD.C:143
 genAmptAOD.C:144
 genAmptAOD.C:145
 genAmptAOD.C:146
 genAmptAOD.C:147
 genAmptAOD.C:148
 genAmptAOD.C:149
 genAmptAOD.C:150
 genAmptAOD.C:151
 genAmptAOD.C:152
 genAmptAOD.C:153
 genAmptAOD.C:154
 genAmptAOD.C:155
 genAmptAOD.C:156
 genAmptAOD.C:157
 genAmptAOD.C:158
 genAmptAOD.C:159
 genAmptAOD.C:160
 genAmptAOD.C:161
 genAmptAOD.C:162
 genAmptAOD.C:163
 genAmptAOD.C:164
 genAmptAOD.C:165
 genAmptAOD.C:166
 genAmptAOD.C:167
 genAmptAOD.C:168
 genAmptAOD.C:169
 genAmptAOD.C:170
 genAmptAOD.C:171
 genAmptAOD.C:172
 genAmptAOD.C:173
 genAmptAOD.C:174
 genAmptAOD.C:175
 genAmptAOD.C:176
 genAmptAOD.C:177
 genAmptAOD.C:178
 genAmptAOD.C:179
 genAmptAOD.C:180
 genAmptAOD.C:181
 genAmptAOD.C:182
 genAmptAOD.C:183
 genAmptAOD.C:184
 genAmptAOD.C:185
 genAmptAOD.C:186
 genAmptAOD.C:187
 genAmptAOD.C:188
 genAmptAOD.C:189
 genAmptAOD.C:190
 genAmptAOD.C:191
 genAmptAOD.C:192
 genAmptAOD.C:193
 genAmptAOD.C:194
 genAmptAOD.C:195
 genAmptAOD.C:196
 genAmptAOD.C:197
 genAmptAOD.C:198
 genAmptAOD.C:199
 genAmptAOD.C:200
 genAmptAOD.C:201
 genAmptAOD.C:202
 genAmptAOD.C:203
 genAmptAOD.C:204
 genAmptAOD.C:205
 genAmptAOD.C:206
 genAmptAOD.C:207
 genAmptAOD.C:208
 genAmptAOD.C:209
 genAmptAOD.C:210
 genAmptAOD.C:211
 genAmptAOD.C:212
 genAmptAOD.C:213
 genAmptAOD.C:214
 genAmptAOD.C:215
 genAmptAOD.C:216
 genAmptAOD.C:217
 genAmptAOD.C:218
 genAmptAOD.C:219
 genAmptAOD.C:220
 genAmptAOD.C:221
 genAmptAOD.C:222
 genAmptAOD.C:223
 genAmptAOD.C:224
 genAmptAOD.C:225
 genAmptAOD.C:226
 genAmptAOD.C:227
 genAmptAOD.C:228
 genAmptAOD.C:229
 genAmptAOD.C:230
 genAmptAOD.C:231
 genAmptAOD.C:232
 genAmptAOD.C:233
 genAmptAOD.C:234
 genAmptAOD.C:235
 genAmptAOD.C:236
 genAmptAOD.C:237
 genAmptAOD.C:238
 genAmptAOD.C:239
 genAmptAOD.C:240
 genAmptAOD.C:241
 genAmptAOD.C:242
 genAmptAOD.C:243
 genAmptAOD.C:244
 genAmptAOD.C:245
 genAmptAOD.C:246
 genAmptAOD.C:247
 genAmptAOD.C:248
 genAmptAOD.C:249
 genAmptAOD.C:250
 genAmptAOD.C:251
 genAmptAOD.C:252
 genAmptAOD.C:253
 genAmptAOD.C:254
 genAmptAOD.C:255
 genAmptAOD.C:256
 genAmptAOD.C:257
 genAmptAOD.C:258
 genAmptAOD.C:259
 genAmptAOD.C:260
 genAmptAOD.C:261
 genAmptAOD.C:262
 genAmptAOD.C:263
 genAmptAOD.C:264
 genAmptAOD.C:265
 genAmptAOD.C:266
 genAmptAOD.C:267
 genAmptAOD.C:268
 genAmptAOD.C:269
 genAmptAOD.C:270
 genAmptAOD.C:271
 genAmptAOD.C:272
 genAmptAOD.C:273
 genAmptAOD.C:274
 genAmptAOD.C:275
 genAmptAOD.C:276
 genAmptAOD.C:277
 genAmptAOD.C:278
 genAmptAOD.C:279
 genAmptAOD.C:280
 genAmptAOD.C:281
 genAmptAOD.C:282
 genAmptAOD.C:283
 genAmptAOD.C:284
 genAmptAOD.C:285
 genAmptAOD.C:286
 genAmptAOD.C:287
 genAmptAOD.C:288
 genAmptAOD.C:289
 genAmptAOD.C:290
 genAmptAOD.C:291
 genAmptAOD.C:292
 genAmptAOD.C:293
 genAmptAOD.C:294
 genAmptAOD.C:295
 genAmptAOD.C:296
 genAmptAOD.C:297
 genAmptAOD.C:298
 genAmptAOD.C:299
 genAmptAOD.C:300
 genAmptAOD.C:301
 genAmptAOD.C:302
 genAmptAOD.C:303
 genAmptAOD.C:304
 genAmptAOD.C:305
 genAmptAOD.C:306
 genAmptAOD.C:307
 genAmptAOD.C:308
 genAmptAOD.C:309
 genAmptAOD.C:310
 genAmptAOD.C:311
 genAmptAOD.C:312
 genAmptAOD.C:313
 genAmptAOD.C:314
 genAmptAOD.C:315
 genAmptAOD.C:316
 genAmptAOD.C:317
 genAmptAOD.C:318
 genAmptAOD.C:319
 genAmptAOD.C:320
 genAmptAOD.C:321
 genAmptAOD.C:322
 genAmptAOD.C:323
 genAmptAOD.C:324
 genAmptAOD.C:325
 genAmptAOD.C:326
 genAmptAOD.C:327
 genAmptAOD.C:328
 genAmptAOD.C:329
 genAmptAOD.C:330
 genAmptAOD.C:331
 genAmptAOD.C:332
 genAmptAOD.C:333
 genAmptAOD.C:334
 genAmptAOD.C:335
 genAmptAOD.C:336
 genAmptAOD.C:337
 genAmptAOD.C:338
 genAmptAOD.C:339
 genAmptAOD.C:340
 genAmptAOD.C:341
 genAmptAOD.C:342
 genAmptAOD.C:343
 genAmptAOD.C:344
 genAmptAOD.C:345
 genAmptAOD.C:346
 genAmptAOD.C:347
 genAmptAOD.C:348
 genAmptAOD.C:349
 genAmptAOD.C:350
 genAmptAOD.C:351
 genAmptAOD.C:352
 genAmptAOD.C:353
 genAmptAOD.C:354
 genAmptAOD.C:355
 genAmptAOD.C:356
 genAmptAOD.C:357
 genAmptAOD.C:358
 genAmptAOD.C:359
 genAmptAOD.C:360
 genAmptAOD.C:361
 genAmptAOD.C:362
 genAmptAOD.C:363
 genAmptAOD.C:364
 genAmptAOD.C:365
 genAmptAOD.C:366
 genAmptAOD.C:367
 genAmptAOD.C:368
 genAmptAOD.C:369
 genAmptAOD.C:370
 genAmptAOD.C:371
 genAmptAOD.C:372
 genAmptAOD.C:373
 genAmptAOD.C:374
 genAmptAOD.C:375
 genAmptAOD.C:376
 genAmptAOD.C:377
 genAmptAOD.C:378
 genAmptAOD.C:379
 genAmptAOD.C:380
 genAmptAOD.C:381
 genAmptAOD.C:382
 genAmptAOD.C:383
 genAmptAOD.C:384
 genAmptAOD.C:385
 genAmptAOD.C:386
 genAmptAOD.C:387
 genAmptAOD.C:388
 genAmptAOD.C:389
 genAmptAOD.C:390
 genAmptAOD.C:391
 genAmptAOD.C:392
 genAmptAOD.C:393
 genAmptAOD.C:394
 genAmptAOD.C:395
 genAmptAOD.C:396
 genAmptAOD.C:397
 genAmptAOD.C:398
 genAmptAOD.C:399
 genAmptAOD.C:400
 genAmptAOD.C:401
 genAmptAOD.C:402
 genAmptAOD.C:403
 genAmptAOD.C:404
 genAmptAOD.C:405
 genAmptAOD.C:406
 genAmptAOD.C:407
 genAmptAOD.C:408
 genAmptAOD.C:409
 genAmptAOD.C:410
 genAmptAOD.C:411
 genAmptAOD.C:412
 genAmptAOD.C:413
 genAmptAOD.C:414
 genAmptAOD.C:415
 genAmptAOD.C:416
 genAmptAOD.C:417
 genAmptAOD.C:418
 genAmptAOD.C:419
 genAmptAOD.C:420
 genAmptAOD.C:421
 genAmptAOD.C:422
 genAmptAOD.C:423
 genAmptAOD.C:424
 genAmptAOD.C:425
 genAmptAOD.C:426
 genAmptAOD.C:427
 genAmptAOD.C:428
 genAmptAOD.C:429
 genAmptAOD.C:430
 genAmptAOD.C:431
 genAmptAOD.C:432
 genAmptAOD.C:433
 genAmptAOD.C:434
 genAmptAOD.C:435
 genAmptAOD.C:436
 genAmptAOD.C:437
 genAmptAOD.C:438
 genAmptAOD.C:439
 genAmptAOD.C:440
 genAmptAOD.C:441
 genAmptAOD.C:442
 genAmptAOD.C:443
 genAmptAOD.C:444
 genAmptAOD.C:445
 genAmptAOD.C:446
 genAmptAOD.C:447
 genAmptAOD.C:448
 genAmptAOD.C:449
 genAmptAOD.C:450
 genAmptAOD.C:451
 genAmptAOD.C:452
 genAmptAOD.C:453
 genAmptAOD.C:454
 genAmptAOD.C:455
 genAmptAOD.C:456
 genAmptAOD.C:457
 genAmptAOD.C:458
 genAmptAOD.C:459
 genAmptAOD.C:460
 genAmptAOD.C:461
 genAmptAOD.C:462
 genAmptAOD.C:463
 genAmptAOD.C:464
 genAmptAOD.C:465
 genAmptAOD.C:466
 genAmptAOD.C:467
 genAmptAOD.C:468
 genAmptAOD.C:469
 genAmptAOD.C:470
 genAmptAOD.C:471
 genAmptAOD.C:472
 genAmptAOD.C:473
 genAmptAOD.C:474
 genAmptAOD.C:475
 genAmptAOD.C:476
 genAmptAOD.C:477
 genAmptAOD.C:478
 genAmptAOD.C:479
 genAmptAOD.C:480
 genAmptAOD.C:481
 genAmptAOD.C:482
 genAmptAOD.C:483
 genAmptAOD.C:484
 genAmptAOD.C:485
 genAmptAOD.C:486
 genAmptAOD.C:487
 genAmptAOD.C:488
 genAmptAOD.C:489
 genAmptAOD.C:490
 genAmptAOD.C:491
 genAmptAOD.C:492
 genAmptAOD.C:493
 genAmptAOD.C:494
 genAmptAOD.C:495
 genAmptAOD.C:496
 genAmptAOD.C:497
 genAmptAOD.C:498
 genAmptAOD.C:499
 genAmptAOD.C:500
 genAmptAOD.C:501
 genAmptAOD.C:502
 genAmptAOD.C:503
 genAmptAOD.C:504
 genAmptAOD.C:505
 genAmptAOD.C:506
 genAmptAOD.C:507
 genAmptAOD.C:508
 genAmptAOD.C:509
 genAmptAOD.C:510
 genAmptAOD.C:511
 genAmptAOD.C:512
 genAmptAOD.C:513
 genAmptAOD.C:514
 genAmptAOD.C:515
 genAmptAOD.C:516
 genAmptAOD.C:517
 genAmptAOD.C:518
 genAmptAOD.C:519
 genAmptAOD.C:520
 genAmptAOD.C:521
 genAmptAOD.C:522
 genAmptAOD.C:523
 genAmptAOD.C:524
 genAmptAOD.C:525
 genAmptAOD.C:526
 genAmptAOD.C:527
 genAmptAOD.C:528
 genAmptAOD.C:529
 genAmptAOD.C:530
 genAmptAOD.C:531
 genAmptAOD.C:532
 genAmptAOD.C:533
 genAmptAOD.C:534
 genAmptAOD.C:535
 genAmptAOD.C:536
 genAmptAOD.C:537
 genAmptAOD.C:538
 genAmptAOD.C:539
 genAmptAOD.C:540
 genAmptAOD.C:541
 genAmptAOD.C:542
 genAmptAOD.C:543
 genAmptAOD.C:544
 genAmptAOD.C:545
 genAmptAOD.C:546
 genAmptAOD.C:547
 genAmptAOD.C:548
 genAmptAOD.C:549
 genAmptAOD.C:550
 genAmptAOD.C:551
 genAmptAOD.C:552
 genAmptAOD.C:553
 genAmptAOD.C:554
 genAmptAOD.C:555
 genAmptAOD.C:556
 genAmptAOD.C:557
 genAmptAOD.C:558
 genAmptAOD.C:559
 genAmptAOD.C:560
 genAmptAOD.C:561
 genAmptAOD.C:562
 genAmptAOD.C:563
 genAmptAOD.C:564
 genAmptAOD.C:565
 genAmptAOD.C:566
 genAmptAOD.C:567
 genAmptAOD.C:568
 genAmptAOD.C:569
 genAmptAOD.C:570
 genAmptAOD.C:571
 genAmptAOD.C:572
 genAmptAOD.C:573
 genAmptAOD.C:574
 genAmptAOD.C:575
 genAmptAOD.C:576
 genAmptAOD.C:577
 genAmptAOD.C:578
 genAmptAOD.C:579
 genAmptAOD.C:580
 genAmptAOD.C:581
 genAmptAOD.C:582
 genAmptAOD.C:583
 genAmptAOD.C:584
 genAmptAOD.C:585
 genAmptAOD.C:586
 genAmptAOD.C:587
 genAmptAOD.C:588
 genAmptAOD.C:589
 genAmptAOD.C:590
 genAmptAOD.C:591
 genAmptAOD.C:592
 genAmptAOD.C:593
 genAmptAOD.C:594
 genAmptAOD.C:595
 genAmptAOD.C:596
 genAmptAOD.C:597
 genAmptAOD.C:598
 genAmptAOD.C:599
 genAmptAOD.C:600
 genAmptAOD.C:601
 genAmptAOD.C:602
 genAmptAOD.C:603
 genAmptAOD.C:604
 genAmptAOD.C:605
 genAmptAOD.C:606
 genAmptAOD.C:607
 genAmptAOD.C:608
 genAmptAOD.C:609
 genAmptAOD.C:610
 genAmptAOD.C:611
 genAmptAOD.C:612
 genAmptAOD.C:613
 genAmptAOD.C:614
 genAmptAOD.C:615
 genAmptAOD.C:616
 genAmptAOD.C:617
 genAmptAOD.C:618
 genAmptAOD.C:619
 genAmptAOD.C:620
 genAmptAOD.C:621
 genAmptAOD.C:622
 genAmptAOD.C:623
 genAmptAOD.C:624
 genAmptAOD.C:625
 genAmptAOD.C:626
 genAmptAOD.C:627
 genAmptAOD.C:628
 genAmptAOD.C:629
 genAmptAOD.C:630
 genAmptAOD.C:631
 genAmptAOD.C:632
 genAmptAOD.C:633
 genAmptAOD.C:634
 genAmptAOD.C:635
 genAmptAOD.C:636
 genAmptAOD.C:637
 genAmptAOD.C:638
 genAmptAOD.C:639
 genAmptAOD.C:640
 genAmptAOD.C:641
 genAmptAOD.C:642
 genAmptAOD.C:643
 genAmptAOD.C:644
 genAmptAOD.C:645
 genAmptAOD.C:646
 genAmptAOD.C:647
 genAmptAOD.C:648
 genAmptAOD.C:649
 genAmptAOD.C:650
 genAmptAOD.C:651
 genAmptAOD.C:652
 genAmptAOD.C:653
 genAmptAOD.C:654
 genAmptAOD.C:655
 genAmptAOD.C:656
 genAmptAOD.C:657
 genAmptAOD.C:658
 genAmptAOD.C:659
 genAmptAOD.C:660
 genAmptAOD.C:661
 genAmptAOD.C:662
 genAmptAOD.C:663
 genAmptAOD.C:664
 genAmptAOD.C:665