void Run_Sim_GeoOpt_Batch(Int_t nEvents = 1) { float PMTrotX=20, PMTrotY=10; int PMTtransY=-40, PMTtransZ=80; float ThetaMin=250., ThetaMax=2500.;//devide by 100 later float PhiMin=90., PhiMax=180.; int GeoCase=2, DimCase=3; float EnlargedPMTWidth=60., EnlargedPMTHight=36.; int PtNotP=1; float MomMin=0., MomMax=400;//devide by 100 later float RotMir=-10; int extendedmir=1; int OldCode=0; int DefaultDims=0; int DefaultDims_LargePMT=0; bool StoreTraj=0; TString ExtraText=".";// //ExtraText="_Updated.";// if(DimCase ==0){ExtraText="";} TString script = TString(gSystem->Getenv("SCRIPT")); if (script == "yes"){ cout<<" ----------------- running with script --------------------"<Getenv("N_EVS")).Atof(); PMTrotX=TString(gSystem->Getenv("PMT_ROTX")).Atof(); PMTrotY=TString(gSystem->Getenv("PMT_ROTY")).Atof(); PMTtransY=TString(gSystem->Getenv("PMT_TRAY")).Atof(); PMTtransZ=TString(gSystem->Getenv("PMT_TRAZ")).Atof(); ThetaMin=TString(gSystem->Getenv("THETAMIN")).Atof(); ThetaMax=TString(gSystem->Getenv("THETAMAX")).Atof(); PhiMin=TString(gSystem->Getenv("PHIMIN")).Atof(); PhiMax=TString(gSystem->Getenv("PHIMAX")).Atof(); GeoCase=TString(gSystem->Getenv("GEO_CASE")).Atof(); DimCase=TString(gSystem->Getenv("DIM_CASE")).Atof(); EnlargedPMTWidth=TString(gSystem->Getenv("ENL_PMTWIDTH")).Atof(); EnlargedPMTHight=TString(gSystem->Getenv("ENL_PMTHIGHT")).Atof(); PtNotP=TString(gSystem->Getenv("PT_NOT_P")).Atof(); MomMin=TString(gSystem->Getenv("MOM_MIN")).Atof(); MomMax=TString(gSystem->Getenv("MOM_MAX")).Atof(); ///////// RotMir=TString(gSystem->Getenv("ROTMIR")).Atof(); extendedmir=TString(gSystem->Getenv("EXTENDEDMIR")).Atof(); OldCode=TString(gSystem->Getenv("OLDCODE")).Atof(); DefaultDims=TString(gSystem->Getenv("DEFAULDIMS")).Atof(); DefaultDims_LargePMT=TString(gSystem->Getenv("DEFAULDIMSLPMT")).Atof(); ExtraText=TString(gSystem->Getenv("EXTRATEXT")); } cout<<"PMTrotX="<< PMTrotX<<" PMTrotY="<< PMTrotY<<" PMTtransY="<< PMTtransY<<" PMTtransZ="<< PMTtransZ<<" ThetaMin="<< ThetaMin<<" ThetaMax="<< ThetaMax<<" PhiMin="<< PhiMin<<" PhiMax="<< PhiMax<<" GeoCase="<< GeoCase<<" DimCase="<< DimCase<<" EnlargedPMTWidth="<< EnlargedPMTWidth<<" EnlargedPMTHight="<< EnlargedPMTHight<<" PtNotP="<< PtNotP<<" MomMin="<< MomMin<<" MomMax="<< MomMax<<" rotmir="<< RotMir<<" extendedmir="<< extendedmir<<" DefaultDims="<< DefaultDims<<" DefaultDims_LargePMT="<< DefaultDims_LargePMT<<" ="<Exec( ("rm "+ParFile).Data() ); // gSystem->Exec( ("rm "+SimFile).Data() ); // gSystem->Exec( ("rm "+OutPutGeoFile).Data() ); cout<<"par: "<LoadMacro("$VMCWORKDIR/macro/littrack/loadlibs.C"); loadlibs(); cout<<" got libraries"<SetName("TGeant3"); // Transport engine fRun->SetOutputFile(SimFile); FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); fRun->SetMaterials("media.geo"); // Materials if ( caveGeom != "" ) { FairModule* cave = new CbmCave("CAVE"); cave->SetGeometryFileName(caveGeom); fRun->AddModule(cave); } if ( pipeGeom != "") { FairModule* pipe = new CbmPipe("PIPE"); pipe->SetGeometryFileName(pipeGeom); fRun->AddModule(pipe); } if ( magnetGeom != "") { FairModule* magnet = new CbmMagnet("MAGNET"); magnet->SetGeometryFileName(magnetGeom); fRun->AddModule(magnet); } if ( stsGeom != "") { FairDetector* sts = new CbmStsMC(kTRUE); sts->SetGeometryFileName(stsGeom); fRun->AddModule(sts); } if ( richGeom != "") { //FairDetector* rich = new CbmRich("RICH", kTRUE); CbmRich* rich = new CbmRich("RICH", kTRUE); rich->SetGeometryFileName(richGeom); rich->SetRegisterPhotonsOnSensitivePlane(kTRUE); // Cerenkov photons are also registered in the sim tree fRun->AddModule(rich); } CbmFieldMap* magField = new CbmFieldMapSym2(fieldMap); magField->SetPosition(0., 0., fieldZ); magField->SetScale(fieldScale); fRun->SetField(magField); FairPrimaryGenerator* primGen = new FairPrimaryGenerator(); // e+/- FairBoxGenerator* boxGen1 = new FairBoxGenerator(11, 1); if(PtNotP==1){boxGen1->SetPtRange(MomMin,MomMax); } else{boxGen1->SetPRange(MomMin,MomMax); } // boxGen1->SetPRange(0.,10.); //boxGen1->SetPtRange(0.,4.); boxGen1->SetPhiRange(PhiMin,PhiMax);//0.,360.); boxGen1->SetThetaRange(ThetaMin,ThetaMax);//2.5,25.); boxGen1->SetCosTheta(); FairBoxGenerator* boxGen2 = new FairBoxGenerator(-11, 1); if(PtNotP==1){boxGen2->SetPtRange(MomMin,MomMax); } else{boxGen2->SetPRange(MomMin,MomMax); } // boxGen2->SetPtRange(0.,4.); // boxGen2->SetPRange(0.,10.); boxGen2->SetPhiRange(PhiMin,PhiMax);//0.,360.); boxGen2->SetThetaRange(ThetaMin,ThetaMax);//2.5,25.); boxGen2->SetCosTheta(); if(ExtraText == "_MirrUpdated_Electrons."){ cout<<"gggggggggggggggggggggg electrons "<Init();//el primGen->AddGenerator(boxGen1); } else if(ExtraText == "_MirrUpdated_Positrons."){ cout<<"gggggggggggggggggggggg positrons "<Init();//pos primGen->AddGenerator(boxGen2); }else{ cout<<"gggggggggggggggggggggg electrons and positrons"<Init();//el primGen->AddGenerator(boxGen1); boxGen2->Init();//pos primGen->AddGenerator(boxGen2); } fRun->SetGenerator(primGen); if(StoreTraj){fRun->SetStoreTraj(kTRUE);} fRun->Init(); if(StoreTraj){ FairTrajFilter* trajFilter = FairTrajFilter::Instance(); trajFilter->SetStepSizeCut(0.01); // 1 cm trajFilter->SetVertexCut(-2000., -2000., -2000., 2000., 2000., 2000.); trajFilter->SetMomentumCutP(0.); // p_lab > 0 trajFilter->SetEnergyCut(0., 10.); // 0 < Etot < 10 GeV trajFilter->SetStorePrimaries(kTRUE);//kFALSE);//kTRUE); } CbmFieldPar* fieldPar = (CbmFieldPar*) rtdb->getContainer("CbmFieldPar"); fieldPar->SetParameters(magField); fieldPar->setChanged(); fieldPar->setInputVersion(fRun->GetRunId(),1); Bool_t kParameterMerged = kTRUE; FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged); parOut->open(ParFile.Data()); rtdb->setOutput(parOut); rtdb->saveOutput(); rtdb->print(); fRun->Run(nEvents); fRun->CreateGeometryFile(OutPutGeoFile); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); cout << endl << endl; cout << "Macro finished succesfully." << endl; cout << "Output file is " << SimFile << endl; cout << "Parameter file is " << ParFile << endl; cout << "Real time " << rtime << " s, CPU time " << ctime << "s" << endl << endl; cout << " Test passed" << endl; cout << " All ok " << endl; cout << "====================================================" << endl; cout << "=================== Test Overlaps ==================" << endl; gGeoManager->CheckOverlaps(0.001); gGeoManager->PrintOverlaps(); TObjArray *overlapArray = gGeoManager->GetListOfOverlaps(); Int_t numOverlaps = overlapArray->GetEntries(); if ( numOverlaps != 0 ) { cout << "=================== Test failed =============="<< endl; cout << " We have in total "< old geometry with rich_v08a.geo (RICH starts at 1600, Mirror tilt -1) //GeoCase=-1 ==> old geometry with rich_v14a.gdml (RICH starts at 1800, Mirror tilt -1) //GeoCase=0 ==> old geometry with *.geo (own creation)(RICH starts at 1600, Mirror tilt -1) //GeoCase=1 ==> gdml-geo: RICH starts at 1800, Mirror tilt -1 or 10, // mirror does NOT cover full acceptance) //GeoCase=2 ==> gdml-geo: RICH starts at 1800, Mirror tilt -1 or 10, // mirror does cover full acceptance) if(GeoCase==-2){return "RichGeo_v08a";} if(GeoCase==-1){return "RichGeo_v14a";} if(GeoCase==0){return "RichGeo_ascii";} if(GeoCase==1){return "RichGeo_OldGdml";} if(GeoCase==2){return "RichGeo_NewGdml";} } //////////////////////////////////////////// TString GetOutDir(int GeoCase){ return "/nas/Tariq/GeoOpt/"; // return "/data/GeoOpt/Test2/"; // return "/data/GeoOpt/OptiPMTSize/"; return "/hera/cbm/users/tariq/MomScan/"; return "/hera/cbm/users/tariq/GeoOptRootFiles/OptimisedGeo/"; // if(GeoCase<=0){return "/data/GeoOpt/RotPMT/OlderGeo/";} // if(GeoCase==1){return "/data/GeoOpt/RotPMT/OldGeo/";} // if(GeoCase==2){return "/data/GeoOpt/RotPMT/NewGeo/";} } //////////////////////////////////////////// TString GetMirText(int RotMir, int extend){ char RotMir_txt[256]; if(RotMir<0){sprintf( RotMir_txt,"RotMir_m%d",RotMir*-1);} else{sprintf(RotMir_txt,"RotMir_p%d",RotMir);} stringstream ss; ss< old geometry with rich_v08a.geo (RICH starts at 1600, Mirror tilt -1) //GeoCase=-1 ==> old geometry with rich_v14a.gdml (RICH starts at 1800, Mirror tilt -1) if(GeoCase==-2){return "rich/rich_v08a.geo";} if(GeoCase==-1){return "rich/rich_v14a.root";} //GeoCase=0 ==> old geometry with *.geo (own creation)(RICH starts at 1600, Mirror tilt -1) //GeoCase=1 ==> gdml-geo: RICH starts at 1800, Mirror tilt -1 or 10, // mirror does NOT cover full acceptance) //GeoCase=2 ==> gdml-geo: RICH starts at 1800, Mirror tilt -1 or 10, // mirror does cover full acceptance) // return "/hera/cbm/users/tariq/cbmroot/geometry/rich/rich_v14a.root"; // GeoOpt/2015_minus10deg_.gdml"; // return "/data/cbmroot/macro/rich/geotest/RotPMT/CreateGeo/RichGeo_NominalDimensions_minus10deg_07122014.gdml"; // return "rich/GeoOpt/rich_geo_RotMir_m10_RotPMT_Xpos5point0_Ypos5point0_TransPMT_Y_p0_Z_p0_New.root"; //TString Dir="rich/GeoOpt/RotPMT/"; TString Dir="rich/GeoOpt"; TString Dir2="/NewGeo/"; TString Endung="root"; if(GeoCase==0){Dir2="/OldGeo/"; Endung=".geo";} if(GeoCase==1){Dir2="/OldGeo/";} if(GeoCase==2){Dir2="/";} stringstream ss; //ss<