ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/*****************************************************************
  AliFlowOnTheFlyEventGenerator

  Create events with realstic spectra and v_n values
  store as AliFlowEventSimple
  
  usage: see $ALICE_ROOT/PWGCF/FLOW/macros/GenerateOnTheFlyEvents.C

  origin:       Redmer Alexander Bertens, rbertens@cern.ch, rbertens@nikhef.nl, rbertens@uu.nl
                Carlos Eugenio Perez Lara
                Andrea Dubla
******************************************************************/

#include "Riostream.h"
#include "TObjArray.h"
#include "TClonesArray.h"
#include "TFile.h"
#include "TList.h"
#include "TTree.h"
#include "TParticle.h"
#include "TMath.h"
#include "TH1.h"
#include "TH1F.h"
#include "TH1D.h"
#include "TF1.h"
#include "TString.h"
#include "TProfile.h"
#include "TParameter.h"
#include "TBrowser.h"
#include "AliFlowTrackSimple.h"
#include "AliFlowEventSimple.h"
#include "TRandom.h"
#include "TVirtualMCDecayer.h"
#include "AliFlowOnTheFlyEventGenerator.h"

using std::endl;
using std::cout;

static Int_t OnTheFlyEventGeneratorCounter = 0;

ClassImp(AliFlowOnTheFlyEventGenerator)
//_____________________________________________________________________________
AliFlowOnTheFlyEventGenerator::AliFlowOnTheFlyEventGenerator() : fGenerators(0), fEmbedMe(0), fFlowEvent(0), fDecayer(0), fAddV2Mothers(0), fAddV3Mothers(0), fAddV2Daughters(0), fAddV3Daughters(0), fPsi2(0), fPsi3(0), fPrecisionPhi(.001), fMaxNumberOfIterations(100), fQA(0), fFF(0) {/* constructor used for IO by root */}
//_____________________________________________________________________________
AliFlowOnTheFlyEventGenerator::AliFlowOnTheFlyEventGenerator(Bool_t qa, Int_t ff, Int_t mult, TVirtualMCDecayer* decayer, Bool_t a, Bool_t b, Bool_t c, Bool_t d) : fGenerators(0), fEmbedMe(0), fFlowEvent(0), fDecayer(0), fAddV2Mothers(0), fAddV3Mothers(0), fAddV2Daughters(0), fAddV3Daughters(0), fPsi2(0), fPsi3(0), fPrecisionPhi(.001), fMaxNumberOfIterations(100), fQA(qa), fFF(ff) {
    // contructor
    if(!fFlowEvent) fFlowEvent = new AliFlowEventSimple(mult, (AliFlowEventSimple::ConstructionMethod)0, 0x0, 0, TMath::TwoPi(), -.9, .9);
    if(!fGenerators) {
        fGenerators = new TObjArray();
        fGenerators->SetOwner(kTRUE);
        InitGenerators();
    }
    fDecayer = decayer;         // decayer: user has ownership of decayer (see dtor)
    if(fDecayer) fDecayer->Init();
    fAddV2Mothers = a;
    fAddV3Mothers = b;
    fAddV2Daughters = c; 
    fAddV3Daughters = d;
    if(fAddV3Mothers||fAddV3Daughters) printf(" > WARNING - v3 is not impelmented yet ! \n <");
}
//_____________________________________________________________________________
AliFlowOnTheFlyEventGenerator::~AliFlowOnTheFlyEventGenerator() 
{
    // destructor
    if(fGenerators)     delete fGenerators; 
    if(fFlowEvent)      delete fFlowEvent;
}
//_____________________________________________________________________________
AliFlowOnTheFlyEventGenerator::NaiveFlowAndSpectrumGenerator* AliFlowOnTheFlyEventGenerator::Find(Short_t pdg, Bool_t make)  
{ 
    // return instance of generator class for given fPDG value
    for(int i(0); i < fGenerators->GetEntriesFast(); i++) {
        if(((NaiveFlowAndSpectrumGenerator*)fGenerators->At(i))->GetPDGCode()==pdg) {
            return (NaiveFlowAndSpectrumGenerator*)(fGenerators->At(i));
        }
    }
    if(make) {
        AliFlowOnTheFlyEventGenerator::NaiveFlowAndSpectrumGenerator* _tmp = new AliFlowOnTheFlyEventGenerator::NaiveFlowAndSpectrumGenerator(pdg, fQA, fFF);
        fGenerators->Add(_tmp);
        return _tmp;
    }
    return 0x0;
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::SetPtSpectrum(const char* func, Short_t species)
{
    // set pt spectrum for species, override default
    NaiveFlowAndSpectrumGenerator* gen = Find(species, kTRUE);
    TF1* spectrum = gen->GetPtSpectrum();
    TString name = "";
    if(spectrum) {
        name = spectrum->GetName();
        delete spectrum;
    }
    else name = Form("pt_%i", (int)species);
    gen->SetPtSpectrum(new TF1(name.Data(), func, 0., 20));
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::SetPtDependentV2(const char* func, Short_t species)
{
    // set pt dependent v2 for species, override default
    NaiveFlowAndSpectrumGenerator* gen = Find(species, kTRUE);
    TF1* v2 = gen->GetDifferentialV2();
    TString name = "";
    if(v2) { // if v2 is already present, get its name and release its memory
        name = v2->GetName();
        delete v2;
    }
    else name = Form("v2_%i", (int)species);
    gen->SetDifferentialV2(new TF1(name.Data(),func, 0., 20));
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::SetPtDependentV3(const char* func, Short_t species)
{
    // set pt dependent v2 for species, override default
    NaiveFlowAndSpectrumGenerator* gen = Find(species, kTRUE);
    TF1* v3 = gen->GetDifferentialV3();
    TString name = "";
    if(v3) { // if v3 is already present, get its name and release its memory
        name = v3->GetName();
        delete v3;
    }
    else name = Form("v3_%i", (int)species);
    gen->SetDifferentialV3(new TF1(name.Data(), func, 0., 20));
}
//_____________________________________________________________________________
AliFlowEventSimple* AliFlowOnTheFlyEventGenerator::GenerateOnTheFlyEvent(TClonesArray* event, Int_t nSpecies, Int_t species[], Int_t mult[], Int_t bg, Bool_t fluc)
{
    // generate a flow event according to settings provided in GENERATOR INTERFACE
    fPsi2 = gRandom->Uniform(-TMath::Pi(), TMath::Pi());
    // generate a random number which will be used for flow fuctuations (if requested)
    Double_t fluc_poi(-1), fluc_rp(-1);
    if(fFF == 1 || fFF == 3 ) fluc_poi = gRandom->Uniform();
    if(fFF == 2) fluc_rp = gRandom->Uniform();
    if(fFF == 3) fluc_rp = fluc_poi;    // poi and rp fluctuations are fully correlated
    // calculate the total multiplicity for the event
    Int_t multPiKPr[] = {(int)(.7*bg/2.), (int)(.2*bg/2.), (int)(.1*bg/2.)};
    Int_t fPDGPiKPr[] = {211, 321, 2212};
    Int_t totalRPMultiplicity(0), totalPOIMultiplicity(0);
    for(int i(0); i < nSpecies; i++) totalPOIMultiplicity+=mult[i];
    for(int i(0); i < 3; i++)        totalRPMultiplicity+=multPiKPr[i];
    Int_t totalMultiplicity(totalRPMultiplicity+totalPOIMultiplicity);
    // generate the particles of interest. if requested, a vn boost is given to the primary particles
    for(int i(0); i < nSpecies; i++) {
      if(fluc) GenerateOnTheFlyTracks((Int_t)(gRandom->Uniform(mult[i]-TMath::Sqrt(mult[i]), mult[i]+TMath::Sqrt(mult[i]))), species[i], event, fluc_poi);
        else GenerateOnTheFlyTracks(mult[i], species[i], event, fluc_poi);
    }
    // generate reference particles. if requested, a vn boost is given to the primary particles
    for(int i(0); i < 3; i++) {
        if(fluc) {
	  GenerateOnTheFlyTracks((Int_t)(gRandom->Uniform(multPiKPr[i]-TMath::Sqrt(multPiKPr[i]), multPiKPr[i]+TMath::Sqrt(mult[i]))), fPDGPiKPr[i], event, fluc_rp);
	  GenerateOnTheFlyTracks((Int_t)(gRandom->Uniform(multPiKPr[i]-TMath::Sqrt(multPiKPr[i]), multPiKPr[i]+TMath::Sqrt(mult[i]))), -1*fPDGPiKPr[i], event, fluc_rp);
        }
        else {
            GenerateOnTheFlyTracks(multPiKPr[i], fPDGPiKPr[i], event, fluc_rp);
            GenerateOnTheFlyTracks(multPiKPr[i], -1*fPDGPiKPr[i], event, fluc_rp);
        }
    }
    // if requested, decay the event
    if(fDecayer)        DecayOnTheFlyTracks(event); 
    // if an embedded event is given to the generator at this point, embed it
    if(fEmbedMe) {
        event->AbsorbObjects(fEmbedMe); // event has ownership of embedded event
        fEmbedMe = 0x0;                 // reset to aviod embeddding more than once
    }
    // if requested, the secondaries are given a vn boost
    if(fAddV2Daughters) AddV2(event);
    // convert the event to an aliflowsimple event
    // the tagging (rp) is done in this step, all tracks are tagged as rp's. 
    // daughters are made orphans (i.e. primaries with secondaries are rejected from the sample)
    // converting clears the event tclones array 
    return ConvertTClonesToFlowEvent(event, totalMultiplicity);
}
//_____________________________________________________________________________
AliFlowEventSimple* AliFlowOnTheFlyEventGenerator::ConvertTClonesToFlowEvent(TClonesArray* event, Int_t totalMultiplicity)
{
    // convert the content of a tclones array to an aliflowevent simple for output and tag particles as poi's and rp's
    // first step, see if there's already a flow event available in memory. if not create one
    if(!fFlowEvent) fFlowEvent = new AliFlowEventSimple(totalMultiplicity, (AliFlowEventSimple::ConstructionMethod)0, 0x0, 0, TMath::TwoPi(), -.9, .9);
    // if there is a flow event, clear the members without releasing the allocated memory
    else fFlowEvent->ClearFast();
    fFlowEvent->SetMCReactionPlaneAngle(fPsi2);
    // prepare a track
    TParticle* pParticle = 0x0;
    Int_t iSelParticlesRP(0);
    for (Int_t i(0); i < event->GetEntries(); i++) {    // begin the loop over the input tracks
        pParticle = (TParticle*)event->At(i);           // get the particle 
        if (!pParticle) continue;                       // skip if empty slot (no particle)
        if (pParticle->GetNDaughters()!=0) continue;    // see if the particle has daughters (if so, reject it)      
        AliFlowTrackSimple* pTrack = new AliFlowTrackSimple(pParticle);         // allocate space for the new flow track
        pTrack->SetWeight(pParticle->Pz());                                     // ugly hack: store pz here ...
        pTrack->SetID(pParticle->GetPdgCode());                                 // set pid code as id
        pTrack->SetForRPSelection(kTRUE);                                       // tag ALL particles as RP's, 
        // ugly hack 2: set charge to -1 for primaries and 1 for secondaries
        if(pParticle->GetFirstMother()==-1) pTrack->SetCharge(-1);
        else pTrack->SetCharge(1);
        iSelParticlesRP++;
        fFlowEvent->AddTrack(pTrack);
    }
    fFlowEvent->SetNumberOfRPs(iSelParticlesRP);
    // all trakcs have safely been copied so we can clear the event
    event->Clear();
    OnTheFlyEventGeneratorCounter = 0;
    return fFlowEvent;
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::AddV2(TParticle* part, Double_t v2, Double_t fluc)
{
    // afterburner, adds v2, uses Newton-Raphson iteration
    Double_t phi = part->Phi();
    Double_t phi0=phi;
    Double_t f=0.;
    Double_t fp=0.;
    Double_t phiprev=0.;
    // introduce flow fluctuations (gaussian)
    if(fluc > -.5) {
        v2+=TMath::Sqrt(2*(v2*.25)*(v2*.25))*TMath::ErfInverse(2*fluc-1);
        if(fQA) Find(part->GetPdgCode(), kTRUE)->FillV2(part->Pt(), v2);
    }
    for (Int_t i=0; i!=fMaxNumberOfIterations; ++i) {
        phiprev=phi; //store last value for comparison
        f =  phi-phi0+v2*TMath::Sin(2.*(phi-fPsi2));
        fp = 1.0+2.0*v2*TMath::Cos(2.*(phi-fPsi2)); //first derivative
        phi -= f/fp;
        if (TMath::AreEqualAbs(phiprev,phi,fPrecisionPhi)) break;
    }
    part->SetMomentum( part->Pt()*TMath::Cos(phi), part->Pt()*TMath::Sin(phi), part->Pz(), part->Energy() );
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::AddV2(TClonesArray* event)
{
    // afterburner, adds v2 for different species to all tracks in an event
    Double_t fluc(gRandom->Uniform());  // get a random number in case of fluctuations
    // FIXME at the moment no distincition between mothers and daughters
    TParticle *part;
    for(Int_t nTrack=0; nTrack!=event->GetEntriesFast(); ++nTrack) {
        part = (TParticle*) event->At(nTrack);
        // for each track, call overloaded addv2 function with the correct generator
        // create a generator in the case where the decayer has introduced a new particle species
	if(part)
	  AddV2(part, Find(part->GetPdgCode(), kTRUE)->GetV2(part->Pt()), fluc);
    }
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::GenerateOnTheFlyTracks(Int_t mult, Int_t pid, TClonesArray* event, Double_t fluc) 
{
    // generate tracks for the event. the tracks that are generated here are the mothers
    Double_t ph, et, pt, mm, px, py, pz, ee;
    // access the descired generator through the static find method. if the particle species is unknown, we add it to the generator
    NaiveFlowAndSpectrumGenerator* generator = Find(pid, kTRUE);
    Int_t _tempCounter = OnTheFlyEventGeneratorCounter;
    for(int i=_tempCounter; i<=mult+_tempCounter; ++i) {
        OnTheFlyEventGeneratorCounter++;
        TParticle* part = (TParticle*)event->ConstructedAt(i);
        part->SetStatusCode(1);
        part->SetFirstMother(-1);
        part->SetLastMother(-1);
        part->SetFirstDaughter(-1);
        part->SetLastDaughter(-1);
        ph = gRandom->Uniform(0,TMath::TwoPi());
        et = gRandom->Uniform(-1.0,+1.0);
        pt = generator->GetPt();
        part->SetPdgCode( pid );
        mm =  part->GetMass();
        px = pt*TMath::Cos(ph);
        py = pt*TMath::Sin(ph);
        pz = pt*TMath::SinH(et);
        ee = TMath::Sqrt( mm*mm + pt*pt+pz*pz );
        part->SetMomentum( px, py, pz, ee );
        // if requested add v2 to the sample of mothers
        if(fAddV2Mothers) AddV2(part, generator->GetV2(pt), fluc);
    }
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::DecayOnTheFlyTracks(TClonesArray *event) 
{
    // decay the tracks using a decayer that is set in the GenerateEventsOnTheFly.C macro
    if(!fDecayer) return;       // shouldn't happen ...
    Int_t kf;
    TClonesArray*  arr = new TClonesArray("TParticle",10);
    Int_t secondaries=0;
    Int_t nStart=0;
    Int_t nTracks = event->GetEntriesFast();
    TParticle *part, *part1;
    TClonesArray &in = *event;
    for(Int_t loop=0; loop!=3; ++loop) {
        secondaries=0;
        for(Int_t nTrack=nStart; nTrack!=nTracks; ++nTrack) {
            arr->Clear();
            part = (TParticle*) event->At( nTrack );
            if(!part) continue;
            kf = TMath::Abs(part->GetPdgCode());
            if(kf==22 )  ForceGammaDecay(arr, part);     // if gamma, we decay it by hand
            else {      // else we let pythia do it
                TLorentzVector pmom( part->Px(), part->Py(), part->Pz(), part->Energy() );
                fDecayer->Decay(kf,&pmom);
                fDecayer->ImportParticles(arr);
            }
            Int_t nDaughters = arr->GetEntries();
            if(nDaughters<2) continue;
            for(Int_t nDaughter=1; nDaughter!=nDaughters; ++nDaughter) {
                part1 = (TParticle*) (arr->At(nDaughter));
                if(!part1) continue; // was part1, mistake?
	        new(in[nTracks+secondaries]) TParticle( part1->GetPdgCode(),
						        part1->GetStatusCode(),
						        part1->GetFirstMother(),
						        part1->GetSecondMother(),
						        part1->GetFirstDaughter(),
						        part1->GetLastDaughter(),
						        part1->Px(),
						        part1->Py(),
						        part1->Pz(),
						        part1->Energy(),
						        part1->Vx(),
						        part1->Vy(),
						        part1->Vz(),
						        part1->T());
	        secondaries++;
                if(nDaughter==1) part->SetFirstDaughter(nTracks+secondaries);
                else if ((nDaughters-1)==nDaughter) part->SetLastDaughter(nTracks+secondaries);
                //else part->SetDaughter(nDaughter,nTracks+secondaries);
                }
            }
        nStart = nTracks;
        nTracks = event->GetEntries();
    }
    delete arr;
    return;
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::ForceGammaDecay(TClonesArray* arr, TParticle* part)
{
    // force gama decay
    const Float_t mass1(gRandom->Uniform(0.0000001, .1));   // FIXME randomly sample photon 'mass'
    const Float_t mass_d1(.000511);                         // daughter mass (electron)
    const Float_t mass_d2(.000511);
    Double_t p_dec1=sqrt((TMath::Abs(mass1*mass1-(mass_d1+mass_d2)*(mass_d1+mass_d2))*(mass1*mass1-(mass_d1-mass_d2)*(mass_d1-mass_d2))))/2/mass1;      // energy
    TLorentzVector *p_d1=new TLorentzVector();              // lorentz vectors for daughters
    TLorentzVector *p_d2=new TLorentzVector();
    Double_t yy_m=part->Y();                                // pseudo rapidity of mother
    Double_t pt_m=part->Pt();                               // pt of mother
    Double_t mt_m=sqrt(mass1*mass1+pt_m*pt_m);              // transverse mass of mother
    Double_t pz_m=mt_m*TMath::SinH(yy_m);                   // MAGIC
    Double_t phi_m=gRandom->Rndm()*2*TMath::Pi();
    Double_t px_m=pt_m*TMath::Cos(phi_m);
    Double_t py_m=pt_m*TMath::Sin(phi_m);
    Double_t costh_d=2*gRandom->Rndm()-1;
    Double_t phi_d=gRandom->Rndm()*2*TMath::Pi();
    Double_t pz_d=p_dec1*costh_d;
    Double_t pt_d=p_dec1*sqrt(1-costh_d*costh_d);
    Double_t px_d=pt_d*TMath::Cos(phi_d);
    Double_t py_d=pt_d*TMath::Sin(phi_d);
    p_d1->SetPxPyPzE(px_d,py_d,pz_d,sqrt(mass_d1*mass_d1+p_dec1*p_dec1));
    p_d2->SetPxPyPzE(-px_d,-py_d,-pz_d,sqrt(mass_d2*mass_d2+p_dec1*p_dec1));
    Double_t gamma_b=sqrt(mass1*mass1+pz_m*pz_m+pt_m*pt_m)/mass1;
    Double_t bx=px_m/gamma_b/mass1;    
    Double_t by=py_m/gamma_b/mass1;
    Double_t bz=pz_m/gamma_b/mass1;
    p_d1->Boost(bx,by,bz);
    p_d2->Boost(bx,by,bz);
    TParticle* daughter_1 = (TParticle*)arr->ConstructedAt(0);
    TParticle* daughter_2 = (TParticle*)arr->ConstructedAt(1);
    daughter_1->SetStatusCode(1);
    daughter_1->SetFirstMother(-1);
    daughter_1->SetLastMother(-1);
    daughter_1->SetFirstDaughter(-1);
    daughter_1->SetLastDaughter(-1);
    daughter_1->SetPdgCode(11);
    TLorentzVector& ref_p_d1 = *p_d1;
    daughter_1->SetMomentum(ref_p_d1);
    daughter_2->SetStatusCode(1);
    daughter_2->SetFirstMother(-1);
    daughter_2->SetLastMother(-1);
    daughter_2->SetFirstDaughter(-1);
    daughter_2->SetLastDaughter(-1);
    daughter_2->SetPdgCode(-11);
    TLorentzVector& pp = *p_d2;
    daughter_2->SetMomentum(pp);
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::InitGenerators()
{
   // initializes generators for a list of common particles
   // new generators will be created 'on the fly' if they are encountered
   // if a generator is requested for a non-existent pdg value, things will get unstable ...
   Short_t PDGcode[] = {11, -11, // e-               
                        12, // v_e
                        13, -13, // mu-
                        14, // v_mu
                        15, -15, // t-
                        16, // v_t
                        21, // g
                        22, // gamma
                        111, // pi0
                        211, -211, // pi+
                        113, // rho0
                        213, -213, // rho+
                        221, // eta
                        331, // eta prime
                        130, // k0l
                        310, // k0s
                        311, // k0
                        313, // k*
                        321, -321, // k+
                        323, -323, // k*+
                        223, // omega
                        411, -411, // d+
                        413, -413, // d*+
                        421, // d0
                        423, // d*0
                        333, // phi
                        443, // jpsi 
                        2112, // neutron
                        2212, -2212, // proton
                        3122, // lambda0
                        3312, -3312, // xi- (cascade)
                        3314, -3314, // xi*-
                        3322, // xi0
                        3324, // xi*0
                        3334}; // Omeg
   for(int i(0); i < 47; i++) fGenerators->Add(new NaiveFlowAndSpectrumGenerator(PDGcode[i], fQA, fFF));
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::PrintGenerators()
{
   // make sure all went ok
   if(!fGenerators) {
       printf(" > PANIC <\n");
       return;
   }
   printf(" > %i species available in generator\n", fGenerators->GetEntriesFast());
   for(int i(0); i < fGenerators->GetEntriesFast(); i++) 
       printf("   - PDG: %i \n", ((NaiveFlowAndSpectrumGenerator*)fGenerators->At(i))->GetPDGCode());
   printf(" more can be created 'on the fly', but beware of non-existent pdg values !");
}
//_____________________________________________________________________________
void AliFlowOnTheFlyEventGenerator::DoGeneratorQA(Bool_t v2, Bool_t v3) 
{
    // this function loops over all the species that are available in the fGenerators, which are
    // a) created by the user (in the event generator) as mother particles or
    // b) introduced by pythia (the decayer) as daughter particles
    // c) made by the InitGenerators() function
    // 'empty species' (i.e. species for which a generator exists but which were not actually sampled) are omitted
    // the output histograms are written to a file named "GeneratorfQA.root"
    if(!fQA) {
        printf(" > Request has been made for QA plots but QA histograms have been disabled !\n");
        return;
    }
    TFile *QAfile = new TFile("GeneratorfQA.root","RECREATE"); 
    for(int i(0); i < fGenerators->GetEntriesFast(); i++) {
        NaiveFlowAndSpectrumGenerator* gen = (NaiveFlowAndSpectrumGenerator*)fGenerators->At(i);
        if(!gen) continue;               // skip if we failed to get a generator
        TH1F* QApt = (TH1F*)gen->GetQAType(0); 
        TH2F* QAv2 = (TH2F*)gen->GetQAType(1);
        TH2F* QAv3 = (TH2F*)gen->GetQAType(2);
        if((!QApt)||(!QAv2)||(!QAv3)) {
            printf(" > couldn't read qa histogrmas for species %i <\n", gen->GetPDGCode());
            continue;
        }
        if(QApt->GetEntries()==0&&QAv2->GetEntries()==0&&QAv3->GetEntries()==0) continue; // skip if no tracks of this species have been sampled
        printf(" > saving QA histograms for sampled species %i <\n", gen->GetPDGCode());
        QAfile->mkdir(Form("fPDG_%i", gen->GetPDGCode()));        // create a directory in the output file
        QAfile->cd(Form("fPDG_%i", gen->GetPDGCode()));              // cd into this directory
        if(!QApt->GetEntries()==0) { // only plot the pt fSpectrum if this guy was generated
            if(!gen->GetPtSpectrum()->Integral(0,20)==0) {
                QApt->Scale(gen->GetPtSpectrum()->Integral(0,20)/QApt->Integral(),"width");
                QApt->Write();
            }
        }
        gen->GetPtSpectrum()->SetNpx(10000); // otherwise tf1 plot is very ugly
        gen->GetPtSpectrum()->Draw();
        gen->GetPtSpectrum()->Write();
        if(v2) {
            QAv2->Draw();
            gen->GetDifferentialV2()->SetNpx(10000);
            gen->GetDifferentialV2()->Draw();
            gen->GetDifferentialV2()->Write();
            QAv2->Write();
        }
        if(v3) {
            QAv3->Draw();
            gen->GetDifferentialV3()->Draw();
            gen->GetDifferentialV3()->SetNpx(10000);
            gen->GetDifferentialV3()->Write();
            QAv3->Write();
        }
    }
    QAfile->Close();
}
//_____________________________________________________________________________

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