Loading [MathJax]/jax/input/TeX/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AthenaMPToolBase.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "AthenaMPToolBase.h"
6 #include "copy_file_icc_hack.h"
8 
9 #include "GaudiKernel/IEvtSelector.h"
10 #include "GaudiKernel/IIoComponentMgr.h"
11 #include "GaudiKernel/IFileMgr.h"
12 #include "GaudiKernel/IMessageSvc.h"
13 
14 #include <sys/stat.h>
15 #include <sstream>
16 #include <fstream>
17 #include <unistd.h>
18 #include <stdio.h>
19 #include <stdint.h>
20 #include <signal.h>
21 
22 #include <iterator>
23 #include <filesystem>
24 
25 namespace AthenaMPToolBase_d {
26  std::atomic<bool> sig_done = false;
27  void pauseForDebug(int /*sig*/) {
28  sig_done = true;
29  }
30 }
31 
33  , const std::string& name
34  , const IInterface* parent)
36  , m_nprocs(-1)
37  , m_maxEvt(-1)
38  , m_subprocTopDir("")
39  , m_subprocDirPrefix("") // To be set in the derived classes
40  , m_evtSelName("")
41  , m_processGroup(0)
42  , m_evtProcessor("AthenaEventLoopMgr",name)
43  , m_appMgr("ApplicationMgr",name)
44  , m_fileMgr("FileMgr",name)
45  , m_ioMgr("IoComponentMgr",name)
46  , m_evtSelector(0)
47  , m_fileMgrLog("")
48 {
49  declareInterface<IAthenaMPTool>(this);
50 }
51 
53 {
54 }
55 
57 {
58  ATH_MSG_DEBUG("In initialize");
59 
60  if(m_isPileup) {
61  m_evtProcessor = ServiceHandle<IEventProcessor>("PileUpEventLoopMgr",name());
62  ATH_MSG_INFO("The job running in pileup mode");
63  }
64  else {
65  ATH_MSG_INFO("The job running in non-pileup mode");
66  }
67 
68  ATH_CHECK(m_evtProcessor.retrieve());
69  ATH_CHECK(m_appMgr.retrieve());
70 
71  SmartIF<IProperty> prpMgr(serviceLocator());
72  if(prpMgr.isValid()) {
73  // Get event selector name. Retrieve EventSelector and EventSeek
74  m_evtSelName = prpMgr->getProperty("EvtSel").toString();
75  // If the job runs with no event selector, then the name will be empty
76  if(!m_evtSelName.empty()) {
77  m_evtSelector = serviceLocator()->service(m_evtSelName);
78  ATH_CHECK(m_evtSelector.isValid());
79  }
80  }
81  else {
82  ATH_MSG_ERROR("IProperty interface not found in ApplicationMgr");
83  return StatusCode::FAILURE;
84  }
85 
86  ATH_CHECK(m_fileMgr.retrieve());
87 
88  SmartIF<IProperty> prpMgr1(m_fileMgr.get());
89  if(prpMgr1.isValid()) {
90  m_fileMgrLog = prpMgr1->getProperty("LogFile").toString();
91  }
92  else {
93  ATH_MSG_ERROR("IProperty interface not found in FileMgr");
94  return StatusCode::FAILURE;
95  }
96 
97  return StatusCode::SUCCESS;
98 }
99 
101 {
102  return StatusCode::SUCCESS;
103 }
104 
105 StatusCode AthenaMPToolBase::wait_once(pid_t& pid)
106 {
107  bool flag(true);
109 
110  if(flag) { // Either none of the processes changed its status or one of the processes finished successfully
111  return StatusCode::SUCCESS;
112  }
113  else {
114  if(pid<0) { // Wait failed on the group
115  ATH_MSG_ERROR("Wait failed on the Process Group!");
116  }
117  else {
118  ATH_MSG_WARNING("Abnormal termination of the process PID=" << pid);
119  }
120  return StatusCode::FAILURE;
121  }
122 }
123 
125 {
126  ATH_MSG_INFO("Statuses of sub-processes");
127  const std::vector<AthenaInterprocess::ProcessStatus>& statuses = m_processGroup->getStatuses();
128  for(size_t i=0; i<statuses.size(); ++i)
129  ATH_MSG_INFO("*** Process PID=" << statuses[i].pid << ". Status " << ((statuses[i].exitcode)?"FAILURE":"SUCCESS"));
130 }
131 
133 {
135 
136  if(m_fileMgrLog.empty()) {
137  ATH_MSG_WARNING(name() << " cannot make output report because FileMgr has not been configured to write log file!");
138  }
139  else {
140  // Collect output files made by the workers
141  std::string line;
142  for(int i=0;i<m_nprocs;++i) {
143  // Get the name of FileMgr log
144  std::ostringstream workindex;
145  workindex<<i;
147  logFilePath /= std::filesystem::path(m_subprocDirPrefix+workindex.str());
148  std::filesystem::path logFile(logFilePath);
150  if(!(std::filesystem::exists(logFile)&&std::filesystem::is_regular_file(logFile))) {
151  ATH_MSG_WARNING(logFile.string() << " either does not exist or is not a regular file. Skipping");
152  continue;
153  }
154 
155  ATH_MSG_DEBUG("FileMgr log file (" << i << ") " << logFile);
156 
157  std::ifstream inpStream(logFile.string().c_str());
158  std::set<std::string> reportedFiles; // Don't report the same file twice
159  while(!inpStream.eof()) {
160  std::getline(inpStream,line);
161  if(line.find("WRITE")!=std::string::npos) {
162  // Parse the entry
163  size_t startpos(0);
164  std::vector<std::string> entries;
165  while(startpos<line.size()) {
166  while(line[startpos]==' ')
167  startpos++;
168 
169  size_t endpos = line.find(' ',startpos);
170  if(endpos==std::string::npos) endpos = line.size();
171  entries.push_back(line.substr(startpos,endpos-startpos));
172  startpos=endpos+1;
173  }
174 
175  // enties[0] is filename
176  std::filesystem::path filenamePath(entries[0]);
177  std::filesystem::path basename = filenamePath.filename();
178  if(reportedFiles.find(basename.string())==reportedFiles.end())
179  reportedFiles.insert(basename.string());
180  else
181  continue;
182  std::filesystem::path absolutename = basename.is_absolute() ? basename : std::filesystem::absolute(std::filesystem::path(logFilePath)/=basename);
183  AthenaMP::AllWorkerOutputsIterator it1 = jobOutputs->find(basename.string());
184  if(it1==jobOutputs->end()) {
185  (*jobOutputs)[basename.string()] = AthenaMP::SingleWorkerOutputs();
186  (*jobOutputs)[basename.string()].reserve(m_nprocs);
187  }
188 
189  AthenaMP::WorkerOutput newOutput;
190  newOutput.filename = absolutename.string();
191  newOutput.technology = entries[1];
192  newOutput.description = entries[2];
193  newOutput.access_mode = entries[3];
194  newOutput.shared = (line.find("SHARED")!=std::string::npos);
195 
196  (*jobOutputs)[basename.string()].push_back(newOutput);
197  }
198  }
199  }
200  }
201  return jobOutputs;
202 }
203 
204 void AthenaMPToolBase::useFdsRegistry(std::shared_ptr<AthenaInterprocess::FdsRegistry> registry)
205 {
207 }
208 
209 void AthenaMPToolBase::setRandString(const std::string& randStr)
210 {
211  m_randStr = randStr;
212 }
213 
215 {
217  kill(child.getProcessID(),SIGKILL);
218  }
219 }
220 
221 std::unique_ptr<AthenaInterprocess::ScheduledWork> AthenaMPToolBase::operator()(const AthenaInterprocess::ScheduledWork& param)
222 {
223  std::unique_ptr<AthenaInterprocess::ScheduledWork> outwork;
224  bool all_ok(true);
225 
226  if(param.size==sizeof(Func_Flag)) {
227  Func_Flag flag;
228  memcpy(&flag,param.data,param.size);
229  switch(flag) {
230  case FUNC_BOOTSTRAP:
231  {
232  outwork = bootstrap_func();
233  break;
234  }
235  case FUNC_EXEC:
236  {
237  outwork = exec_func();
238  break;
239  }
240  case FUNC_FIN:
241  {
242  outwork = fin_func();
243  break;
244  }
245  default:
246  {
247  ATH_MSG_ERROR("Unexpected value for the function flag");
248  all_ok = false;
249  }
250  }
251  }
252  else {
253  ATH_MSG_ERROR("Unexpected parameter size");
254  all_ok = false;
255  }
256 
257  if(!all_ok) {
258  outwork = std::unique_ptr<AthenaInterprocess::ScheduledWork>(new AthenaInterprocess::ScheduledWork);
259  outwork->data = malloc(sizeof(int));
260  *(int*)(outwork->data) = 1; // Error code: for now use 0 success, 1 failure
261  outwork->size = sizeof(int);
262  }
263 
264  return outwork;
265 }
266 
267 int AthenaMPToolBase::mapAsyncFlag(Func_Flag flag, pid_t pid)
268 {
270  params.data = (void*)(&flag);
271  params.size = sizeof(flag);
272  if(m_processGroup->map_async(this,&params,pid)){
273  if(pid)
274  ATH_MSG_ERROR("Unable to map the flag on subprocess pid=" << pid);
275  else
276  ATH_MSG_ERROR("Unable to map the flag on all subprocesses in the group");
277  return -1;
278  }
279  return 0;
280 }
281 
282 int AthenaMPToolBase::redirectLog(const std::string& rundir, bool addTimeStamp)
283 {
284  // Redirect both stdout and stderr to the same file AthenaMP.log
285  int dup2result1(0), dup2result2(0);
286 
287  int newout = open(std::string(rundir+"/AthenaMP.log").c_str(),O_CREAT | O_RDWR, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
288  if(newout==-1) {
289  ATH_MSG_ERROR("Unable to open log file in the run directory. " << fmterror(errno));
290  return -1;
291  }
292  dup2result1 = dup2(newout, STDOUT_FILENO);
293  dup2result2 = dup2(newout, STDERR_FILENO);
294  TEMP_FAILURE_RETRY(close(newout));
295  if(dup2result1==-1) {
296  ATH_MSG_ERROR("Unable to redirect standard output. " << fmterror(errno));
297  return -1;
298  }
299  if(dup2result2==-1) {
300  ATH_MSG_ERROR("Unable to redirect standard error. " << fmterror(errno));
301  return -1;
302  }
303 
304  if(addTimeStamp) {
305  SmartIF<IProperty> propertyServer(msgSvc());
306  if(propertyServer==0) {
307  ATH_MSG_ERROR("Unable to cast message svc to IProperty");
308  return -1;
309  }
310 
311  std::string propertyName("Format");
312  std::string oldFormat("");
313  StringProperty formatProp(propertyName,oldFormat);
314  StatusCode sc = propertyServer->getProperty(&formatProp);
315  if(sc.isFailure()) {
316  ATH_MSG_WARNING("Message Service does not have Format property");
317  }
318  else {
319  oldFormat = formatProp.value();
320  if(oldFormat.find("%t")==std::string::npos) {
321  // Add time stamps
322  std::string newFormat("%t " + oldFormat);
323  StringProperty newFormatProp(propertyName,newFormat);
324  if(propertyServer->setProperty(newFormatProp).isFailure()) {
325  ATH_MSG_ERROR("Unable to set new Format property on the Message Service");
326  return -1;
327  }
328  }
329  else {
330  ATH_MSG_DEBUG("MsgSvc format already contains timestamps. Nothing to be done");
331  }
332  }
333  }
334 
335  return 0;
336 }
337 
338 int AthenaMPToolBase::updateIoReg(const std::string& rundir)
339 {
340  if (!m_ioMgr.retrieve().isSuccess()) {
341  ATH_MSG_ERROR("Error retrieving IoComponentMgr");
342  return -1;
343  } else {
344  ATH_MSG_DEBUG("Successfully retrieved IoComponentMgr");
345  }
346 
347  // update the IoRegistry for the new workdir - make sure we use absolute path
349  if(!m_ioMgr->io_update_all(abs_rundir.string()).isSuccess()) {
350  ATH_MSG_ERROR("Error updating IoRegistry");
351  return -1;
352  } else {
353  ATH_MSG_DEBUG("Successfully updated IoRegistry");
354  }
355 
356  return 0;
357 }
358 
359 std::string AthenaMPToolBase::fmterror(int errnum)
360 {
361  char buf[256];
362  strerror_r(errnum, buf, sizeof(buf));
363  return std::string(buf);
364 }
365 
367 {
368  // Reopen file descriptors.
369  // First go over all open files, which have been registered with the FileMgr
370  // Then also check the FdsRegistry, in case it contains some files not registered with the FileMgr
371  std::set<int> fdLog;
372 
373  // Query the FileMgr contents
374  std::vector<const Io::FileAttr*> filemgrFiles;
375  std::vector<const Io::FileAttr*>::const_iterator itFile;
376  unsigned filenum = m_fileMgr->getFiles(filemgrFiles); // Get attributes for open files only. We don't care about closed ones at this point
377  if(filenum!=filemgrFiles.size())
378  ATH_MSG_WARNING("getFiles returned " << filenum << " while vector size is " << filemgrFiles.size());
379 
380  for(itFile=filemgrFiles.begin();itFile!=filemgrFiles.end();++itFile) {
381  ATH_MSG_DEBUG("* " << **itFile);
382  const std::string& filename = (**itFile).name();
383  Io::Fd fd = (**itFile).fd();
384 
385  if(fd==-1) {
386  // It is legal to have fd=-1 for remote inputs
387  // On the other hand, these inputs should not remain open after fork. The issue being tracked at ATEAM-434.
388  // So, this hopefully is a temporary patch
389  ATH_MSG_WARNING("FD=-1 detected on an open file retrieved from FileMgr. Skip FD reopening. File name: " << filename);
390  continue;
391  }
392 
393  if(reopenFd(fd,filename))
394  return -1;
395 
396  fdLog.insert(fd);
397  }
398 
399  // Check the FdsRegistry
400  for(const AthenaInterprocess::FdsRegistryEntry& regEntry : *m_fdsRegistry) {
401  if(fdLog.find(regEntry.fd)!=fdLog.end()) {
402  ATH_MSG_DEBUG("The file from FdsRegistry " << regEntry.name << " was registered with FileMgr. Skip reopening");
403  }
404  else {
405  ATH_MSG_WARNING("The file " << regEntry.name << " has not been registered with the FileMgr!");
406 
407  if(regEntry.fd==-1) {
408  // Same protection as the one above
409  ATH_MSG_WARNING("FD=-1 detected on an open file retrieved from FD Registry. Skip FD reopening. File name: " << regEntry.name);
410  continue;
411  }
412 
413  if(reopenFd(regEntry.fd,regEntry.name))
414  return -1;
415 
416  fdLog.insert(regEntry.fd);
417  }
418  }
419  return 0;
420 }
421 
423 {
424  if(std::filesystem::is_regular_file("PoolFileCatalog.xml.AthenaMP-saved"))
425  COPY_FILE_HACK("PoolFileCatalog.xml.AthenaMP-saved",dest_path.string()+"/PoolFileCatalog.xml");
426  return 0;
427 }
428 
430 {
431  ATH_MSG_INFO("Bootstrap worker PID " << getpid() << " - waiting for SIGUSR1");
432  sigset_t mask, oldmask;
433 
435 
436  sigemptyset (&mask);
437  sigaddset (&mask, SIGUSR1);
438 
439  sigprocmask (SIG_BLOCK, &mask, &oldmask);
441  sigsuspend (&oldmask);
442  sigprocmask (SIG_UNBLOCK, &mask, NULL);
443 }
444 
445 int AthenaMPToolBase::reopenFd(int fd, const std::string& name)
446 {
447  ATH_MSG_DEBUG("Attempting to reopen descriptor for " << name);
448  int old_openflags = fcntl(fd,F_GETFL,0);
449  switch(old_openflags & O_ACCMODE) {
450  case O_RDONLY: {
451  ATH_MSG_DEBUG("The File Access Mode is RDONLY");
452  break;
453  }
454  case O_WRONLY: {
455  ATH_MSG_DEBUG("The File Access Mode is WRONLY");
456  break;
457  }
458  case O_RDWR: {
459  ATH_MSG_DEBUG("The File Access Mode is RDWR");
460  break;
461  }
462  }
463 
464  int old_descflags = fcntl(fd,F_GETFD,0);
465  off_t oldpos = lseek(fd,0,SEEK_CUR);
466  if(oldpos==-1) {
467  if(errno==ESPIPE) {
468  ATH_MSG_WARNING("Dealing with PIPE. Skipping ... (FIXME!)");
469  }
470  else {
471  ATH_MSG_ERROR("When re-opening file descriptors lseek failed on " << name << ". " << fmterror(errno));
472  return -1;
473  }
474  }
475  else {
476  Io::Fd newfd = open(name.c_str(),old_openflags);
477  if(newfd==-1) {
478  ATH_MSG_ERROR("When re-opening file descriptors unable to open " << name << " for reading. " << fmterror(errno));
479  return -1;
480  }
481  if(lseek(newfd,oldpos,SEEK_SET)==-1){
482  ATH_MSG_ERROR("When re-opening file descriptors lseek failed on the newly opened " << name << ". " << fmterror(errno));
483  TEMP_FAILURE_RETRY(close(newfd));
484  return -1;
485  }
486  TEMP_FAILURE_RETRY(close(fd));
487  if(dup2(newfd,fd)==-1) {
488  ATH_MSG_ERROR("When re-opening file descriptors unable to duplicate descriptor for " << name << ". " << fmterror(errno));
489  TEMP_FAILURE_RETRY(close(newfd));
490  return -1;
491  }
492  if(fcntl(fd,F_SETFD,old_descflags)==-1) {
493  ATH_MSG_ERROR("When re-opening file descriptors unable to set descriptor flags for " << name << ". " << fmterror(errno));
494  TEMP_FAILURE_RETRY(close(newfd));
495  return -1;
496  }
497  TEMP_FAILURE_RETRY(close(newfd));
498  }
499  return 0;
500 }
AthenaMPToolBase::killChildren
virtual void killChildren() override
Definition: AthenaMPToolBase.cxx:214
python.Dso.registry
registry
Definition: Control/AthenaServices/python/Dso.py:159
python.DQPostProcessMod.rundir
def rundir(fname)
Definition: DQPostProcessMod.py:116
pid_t
int32_t pid_t
Definition: FPGATrackSimTypes.h:19
AthenaInterprocess::ProcessGroup::getStatuses
const std::vector< ProcessStatus > & getStatuses() const
Definition: ProcessGroup.cxx:204
AthenaMPToolBase::waitForSignal
void waitForSignal()
Definition: AthenaMPToolBase.cxx:429
checkFileSG.line
line
Definition: checkFileSG.py:75
AthenaMPToolBase::fin_func
virtual std::unique_ptr< AthenaInterprocess::ScheduledWork > fin_func()=0
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:128
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthenaMPToolBase_d
Definition: AthenaMPToolBase.cxx:25
AthenaMP::WorkerOutput::description
std::string description
Definition: IAthenaMPTool.h:24
AthenaInterprocess::ScheduledWork::size
int size
Definition: IMessageDecoder.h:14
AthenaMPToolBase::m_processGroup
AthenaInterprocess::ProcessGroup * m_processGroup
Definition: AthenaMPToolBase.h:92
AthenaMPToolBase::~AthenaMPToolBase
virtual ~AthenaMPToolBase() override
Definition: AthenaMPToolBase.cxx:52
AthenaInterprocess::ScheduledWork
Definition: IMessageDecoder.h:12
AthenaMPToolBase::exec_func
virtual std::unique_ptr< AthenaInterprocess::ScheduledWork > exec_func()=0
AthenaMPToolBase::m_randStr
std::string m_randStr
Definition: AthenaMPToolBase.h:102
AthenaMPToolBase::m_nprocs
int m_nprocs
Definition: AthenaMPToolBase.h:86
AthenaMPToolBase::FUNC_FIN
@ FUNC_FIN
Definition: AthenaMPToolBase.h:71
AthenaInterprocess::ProcessGroup::getChildren
const std::vector< Process > & getChildren() const
Definition: ProcessGroup.cxx:197
AthenaMPToolBase::setRandString
virtual void setRandString(const std::string &randStr) override
Definition: AthenaMPToolBase.cxx:209
plotting.yearwise_luminosity.absolute
absolute
Definition: yearwise_luminosity.py:29
AthenaMPToolBase::fmterror
std::string fmterror(int errnum)
Definition: AthenaMPToolBase.cxx:359
DeMoUpdate.statuses
list statuses
Definition: DeMoUpdate.py:568
AthenaMPToolBase::generateOutputReport
virtual AthenaMP::AllWorkerOutputs_ptr generateOutputReport() override
Definition: AthenaMPToolBase.cxx:132
AthenaMPToolBase::m_evtSelName
std::string m_evtSelName
Definition: AthenaMPToolBase.h:90
AthenaMPToolBase::finalize
virtual StatusCode finalize() override
Definition: AthenaMPToolBase.cxx:100
AthenaInterprocess::ScheduledWork::data
void * data
Definition: IMessageDecoder.h:13
athena.exitcode
int exitcode
Definition: athena.py:161
ProcessGroup.h
AthenaMPToolBase::m_fileMgrLog
std::string m_fileMgrLog
Definition: AthenaMPToolBase.h:100
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
AthenaMP::AllWorkerOutputsIterator
AllWorkerOutputs::iterator AllWorkerOutputsIterator
Definition: IAthenaMPTool.h:30
AthenaMP::SingleWorkerOutputs
std::vector< WorkerOutput > SingleWorkerOutputs
Definition: IAthenaMPTool.h:28
Fd
IIoSvc::Fd Fd
Definition: IoSvc.cxx:22
sigaddset
#define sigaddset(x, y)
Definition: SealSignal.h:84
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthenaMPToolBase::FUNC_EXEC
@ FUNC_EXEC
Definition: AthenaMPToolBase.h:70
COPY_FILE_HACK
#define COPY_FILE_HACK(_src, _dest)
Definition: copy_file_icc_hack.h:15
sigset_t
int sigset_t
Definition: SealSignal.h:80
copy_file_icc_hack.h
AthenaMPToolBase::m_evtSelector
SmartIF< IEvtSelector > m_evtSelector
Definition: AthenaMPToolBase.h:99
AthenaMPToolBase::m_appMgr
ServiceHandle< IAppMgrUI > m_appMgr
Definition: AthenaMPToolBase.h:96
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthenaMPToolBase::m_isPileup
Gaudi::Property< bool > m_isPileup
Definition: AthenaMPToolBase.h:104
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:85
AthenaMPToolBase::bootstrap_func
virtual std::unique_ptr< AthenaInterprocess::ScheduledWork > virtual operator() ATLAS_NOT_THREAD_SAFE(const AthenaInterprocess std::unique_ptr< AthenaInterprocess::ScheduledWork > bootstrap_func()=0
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
AthenaMPToolBase::Func_Flag
Func_Flag
Definition: AthenaMPToolBase.h:68
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthenaMPToolBase::useFdsRegistry
virtual void useFdsRegistry(std::shared_ptr< AthenaInterprocess::FdsRegistry >) override
Definition: AthenaMPToolBase.cxx:204
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
master.flag
bool flag
Definition: master.py:29
AthenaMPToolBase::reopenFd
int reopenFd(int fd, const std::string &name)
Definition: AthenaMPToolBase.cxx:445
AthenaMPToolBase::AthenaMPToolBase
AthenaMPToolBase()
AthenaMP::WorkerOutput::shared
bool shared
Definition: IAthenaMPTool.h:26
ParticleGun_EoverP_Config.pid
pid
Definition: ParticleGun_EoverP_Config.py:62
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AthenaMPToolBase_d::pauseForDebug
void pauseForDebug(int)
Definition: AthenaMPToolBase.cxx:27
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaMP::WorkerOutput::access_mode
std::string access_mode
Definition: IAthenaMPTool.h:25
TrigInDetValidation_Base.malloc
malloc
Definition: TrigInDetValidation_Base.py:132
AthenaMPToolBase::updateIoReg
int updateIoReg(const std::string &rundir)
Definition: AthenaMPToolBase.cxx:338
AthenaMPToolBase::initialize
virtual StatusCode initialize() override
Definition: AthenaMPToolBase.cxx:56
ReadFromCoolCompare.fd
fd
Definition: ReadFromCoolCompare.py:196
AthenaMPToolBase.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
AthenaMPToolBase::m_ioMgr
ServiceHandle< IIoComponentMgr > m_ioMgr
Definition: AthenaMPToolBase.h:98
AthenaMPToolBase::redirectLog
int redirectLog(const std::string &rundir, bool addTimeStamp=true)
Definition: AthenaMPToolBase.cxx:282
AthenaInterprocess::Process
Definition: Process.h:17
columnar::operator()
decltype(auto) operator()(ObjectId< OT, CM > id) const noexcept
Definition: ColumnAccessor.h:175
Cut::signal
@ signal
Definition: SUSYToolsAlg.cxx:67
Trk::open
@ open
Definition: BinningType.h:40
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthenaMP::WorkerOutput::technology
std::string technology
Definition: IAthenaMPTool.h:23
AthenaInterprocess::FdsRegistryEntry
Definition: FdsRegistry.h:13
AthenaMP::AllWorkerOutputs_ptr
std::unique_ptr< AllWorkerOutputs > AllWorkerOutputs_ptr
Definition: IAthenaMPTool.h:32
AthenaMP::WorkerOutput
Definition: IAthenaMPTool.h:21
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
AthenaMPToolBase::reportSubprocessStatuses
virtual void reportSubprocessStatuses() override
Definition: AthenaMPToolBase.cxx:124
entries
double entries
Definition: listroot.cxx:49
AthenaMPToolBase::m_subprocDirPrefix
std::string m_subprocDirPrefix
Definition: AthenaMPToolBase.h:89
AthenaMPToolBase::m_subprocTopDir
std::string m_subprocTopDir
Definition: AthenaMPToolBase.h:88
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
AthAlgTool
Definition: AthAlgTool.h:26
AthenaInterprocess::ProcessGroup::wait_once
pid_t wait_once(bool &flag)
Definition: ProcessGroup.cxx:149
jetMakeRefSamples.logFile
string logFile
Definition: jetMakeRefSamples.py:57
AthenaMPToolBase::handleSavedPfc
int handleSavedPfc(const std::filesystem::path &dest_path)
Definition: AthenaMPToolBase.cxx:422
AthenaMPToolBase::m_fileMgr
ServiceHandle< IFileMgr > m_fileMgr
Definition: AthenaMPToolBase.h:97
AthenaMP::AllWorkerOutputs
std::map< std::string, SingleWorkerOutputs > AllWorkerOutputs
Definition: IAthenaMPTool.h:29
AthenaMPToolBase::FUNC_BOOTSTRAP
@ FUNC_BOOTSTRAP
Definition: AthenaMPToolBase.h:69
AthenaMPToolBase::reopenFds
int reopenFds()
Definition: AthenaMPToolBase.cxx:366
sigemptyset
#define sigemptyset(x)
Definition: SealSignal.h:82
AthenaMPToolBase::m_fdsRegistry
std::shared_ptr< AthenaInterprocess::FdsRegistry > m_fdsRegistry
Definition: AthenaMPToolBase.h:101
AthenaMP::WorkerOutput::filename
std::string filename
Definition: IAthenaMPTool.h:22
AthenaMPToolBase_d::sig_done
std::atomic< bool > sig_done
Definition: AthenaMPToolBase.cxx:26
ServiceHandle< IEventProcessor >
AthenaMPToolBase::m_evtProcessor
ServiceHandle< IEventProcessor > m_evtProcessor
Definition: AthenaMPToolBase.h:95
beamspotman.basename
basename
Definition: beamspotman.py:640