ROOT logo
/**
 * @file   EGConfig.C
 * @author Christian Holm Christensen <cholm@nbi.dk>
 * @date   Thu Oct 16 11:01:38 2014
 * 
 * @brief  Specific configuration for event generator. 
 * 
 * 
 */
struct EGCfg : public VirtualEGCfg
{
  Int_t   hftype;     // Heavy flavour type (random)
  Bool_t  fIsLego;    //
  
  EGCfg() 
    : hftype(-1), fIsLego(false);
  {
    hftype = HFType();
  }
  virtual Bool_t IsLego() const { return fIsLego; }
protected:
  /** 
   * Make a random Heavy Flavour type 
   * 
   * @return Heavy flavour type 
   */
  Int_t HFType() const 
  {
    Int_t type = -1;
    Int_t r = gRandom->Rndm();
    if      (r < 0.16) type = 0; 
    else if (r < 0.32) type = 1; 
    else if (r < 0.48) type = 2; 
    else if (r < 0.64) type = 3; 
    else if (r < 0.72) type = 4; 
    else if (r < 0.80) type = 5; 
    else               type = 6; 
    return r;
  }
  /** 
   * Make the generator 
   * 
   * @param rt   Generator ID
   * @param b1   Least impact parameter 
   * @param b2   Largest impact parameter 
   *
   * @return Point to newly allocated generator or null 
   */
  AliGenerator* CreateGenerator(const TString& rt,
				Float_t b1, Float_t b2)
  {
    Bool_t        asym = grp->IsPA()||grp->IsAP();
    AliGenerator* g    = 0;
    TString t(rt);
    if      (t.EqualTo("default"))            t = DeduceRunType();
    if      (t.EndsWith("perugia0chadr"))     g=PythiaHF(0);
    else if (t.EndsWith("perugia0bchadr"))    g=PythiaHF(1);
    else if (t.EndsWith("perugia0cele"))      g=PythiaHF(2);
    else if (t.EndsWith("perugia0bele"))      g=PythiaHF(3);
    else if (t.EndsWith("perugia0jspi2e"))    g=PythiaHF(4);
    else if (t.EndsWith("perugia0btojspi2e")) g=PythiaHF(5);
    else if (t.BeginsWith("pythia"))          g=Pythia(rt);
    else if (t.BeginsWith("hijing2000hf"))    g=HFCocktail(rt, b1, b2);
    else if (t.BeginsWith("hijing2000"))      g=Hijing(b1, b2, asym, 
							false, 2.3);
    else if (t.BeginsWith("hijing"))          g=Hijing(b1, b2, asym, 
							grp->IsAA(), 0);
    else if (t.BeginsWith("ampthf"))          g=HFCocktail(rt,b1,b2);
    else if (t.BeginsWith("ampt"))            g=Ampt(b1, b2);
    else if (t.BeginsWith("dpmjet"))          g=Dpmjet(b1, b2);
    else if (t.BeginsWith("phojet"))          g=Dpmjet(b1, b2);
    else if (t.BeginsWith("hydjet"))          g=Hydjet(b1, b2);
    else if (t.BeginsWith("lego"))            g=Lego(rt);
    if (!g && !fIsLego)
      Fatal("", "Invalid run type \"%s\" specified", t.Data());
    return g;
  }
  /** 
   * Make our decayer 
   * 
   * @return Newly allocated decayer or null
   */
  TVirtualMCDecayer* CreateDecayer(const TString& runType)
  {
    if (runType.BeginsWith("hydjet")) return 0;

    LoadPythia();
    TVirtualMCDecayer* decayer = new AliDecayerPythia();
    if (runType.EqualTo("hijing2000hf") && hftype < 2) 
      decayer->SetForceDecay(kHadronicD);
    else 
      decayer->SetForceDecay(kAll);
    decayer->Init();
    return decayer;
  }

