ATLAS Offline Software
UserSetting.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef PYTHIA8_USERHOOKS_USERSETTING_H
6 #define PYTHIA8_USERHOOKS_USERSETTING_H
7 
8 #include "Pythia8/Settings.h"
10 #include <string>
11 #include <iostream>
12 #include <stdexcept>
13 
14 
15 namespace Pythia8_UserHooks{
16 
17  template <class T>
18  class UserSetting{
19 
20  public:
21 
22  UserSetting(const std::string & name, const T & defaultValue):
24  m_param(defaultValue),
25  m_settingsPtr(0),
26  m_retrieved(false){
27 
28  typename std::map<std::string, T>::const_iterator test = UserHooksFactory::userSettings<T>().find(m_paramName);
29  if(test != UserHooksFactory::userSettings<T>().end()) throw std::runtime_error("Duplicate user-defined setting already exists: " + m_paramName);
30  UserHooksFactory::userSettings<T>()[m_paramName] = defaultValue;
31 
32  }
33 
34  T operator()(Pythia8::Settings *settingsPtr){
35 
36  if(m_settingsPtr == 0 && settingsPtr == 0) throw std::runtime_error("settingsPtr is not yet initialised!");
37 
38  if(m_retrieved && m_settingsPtr == settingsPtr) return m_param;
39 
40  m_settingsPtr = settingsPtr;
42  m_retrieved = true;
43  return m_param;
44  };
45 
46  protected:
47 
48  std::string m_paramName;
50  Pythia8::Settings *m_settingsPtr;
52 
53  private:
54 
56 
57  };
58 
59  template<>
61  if(m_settingsPtr->isParm(m_paramName)){
62  return m_settingsPtr->parm(m_paramName);
63  }
64 
65  throw std::runtime_error("UserSetting " + m_paramName + " does not exist!");
66  return m_param;
67  }
68 
69  template<>
71  if(m_settingsPtr->isMode(m_paramName)){
72  return m_settingsPtr->mode(m_paramName);
73  }
74 
75  throw std::runtime_error("UserSetting " + m_paramName + " does not exist!");
76  return m_param;
77  }
78 
79 template<>
81  if(m_settingsPtr->isFlag(m_paramName)){
82  return m_settingsPtr->flag(m_paramName);
83  }
84 
85  throw std::runtime_error("UserSetting " + m_paramName + " does not exist!");
86  return m_param;
87  }
88 
89 
90  template<>
92  if(m_settingsPtr->isWord(m_paramName)){
93  return m_settingsPtr->word(m_paramName);
94  }
95 
96  throw std::runtime_error("UserSetting " + m_paramName + " does not exist!");
97  return m_param;
98  }
99 
100 }
101 #endif
Pythia8_UserHooks::UserSetting::operator()
T operator()(Pythia8::Settings *settingsPtr)
Definition: UserSetting.h:34
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:144
Pythia8_UserHooks::UserSetting::m_settingsPtr
Pythia8::Settings * m_settingsPtr
Definition: UserSetting.h:50
Pythia8_UserHooks
Some common functions for determining pTs and navigating event records for the PoWHEG + Pythia user h...
Definition: UserHooksFactory.h:30
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
UserHooksFactory.h
Pythia8_UserHooks::UserSetting
Definition: UserSetting.h:18
Pythia8_UserHooks::UserSetting::m_paramName
std::string m_paramName
Definition: UserSetting.h:44
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Pythia8_UserHooks::UserSetting::m_retrieved
bool m_retrieved
Definition: UserSetting.h:51
Pythia8_UserHooks::UserSetting::uncachedRetrieve
T uncachedRetrieve()
Pythia8_UserHooks::UserSetting::m_param
T m_param
Definition: UserSetting.h:49
Pythia8_UserHooks::UserSetting::UserSetting
UserSetting(const std::string &name, const T &defaultValue)
Definition: UserSetting.h:22