Class Reference for E1039 Core & Analysis Software
PHG4DetectorGroupSubsystem.cc
Go to the documentation of this file.
2 #include "PHG4Parameters.h"
4 
5 #include <pdbcalbase/PdbParameterMap.h>
6 #include <pdbcalbase/PdbParameterMapContainer.h>
7 
9 #include <phool/PHDataNode.h>
10 #include <phool/PHIODataNode.h>
11 #include <phool/PHNodeIterator.h>
12 #include <phool/getClass.h>
13 #include <phool/phool.h>
14 
15 #include <boost/format.hpp>
16 
17 #include <iostream>
18 #include <sstream>
19 
20 using namespace std;
21 
22 PHG4DetectorGroupSubsystem::PHG4DetectorGroupSubsystem(const std::string &name, const int lyr)
23  : PHG4Subsystem(name)
24  , paramscontainer(nullptr)
25  , paramscontainer_default(new PHG4ParametersContainer(Name()))
26  , savetopNode(NULL)
27  , overlapcheck(false)
28  , layer(lyr)
29  , usedb(0)
30  , beginrunexecuted(0)
31  , filetype(PHG4DetectorGroupSubsystem::none)
32  , superdetector("NONE")
33  , calibfiledir("./")
34 {
35  // put the layer into the name so we get unique names
36  // for multiple layers
37  ostringstream nam;
38  nam << name << "_" << lyr;
39  Name(nam.str().c_str());
40 }
41 
43 {
44  savetopNode = topNode;
45  paramscontainer_default->set_name(Name());
46  int iret = InitSubsystem(topNode);
47  return iret;
48 }
49 
51 {
52  PHNodeIterator iter(topNode);
53  PHCompositeNode *parNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "PAR"));
54  PHCompositeNode *runNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "RUN"));
55 
56  string g4geonodename = "G4GEO_";
57  string paramnodename = "G4GEOPARAM_";
58  string calibdetname;
59  int isSuperDetector = 0;
60  if (superdetector != "NONE")
61  {
62  g4geonodename += SuperDetector();
63  paramscontainer = findNode::getClass<PHG4ParametersContainer>(parNode, g4geonodename);
64  if (!paramscontainer)
65  {
66  PHNodeIterator parIter(parNode);
67  PHCompositeNode *DetNode = dynamic_cast<PHCompositeNode *>(parIter.findFirst("PHCompositeNode", SuperDetector()));
68  if (!DetNode)
69  {
70  DetNode = new PHCompositeNode(SuperDetector());
71  parNode->addNode(DetNode);
72  }
73  paramscontainer = new PHG4ParametersContainer(superdetector);
74  DetNode->addNode(new PHDataNode<PHG4ParametersContainer>(paramscontainer, g4geonodename));
75  }
76  paramnodename += superdetector;
77  calibdetname = superdetector;
78  isSuperDetector = 1;
79  }
80  else
81  {
82  paramscontainer = new PHG4ParametersContainer(Name());
83  g4geonodename += paramscontainer->Name();
84  parNode->addNode(new PHDataNode<PHG4ParametersContainer>(paramscontainer, g4geonodename));
85  paramnodename += paramscontainer->Name();
86  calibdetname = paramscontainer->Name();
87  }
88 
89  PHG4ParametersContainer::ConstRange begin_end = paramscontainer_default->GetAllParameters();
90  for (PHG4ParametersContainer::ConstIterator iter = begin_end.first; iter != begin_end.second; ++iter)
91  {
92  paramscontainer->AddPHG4Parameters(iter->first, iter->second);
93  }
94  // the content has been handed off to the param container on the node tree
95  // clear our internal map of parameters and delete it to avoid it being used accidentally
96  paramscontainer_default->clear();
97  delete paramscontainer_default;
98  paramscontainer_default = nullptr;
99  // ASSUMPTION: if we read from DB and/or file we don't want the stuff from
100  // the node tree
101  // We leave the defaults intact in case there is no entry for
102  // those in the object read from the DB or file
103  // Order: read first DB, then calib file if both are enabled
105  {
106  if (ReadDB())
107  {
108  ReadParamsFromDB(calibdetname, isSuperDetector);
109  }
111  {
112  ReadParamsFromFile(calibdetname, get_filetype(), isSuperDetector);
113  }
114  }
115  else
116  {
117  // if not filled from file or DB, check if we have a node containing those calibrations
118  // on the node tree and load them (the embedding wants to use the
119  // parameters saved on the previous pass)
120  PdbParameterMapContainer *nodeparams = findNode::getClass<PdbParameterMapContainer>(topNode, paramnodename);
121  if (nodeparams)
122  {
123  paramscontainer->FillFrom(nodeparams);
124  }
125  }
126  // parameters set in the macro always override whatever is read from
127  // the node tree, DB or file
129  // save updated persistant copy on node tree
130  PHCompositeNode *RunDetNode = runNode;
131  if (superdetector != "NONE")
132  {
133  PHNodeIterator runIter(runNode);
134  RunDetNode = dynamic_cast<PHCompositeNode *>(runIter.findFirst("PHCompositeNode", SuperDetector()));
135  if (!RunDetNode)
136  {
137  RunDetNode = new PHCompositeNode(SuperDetector());
138  runNode->addNode(RunDetNode);
139  }
140  }
141  paramscontainer->SaveToNodeTree(RunDetNode, paramnodename);
142  int iret = InitRunSubsystem(topNode);
143  if (Verbosity() > 0)
144  {
145  PdbParameterMapContainer *nodeparams = findNode::getClass<PdbParameterMapContainer>(topNode, paramnodename);
146  cout << Name() << endl;
147  nodeparams->print();
148  }
149  beginrunexecuted = 1;
150  return iret;
151 }
152 
153 void PHG4DetectorGroupSubsystem::SuperDetector(const std::string &name)
154 {
155  superdetector = name;
156  return;
157 }
158 
159 void PHG4DetectorGroupSubsystem::set_double_param(const int detid, const std::string &name, const double dval)
160 {
161  map<int, map<const std::string, double>>::const_iterator iter = default_double.find(detid);
162  if (iter == default_double.end())
163  {
164  cout << "detid " << detid << " not implemented" << endl;
165  cout << "implemented detector ids: " << endl;
166  for (map<int, map<const std::string, double>>::const_iterator iter2 = default_double.begin(); iter2 != default_double.end(); ++iter2)
167  {
168  cout << "detid: " << iter2->first << endl;
169  }
170  return;
171  }
172  if (iter->second.find(name) == iter->second.end())
173  {
174  cout << "double parameter " << name << " not implemented" << endl;
175  cout << "implemented double parameters are:" << endl;
176  for (map<const string, double>::const_iterator iter3 = iter->second.begin(); iter3 != iter->second.end(); ++iter3)
177  {
178  cout << iter3->first << endl;
179  }
180  return;
181  }
182  // here we know we have entries for the detector id and the variable name exists
183  // in the defaults, so now lets set it
184  map<int, map<const std::string, double>>::iterator dmapiter = dparams.find(detid);
185  if (dmapiter == dparams.end())
186  {
187  map<const std::string, double> newdmap;
188  newdmap[name] = dval;
189  dparams[detid] = newdmap;
190  }
191  else
192  {
193  dmapiter->second[name] = dval;
194  }
195  return;
196 }
197 
198 double
199 PHG4DetectorGroupSubsystem::get_double_param(const int detid, const std::string &name) const
200 {
201  return paramscontainer->GetParameters(detid)->get_double_param(name);
202 }
203 
204 void PHG4DetectorGroupSubsystem::set_int_param(const int detid, const std::string &name, const int ival)
205 {
206  map<int, map<const std::string, int>>::const_iterator iter = default_int.find(detid);
207  if (iter == default_int.end())
208  {
209  cout << "detid " << detid << " not implemented" << endl;
210  cout << "implemented detector ids: " << endl;
211  for (map<int, map<const std::string, int>>::const_iterator iter2 = default_int.begin(); iter2 != default_int.end(); ++iter2)
212  {
213  cout << "detid: " << iter2->first << endl;
214  }
215  return;
216  }
217  if (iter->second.find(name) == iter->second.end())
218  {
219  cout << "int parameter " << name << " not implemented" << endl;
220  cout << "implemented int parameters are:" << endl;
221  for (map<const string, int>::const_iterator iter3 = iter->second.begin(); iter3 != iter->second.end(); ++iter3)
222  {
223  cout << iter3->first << endl;
224  }
225  return;
226  }
227  // here we know we have entries for the detector id and the variable name exists
228  // in the defaults, so now lets set it
229  map<int, map<const std::string, int>>::iterator imapiter = iparams.find(detid);
230  if (imapiter == iparams.end())
231  {
232  map<const std::string, int> newdmap;
233  newdmap[name] = ival;
234  iparams[detid] = newdmap;
235  }
236  else
237  {
238  imapiter->second[name] = ival;
239  }
240 }
241 
242 int PHG4DetectorGroupSubsystem::get_int_param(const int detid, const std::string &name) const
243 {
244  return paramscontainer->GetParameters(detid)->get_int_param(name);
245 }
246 
247 void PHG4DetectorGroupSubsystem::set_string_param(const int detid, const std::string &name, const string &sval)
248 {
249  map<int, map<const std::string, string>>::const_iterator iter = default_string.find(detid);
250  if (iter == default_string.end())
251  {
252  cout << "detid " << detid << " not implemented" << endl;
253  cout << "implemented detector ids: " << endl;
254  for (map<int, map<const std::string, string>>::const_iterator iter2 = default_string.begin(); iter2 != default_string.end(); ++iter2)
255  {
256  cout << "detid: " << iter2->first << endl;
257  }
258  return;
259  }
260  if (iter->second.find(name) == iter->second.end())
261  {
262  cout << "string parameter " << name << " not implemented" << endl;
263  cout << "implemented string parameters are:" << endl;
264  for (map<const string, string>::const_iterator iter3 = iter->second.begin(); iter3 != iter->second.end(); ++iter3)
265  {
266  cout << iter3->first << endl;
267  }
268  return;
269  }
270  // here we know we have entries for the detector id and the variable name exists
271  // in the defaults, so now lets set it
272  map<int, map<const std::string, string>>::iterator smapiter = cparams.find(detid);
273  if (smapiter == cparams.end())
274  {
275  map<const std::string, string> newdmap;
276  newdmap[name] = sval;
277  cparams[detid] = newdmap;
278  }
279  else
280  {
281  smapiter->second[name] = sval;
282  }
283  return;
284 }
285 
286 string
287 PHG4DetectorGroupSubsystem::get_string_param(const int detid, const std::string &name) const
288 {
289  return paramscontainer->GetParameters(detid)->get_string_param(name);
290 }
291 
293 {
294  map<int, map<const std::string, double>>::const_iterator iter;
295  for (iter = dparams.begin(); iter != dparams.end(); ++iter)
296  {
297  map<const std::string, double>::const_iterator diter;
298  for (diter = iter->second.begin(); diter != iter->second.end(); ++diter)
299  {
300  set_double_param(iter->first, diter->first, diter->second);
301  }
302  }
303  map<int, map<const std::string, int>>::const_iterator iiter;
304  for (iiter = iparams.begin(); iiter != iparams.end(); ++iiter)
305  {
307 
308  map<const std::string, int>::const_iterator iiter2;
309  for (iiter2 = iiter->second.begin(); iiter2 != iiter->second.end(); ++iiter2)
310  {
311  params->set_int_param(iiter2->first, iiter2->second);
312  }
313  }
314  map<int, map<const std::string, string>>::const_iterator siter;
315  for (siter = cparams.begin(); siter != cparams.end(); ++siter)
316  {
317  map<const std::string, string>::const_iterator siter2;
318  for (siter2 = siter->second.begin(); siter2 != siter->second.end(); ++siter2)
319  {
320  set_string_param(siter->first, siter2->first, siter2->second);
321  }
322  }
323  return;
324 }
325 
326 void PHG4DetectorGroupSubsystem::set_default_double_param(const int detid, const std::string &name, const double dval)
327 {
328  map<int, map<const std::string, double>>::iterator dmapiter = default_double.find(detid);
329  if (dmapiter == default_double.end())
330  {
331  map<const std::string, double> newdmap;
332  newdmap[name] = dval;
333  default_double[detid] = newdmap;
334  }
335  else
336  {
337  if (dmapiter->second.find(name) != dmapiter->second.end())
338  {
339  cout << "trying to overwrite default double " << name << " "
340  << dmapiter->second.find(name)->second << " with " << dval << endl;
341  exit(1);
342  }
343  else
344  {
345  dmapiter->second[name] = dval;
346  }
347  }
348  return;
349 }
350 
351 void PHG4DetectorGroupSubsystem::set_default_int_param(const int detid, const std::string &name, const int ival)
352 {
353  map<int, map<const std::string, int>>::iterator imapiter = default_int.find(detid);
354  if (imapiter == default_int.end())
355  {
356  map<const std::string, int> newimap;
357  newimap[name] = ival;
358  default_int[detid] = newimap;
359  }
360  else
361  {
362  if (imapiter->second.find(name) != imapiter->second.end())
363  {
364  cout << "trying to overwrite default int " << name << " "
365  << imapiter->second.find(name)->second << " with " << ival << endl;
366  exit(1);
367  }
368  else
369  {
370  imapiter->second[name] = ival;
371  }
372  }
373  return;
374 }
375 
376 void PHG4DetectorGroupSubsystem::set_default_string_param(const int detid, const std::string &name, const string &sval)
377 {
378  map<int, map<const std::string, string>>::iterator smapiter = default_string.find(detid);
379  if (smapiter == default_string.end())
380  {
381  map<const std::string, string> newsmap;
382  newsmap[name] = sval;
383  default_string[detid] = newsmap;
384  }
385  else
386  {
387  if (smapiter->second.find(name) != smapiter->second.end())
388  {
389  cout << "trying to overwrite default string " << name << " "
390  << smapiter->second.find(name)->second << " with " << sval << endl;
391  exit(1);
392  }
393  else
394  {
395  smapiter->second[name] = sval;
396  }
397  }
398  return;
399 }
400 
402 {
403  for (set<int>::const_iterator iter = layers.begin(); iter != layers.end(); ++iter)
404  {
405  set_default_int_param(*iter, "absorberactive", 0);
406  set_default_int_param(*iter, "absorbertruth", 0);
407  set_default_int_param(*iter, "blackhole", 0);
408  }
409  SetDefaultParameters(); // call method from specific subsystem
410  // now load those parameters to our params class
411  map<int, map<const string, double>>::const_iterator diter;
412  for (diter = default_double.begin(); diter != default_double.end(); ++diter)
413  {
414  PHG4Parameters *detidparams = paramscontainer_default->GetParametersToModify(diter->first);
415  if (!detidparams)
416  {
417  detidparams = new PHG4Parameters(boost::str(boost::format("%s_%d") % Name() % diter->first));
418  paramscontainer_default->AddPHG4Parameters(diter->first, detidparams);
419  }
420  map<const string, double>::const_iterator diter2;
421  for (diter2 = diter->second.begin(); diter2 != diter->second.end(); ++diter2)
422  {
423  detidparams->set_double_param(diter2->first, diter2->second);
424  }
425  }
426 
427  map<int, map<const string, int>>::const_iterator iiter;
428  for (iiter = default_int.begin(); iiter != default_int.end(); ++iiter)
429  {
430  PHG4Parameters *detidparams = paramscontainer_default->GetParametersToModify(iiter->first);
431  if (!detidparams)
432  {
433  detidparams = new PHG4Parameters(boost::str(boost::format("%s_%d") % Name() % iiter->first));
434  paramscontainer_default->AddPHG4Parameters(iiter->first, detidparams);
435  }
436  map<const string, int>::const_iterator iiter2;
437  for (iiter2 = iiter->second.begin(); iiter2 != iiter->second.end(); ++iiter2)
438  {
439  detidparams->set_int_param(iiter2->first, iiter2->second);
440  }
441  }
442 
443  map<int, map<const string, string>>::const_iterator siter;
444  for (siter = default_string.begin(); siter != default_string.end(); ++siter)
445  {
446  PHG4Parameters *detidparams = paramscontainer_default->GetParametersToModify(siter->first);
447  if (!detidparams)
448  {
449  detidparams = new PHG4Parameters(boost::str(boost::format("%s_%d") % Name() % siter->first));
450  paramscontainer_default->AddPHG4Parameters(siter->first, detidparams);
451  }
452  map<const string, string>::const_iterator siter2;
453  for (siter2 = siter->second.begin(); siter2 != siter->second.end(); ++siter2)
454  {
455  detidparams->set_string_param(siter2->first, siter2->second);
456  }
457  }
458 }
459 
461 {
462  int iret = 0;
463  assert(paramscontainer);
464  iret = paramscontainer->WriteToDB();
465  if (iret)
466  {
467  cout << "problem committing to DB" << endl;
468  }
469  return iret;
470 }
471 
472 int PHG4DetectorGroupSubsystem::ReadParamsFromDB(const string &name, const int issuper)
473 {
474  int iret = 0;
475  // if (issuper)
476  // {
477  // iret = params->ReadFromDB(name,layer);
478  // }
479  // else
480  // {
481  // iret = params->ReadFromDB();
482  // }
483  if (iret)
484  {
485  cout << "problem reading from DB" << endl;
486  }
487  return iret;
488 }
489 
491 {
492  string extension;
493  switch (ftyp)
494  {
495  case xml:
496  extension = "xml";
497  break;
498  case root:
499  extension = "root";
500  break;
501  default:
502  cout << PHWHERE << "filetype " << ftyp << " not implemented" << endl;
503  exit(1);
504  }
505  int iret = 0;
506  assert(paramscontainer);
507  iret = paramscontainer->WriteToFile(extension, calibfiledir);
508  if (iret)
509  {
510  cout << "problem saving to " << extension << " file " << endl;
511  }
512  return iret;
513 }
514 
515 int PHG4DetectorGroupSubsystem::ReadParamsFromFile(const string &name, const PHG4DetectorGroupSubsystem::FILE_TYPE ftyp, const int issuper)
516 {
517  string extension;
518  switch (ftyp)
519  {
520  case xml:
521  extension = "xml";
522  break;
523  case root:
524  extension = "root";
525  break;
526  default:
527  cout << PHWHERE << "filetype " << ftyp << " not implemented" << endl;
528  exit(1);
529  }
530  int iret = 1;
531  // int iret = params->ReadFromFile(name, extension, layer, issuper, calibfiledir);
532  if (iret)
533  {
534  cout << "problem reading from " << extension << " file " << endl;
535  }
536  return iret;
537 }
538 
539 void PHG4DetectorGroupSubsystem::SetActive(const int detid, const int i)
540 {
541  set_int_param(detid, "active", i);
542 }
543 
544 void PHG4DetectorGroupSubsystem::SetAbsorberActive(const int detid, const int i)
545 {
546  set_int_param(detid, "absorberactive", i);
547 }
548 
549 void PHG4DetectorGroupSubsystem::BlackHole(const int detid, const int i)
550 {
551  set_int_param(detid, "blackhole", i);
552 }
553 
554 void PHG4DetectorGroupSubsystem::SetAbsorberTruth(const int detid, const int i)
555 {
556  set_int_param(detid, "absorbertruth", i);
557 }
558 
560 {
561  cout << "Default Parameters: " << endl;
562  cout << "int values: " << endl;
563  map<int, map<const std::string, int>>::const_iterator iiter;
564  for (iiter = default_int.begin(); iiter != default_int.end(); ++iiter)
565  {
566  cout << "Detector id: " << iiter->first << endl;
567  map<const string, int>::const_iterator iiter2;
568  for (iiter2 = iiter->second.begin(); iiter2 != iiter->second.end(); ++iiter2)
569  {
570  cout << iiter2->first << ": " << iiter2->second << endl;
571  }
572  }
573  cout << "double values: " << endl;
574  map<int, map<const std::string, double>>::const_iterator diter;
575  for (diter = default_double.begin(); diter != default_double.end(); ++diter)
576  {
577  cout << "Detector id: " << diter->first << endl;
578  map<const string, double>::const_iterator diter2;
579  for (diter2 = diter->second.begin(); diter2 != diter->second.end(); ++diter2)
580  {
581  cout << diter2->first << ": " << diter2->second << endl;
582  }
583  }
584  cout << "string values: " << endl;
585  map<int, map<const std::string, string>>::const_iterator siter;
586  for (siter = default_string.begin(); siter != default_string.end(); ++siter)
587  {
588  cout << "Detector id: " << siter->first << endl;
589  map<const string, string>::const_iterator siter2;
590  for (siter2 = siter->second.begin(); siter2 != siter->second.end(); ++siter2)
591  {
592  cout << siter2->first << ": " << siter2->second << endl;
593  }
594  }
595  return;
596 }
597 
599 {
600  cout << "Macro Parameters: " << endl;
601  cout << "int values: " << endl;
602  map<int, map<const std::string, int>>::const_iterator iiter;
603  for (iiter = iparams.begin(); iiter != iparams.end(); ++iiter)
604  {
605  cout << "Detector id: " << iiter->first << endl;
606  map<const string, int>::const_iterator iiter2;
607  for (iiter2 = iiter->second.begin(); iiter2 != iiter->second.end(); ++iiter2)
608  {
609  cout << iiter2->first << ": " << iiter2->second << endl;
610  }
611  }
612  cout << "double values: " << endl;
613  map<int, map<const std::string, double>>::const_iterator diter;
614  for (diter = dparams.begin(); diter != dparams.end(); ++diter)
615  {
616  cout << "Detector id: " << diter->first << endl;
617  map<const string, double>::const_iterator diter2;
618  for (diter2 = diter->second.begin(); diter2 != diter->second.end(); ++diter2)
619  {
620  cout << diter2->first << ": " << diter2->second << endl;
621  }
622  }
623  cout << "string values: " << endl;
624  map<int, map<const std::string, string>>::const_iterator siter;
625  for (siter = cparams.begin(); siter != cparams.end(); ++siter)
626  {
627  cout << "Detector id: " << siter->first << endl;
628  map<const string, string>::const_iterator siter2;
629  for (siter2 = siter->second.begin(); siter2 != siter->second.end(); ++siter2)
630  {
631  cout << siter2->first << ": " << siter2->second << endl;
632  }
633  }
634  return;
635 }
#define NULL
Definition: Pdb.h:9
virtual const std::string Name() const
Returns the name of this module.
Definition: Fun4AllBase.h:23
virtual int Verbosity() const
Gets the verbosity of this module.
Definition: Fun4AllBase.h:64
PHBoolean addNode(PHNode *)
int ReadParamsFromDB(const std::string &name, const int issuper)
void set_double_param(const int detid, const std::string &name, const double dval)
int SaveParamsToFile(const FILE_TYPE ftyp)
void BlackHole(const int detid, const int i=1)
void SetAbsorberTruth(const int detid, const int i=1)
double get_double_param(const int detid, const std::string &name) const
void set_int_param(const int detid, const std::string &name, const int ival)
void SetAbsorberActive(const int detid, const int i=1)
const std::string SuperDetector() const
virtual void SetDefaultParameters()=0
void set_default_double_param(const int detid, const std::string &name, const double dval)
PHG4DetectorGroupSubsystem(const std::string &name="GenericSubsystem", const int lyr=0)
int get_int_param(const int detid, const std::string &name) const
PHG4ParametersContainer * GetParamsContainer() const
int InitRun(PHCompositeNode *) final
int ReadParamsFromFile(const std::string &name, const FILE_TYPE ftyp, const int issuper)
void set_default_int_param(const int detid, const std::string &name, const int ival)
std::string get_string_param(const int detid, const std::string &name) const
virtual int InitRunSubsystem(PHCompositeNode *)
void SetActive(const int detid, const int i=1)
void set_default_string_param(const int detid, const std::string &name, const std::string &sval)
void set_string_param(const int detid, const std::string &name, const std::string &sval)
virtual int InitSubsystem(PHCompositeNode *)
int Init(PHCompositeNode *) final
Map::const_iterator ConstIterator
void set_name(const std::string &name)
int WriteToFile(const std::string &extension, const std::string &dir)
void AddPHG4Parameters(const int layer, PHG4Parameters *params)
ConstRange GetAllParameters() const
const PHG4Parameters * GetParameters(const int layer) const
std::pair< ConstIterator, ConstIterator > ConstRange
void FillFrom(const PdbParameterMapContainer *saveparamcontainer)
void SaveToNodeTree(PHCompositeNode *topNode, const std::string &nodename)
PHG4Parameters * GetParametersToModify(const int layer)
void set_double_param(const std::string &name, const double dval)
std::string get_string_param(const std::string &name) const
void set_int_param(const std::string &name, const int ival)
double get_double_param(const std::string &name) const
void set_string_param(const std::string &name, const std::string &str)
int get_int_param(const std::string &name) const
PHParameters * params
Definition: PHG4Subsystem.h:56
PHNode * findFirst(const std::string &, const std::string &)
void set_int_param(const std::string &name, const int ival)
Definition: PHParameters.cc:54
#define PHWHERE
Definition: phool.h:23