ATLAS Offline Software
Public Member Functions | Public Attributes | Private Attributes | Static Private Attributes | List of all members
python.Hto4lConfig.Hto4lConfig Class Reference

Base class for configurable objects in the jobOptions. More...

Inheritance diagram for python.Hto4lConfig.Hto4lConfig:
Collaboration diagram for python.Hto4lConfig.Hto4lConfig:

Public Member Functions

def __init__ (self, runArgs=None, opts=None)
 
def generate (self, filter_name='', filter_args='')
 Run normal event generation. More...
 
def generateRunCard (self)
 Initialise runcard with generic options. More...
 
def generateEvents (self)
 Run normal event generation. More...
 
def add_parameter (self, configurable_name, value, desc='', parameter=None)
 Register configurable parameter. More...
 
def add_parameter_set (self, parameter_set, **kwargs)
 Alias to DecoratorFactory.decorate. More...
 
def emit_heartbeat (self, duration)
 Output a heartbeat message. More...
 
def fix_parameter (self, parameter, value=None, desc='')
 Register non-configurable parameter. More...
 
def runHto4l (configurator)
 
def run_directory (self)
 Get run directory. More...
 
def configurable_parameters (self)
 Get dictionary of configurable parameters. More...
 
def fixed_parameters (self)
 Get list of non-configurable parameters. More...
 
def logger (self)
 Get handle to logger. More...
 
def run_card_decorators (self)
 Get list of enabled run card decorators. More...
 
def run_card_path (self)
 Get full path to runcard. More...
 

Public Attributes

 nEvents
 Add universal functionality. More...
 
 random_seed
 
 running_process
 Initialise timer. More...
 

Private Attributes

 __output_events_file_name
 This needs to be set so that Generate_trf finds an appropriate file format for showering. More...
 
 __fixed_parameters
 Set up lists of parameters and decorators. More...
 
 __configurable_parameters
 
 __run_card_decorators
 
 __enable_reweighting
 Finalise registered decorators. More...
 

Static Private Attributes

 __run_directory = os.environ['PWD']
 Set up run directory and path to Hto4l. More...
 
 __logger = Logging.logging.getLogger('Hto4lControl')
 Setup athena-compatible logger. More...
 
string _hto4l_executable = 'Hto4l'
 This must be defined by each derived class - don't change it in the jobOptions! _hto4l_executable = __hto4l_directory + '/Hto4l/Hto4l-v2.0/Hto4l' for local copy of Hto4l use: _hto4l_executable = __hto4l_directory + '/runGrid/Hto4l' For the lcg version of Hto4l use: _hto4l_executable = __hto4l_directory + '/Hto4l'. More...
 

Detailed Description

Base class for configurable objects in the jobOptions.

All subprocesses inherit from this class

Definition at line 12 of file Hto4lConfig.py.

Constructor & Destructor Documentation

◆ __init__()

def python.Hto4lConfig.Hto4lConfig.__init__ (   self,
  runArgs = None,
  opts = None 
)

Reimplemented in python.Hto4lPowhegDefault.Hto4lPowhegDefault.

Definition at line 35 of file Hto4lConfig.py.

35  def __init__( self, runArgs=None, opts=None ) :
36 
37 
38  self.__output_events_file_name = 'Hto4lOTF._1.events'
39 
40 
41  self.__fixed_parameters = []
42  # self.__configurable_parameters = {}
43  self.__configurable_parameters = collections.OrderedDict()
44  self.__run_card_decorators = []
45 
46 
47  self.add_parameter_set( 'fromDefault' )
48 
49 
50  if runArgs is None :
51  self.logger.warning( 'No run arguments found! Using defaults.' )
52  else :
53  # Read values from runArgs
54  if hasattr(runArgs,'maxEvents') and runArgs.maxEvents > 0 :
55  self.nEvents = int( runArgs.maxEvents + 0.5 ) # should be overwritten in the jobOpt - depends on 4e/4mu/2e2mu mode
56  if hasattr(runArgs,'randomSeed') :
57  self.random_seed = runArgs.randomSeed
58  pass
59  pass
60 

Member Function Documentation

◆ add_parameter()

def python.Hto4lConfig.Hto4lConfig.add_parameter (   self,
  configurable_name,
  value,
  desc = '',
  parameter = None 
)

Register configurable parameter.