  // === PYTHIA ========================================================
  // Normal 
  /** 
   * Greate a pythia6 event generator 
   * 
   * @param tune Possible tune 
   * 
   * @return newly allocated generator or null
   */
  AliGenerator* Pythia(const TString & tune)
  {
    // Int_t kCTEQ6l = 8;
    if (!grp->IsPP()) Fatal("Setup", "Pythia6 only works for pp");

    TString t(tune);
    t.ToUpper();
    t.ReplaceAll("PYTHIA6", "");
    t.ReplaceAll("PYTHIA", "");
    Info("Setup", "Making Pythia6 event generator (tune: %s)", t.Data());

    LoadPythia();
    AliGenPythia* pythia = new AliGenPythia(-1); 
    pythia->SetMomentumRange(0, 999999.);
    pythia->SetThetaRange(0., 180.);
    pythia->SetYRange(-12.,12.);
    pythia->SetPtRange(0,1000.);
    pythia->SetProcess(kPyMb);
    pythia->SetEnergyCMS(grp->energy);

    if (t == "D6T") {
      //    Tune
      //    109     D6T : Rick Field's CDF Tune D6T 
      //                  (NB: needs CTEQ6L pdfs externally)
      pythia->SetTune(109); // F I X 
      pythia->SetStrucFunc(kCTEQ6l);
    }
    else if (t == "PERUGIA0") { 
      //    Tune
      //    320     Perugia 0
      pythia->SetTune(320); 
      pythia->UseNewMultipleInteractionsScenario();
    }
    else if (t == "ATLAS") {
      //    Tune
      //    C   306 ATLAS-CSC: Arthur Moraes' (new) ATLAS tune 
      //                        (needs CTEQ6L externally)
      pythia->SetTune(306);
      pythia->SetStrucFunc(kCTEQ6l);
    }
    else if (t == "JETS") { 
      pythia->SetProcess(kPyJets);
      pythia->SetStrucFunc(kCTEQ6l);
      pythia->SetJetEtaRange(-1.5, 1.5); 
      pythia->SetJetEtRange(50., 800.);
      pythia->SetPtHard(45., 1000.);
      pythia->SetPycellParameters(2.2, 300, 432, 0., 4., 5., 0.7);
    }
    else if (t == "ATLAS_FLAT") {
      // set high multiplicity trigger
      // this weight achieves a flat multiplicity distribution
      TH1 *weight = new TH1D("weight","weight",201,-0.5,200.5);
      weight->SetBinContent(1,5.49443);
      weight->SetBinContent(2,8.770816);
      weight->SetBinContent(6,0.4568624);
      weight->SetBinContent(7,0.2919915);
      weight->SetBinContent(8,0.6674189);
      weight->SetBinContent(9,0.364737);
      weight->SetBinContent(10,0.8818444);
      weight->SetBinContent(11,0.531885);
      weight->SetBinContent(12,1.035197);
      weight->SetBinContent(13,0.9394057);
      weight->SetBinContent(14,0.9643193);
      weight->SetBinContent(15,0.94543);
      weight->SetBinContent(16,0.9426507);
      weight->SetBinContent(17,0.9423649);
      weight->SetBinContent(18,0.789456);
      weight->SetBinContent(19,1.149026);
      weight->SetBinContent(20,1.100491);
      weight->SetBinContent(21,0.6350525);
      weight->SetBinContent(22,1.351941);
      weight->SetBinContent(23,0.03233504);
      weight->SetBinContent(24,0.9574557);
      weight->SetBinContent(25,0.868133);
      weight->SetBinContent(26,1.030998);
      weight->SetBinContent(27,1.08897);
      weight->SetBinContent(28,1.251382);
      weight->SetBinContent(29,0.1391099);
      weight->SetBinContent(30,1.192876);
      weight->SetBinContent(31,0.448944);
      for (Int_t i = 32; i <= 201; i++) weight->SetBinContent(i,1);
      weight->SetEntries(526);
      
      Int_t limit = weight->GetRandom();
      pythia->SetTriggerChargedMultiplicity(limit, 1.4);
    }
    return pythia;
  }
  /** 
   * Create a Pythia6 generator for high-flavor physics 
   * 
   * @param type    Which kind 
   * @param harder  If true, make harder processes 
   * 
   * @return Newly allocated generator or null
   */
  AliGenerator* PythiaHF(Int_t type, Bool_t harder=0) 
  { 
    LoadPythia();
    if (type == 6) return Pythia("jets");
    if (type == 4) { 
      AliGenParam *jpsi =  AliGenParam(1, AliGenMUONlib::kJpsi,
				       (harder?"CDF pp 8.8":"CDF pp 7"),"Jpsi");
      jpsi->SetPtRange(0.,999.);
      jpsi->SetYRange(-1.0, 1.0);
      jpsi->SetPhiRange(0.,360.);
      jpsi->SetForceDecay(kDiElectron);
      return jpsi;
    }
    AliGenPythia* pythia = static_cast<AliGenPythia*>(Pythia("PERUGIA0"));
    switch (type) { 
    case 0: // chadr
      pythia->SetProcess(kPyCharmppMNRwmi);
      pythia->SetForceDecay(kHadronicD);
      break;
    case 1: // bchadr
      pythia->SetProcess(kPyBeautyppMNRwmi);
      pythia->SetForceDecay(kHadronicD);
      break;
    case 2: // cele
      pythia->SetProcess(kPyCharmppMNRwmi);
      pythia->SetCutOnChild(1);
      pythia->SetPdgCodeParticleforAcceptanceCut(11);
      pythia->SetChildYRange(-1.2,1.2);
      pythia->SetChildPtRange(0,10000.);
      break;
    case 3: // bele
      pythia->SetProcess(kPyBeautyppMNRwmi);
      pythia->SetCutOnChild(1);
      pythia->SetPdgCodeParticleforAcceptanceCut(11);
      pythia->SetChildYRange(-1.2,1.2);
      pythia->SetChildPtRange(0,10000.);
      break;
    case 5:
      pythia->SetProcess(kPyBeautyppMNRwmi);
      pythia->SetCutOnChild(1);
      pythia->SetPdgCodeParticleforAcceptanceCut(443);
      pythia->SetChildYRange(-2,2);
      pythia->SetChildPtRange(0,10000.);
    }
    return pythia;
  }
  /** 
   * Make a Min-Bias AA, pA, or Ap Hijing generator 
   * 
   * @param minB    Least impact parameter 
   * @param maxB    Largest impact parameter 
   * @param quench  If true, enable quenching 
   * @param slowN   If true, make a cocktail with slow neutrons 
   * @param ptHard  Hard pT cut-off 
   * 
   * @return Generator 
   */
  AliGenerator* Hijing(Float_t minB, 
		       Float_t maxB, 
		       Bool_t  slowN=false, 
		       Bool_t  quench=1, 
		       Float_t ptHard=0) 
  {
    LoadHijing();
    AliGenHijing *gener = new AliGenHijing(-1);
    // centre of mass energy 
    gener->SetEnergyCMS(grp->energy);
    gener->SetImpactParameterRange(minB, maxB);	
    // reference frame
    gener->SetReferenceFrame("CMS");
    // projectil
    gener->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    gener->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    // tell hijing to keep the full parent child chain
    gener->KeepFullEvent();
    // enable jet quenching
    gener->SetJetQuenching(quench);
    // enable shadowing
    gener->SetShadowing(slowN);
    // Don't track spectators
    gener->SetSpectators(!slowN);
    // 
    if (ptHard > 0) hi->SetPtHardMin(ptHard);

    // kinematic selection
    gener->SetSelectAll(0);
    // Boosted CMS 
    gener->SetBoostLHC(grp->IsPA() || grp->IsAP());
    // No need for cocktail 
    if (!slowN || !grp->IsPA() || !grp->IsAP()) return gener;

    AliGenCocktail* cocktail = new AliGenCocktail();
    cocktail->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    cocktail->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    cocktail->SetEnergyCMS(grp->energy);

    AliGenSlowNucleons*     gray  = new AliGenSlowNucleons(1);
    AliCollisionGeometry*   coll  = gener->CollisionGeometry();
    AliSlowNucleonModelExp* model = new AliSlowNucleonModelExp();
    //  Not yet in the release...
    //      model->SetSaturation(kTRUE);
    gray->SetSlowNucleonModel(model);
    gray->SetTarget(grp->beam1.a, grp->beam1.z);
    gray->SetThetaDist(1);
    gray->SetProtonDirection(grp->beam1.IsP() ? 1 : 2);
    //      gray->SetDebug(1);
    gray->SetNominalCmsEnergy(2*grp->beamEnergy);
    gray->NeedsCollisionGeometry();
    gray->SetCollisionGeometry(coll);

    cocktail->AddGenerator(gener, "Hijing pPb", 1);
    cocktail->AddGenerator(gray, "Gray Particles", 1);
    
    return cocktail;
  }
  /** 
   * Make a DPMJet generator for pp, AA, pA, or Ap. 
   * 
   * @param fragments If true, make fragments 
   * 
   * @return Generator 
   */
  AliGenerator* Dpmjet(Float_t minB, Float_t maxB, 
		       Bool_t fragments=0)
  {
    LoadDpmjet();
    AliGenDPMjet* dpmjet = new AliGenDPMjet(-1); 
    dpmjet->SetEnergyCMS(grp->energy);
    dpmjet->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    dpmjet->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    dpmjet->SetImpactParameterRange(minB, maxB);
    dpmjet->SetProjectileBeamEnergy(grp->beam2.z*grp->beamEnergy/grp->beam2.a);
    if (grp->IsAA()) { 
      dpmjet->SetPi0Decay(0);
    }
    else if (grp->IsPA() || grp->IsAP()) { 
      // dpmjet->SetTriggerParticle(3312, 1.2, 2.0);
      dpmjet->SetFragmentProd(fragments); // Alwas disabled 
    }
    else if (grp->IsPP()) { // PhoJet
      dpmjet->SetMomentumRange(0, 999999.);
      dpmjet->SetThetaRange(0., 180.);
      dpmjet->SetYRange(-12.,12.);
      dpmjet->SetPtRange(0,1000.);
    }
    return dpmjet;
  }
  /** 
   * Make an AMPT generator for AA collisions 
   * 
   * @return Generator 
   */
  AliGenerator* Ampt(Float_t minB, Float_t maxB)
  {
    LoadAmpt();
    AliGenAmpt *genHi = new AliGenAmpt(-1);
    genHi->SetEnergyCMS(grp->energy);
    genHi->SetReferenceFrame("CMS");
    genHi->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    genHi->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    genHi->SetPtHardMin (2);
    genHi->SetImpactParameterRange(minB,maxB);
    // disable jet quenching
    genHi->SetJetQuenching(0); 
    // enable shadowing
    genHi->SetShadowing(1);    
    // neutral pion and heavy particle decays switched off
    genHi->SetDecaysOff(1);
    genHi->SetSpectators(0);   // track spectators 
    genHi->KeepFullEvent();
    genHi->SetSelectAll(0);
    return genHi;
  }
  /** 
   * Make an HydJet generator for A-A
   * 
   * @return Generator 
   */
  AliGenerator* Hydjet(Float_t minB, Float_t maxB)
  {
    LoadHydjet();
    AliGenUHKM *genHi = new AliGenUHKM(-1);
    genHi->SetAllParametersLHC();
    genHi->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    genHi->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    genHi->SetEcms(grp->energy);
    genHi->SetEnergyCMS(grp->energy);
    genHi->SetBmin(minB);
    genHi->SetBmax(maxB);
    genHi->SetPyquenPtmin(9);
    return genHi;
  }
  // === Lego ========================================================
  /** 
   * Greate a lego event generator 
   * 
   * @param tune Possible tune 
   * 
   * @return newly allocated generator or null
   */
  AliGenerator* Lego(const TString & variant)
  {
    fIsLego = true;
    return 0;
#if 0
    TString v(variant);
    v.ToUpper();
    v.ReplaceAll("LEGO", "");
    Info("Setup", "Making Lego event generator (variant: %s)", v.Data());

    AliLegoGenerator* ret = 0;
    // XYZ varies origin of the particles in two dimensions:
    //  X:  o=(0,t1,t2), p=(1,0,0)
    //  Y:  o=(t1,0,t2), p=(0,1,0)
    //  Z:  o=(t1,t2,0), p=(0,0,1)
    // PhiZ varies the momentum in two dimensions
    //  o=(0,0,t1) p=(cos(t2),sin(t2),0)
    // Eta varies momentum in two dimensions
    //  phi=t1
    //  theta=2*atan(exp(-t2))
    //  o=(0,0,0) p=(cos(phi)*sin(theta),sin(phi)*cos(theta),cos(theta))
    // Base varies in two dimensions
    //  phi=t1
    //  theta=t2
    //  o=(0,0,0) p=(cos(phi)*sin(theta),sin(phi)*cos(theta),cos(theta))    
    if (v.BeginsWith("X") || v.BeginsWith) {
      const char* c[] = { v(0), '\0' };
      ret = new AliLegoGeneratorXYZ(c);
      ret->SetCoor1Range(10,-2,2);   // Y, X
      ret->SetCoor2Range(10,-10,10); // Z
    }
    else if (v.BeginsWith("Z")) {
      ret = new AliLegoGeneratorXYZ("Z");
      ret->SetCoor1Range(10,-2,2);   // X
      ret->SetCoor2Range(10,-2,2);   // Y
    }
    else if (v.BeginsWith("PHIZ")) {
      ret = new AliLegoGeneratorPhiZ();
      ret->SetCoor1Range(10,-10,10); // Z
      ret->SetCoor2Range(360,0,360); // phi
    }
    else if (v.BeginsWith("ETA")) {
      ret = new AliLegoGeneratorEta();
      ret->SetCoor1Range(360,0,360); // phi
      Double_t aEta = 7;
      Double_t dEta = (6--4)/200;
      ret->SetCoor2Range(2*aEta/dEta,-aEta,+aEta); // Eta
    }
    else {
      ret = new AliLegoGenerator();
      ret->SetCoor1Range(180,0,180); // theta
      ret->SetCoor1Range(360,0,360); // phi
    }
    return ret;
#endif
  }

