/* $Id: CbmRichSimulate.C,v 1.6 2006/09/15 12:50:52 turany Exp $ */ /* History of cvs commits: * * $Log: CbmRichSimulate.C,v $ * Revision 1.6 2006/09/15 12:50:52 turany * load the base before the field * * Revision 1.5 2006/03/31 11:25:18 turany * adapt to the changes in the Framework * * Revision 1.4 2006/02/17 23:41:48 sgorboun * the order of loading of libraries changed * * Revision 1.3 2006/02/03 15:22:01 kharlov * Add libKF to satisfy lib dependencies * * Revision 1.2 2005/06/24 15:38:47 kharlov * Create directory parfiles * * Revision 1.1 2005/06/24 14:40:42 kharlov * First adaptation of RICH scripts for cbmroot2 * */ CbmRichSimulate(const Int_t nEvents = 10, const Int_t kfCode=11) { //---------------------------------------------------------------------- // Simulation of single particle in CBM // paramenets: // nEvents - number of events to simulate // kfCode - particle PDG code to generate //---------------------------------------------------------------------- TStopwatch timer; timer.Start(); // gDebug=0; // Load basic libraries gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C"); basiclibs(); // Load this example libraries gSystem->Load("libGeoBase"); gSystem->Load("libParBase"); gSystem->Load("libBase"); gSystem->Load("libField"); gSystem->Load("libPassive"); gSystem->Load("libSts"); gSystem->Load("libTof"); gSystem->Load("libRich"); gSystem->Load("libTrd"); gSystem->Load("libEcal"); gSystem->Load("libGen"); gSystem->Load("libGlobal"); gSystem->Load("libKF"); // Set Random Number seed Int_t rndm=0; if (gSystem->Getenv("RANDOM")) { rndm = atoi(gSystem->Getenv("RANDOM")); } gRandom->SetSeed(rndm); // Set 0 to use the current time cout<<"Seed for random number generation= "<GetSeed()<SetName("TGeant4"); // Choose the Geant Navigation System // fRun->SetGeoModel("G3Native"); fRun->SetOutputFile("Electron.root"); ////// Set Material file Name ///////////////////////////////////// fRun->SetMaterials("media.geo"); ///////////////////Create and add detectors///////////////////////// CbmModule *Cave= new CbmCave("cave"); Cave->SetGeometryFileName("cave.geo"); fRun->AddModule(Cave); CbmModule *Pipe= new CbmPipe("PIPE"); Pipe->SetGeometryFileName("pipe.geo"); fRun->AddModule(Pipe); CbmModule *Magnet= new CbmMagnet("MAGNET"); Magnet->SetGeometryFileName("magnet.geo"); fRun->AddModule(Magnet); CbmDetector *STS= new CbmSts("STS", kTRUE); STS->SetGeometryFileName("sts.geo"); fRun->AddModule(STS); CbmModule *Target= new CbmTarget("Target"); Target->SetGeometryFileName("target.geo"); fRun->AddModule(Target); CbmDetector *TOF= new CbmTof("TOF", kTRUE ); TOF->SetGeometryFileName("tof.geo"); fRun->AddModule(TOF); CbmDetector *TRD= new CbmTrd("TRD",kTRUE ); TRD->SetGeometryFileName("trd_9.geo"); fRun->AddModule(TRD); CbmDetector *RICH= new CbmRich("RICH", kTRUE); RICH->SetGeometryFileName("rich.geo"); fRun->AddModule(RICH); ///////////////////Create and Set Event Generator /////////////////////// /******************** Define input **********************************/ CbmPrimaryGenerator* primGen = new CbmPrimaryGenerator(); fRun->SetGenerator(primGen); /******************** Define input **********************************/ CbmBoxGenerator* boxGen = new CbmBoxGenerator(kfCode, 1); boxGen->SetPtRange(0.,5.); boxGen->SetThetaRange(2.,30.); boxGen->Init(); primGen->AddGenerator(boxGen); cout << "Setting the Magnetic field " << endl; // setting a field map TString fieldMap="FieldActive"; // ----- Create magnetic field ---------------------------------------- if ( fieldMap == "FieldActive" || fieldMap == "FieldIron") magField = new CbmFieldMapSym3(fieldMap); else if ( fieldMap == "FieldAlligator" ) magField = new CbmFieldMapSym2(fieldMap); else { cout << "===> ERROR: Field map " << fieldMap << " unknown! " << endl; exit; } magField->SetPosition(0., 0., 50.0); magField->SetScale(1); // ------------------------------------------------------------------------ fRun->SetField(magField); fRun->Init(); // -Trajectories Visualization (TGeoManager Only ) // ----------------------------------------------- // fRun->SetStoreTraj(kTRUE); // Set cuts for storing the trajectpries /* CbmTrajFilter* trajFilter = CbmTrajFilter::Instance(); trajFilter->SetStepSizeCut(0.01); // 1 cm trajFilter->SetVertexCut(-2000., -2000., 4., 2000., 2000., 100.); trajFilter->SetMomentumCutP(10e-3); // p_lab > 10 MeV trajFilter->SetEnergyCut(0., 1.02); // 0 < Etot < 1.04 GeV trajFilter->SetStorePrimaries(kTRUE); trajFilter->SetStoreSecondaries(kTRUE); */ // Fill the Parameter containers for this run //------------------------------------------- gSystem->Exec("mkdir -pv parfiles"); CbmRuntimeDb *rtdb=fRun->GetRuntimeDb(); Bool_t kParameterMerged=kTRUE; CbmParRootFileIo* output=new CbmParRootFileIo(kParameterMerged); output->open("parfiles/testparams.root"); rtdb->setOutput(output); rtdb->saveOutput(); rtdb->print(); // Transport nEvents // ----------------- fRun->Run(nEvents); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime); // delete fRun; }