//____________________________________________________________________________ /*! \class genie::BinParam, genie::GenParam \brief Data structure for gSeaGen \author Carla Distefano LNS-INFN, Catania Included modifications by Alfonso Garcia NIKHEF, Amsterdam (January 2019) \created May 13, 2012 \cpright Copyright (c) 2012-2019, The KM3NeT Collaboration For the full text of the license see $GSEAGEN/LICENSE */ //____________________________________________________________________________ #include "SeaEvent/GBinParam.h" using namespace std; GenParam::GenParam(){ // get gSeaGen version string VerFile = gSystem->Getenv("GSEAGEN"); VerFile.append("/VERSION"); ifstream file_stream(VerFile.c_str(), ios::in); file_stream>>gSeaGenVer; file_stream.close(); // get GENIE version GenieVer=BOOST_PP_STRINGIZE( __GENIE_RELEASE__); while(1){ size_t pos = GenieVer.find("\""); if(pos==string::npos)break; GenieVer.erase(pos,1); } this->SetDefParams(); this->LoadDefParams(); this->LoadMediaComp(); }; //____________________________________________________________________________ GenParam::~GenParam(){}; //____________________________________________________________________________ void GenParam::SetDefParams(void){ // Set default parameters, this function must be called before the GetCommandLineArgs or at beginning of it //running time time(&RunTime); RunNu = 100000000; NTot = 0; Rotation.SetToIdentity(); Can1 = 0.000; Can2 = 659.862; Can3 = 309.450; OriginX = 0.; OriginY = 0.; OriginZ = 0.; WriteParticlesMode = 0; SaveMu = true; SaveNu = false; ChancesPerShower = 0; for (int i=0; i<3; i++) CustomRotation[i] = 0.; SaveOther = false; WeightOpt = 1; Alpha=0.; Primary=-1; CRModel="GST3"; MaxNRec=0; EmuMin=0.; EPrimMin=0.; EPrimMax=0.; PrimCtMin=0.; PrimCtMax=0.; RhoSW = 1.03975; // g/cm3 RhoSR = 2.65; // g/cm3 NAbsLength = 3.; AbsLength = 70.; // m SiteDepth = 2475.; // m HBedRock = 0.; // m SiteLatitude = 0.74700; // in rad SiteLongitude = 0.10763; // in rad SiteDeclination = 2.28*acos(-1.)/180.; // in rad ; default value (declination of ORCA site on 12.01.2021 according to WMM2020) UTMConvergeAngle = 0.; // in rad, calculate at run-time UseUTMSystem = false; SeaBottomRadius=6368.E3; // m (Earth radius at the sea bottom level) NBin = 1; Alpha = 1.4; EvMin = 1.; EvMax = 1000.; CtMin = 0.; CtMax = 1.; RanSeed=12345; PropMode=false; Drawing="surface"; GenMode="DIFFUSE"; TGen = 1.; // 1 second EvFilePrefix = "gseagen"; // event file prefix (override with -o) NativeOutput = false; WriteEvt = false; WriteKM3NeT = false; WriteNative = false; #if defined _KM3NET_ENABLED__ WriteFormat.push_back("km3"); #else WriteFormat.push_back("et"); #endif PropCode = "PropaMuon"; PropCodeVer=""; PropagationStep=5.; DistAfterFirstStep=100.; MuonRangeTolerance=0.; PropagationTolerance=5.; // the default tolerance is 5m GenCode ="GENIE"; RTOpt = "can"; TrackEvts = 0; SourceName=""; Declination=0.; RightAscension=0.; SourceRadius=0.; TimeStampStart = 0; TimeStampStop = 0; MJDStart=0.; MJDStop=0.; GenMJD=false; InpXSecFile=("gxspl-FNALsmall.xml"); // standard genie official xsec file name EventGeneratorList="Default"; // media composition: SeaWater, Rock (Crust), Mantle, Core // SeaWater composition SeaWaterComp.insert(map::value_type(1000080160,0.8584)); // O16 SeaWaterComp.insert(map::value_type(1000010010,0.1082)); // H1 SeaWaterComp.insert(map::value_type(1000170350,1.94E-2)); // Cl35 SeaWaterComp.insert(map::value_type(1000110230,1.08E-2)); // Na23 SeaWaterComp.insert(map::value_type(1000120240,0.1292E-2)); // Mg24 SeaWaterComp.insert(map::value_type(1000160320,0.091E-2)); // S32 SeaWaterComp.insert(map::value_type(1000200400,0.04E-2)); // Ca40 SeaWaterComp.insert(map::value_type(1000190390,0.04E-2)); // K39 SeaWaterComp.insert(map::value_type(1000350800,0.0067E-2)); // Br80 SeaWaterComp.insert(map::value_type(1000060120,0.0028E-2)); // C12 // Rock composition: Crust RockComp.insert(map::value_type(1000080160,0.463)); // O16 RockComp.insert(map::value_type(1000140280,0.282)); // Si28 RockComp.insert(map::value_type(1000130270,0.0823)); // Al27 RockComp.insert(map::value_type(1000260560,0.0563)); // Fe56 RockComp.insert(map::value_type(1000200400,0.0415)); // Ca40 RockComp.insert(map::value_type(1000110230,0.0236)); // Na23 RockComp.insert(map::value_type(1000120240,0.0233)); // Mg24 RockComp.insert(map::value_type(1000190390,0.0209)); // K39 RockComp.insert(map::value_type(1000220480,0.0057)); // Ti48 RockComp.insert(map::value_type(1000010010,0.0014)); // H1 // Mantle composition MantleComp.insert(map::value_type(1000080160,0.4522)); // O16 MantleComp.insert(map::value_type(1000120240,0.2283)); // Mg24 MantleComp.insert(map::value_type(1000140280,0.2149)); // Si28 MantleComp.insert(map::value_type(1000260560,0.0597)); // Fe56 MantleComp.insert(map::value_type(1000130270,0.0225)); // Al27 MantleComp.insert(map::value_type(1000200400,0.0224)); // Ca40 // Core composition CoreComp.insert(map::value_type(1000260560,0.9)); // Fe56 CoreComp.insert(map::value_type(1000280580,0.1)); // Ni58 return; }; //____________________________________________________________________________ void GenParam::LoadDefParams(void){ // Load and re-define default parameters if request by the user if(gSystem->Getenv("DEFPARAM")){ xmlTextReaderPtr reader; string filename=gSystem->Getenv("DEFPARAM"); if(!(access(filename.c_str(), F_OK) != -1)){ //// LOG("gSeaNuEvGen", pFATAL) << filename <<" does not exist --> check env. parameter DEFPARAM; exiting..."; cout<< filename <<" does not exist --> check env. parameter DEFPARAM; exiting..."< cansize = utils::str::Split(incan, ","); assert(cansize.size() == 3); Can1 = atof(cansize[0].c_str()); Can2 = atof(cansize[1].c_str()); Can3 = atof(cansize[2].c_str()); } } else if(selem=="Origin"){ string inorig=(const char *)value; if(inorig.find(",") != string::npos){ // split the comma separated list vector origsize = utils::str::Split(inorig, ","); assert(origsize.size() == 3); OriginX = atof(origsize[0].c_str()); OriginY = atof(origsize[1].c_str()); OriginZ = atof(origsize[2].c_str()); } } else if(selem=="SiteLatitude"){ SiteLatitude=atof((const char *)value); } else if(selem=="SiteLongitude"){ SiteLongitude=atof((const char *)value); } else if(selem=="SiteDepth"){ SiteDepth=atof((const char *)value); } else if(selem=="EvRange"){ string inrange=(const char *)value; if(inrange.find(",") != string::npos){ // split the comma separated list vector rangesize = utils::str::Split(inrange, ","); assert(rangesize.size() == 2); EvMin = atof(rangesize[0].c_str()); EvMax = atof(rangesize[1].c_str()); } } else if(selem=="CtRange"){ string inrange=(const char *)value; if(inrange.find(",") != string::npos){ // split the comma separated list vector rangesize = utils::str::Split(inrange, ","); assert(rangesize.size() == 2); CtMin = atof(rangesize[0].c_str()); CtMax = atof(rangesize[1].c_str()); } } else if(selem=="NBin"){ NBin=atoi((const char *)value); } else if(selem=="Alpha"){ Alpha=atof((const char *)value); } else if(selem=="RTOpt"){ RTOpt=(const char *)value; RTOpt.erase(remove(RTOpt.begin(),RTOpt.end(),' '),RTOpt.end()); RTOpt.erase(remove(RTOpt.begin(),RTOpt.end(),'\t'),RTOpt.end()); } else if(selem=="NAbsLength"){ NAbsLength=atof((const char *)value); } else if(selem=="AbsLength"){ AbsLength=atof((const char *)value); } else if(selem=="HBedRock"){ HBedRock=atof((const char *)value); } else if(selem=="PropCode"){ PropCode=(const char *)value; PropCode.erase(remove(PropCode.begin(),PropCode.end(),' '),PropCode.end()); PropCode.erase(remove(PropCode.begin(),PropCode.end(),'\t'),PropCode.end()); PropCode = genie::utils::str::ToLower(PropCode); if(PropCode.compare("propamuon")==0)PropCode = "PropaMuon"; if(PropCode.compare("music")==0){ #ifdef _MUSIC_ENABLED__ PropCode = "MUSIC"; #else //// LOG("gSeaNuEvGen", pFATAL) <<"Propagation code: "<Getenv("MEDIACOMP")){ bool CheckSeaWater=true; bool CheckRock=true; bool CheckMantle=true; bool CheckCore=true; xmlTextReaderPtr reader; string filename=gSystem->Getenv("MEDIACOMP"); if(!(access(filename.c_str(), F_OK) != -1)){ // LOG("gSeaNuEvGen", pFATAL) << filename <<" does not exist --> check env. parameter MEDIACOMP; exiting..."; cout << filename <<" does not exist --> check env. parameter MEDIACOMP; exiting..."< check env. parameter MEDIACOMP; exiting..."; cout << filename <<" does not exist --> check env. parameter MEDIACOMP; exiting..."<::value_type(pdg,atof((const char *)value))); if(smedia=="Rock") RockComp.insert(map::value_type(pdg,atof((const char *)value))); if(smedia=="Mantle") MantleComp.insert(map::value_type(pdg,atof((const char *)value))); if(smedia=="Core") CoreComp.insert(map::value_type(pdg,atof((const char *)value))); } xmlFree(name); xmlFree(value); } } return; }