
// $Id: run_g4.C,v 1.0 2007/06/01 
//
// Macro for running G4PAM_VMC with Geant4. 
void run_g4_testTRK(TString outfilename="/gpfs/wizard/flight/analysis/cecilia/trieste/pamVMC/pamtest",
		    UInt_t seed = 0, const TString& configMacro = "g4Config.C") {

    if (seed == 0) { // set random seed
      TRandom3 *r = new TRandom3(0);
      seed = r->GetSeed();
    }

    // Load basic libraries
    gROOT->LoadMacro("./macro/basiclibs.C");
    basiclibs();

    // Load PAMELA libs
    TString PAMLIB=gSystem->Getenv("PAM_LIB");
    gSystem->Load(PAMLIB+"/libyoda.so");
    gSystem->Load(PAMLIB+"/libDarthVader.so");
    gSystem->Load(PAMLIB+"/libPamLevel2.so");
    
    // Load Geant4 libraries
    
    gROOT->LoadMacro("./macro/PamG4Libs.C");
    PamG4Libs();
    
    // Load this example libraries
    TString G4WD=gSystem->Getenv("G4WORKDIR");
    TString PLAT=gSystem->Getenv("PLATFORM");
    gSystem->Load(G4WD+"/lib/tgt_"+PLAT+"/libPamVMC_fc");
    
    // MC application
    PamVMCApplication* appl 
      = new PamVMCApplication("PAMG4_VMC", "PAMELA GEANT4 VMC application", outfilename.Data(), seed);
    

    //appl->GetPrimaryGenerator()->SetNofPrimaries(1);  
        appl->SetVerboseLevel(0);
      
    // Macro to run with primary = polarized optical photon
    //gROOT->LoadMacro("optPhoton.C");
    //optPhoton();  
	appl->SetVerboseLevel(2);
    // Initialize MC
    appl->InitMC(configMacro, outfilename.Data(), seed);

    // Cecilia: set seed for random generator  
    TRandom3 *rndgen = new TRandom3(seed);
    ((TGeant4*)gMC)->SetRandom(rndgen);
    // Write seed in a txt file
    TString seedfname = outfilename;
    seedfname.Append("Seed.txt");
    cout<<" FILENAME "<<seedfname.Data()<<endl;
    FILE *seedfile = fopen(seedfname.Data(),"w");
    fprintf(seedfile,"%d\n",rndgen->GetSeed() );
    fclose(seedfile);
  
    cout<<"SEED "<<rndgen->GetSeed()<<endl;


    // Customise Geant4 setting after initialization:
    // Physics list
//     gMC->SetCut("CUTGAM", 1.0e-6);
//     gMC->SetCut("BCUTE", 1.0e-6);
//     gMC->SetCut("CUTELE", 1.0e-6);
//     gMC->SetCut("DCUTE", 1.0e-6);
//     gMC->SetCut("CUTNEU", 1.0e-6);
//     gMC->SetCut("CUTHAD", 1.0e-6);
//     gMC->SetCut("CUTMUO", 1.0e-6);
//     gMC->SetCut("DCUTM", 1.0e-6);
//     gMC->SetCut("BCUTM", 1.0e-6);
//     gMC->SetCut("PPCUTM", 1.0e-6);
//     gMC->SetCut("TOFMAX", 1.0e-3);
    
    ((TGeant4*)gMC)->ProcessGeantMacro("g4config2.in");
    // Visualization settings
    //((TGeant4*)gMC)->ProcessGeantMacro("g4vis.in");
 
   ((TGeant4*)gMC)->SetMaxNStep(50000);
   //appl->GetPrimaryGenerator()->SetParticle(1000060120);
    appl->GetPrimaryGenerator()->SetParticle(kElectron);
    //appl->GetPrimaryGenerator()->SetDirection(0.,0.);
    //appl->GetPrimaryGenerator()->SetKinEnergy(10.);
     //appl->GetPrimaryGenerator()->SetRigidity(1.0); //GV 
    //appl->GetPrimaryGenerator()->SetPosition(1.,1.,130.);

    // Run MC
    for (Int_t i=0; i<2; i++){
      cout<<"in Loop: Event nr."<<i<<" --<<--<<--<<--<<--<<--<<--"<<endl;
      // ritabrata 04.03.2009
      //appl->GetPrimaryGenerator()->SetKinEnergy(0.1);
      //if (i==0) appl->GetPrimaryGenerator()->SetKinEnergy(0.01);
      //appl->GetPrimaryGenerator()->GenSphDist(120.);
      // endritabrata

      // cecilia
       appl->GetPrimaryGenerator()->GenSphPhiThe(-25,25., -25.,25., 108.0,108.0);
       appl->GetPrimaryGenerator()->GenSpe(5.,30.,-3.3); 

      appl->RunMC(1);

    }
    
    appl->FinishRun();
    //   ((TGeant4*)gMC)->StartGeantUI();
    delete appl;

  }  