Definition at line 149 of file Hto4lConfig.py.

149  def add_parameter( self, configurable_name, value, desc='', parameter=None ) :
150  setattr( self, configurable_name, value ) # add new attribute
151  hto4l_parameter = parameter if parameter is not None else configurable_name
152  self.configurable_parameters[hto4l_parameter] = ( configurable_name, desc )
153 
154 

◆ add_parameter_set()

def python.Hto4lConfig.Hto4lConfig.add_parameter_set (   self,
  parameter_set,
**  kwargs 
)

Alias to DecoratorFactory.decorate.

Definition at line 156 of file Hto4lConfig.py.

156  def add_parameter_set( self, parameter_set, **kwargs ) :
157  return decorate( self, parameter_set, **kwargs )
158 
159 

◆ configurable_parameters()

def python.Hto4lConfig.Hto4lConfig.configurable_parameters (   self)

Get dictionary of configurable parameters.

Definition at line 210 of file Hto4lConfig.py.

210  def configurable_parameters(self) :
211  return self.__configurable_parameters
212 
213 

◆ emit_heartbeat()

def python.Hto4lConfig.Hto4lConfig.emit_heartbeat (   self,
  duration 
)

Output a heartbeat message.

Definition at line 161 of file Hto4lConfig.py.

161  def emit_heartbeat(self, duration) :
162  message = 'Heartbeat: Hto4l generation has been running for {0} in total'.format( RepeatingTimer.human_readable_time_interval(duration) )
163  self.logger.info( message )
164  with open( '{0}/eventLoopHeartBeat.txt'.format( self.__run_directory ), 'w' ) as f : f.write( message )
165 
166 

◆ fix_parameter()

def python.Hto4lConfig.Hto4lConfig.fix_parameter (   self,
  parameter,
  value = None,
  desc = '' 
)

Register non-configurable parameter.

Definition at line 168 of file Hto4lConfig.py.

168  def fix_parameter( self, parameter, value=None, desc='' ) :
169  # Get previously set value if not overwriting
170  if value is None : value = getattr( self, parameter )
171  # Remove it from the configurable list if it was there
172  for hto4l_parameter, configurable_name_tuple in self.configurable_parameters.items() :
173  # Retrieve Hto4l parameter name and description if there is a match
174  if parameter == configurable_name_tuple[0] :
175  parameter, desc = hto4l_parameter, configurable_name_tuple[1]
176  self.configurable_parameters.pop(hto4l_parameter)
177  break
178  self.fixed_parameters.append( (parameter, value, desc) )
179 

◆ fixed_parameters()

def python.Hto4lConfig.Hto4lConfig.fixed_parameters (   self)

Get list of non-configurable parameters.

Definition at line 216 of file Hto4lConfig.py.

216  def fixed_parameters(self) :
217  return self.__fixed_parameters
218 

◆ generate()

def python.Hto4lConfig.Hto4lConfig.generate (   self,
  filter_name = '',
  filter_args = '' 
)

Run normal event generation.

Definition at line 62 of file Hto4lConfig.py.

62  def generate( self, filter_name='', filter_args='' ) :
63  self.generateRunCard()
64  self.generateEvents()
65 

◆ generateEvents()

def python.Hto4lConfig.Hto4lConfig.generateEvents (   self)

Run normal event generation.

Definition at line 104 of file Hto4lConfig.py.

104  def generateEvents(self) :
105 
106  time_start = time.time()
107  self.logger.info( 'Starting Hto4l LHEF event generation at {0}'.format( time.ctime( time_start ) ) )
108  self.logger.info( 'Number of events: {0}.'.format( self.nEvents ) )
109 
110  # Setup heartbeat thread
111  heartbeat = HeartbeatTimer(600., "{}/eventLoopHeartBeat.txt".format(self.__run_directory))
112  heartbeat.setName("heartbeat thread")
113  heartbeat.daemon = True # Allow program to exit if this is the only live thread
114  heartbeat.start()
115 
116 
117 
118  self.running_process = []
119 
120  self.runHto4l()
121 
122 
123  heartbeat.cancel()
124 
125 
126  generation_end = time.time()
127  elapsed_time = generation_end - time_start
128  self.logger.info( 'Running nominal Hto4l took {0} for {1} events => {2:6.3f} Hz'.format( HeartbeatTimer.readable_duration(elapsed_time), self.nEvents, self.nEvents / elapsed_time ) )
129 
130  # self.logger.info( 'Removing Hto4l born LHE file' )
131  # try :
132  # os.remove( 'plot_unweighted_born.lhe' )
133  # except OSError :
134  # pass
135 
136  # ## Move output to correctly named file
137  # try :
138  # os.rename( 'plot_unweighted.lhe', self.output_events_file_name )
139  # self.logger.info( 'Moved plot_unweighted.lhe to {0}'.format(self.output_events_file_name) )
140  # except OSError :
141  # self.logger.warning( 'No output LHEF file found! Probably because the Hto4l process was killed before finishing.' )
142 
143 
144  self.logger.info( 'Finished at {0}'.format( time.asctime() ) )
145  return
146 
147 