  /** 
   * Make a heavy flavour cocktail 
   * 
   * @param base Underlying event. 
   * 
   * @return Generator 
   */
  AliGeneator* HFCocktail(const TString& base, Float_t minB, Float_t maxB) 
  {
    
    AliGenCocktail *cocktail = new AliGenCocktail();
    cocktail->SetTarget    (grp->beam1.Name(), grp->beam1.a, grp->beam1.z);
    cocktail->SetProjectile(grp->beam2.Name(), grp->beam2.a, grp->beam2.z);
    cocktail->SetEnergyCMS(grp->energy);
    
    // Add underlying event
    if (base.BeginsWith("ampt", TString::kIgnoreCase)) { 
      hi = Ampt(minB, maxB);
      cocktail->AddGenerator(hi,"ampt",1);
    }
    else { 
      hi = Hijing(minB, maxB, grp->IsPA() || grp->IsAP(), false, 2.3);
      cocktail->AddGenerator(hi,"hijing",1);

    }

    // --- Default formula -------------------------------------------
    TForumla* one = new TFormula("one", "1.");

    // --- Pythia ----------------------------------------------------
    AliGenerator* pythia = PythiaHF(hftype);
    switch (hftype) { 
    case 6: 
      cocktail->AddGenerator(pythia, "pythiaJets", 1, one);
      break;
    defualt:
      cocktail
	->AddGenerator(pythia, "pythiaHF", 1, 
		       new TFormula("Signals", 
				    "20.*(x<5.)+80./3.*(1.-x/20.)*(x>5.)"));
      break;
    }
    // --- Dummy -----------------------------------------------------
    AliGenParam* param = 0;

    // --- Phos stuff ------------------------------------------------
    AliGenPHOSlib *plib = new AliGenPHOSlib();
    Double_t lower[] = { 0, 3, 6, 9, 12, -1 };
    Double_t *pLow   = lower;
    for (Int_t i = 0; i < 5; i++) {
      param = new AliGenParam(5, plib, AliGenPHOSlib::kPi0);
      param->SetPhiRange(0., 360.) ;
      param->SetYRange(-1.2, 1.2) ;
      param->SetPtRange(lower[i], 30.) ;
      cocktail->AddGenerator(param,Form("Pi0HagPt%d", i), 1., one);
    }

    // --- Jpsi->mu+ mu-----------------------------------------------
    param = new AliGenParam(1, AliGenMUONlib::kJpsi, "CDF pp 3.94", "Jpsi");
    param->SetPtRange(0.,999.);
    param->SetYRange(-4.2, -2.3);
    param->SetPhiRange(0.,360.);
    param->SetForceDecay(kDiMuon);
    param->SetCutOnChild(1);
    param->SetChildPhiRange(0.,360.);
    param->SetChildThetaRange(168.5,178.5);
    cocktail->AddGenerator(param, "Jpsi2M", 1, one); 

    // --- Chi_c -> J/Psi + gamma, J/Psi -> e+e- ---------------------
    Float_t thmin  = (180./TMath::Pi())*2.*atan(exp(-1.2));  
    Float_t thmax  = (180./TMath::Pi())*2.*atan(exp( 1.2));  
    param  = new AliGenParam(1, AliGenMUONlib::kChic,"default","Chic");
    param->SetMomentumRange(0, 999.);        // Wide cut on the momentum
    param->SetPtRange(0, 100.);              // Wide cut on Pt
    param->SetYRange(-2.5, 2.5);
    param->SetCutOnChild(1);                 // Enable cuts on decay products
    param->SetChildPhiRange(0., 360.);
    // In the acceptance of the Central Barrel
    param->SetChildThetaRange(thmin, thmax); 
    // Chi_c -> J/Psi + gamma, J/Psi -> e+e-
    param->SetForceDecay(kChiToJpsiGammaToElectronElectron); 
    cocktail->AddGenerator(param, "Chi_c", 1, one); 

    // --- Dummy -----------------------------------------------------
    AliGenBox* box = 0;

    // --- Some particles --------------------------------------------
    Double_t    boxR   = gRandom->Integer(3)+1;
    Int_t       boxP[] = { 310, 3122,   3312, 3322, 
			   (boxR==1 ?3334: boxR==2 ?-3334: -3312) };
    Int_t       boxN[] = {   1,    1,      3,    3, 1 }
    const char* boxT[] = { "K0s", "Lambda", "Xi-", "Xi0", 
			   (boxR==1 ? "Omega-": boxR==2 ? "Omega+": "Xi+") };
    for (Int_t i = 0; i < 5; i++) {
      box = new AliGenBox(boxN[i]);
      box->SetPart(boxP[i]);
      box->SetPtRange(0,13);
      box->SetThetaRange(45, 135);
      cocktail->AddGenerator(box, boxT[i], 1, one);
    }
    
    // --- High pT charged particle ----------------------------------
    TFormula* hptF = new TFormula("High Pt", 
				  "5.*(x<5.)+20./3.*(1.-x/20.)*(x > 5.)");
    Int_t       hptP[] = { 211, 321, 2212 };
    const char* hptT[] = { "pi", "K", "p" };
    for (Int_t i = 0; i < 3; i++) { 
      for (Int_t j = -1; j <= 1; j++) {
	box->SetPart(j*hptP[i]);
	box->SetPtRange(2., 50.);
	box->SetThetaRange(thmin, thmax);
	cocktail->AddGenerator(box, Form("%s%c",hptT[i],(j<0,'-','+')),1,hptF);
      }
    }
    return cocktail;
  }

};

void 
EGConfig()
{
  ::Info("EGConfig", "Creating EG factory");
  egCfg = new EGCfg;
}

// 
// EOF
// 


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