sim_upto_emc(Int_t nEvents = 20000) { //-----User Settings:----------------------------------------------- TString OutputFile ="sim_complete_20k_upto_emc.root"; TString ParOutputfile ="simparams_20k_upto_emc.root"; TString MediaFile ="media_pnd.geo"; gDebug = 0; TString digiFile = "all.par"; //The emc run the hit producer directly double BeamMomentum =15.0; // ** change HERE if you run Box generator TString SimEngine ="TGeant4"; //------------------------------------------------------------------ TStopwatch timer; timer.Start(); gRandom->SetSeed(); // Create the Simulation run manager-------------------------------- FairRunSim *fRun = new FairRunSim(); fRun->SetName(SimEngine.Data() ); fRun->SetOutputFile(OutputFile.Data()); fRun->SetWriteRunInfoFile(kFALSE); fRun->SetBeamMom(BeamMomentum); fRun->SetMaterials(MediaFile.Data()); fRun->SetRadLenRegister(true); //fRun->SetRadMapRegister(true); //fRun->SetRadGridRegister(true); FairRuntimeDb *rtdb=fRun->GetRuntimeDb(); // Set the parameters //------------------------------- TString allDigiFile = gSystem->Getenv("VMCWORKDIR"); allDigiFile += "/macro/params/"; allDigiFile += digiFile; //-------Set the parameter output -------------------- FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo(); parIo1->open(allDigiFile.Data(),"in"); rtdb->setFirstInput(parIo1); //---------------------Set Parameter output ---------- Bool_t kParameterMerged=kTRUE; FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged); output->open(ParOutputfile.Data()); rtdb->setOutput(output); // Create and add detectors //------------------------- CAVE ----------------- FairModule *Cave= new PndCave("CAVE"); Cave->SetGeometryFileName("pndcave.geo"); fRun->AddModule(Cave); //------------------------- Magnet ----------------- FairModule *Magnet= new PndMagnet("MAGNET"); //Magnet->SetGeometryFileName("FullSolenoid_V842.root"); Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root"); fRun->AddModule(Magnet); FairModule *Dipole= new PndMagnet("MAGNET"); Dipole->SetGeometryFileName("dipole.geo"); fRun->AddModule(Dipole); //------------------------- Pipe ----------------- FairModule *Pipe= new PndPipe("PIPE"); Pipe->SetGeometryFileName("beampipe_201309.root"); fRun->AddModule(Pipe); //------------------------- STT ----------------- FairDetector *Stt= new PndStt("STT", kTRUE); Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo"); fRun->AddModule(Stt); //------------------------- MVD ----------------- FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE); Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root"); fRun->AddModule(Mvd); //------------------------- GEM ----------------- FairDetector *Gem = new PndGemDetector("GEM", kTRUE); Gem->SetGeometryFileName("gem_3Stations.root"); fRun->AddModule(Gem); //------------------------- EMC ----------------- PndEmc *Emc = new PndEmc("EMC",kTRUE); Emc->SetGeometryVersion(1); Emc->SetStorageOfData(kFALSE); fRun->AddModule(Emc); ////------------------------- SCITIL ----------------- //FairDetector *SciT = new PndSciT("SCIT",kTRUE); //SciT->SetGeometryFileName("barrel-SciTil_07022013.root"); //fRun->AddModule(SciT); // ////------------------------- DRC ----------------- //PndDrc *Drc = new PndDrc("DIRC", kTRUE); //Drc->SetGeometryFileName("dirc_l0_p0_updated.root"); //Drc->SetRunCherenkov(kFALSE); //fRun->AddModule(Drc); // ////------------------------- DISC ----------------- //PndDsk* Dsk = new PndDsk("DSK", kTRUE); //Dsk->SetStoreCerenkovs(kFALSE); //Dsk->SetStoreTrackPoints(kFALSE); //fRun->AddModule(Dsk); // ////------------------------- MDT ----------------- //PndMdt *Muo = new PndMdt("MDT",kTRUE); //Muo->SetBarrel("fast"); //Muo->SetEndcap("fast"); //Muo->SetMuonFilter("fast"); //Muo->SetForward("fast"); //Muo->SetMdtMagnet(kTRUE); //Muo->SetMdtMFIron(kTRUE); //fRun->AddModule(Muo); // ////------------------------- FTS ----------------- //FairDetector *Fts= new PndFts("FTS", kTRUE); //Fts->SetGeometryFileName("fts.geo"); //fRun->AddModule(Fts); // ////------------------------- FTOF ----------------- //FairDetector *FTof = new PndFtof("FTOF",kTRUE); //FTof->SetGeometryFileName("ftofwall.root"); //fRun->AddModule(FTof); // ////------------------------- RICH ---------------- //FairDetector *Rich= new PndRich("RICH",kFALSE); //Rich->SetGeometryFileName("rich_v2_shift.geo"); //fRun->AddModule(Rich); // Create and Set Event Generator //------------------------------- FairPrimaryGenerator* primGen = new FairPrimaryGenerator(); fRun->SetGenerator(primGen); FairBoxGenerator* boxGen = new FairBoxGenerator(0, 1); boxGen->SetPRange(2.0,2.0); // GeV/c boxGen->SetPhiRange(0., 360.); // Azimuth angle range [degree] boxGen->SetThetaRange(0., 180.); // Polar angle in lab system range [degree] boxGen->SetXYZ(0., 0., 0.); // cm primGen->AddGenerator(boxGen); //---------------------Create and Set the Field(s)---------- PndMultiField *fField= new PndMultiField("FULL"); fRun->SetField(fField); // EMC Hit producer //------------------------------- PndEmcHitProducer* emcHitProd = new PndEmcHitProducer(); fRun->AddTask(emcHitProd); //------------------------- Initialize the RUN ----------------- fRun->Init(); //------------------------- Run the Simulation ----------------- fRun->Run(nEvents); //------------------------- Save the parameters ----------------- rtdb->saveOutput(); //------------------------Print some info and exit---------------- timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime); cout << " Test passed" << endl; cout << " All ok " << endl; //exit(0); }
void makeDummy(const Int_t nEvents = 10) { gRandom -> SetSeed(time(0)); //TString dir = gSystem->Getenv("SPIRITDIR"); //TString geomdir = dir + "/geometry"; //gSystem->Setenv("GEOMPATH", geomdir.Data()); FairLogger *logger = FairLogger::GetLogger(); logger->SetLogToScreen(kTRUE); logger->SetLogVerbosityLevel("MEDIUM"); TString outFile = "mc.dummy.root"; TString parFile = "param.dummy.root"; // ----- Create simulation run ---------------------------------------- // FairRunSim* run = new FairRunSim(); run->SetName("TGeant4"); // Transport engine run->SetOutputFile(outFile); // Output file run->SetWriteRunInfoFile(kFALSE); FairRuntimeDb* rtdb = run->GetRuntimeDb(); ATVertexPropagator* vertex_prop = new ATVertexPropagator(); // ------------------------------------------------------------------------ // ----- Create geometry ---------------------------------------------- /*FairModule* cave= new FairCave("CAVE"); cave->SetGeometryFileName("cave_vacuum.geo"); run->AddModule(cave); FairModule* target= new FairTarget("SnTarget"); target->SetGeometryFileName("target.geo"); run->AddModule(target); FairDetector* spirit = new STDetector("STDetector", kTRUE); spirit->SetGeometryFileName("spirit_v03.1.root"); run->AddModule(spirit);*/ FairModule* cave= new AtCave("CAVE"); cave->SetGeometryFileName("cave.geo"); run->AddModule(cave); FairModule* magnet = new AtMagnet("Magnet"); run->AddModule(magnet); FairModule* pipe = new AtPipe("Pipe"); run->AddModule(pipe); FairDetector* ATTPC = new AtTpc("ATTPC", kTRUE); ATTPC->SetGeometryFileName("ATTPC_v1.1.root"); //ATTPC->SetModifyGeometry(kTRUE); run->AddModule(ATTPC); // ------------------------------------------------------------------------ run->SetMaterials("media.geo"); // ----- Create PrimaryGenerator -------------------------------------- FairPrimaryGenerator *primGen = new FairPrimaryGenerator(); FairParticleGenerator *particleGen = new FairParticleGenerator(2112, 1, 0, 0, 0, 0, 0, 0); primGen->AddGenerator(particleGen); run->SetGenerator(primGen); /* Int_t dnum=7; const int gennum=pid[dnum].size(); cout << gennum << endl; FairParticleGenerator *fIongen[gennum]; for (Int_t i=0; i<gennum; i++) { fIongen[i] = new FairParticleGenerator(pid[dnum][i],1,pxl[dnum][i],pyl[dnum][i],pzl[dnum][i],0.0,-21.33,-3.52); //cout << pid[dnum][i] << "\t" << pxl[dnum][i] << "\t" << pyl[dnum][i] << "\t" << pzl[dnum][i] << "\t" << kinl[dnum][i] << endl; primGen->AddGenerator(fIongen[i]); } //primGen->AddTrack(pdg,pionpC[0][i],pionpC[1][i],pionpC[2][i],pionrC[0][i]*1.0E-13,pionrC[1][i]*1.0E-13-21.33,pionrC[2][i]*1.0E-13-3.52); //fIongen[i] = new FairParticleGenerator(pdg,1,pionpC[0][i],pionpC[1][i],pionpC[2][i],pionrC[0][i]*1.0E-13,pionrC[1][i]*1.0E-13-21.33,pionrC[2][i]*1.0E-13-3.52); //fIongen[i] = new FairParticleGenerator(pdg,1,px,py,pz,0.0,-21.33,-3.52); //primGen->AddGenerator(fIongen[i]); //primGen->AddTrack(pdg,pionpC[0][i],pionpC[1][i],pionpC[2][i],pionrC[0][i]*1.0E-13,pionrC[1][i]*1.0E-13-21.33,pionrC[2][i]*1.0E-13-3.52); //} //} // if (partt==0) FairBoxGenerator* boxGen1 = new FairBoxGenerator(2212, 1); // if (partt==1) FairBoxGenerator* boxGen1 = new FairBoxGenerator(1000010020, 1); // if (partt==2) FairBoxGenerator* boxGen1 = new FairBoxGenerator(1000010030, 1); // if (partt==3) FairBoxGenerator* boxGen1 = new FairBoxGenerator(1000020030, 1); // if (partt==4) FairBoxGenerator* boxGen1 = new FairBoxGenerator(1000020040, 1); // if (partt==5) FairBoxGenerator* boxGen1 = new FairBoxGenerator(211, 1); // if (partt==6) FairBoxGenerator* boxGen1 = new FairBoxGenerator(-211, 1); // if (partt==7) FairBoxGenerator* boxGen1 = new FairBoxGenerator(11, 1); // if (partt==8) FairBoxGenerator* boxGen1 = new FairBoxGenerator(-11, 1); // //FairBoxGenerator* boxGen1 = new FairBoxGenerator(1000020040, 1); // boxGen1->SetPRange(0.25,0.5); //GeV/c ?? // boxGen1->SetPhiRange(0.,360.); //degrees // boxGen1->SetThetaRange(0.,90.); //degrees // boxGen1->SetXYZ(0.,-21.33, -3.52); // cm // primGen->AddGenerator(boxGen1); // ------------------------------------------------------------------------ run->SetStoreTraj(kTRUE); */ // ----- Run initialisation ------------------------------------------- run->Init(); // ------------------------------------------------------------------------ // ----- Runtime database --------------------------------------------- Bool_t kParameterMerged = kTRUE; FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged); parOut->open(parFile.Data()); rtdb->setOutput(parOut); rtdb->saveOutput(); // ------------------------------------------------------------------------ // ----- Start run ---------------------------------------------------- run->Run(nEvents); // ----- Finish ------------------------------------------------------- }