◆ generateRunCard()

def python.Hto4lConfig.Hto4lConfig.generateRunCard (   self)

Initialise runcard with generic options.

Definition at line 67 of file Hto4lConfig.py.

67  def generateRunCard(self) :
68 
69 
70  for run_card_decorator in self.run_card_decorators :
71  if hasattr( run_card_decorator, 'finalise' ) : run_card_decorator.finalise()
72 
73 
74  self.logger.info( '** User configurable parameters for this process **' )
75  self.logger.info( ': Configurable parameter : Current value : Description' )
76  # for value_tuple in sorted( self.configurable_parameters.values(), key=lambda x: x[0].lower() ) :
77  # self.logger.info( ': {0:<22} : {1:>17} : {2}'.format( value_tuple[0], getattr(self, value_tuple[0]), value_tuple[1] ) )
78  for value_tuple in self.configurable_parameters.values() :
79  self.logger.info( ': {0:<22} : {1:>17} : {2}'.format( value_tuple[0], getattr(self, value_tuple[0]), value_tuple[1] ) )
80 
81 
82  [ self.fix_parameter( parameter=value_tuple[0], desc=value_tuple[1] ) for value_tuple in self.configurable_parameters.values() ]
83 
84 
85  self.logger.info( 'Writing Hto4l runcard to {0}'.format( self.run_card_path ) )
86  with open( self.run_card_path, 'w' ) as f :
87  # for parameter_tuple in sorted( self.fixed_parameters, key=lambda x: x[0].lower() ) :
88  for parameter_tuple in self.fixed_parameters :
89  name, value, desc = parameter_tuple
90  # Set starting value to first in list when multiple values are provided
91  if isinstance(value,list) :
92  value = value[0]
93  self.__enable_reweighting = True
94  # output_line = '{0:<30}! {1}'.format( '{0}={1}'.format( name, value ), desc )
95  output_line = '{0:<30}! {1}'.format( '{0}'.format( value ), desc )
96  f.write( '{0}\n'.format(output_line) )
97  self.logger.info( 'Wrote {0}'.format( output_line ) )
98 
99 
100  self.logger.info( 'Using executable: {0}'.format( self._hto4l_executable ) )
101 
102 

◆ logger()

def python.Hto4lConfig.Hto4lConfig.logger (   self)

Get handle to logger.

Definition at line 221 of file Hto4lConfig.py.

221  def logger(self) :
222  return self.__logger
223 

◆ run_card_decorators()

def python.Hto4lConfig.Hto4lConfig.run_card_decorators (   self)

Get list of enabled run card decorators.

Definition at line 232 of file Hto4lConfig.py.

232  def run_card_decorators(self) :
233  return self.__run_card_decorators
234 
235 

◆ run_card_path()

def python.Hto4lConfig.Hto4lConfig.run_card_path (   self)

Get full path to runcard.

Definition at line 238 of file Hto4lConfig.py.

238  def run_card_path(self) :
239  return '{0}/hto4l.input'.format( self.run_directory )
240 

◆ run_directory()

def python.Hto4lConfig.Hto4lConfig.run_directory (   self)

Get run directory.

Definition at line 204 of file Hto4lConfig.py.

204  def run_directory(self) :
205  return self.__run_directory
206 
207 

◆ runHto4l()

def python.Hto4lConfig.Hto4lConfig.runHto4l (   configurator)

Definition at line 180 of file Hto4lConfig.py.

