ATLAS Offline Software
PhysicsConfigurationHelper.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "G4ios.hh"
7 #include "CLHEP/Units/PhysicalConstants.h"
8 #include <iostream>
9 #include <fstream>
10 
11 
13 {
14  G4cout << "PhysicsConfigurationHelper constructor: start" << G4endl;
15 
16  std::map<G4String,G4double> parameters;
18  if (parameters["Resonant"]!=0.) m_resonant=true;
19  m_ek_0 = parameters["ResonanceEnergy"]*CLHEP::GeV;
20  m_gamma = parameters["Gamma"]*CLHEP::GeV;
22  m_xsecmultiplier = parameters["XsecMultiplier"];
23  m_suppressionfactor = parameters["ReggeSuppression"];
24  m_hadronlifetime = parameters["HadronLifeTime"];
25  m_mixing = parameters["Mixing"];
26  if (parameters["ReggeModel"]!=0.) m_reggemodel=true;
27  m_doDecays=parameters["DoDecays"];
28 
29  G4cout<<"Read in physics parameters:"<<G4endl;
30  G4cout<<"Resonant = "<< m_resonant <<G4endl;
31  G4cout<<"ResonanceEnergy = "<<m_ek_0/CLHEP::GeV<<" GeV"<<G4endl;
32  G4cout<<"XsecMultiplier = "<<m_xsecmultiplier<<G4endl;
33  G4cout<<"Gamma = "<<m_gamma/CLHEP::GeV<<" GeV"<<G4endl;
34  G4cout<<"Amplitude = "<<m_amplitude/CLHEP::millibarn<<" millibarn"<<G4endl;
35  G4cout<<"ReggeSuppression = "<<100*m_suppressionfactor<<" %"<<G4endl;
36  G4cout<<"HadronLifeTime = "<<m_hadronlifetime;
37  if (m_doDecays) G4cout<<" ns"<<G4endl;
38  else G4cout<<" s"<<G4endl;
39  G4cout<<"ReggeModel = "<< m_reggemodel <<G4endl;
40  G4cout<<"Mixing = "<< m_mixing*100 <<" %"<<G4endl;
41  G4cout<<"DoDecays = "<< m_doDecays << G4endl;
42 
43  if ((!m_doDecays && m_hadronlifetime>0.) ||
44  (m_doDecays && m_hadronlifetime<=0.) ){
45  G4cout << "WARNING: Inconsistent treatment of R-Hadron properties! Lifetime of " << m_hadronlifetime
46  << " and doDecays= " << m_doDecays << G4endl;
47  }
48 
49  return;
50 }
51 
52 
54 {
56  return &instance;
57 }
58 
59 
60 void PhysicsConfigurationHelper::ReadInPhysicsParameters(std::map<G4String,G4double>& parameters) const
61  {
62  parameters["Resonant"]=0.;
63  parameters["ResonanceEnergy"]=0.;
64  parameters["XsecMultiplier"]=1.;
65  parameters["Gamma"]=0.;
66  parameters["Amplitude"]=0.;
67  parameters["ReggeSuppression"]=0.;
68  parameters["HadronLifeTime"]=0.;
69  parameters["ReggeModel"]=0.;
70  parameters["Mixing"]=0.;
71  parameters["DoDecays"]=0;
72 
73  std::ifstream physics_stream ("PhysicsConfiguration.txt");
74  G4String line;
75  char** endptr=0;
76  while (getline(physics_stream,line)) {
77  std::vector<G4String> tokens;
78  //Getting a line
80  G4String key = tokens[0];
81  G4double val = strtod(tokens[1],endptr);
83  }
84  physics_stream.close();
85  }
86 
87 
89  std::vector<G4String>& tokens,
90  const G4String& delimiters) const
91 {
92  // Skip delimiters at beginning.
93  G4String::size_type lastPos = str.find_first_not_of(delimiters, 0);
94  if (lastPos==G4String::npos) return;
95 
96  // Find first "non-delimiter".
97  G4String::size_type pos = str.find_first_of(delimiters, lastPos);
98 
99  while (G4String::npos != pos || G4String::npos != lastPos)
100  {
101  //Skipping leading / trailing whitespaces
102  G4String temp = str.substr(lastPos, pos - lastPos);
103  while(temp.c_str()[0] == ' ') temp.erase(0,1);
104  while(temp[temp.size()-1] == ' ') temp.erase(temp.size()-1,1);
105 
106  // Found a token, add it to the vector.
107  tokens.push_back(std::move(temp));
108 
109  // Skip delimiters. Note the "not_of"
110  lastPos = str.find_first_not_of(delimiters, pos);
111  if (lastPos==G4String::npos) continue;
112 
113  // Find next "non-delimiter"
114  pos = str.find_first_of(delimiters, lastPos);
115  }
116 }
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
PhysicsConfigurationHelper::m_xsecmultiplier
double m_xsecmultiplier
Definition: PhysicsConfigurationHelper.h:48
beamspotman.tokens
tokens
Definition: beamspotman.py:1280
dq_defect_bulk_create_defects.line
line
Definition: dq_defect_bulk_create_defects.py:27
PhysicsConfigurationHelper.h
instance
std::map< std::string, double > instance
Definition: Run_To_Get_Tags.h:8
PhysicsConfigurationHelper::ReadAndParse
void ReadAndParse(const G4String &str, std::vector< G4String > &tokens, const G4String &delimiters=" ") const
Definition: PhysicsConfigurationHelper.cxx:88
PhysicsConfigurationHelper::m_ek_0
double m_ek_0
Definition: PhysicsConfigurationHelper.h:45
PhysicsConfigurationHelper::m_reggemodel
bool m_reggemodel
Definition: PhysicsConfigurationHelper.h:44
PhysicsConfigurationHelper::m_mixing
double m_mixing
Definition: PhysicsConfigurationHelper.h:51
PhysicsConfigurationHelper::m_amplitude
double m_amplitude
Definition: PhysicsConfigurationHelper.h:47
PhysicsConfigurationHelper::m_gamma
double m_gamma
Definition: PhysicsConfigurationHelper.h:46
PhysicsConfigurationHelper::m_suppressionfactor
double m_suppressionfactor
Definition: PhysicsConfigurationHelper.h:49
PhysicsConfigurationHelper::m_doDecays
int m_doDecays
Definition: PhysicsConfigurationHelper.h:52
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
PhysicsConfigurationHelper::m_resonant
bool m_resonant
Definition: PhysicsConfigurationHelper.h:43
PhysicsConfigurationHelper::m_hadronlifetime
double m_hadronlifetime
Definition: PhysicsConfigurationHelper.h:50
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
PhysicsConfigurationHelper::PhysicsConfigurationHelper
PhysicsConfigurationHelper()
Definition: PhysicsConfigurationHelper.cxx:12
PhysicsConfigurationHelper::ReadInPhysicsParameters
void ReadInPhysicsParameters(std::map< G4String, G4double > &parameters) const
Definition: PhysicsConfigurationHelper.cxx:60
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
str
Definition: BTagTrackIpAccessor.cxx:11
PhysicsConfigurationHelper::Instance
static const PhysicsConfigurationHelper * Instance()
Definition: PhysicsConfigurationHelper.cxx:53
PhysicsConfigurationHelper
Definition: PhysicsConfigurationHelper.h:14
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
python.SystemOfUnits.millibarn
float millibarn
Definition: SystemOfUnits.py:86