180  def runHto4l(configurator) :
181  configurator.running_process.append(subprocess.Popen( [configurator._hto4l_executable,''], stdout=subprocess.PIPE, stdin=open(configurator.run_card_path), stderr=subprocess.STDOUT ) )
182 
183  while configurator.running_process :
184  # Write output buffer if any
185  for process in configurator.running_process :
186  while True :
187  output = process.stdout.readline().rstrip()
188  if len(output) == 0 : break
189  configurator.logger.info( '{0}'.format(output) )
190  if process.poll() is not None : # process has ended
191  # Flush buffer and print final output (if any) to screen
192  process.stdout.flush()
193  while True :
194  output = process.stdout.readline().rstrip()
195  if len(output) == 0 : break
196  configurator.logger.info( '{0}'.format(output) )
197  # Close output stream and remove process from list
198  process.stdout.close()
199  configurator.running_process.remove( process )
200  configurator.logger.info( 'Hto4l finished - all done.' )
201 

Member Data Documentation

◆ __configurable_parameters

python.Hto4lConfig.Hto4lConfig.__configurable_parameters
private

Definition at line 43 of file Hto4lConfig.py.

◆ __enable_reweighting

python.Hto4lConfig.Hto4lConfig.__enable_reweighting
private

Finalise registered decorators.

Print list of configurable parameters for users Add configurable parameters to fixed list Write out final runcard

Definition at line 93 of file Hto4lConfig.py.

◆ __fixed_parameters

python.Hto4lConfig.Hto4lConfig.__fixed_parameters
private

Set up lists of parameters and decorators.

Definition at line 41 of file Hto4lConfig.py.

◆ __logger

python.Hto4lConfig.Hto4lConfig.__logger = Logging.logging.getLogger('Hto4lControl')
staticprivate

Setup athena-compatible logger.

Definition at line 23 of file Hto4lConfig.py.

◆ __output_events_file_name

python.Hto4lConfig.Hto4lConfig.__output_events_file_name
private

This needs to be set so that Generate_trf finds an appropriate file format for showering.

Definition at line 38 of file Hto4lConfig.py.

◆ __run_card_decorators

python.Hto4lConfig.Hto4lConfig.__run_card_decorators
private

Definition at line 44 of file Hto4lConfig.py.

◆ __run_directory

python.Hto4lConfig.Hto4lConfig.__run_directory = os.environ['PWD']
staticprivate

Set up run directory and path to Hto4l.

Definition at line 14 of file Hto4lConfig.py.

◆ _hto4l_executable

string python.Hto4lConfig.Hto4lConfig._hto4l_executable = 'Hto4l'
staticprivate

This must be defined by each derived class - don't change it in the jobOptions! _hto4l_executable = __hto4l_directory + '/Hto4l/Hto4l-v2.0/Hto4l' for local copy of Hto4l use: _hto4l_executable = __hto4l_directory + '/runGrid/Hto4l' For the lcg version of Hto4l use: _hto4l_executable = __hto4l_directory + '/Hto4l'.

Definition at line 33 of file Hto4lConfig.py.

◆ nEvents

python.Hto4lConfig.Hto4lConfig.nEvents

Add universal functionality.

Initialise values from runArgs

Definition at line 55 of file Hto4lConfig.py.

◆ random_seed

python.Hto4lConfig.Hto4lConfig.random_seed

Definition at line 57 of file Hto4lConfig.py.

◆ running_process

python.Hto4lConfig.Hto4lConfig.running_process

Initialise timer.

Initialise generation process tracker

Definition at line 118 of file Hto4lConfig.py.


The documentation for this class was generated from the following file:
grepfile.info
info
Definition: grepfile.py:38
vtune_athena.format
format
Definition: vtune_athena.py:14
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
generateEvents
void generateEvents(int eventMax)
Definition: MDT_ResponseTest.cxx:46
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:797
python.DecoratorFactory.decorate
def decorate(hto4l_controller, decorator, **kwargs)
Definition: Hto4lControl/python/DecoratorFactory.py:5
python.processes.powheg.ZZ.logger
logger
Get handle to Athena logging.
Definition: ZZ.py:7
python.MadGraphUtils.generate
def generate(process_dir='PROC_mssm_0', grid_pack=False, gridpack_compile=False, extlhapath=None, required_accuracy=0.01, runArgs=None, bias_module=None, requirePMGSettings=False)
Definition: MadGraphUtils.py:385
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18
Trk::open
@ open
Definition: BinningType.h:40