CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Private Attributes
RunManager Class Reference

#include <RunManager.h>

Public Member Functions

void abortEvent ()
 
void abortRun (bool softAbort=false)
 
void Connect (RunAction *)
 
void Connect (EventAction *)
 
void Connect (TrackingAction *)
 
void Connect (SteppingAction *)
 
const G4Event * currentEvent () const
 
const G4Run * currentRun () const
 
const Generatorgenerator () const
 
SimTrackManagerGetSimTrackManager ()
 
void initG4 (const edm::EventSetup &es)
 
void initializeRun ()
 
void initializeUserActions ()
 
void produce (edm::Event &inpevt, const edm::EventSetup &es)
 
std::vector< std::shared_ptr
< SimProducer > > 
producers () const
 
 RunManager (edm::ParameterSet const &p)
 
std::vector
< SensitiveCaloDetector * > & 
sensCaloDetectors ()
 
std::vector
< SensitiveTkDetector * > & 
sensTkDetectors ()
 
G4SimEventsimEvent ()
 
void stopG4 ()
 
void terminateRun ()
 
 ~RunManager ()
 

Protected Member Functions

void DumpMagneticField (const G4Field *) const
 
G4Event * generateEvent (edm::Event &inpevt)
 
void resetGenParticleId (edm::Event &inpevt)
 

Private Attributes

bool firstRun
 
edm::ESWatcher
< IdealGeometryRecord
idealGeomRcdWatcher_
 
edm::ESWatcher
< IdealMagneticFieldRecord
idealMagRcdWatcher_
 
AttachSDm_attach
 
bool m_check
 
sim::ChordFinderSetterm_chordFinderSetter
 
G4Event * m_currentEvent
 
G4Run * m_currentRun
 
int m_EvtMgrVerbosity
 
sim::FieldBuilderm_fieldBuilder
 
std::string m_FieldFile
 
std::vector< std::string > m_G4Commands
 
Generatorm_generator
 
std::string m_InTag
 
G4RunManagerKernel * m_kernel
 
bool m_managerInitialized
 
bool m_nonBeam
 
edm::ParameterSet m_p
 
edm::ParameterSet m_pEventAction
 
edm::ParameterSet m_pField
 
edm::ParameterSet m_pGenerator
 
edm::ParameterSet m_pGeometry
 
std::auto_ptr< PhysicsListm_physicsList
 
std::string m_PhysicsTablesDir
 
edm::ParameterSet m_pPhysics
 
PrimaryTransformerm_primaryTransformer
 
std::vector< std::shared_ptr
< SimProducer > > 
m_producers
 
edm::ParameterSet m_pRunAction
 
edm::ParameterSet m_pStackingAction
 
edm::ParameterSet m_pSteppingAction
 
edm::ParameterSet m_pTrackingAction
 
bool m_pUseMagneticField
 
edm::ParameterSet m_pVertexGenerator
 
SimActivityRegistry m_registry
 
bool m_RestorePhysicsTables
 
bool m_runAborted
 
bool m_runInitialized
 
SimRunInterfacem_runInterface
 
bool m_runTerminated
 
std::vector
< SensitiveCaloDetector * > 
m_sensCaloDets
 
std::vector
< SensitiveTkDetector * > 
m_sensTkDets
 
G4SimEventm_simEvent
 
bool m_StorePhysicsTables
 
edm::InputTag m_theLHCTlinkTag
 
std::auto_ptr< SimTrackManagerm_trackManager
 
RunActionm_userRunAction
 
std::vector< std::shared_ptr
< SimWatcher > > 
m_watchers
 
std::string m_WriteFile
 

Detailed Description

Definition at line 60 of file RunManager.h.

Constructor & Destructor Documentation

RunManager::RunManager ( edm::ParameterSet const &  p)

Definition at line 111 of file RunManager.cc.

References SimActivityRegistry::connect(), createWatchers(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), m_check, m_FieldFile, m_generator, m_InTag, m_kernel, m_p, m_pGenerator, m_producers, m_registry, m_runInterface, m_userRunAction, m_watchers, m_WriteFile, and AlCaHLTBitMon_QueryRunRegistry::string.

112  : m_generator(0), m_nonBeam(p.getParameter<bool>("NonBeamEvent")),
114  m_managerInitialized(false),
115  m_runInitialized(false), m_runTerminated(false), m_runAborted(false),
116  firstRun(true),
117  m_pUseMagneticField(p.getParameter<bool>("UseMagneticField")),
119  m_PhysicsTablesDir(p.getParameter<std::string>("PhysicsTablesDirectory")),
120  m_StorePhysicsTables(p.getParameter<bool>("StorePhysicsTables")),
121  m_RestorePhysicsTables(p.getParameter<bool>("RestorePhysicsTables")),
122  m_EvtMgrVerbosity(p.getUntrackedParameter<int>("G4EventManagerVerbosity",0)),
123  m_pField(p.getParameter<edm::ParameterSet>("MagneticField")),
124  m_pGenerator(p.getParameter<edm::ParameterSet>("Generator")),
125  m_pPhysics(p.getParameter<edm::ParameterSet>("Physics")),
126  m_pRunAction(p.getParameter<edm::ParameterSet>("RunAction")),
127  m_pEventAction(p.getParameter<edm::ParameterSet>("EventAction")),
128  m_pStackingAction(p.getParameter<edm::ParameterSet>("StackingAction")),
129  m_pTrackingAction(p.getParameter<edm::ParameterSet>("TrackingAction")),
130  m_pSteppingAction(p.getParameter<edm::ParameterSet>("SteppingAction")),
131  m_G4Commands(p.getParameter<std::vector<std::string> >("G4Commands")),
132  m_p(p), m_fieldBuilder(0), m_chordFinderSetter(nullptr),
133  m_theLHCTlinkTag(p.getParameter<edm::InputTag>("theLHCTlinkTag"))
134 {
135  //m_HepMC = iC.consumes<edm::HepMCProduct>(p.getParameter<edm::InputTag>("HepMCProduct"));
136 
137  m_kernel = G4RunManagerKernel::GetRunManagerKernel();
138  if (m_kernel==0) m_kernel = new G4RunManagerKernel();
139 
140  //m_CustomExceptionHandler = new ExceptionHandler(this) ;
141 
142  m_check = p.getUntrackedParameter<bool>("CheckOverlap",false);
143  m_WriteFile = p.getUntrackedParameter<std::string>("FileNameGDML","");
144  m_FieldFile = p.getUntrackedParameter<std::string>("FileNameField","");
145  if("" != m_FieldFile) { m_FieldFile += ".txt"; }
146 
147  m_userRunAction = 0;
148  m_runInterface = 0;
149 
150  //Look for an outside SimActivityRegistry
151  // this is used by the visualization code
152  edm::Service<SimActivityRegistry> otherRegistry;
153  if(otherRegistry){
154  m_registry.connect(*otherRegistry);
155  }
156 
158 
160  m_InTag = m_pGenerator.getParameter<std::string>("HepMCProductLabel") ;
161 
162 }
T getParameter(std::string const &) const
bool m_check
Definition: RunManager.h:131
edm::ParameterSet m_pGenerator
Definition: RunManager.h:134
G4Event * m_currentEvent
Definition: RunManager.h:120
SimActivityRegistry m_registry
Definition: RunManager.h:150
edm::ParameterSet m_p
Definition: RunManager.h:143
std::vector< std::shared_ptr< SimProducer > > m_producers
Definition: RunManager.h:152
void connect(Observer< const BeginOfJob * > *iObject)
Generator * m_generator
Definition: RunManager.h:107
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< std::shared_ptr< SimWatcher > > &oWatchers, std::vector< std::shared_ptr< SimProducer > > &oProds)
Definition: RunManager.cc:76
bool m_pUseMagneticField
Definition: RunManager.h:118
bool m_nonBeam
Definition: RunManager.h:110
int m_EvtMgrVerbosity
Definition: RunManager.h:130
std::string m_WriteFile
Definition: RunManager.h:164
bool firstRun
Definition: RunManager.h:117
SimRunInterface * m_runInterface
Definition: RunManager.h:123
bool m_RestorePhysicsTables
Definition: RunManager.h:129
std::vector< std::shared_ptr< SimWatcher > > m_watchers
Definition: RunManager.h:151
G4Run * m_currentRun
Definition: RunManager.h:119
edm::ParameterSet m_pStackingAction
Definition: RunManager.h:139
edm::ParameterSet m_pEventAction
Definition: RunManager.h:138
bool m_runTerminated
Definition: RunManager.h:115
edm::ParameterSet m_pField
Definition: RunManager.h:133
edm::ParameterSet m_pPhysics
Definition: RunManager.h:136
edm::ParameterSet m_pSteppingAction
Definition: RunManager.h:141
RunAction * m_userRunAction
Definition: RunManager.h:122
std::string m_InTag
Definition: RunManager.h:108
bool m_runInitialized
Definition: RunManager.h:114
sim::ChordFinderSetter * m_chordFinderSetter
Definition: RunManager.h:156
PrimaryTransformer * m_primaryTransformer
Definition: RunManager.h:112
sim::FieldBuilder * m_fieldBuilder
Definition: RunManager.h:155
std::string m_PhysicsTablesDir
Definition: RunManager.h:127
bool m_StorePhysicsTables
Definition: RunManager.h:128
edm::ParameterSet m_pRunAction
Definition: RunManager.h:137
edm::ParameterSet m_pTrackingAction
Definition: RunManager.h:140
std::vector< std::string > m_G4Commands
Definition: RunManager.h:142
std::string m_FieldFile
Definition: RunManager.h:163
G4SimEvent * m_simEvent
Definition: RunManager.h:121
bool m_managerInitialized
Definition: RunManager.h:113
edm::InputTag m_theLHCTlinkTag
Definition: RunManager.h:161
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105
bool m_runAborted
Definition: RunManager.h:116
RunManager::~RunManager ( )

Definition at line 164 of file RunManager.cc.

References m_runInterface, m_runTerminated, and terminateRun().

165 {
166  if (!m_runTerminated) { terminateRun(); }
167  G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
168  G4GeometryManager::GetInstance()->OpenGeometry();
169  // if (m_kernel!=0) delete m_kernel;
170  delete m_runInterface;
171 }
SimRunInterface * m_runInterface
Definition: RunManager.h:123
void terminateRun()
Definition: RunManager.cc:467
bool m_runTerminated
Definition: RunManager.h:115

Member Function Documentation

void RunManager::abortEvent ( )

Definition at line 388 of file RunManager.cc.

References m_currentEvent, m_kernel, m_runTerminated, TrackingAction::PostUserTrackingAction(), and edmStreamStallGrapher::t.

Referenced by SimRunInterface::abortEvent(), and abortRun().

389 {
390  if (m_runTerminated) { return; }
391  G4Track* t =
392  m_kernel->GetEventManager()->GetTrackingManager()->GetTrack();
393  t->SetTrackStatus(fStopAndKill) ;
394 
395  // CMS-specific act
396  //
397  TrackingAction* uta =
398  (TrackingAction*)m_kernel->GetEventManager()->GetUserTrackingAction() ;
399  uta->PostUserTrackingAction(t) ;
400 
401  m_currentEvent->SetEventAborted();
402 
403  // do NOT call this method for now
404  // because it'll set abortRequested=true (withing G4EventManager)
405  // this will make Geant4, in the event *next* after the aborted one
406  // NOT to get the primary, thus there's NOTHING to trace, and it goes
407  // to the end of G4Event::DoProcessing(G4Event*), where abortRequested
408  // will be reset to true again
409  //
410  //m_kernel->GetEventManager()->AbortCurrentEvent();
411  //
412  // instead, mimic what it does, except (re)setting abortRequested
413  //
414  m_kernel->GetEventManager()->GetStackManager()->clear() ;
415  m_kernel->GetEventManager()->GetTrackingManager()->EventAborted() ;
416 
417  G4StateManager* stateManager = G4StateManager::GetStateManager();
418  stateManager->SetNewState(G4State_GeomClosed);
419 }
G4Event * m_currentEvent
Definition: RunManager.h:120
bool m_runTerminated
Definition: RunManager.h:115
virtual void PostUserTrackingAction(const G4Track *aTrack)
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105
void RunManager::abortRun ( bool  softAbort = false)

Definition at line 491 of file RunManager.cc.

References abortEvent(), m_currentRun, m_runAborted, m_runInitialized, and terminateRun().

Referenced by SimRunInterface::abortRun(), ExceptionHandler::Notify(), and produce().

492 {
493  m_runAborted = false;
494  if (!softAbort) { abortEvent(); }
495  if (m_currentRun!=0) { delete m_currentRun; m_currentRun = 0; }
496  m_runInitialized = false;
497  m_runAborted = true;
498  terminateRun();
499 }
void abortEvent()
Definition: RunManager.cc:388
void terminateRun()
Definition: RunManager.cc:467
G4Run * m_currentRun
Definition: RunManager.h:119
bool m_runInitialized
Definition: RunManager.h:114
bool m_runAborted
Definition: RunManager.h:116
void RunManager::Connect ( RunAction runAction)

Definition at line 515 of file RunManager.cc.

References SimActivityRegistry::beginOfRunSignal_, sim_act::Signaler< T >::connect(), SimActivityRegistry::endOfRunSignal_, RunAction::m_beginOfRunSignal, RunAction::m_endOfRunSignal, and m_registry.

Referenced by SimRunInterface::Connect(), and initializeUserActions().

516 {
519 }
SimActivityRegistry m_registry
Definition: RunManager.h:150
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
Definition: RunAction.h:24
BeginOfRunSignal beginOfRunSignal_
EndOfRunSignal endOfRunSignal_
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
Definition: RunAction.h:23
void RunManager::Connect ( EventAction eventAction)

Definition at line 521 of file RunManager.cc.

References SimActivityRegistry::beginOfEventSignal_, sim_act::Signaler< T >::connect(), SimActivityRegistry::endOfEventSignal_, EventAction::m_beginOfEventSignal, EventAction::m_endOfEventSignal, and m_registry.

522 {
525 }
SimActivityRegistry m_registry
Definition: RunManager.h:150
EndOfEventSignal endOfEventSignal_
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
Definition: EventAction.h:46
BeginOfEventSignal beginOfEventSignal_
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
Definition: EventAction.h:45
void RunManager::Connect ( TrackingAction trackingAction)

Definition at line 527 of file RunManager.cc.

References SimActivityRegistry::beginOfTrackSignal_, sim_act::Signaler< T >::connect(), SimActivityRegistry::endOfTrackSignal_, TrackingAction::m_beginOfTrackSignal, TrackingAction::m_endOfTrackSignal, and m_registry.

528 {
531 }
SimActivityRegistry m_registry
Definition: RunManager.h:150
SimActivityRegistry::EndOfTrackSignal m_endOfTrackSignal
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
EndOfTrackSignal endOfTrackSignal_
BeginOfTrackSignal beginOfTrackSignal_
SimActivityRegistry::BeginOfTrackSignal m_beginOfTrackSignal
void RunManager::Connect ( SteppingAction steppingAction)

Definition at line 533 of file RunManager.cc.

References sim_act::Signaler< T >::connect(), SimActivityRegistry::g4StepSignal_, SteppingAction::m_g4StepSignal, and m_registry.

534 {
536 }
SimActivityRegistry m_registry
Definition: RunManager.h:150
SimActivityRegistry::G4StepSignal m_g4StepSignal
void connect(Observer< const T * > *iObs)
does not take ownership of memory
Definition: Signaler.h:59
const G4Event* RunManager::currentEvent ( ) const
inline

Definition at line 79 of file RunManager.h.

References m_currentEvent.

79 { return m_currentEvent; }
G4Event * m_currentEvent
Definition: RunManager.h:120
const G4Run* RunManager::currentRun ( ) const
inline

Definition at line 75 of file RunManager.h.

References m_currentRun.

75 { return m_currentRun; }
G4Run * m_currentRun
Definition: RunManager.h:119
void RunManager::DumpMagneticField ( const G4Field *  field) const
protected

Definition at line 538 of file RunManager.cc.

References funct::cos(), groupFilesInBlocks::fout, i, j, m_FieldFile, dbtoconf::out, phi, point, alignCSCRings::r, funct::sin(), detailsBasic3DVector::z, and SiStripMonitorClusterAlca_cfi::zmax.

Referenced by initG4().

539 {
540  std::ofstream fout(m_FieldFile.c_str(), std::ios::out);
541  if(fout.fail()){
542  edm::LogWarning("SimG4CoreApplication")
543  << " RunManager WARNING : "
544  << "error opening file <" << m_FieldFile << "> for magnetic field";
545  } else {
546  double rmax = 9000*mm;
547  double zmax = 16000*mm;
548 
549  double dr = 5*cm;
550  double dz = 20*cm;
551 
552  int nr = (int)(rmax/dr);
553  int nz = 2*(int)(zmax/dz);
554 
555  double r = 0.0;
556  double z0 = -zmax;
557  double z;
558 
559  double phi = 0.0;
560  double cosf = cos(phi);
561  double sinf = sin(phi);
562 
563  double point[4] = {0.0,0.0,0.0,0.0};
564  double bfield[3] = {0.0,0.0,0.0};
565 
566  fout << std::setprecision(6);
567  for(int i=0; i<=nr; ++i) {
568  z = z0;
569  for(int j=0; j<=nz; ++j) {
570  point[0] = r*cosf;
571  point[1] = r*sinf;
572  point[2] = z;
573  field->GetFieldValue(point, bfield);
574  fout << "R(mm)= " << r/mm << " phi(deg)= " << phi/degree
575  << " Z(mm)= " << z/mm << " Bz(tesla)= " << bfield[2]/tesla
576  << " Br(tesla)= " << (bfield[0]*cosf + bfield[1]*sinf)/tesla
577  << " Bphi(tesla)= " << (bfield[0]*sinf - bfield[1]*cosf)/tesla
578  << G4endl;
579  z += dz;
580  }
581  r += dr;
582  }
583 
584  fout.close();
585  }
586 }
int i
Definition: DBlmapReader.cc:9
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
float float float z
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int j
Definition: DBlmapReader.cc:9
tuple out
Definition: dbtoconf.py:99
std::string m_FieldFile
Definition: RunManager.h:163
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
Definition: DDAxes.h:10
G4Event * RunManager::generateEvent ( edm::Event inpevt)
protected

Definition at line 354 of file RunManager.cc.

References edm::EventID::event(), edm::Event::getByLabel(), Generator::HepMC2G4(), edm::EventBase::id(), m_currentEvent, m_generator, m_InTag, m_nonBeam, m_simEvent, Generator::nonBeamEvent2G4(), resetGenParticleId(), and Generator::setGenEvent().

Referenced by produce().

355 {
356  if (m_currentEvent!=0) { delete m_currentEvent; }
357  m_currentEvent = 0;
358  if (m_simEvent!=0) { delete m_simEvent; }
359  m_simEvent = 0;
360 
361  // 64 bits event ID in CMSSW converted into Geant4 event ID
362  G4int evtid = (G4int)inpevt.id().event();
363  G4Event * evt = new G4Event(evtid);
364 
366 
367  inpevt.getByLabel( m_InTag, HepMCEvt ) ;
368 
369  m_generator->setGenEvent(HepMCEvt->GetEvent());
370 
371  // required to reset the GenParticle Id for particles transported
372  // along the beam pipe
373  // to their original value for SimTrack creation
374  resetGenParticleId( inpevt );
375 
376  if (!m_nonBeam)
377  {
378  m_generator->HepMC2G4(HepMCEvt->GetEvent(),evt);
379  }
380  else
381  {
382  m_generator->nonBeamEvent2G4(HepMCEvt->GetEvent(),evt);
383  }
384 
385  return evt;
386 }
EventNumber_t event() const
Definition: EventID.h:41
G4Event * m_currentEvent
Definition: RunManager.h:120
void HepMC2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:100
Generator * m_generator
Definition: RunManager.h:107
bool m_nonBeam
Definition: RunManager.h:110
void setGenEvent(const HepMC::GenEvent *inpevt)
Definition: Generator.h:25
void resetGenParticleId(edm::Event &inpevt)
Definition: RunManager.cc:501
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:402
void nonBeamEvent2G4(const HepMC::GenEvent *g, G4Event *e)
Definition: Generator.cc:495
std::string m_InTag
Definition: RunManager.h:108
edm::EventID id() const
Definition: EventBase.h:56
G4SimEvent * m_simEvent
Definition: RunManager.h:121
const Generator* RunManager::generator ( ) const
inline

Definition at line 78 of file RunManager.h.

References m_generator.

78 { return m_generator; }
Generator * m_generator
Definition: RunManager.h:107
SimTrackManager * RunManager::GetSimTrackManager ( )

Definition at line 510 of file RunManager.cc.

References m_trackManager.

Referenced by SimRunInterface::SimRunInterface().

511 {
512  return m_trackManager.get();
513 }
std::auto_ptr< SimTrackManager > m_trackManager
Definition: RunManager.h:154
void RunManager::initG4 ( const edm::EventSetup es)

Definition at line 173 of file RunManager.cc.

References SimActivityRegistry::beginOfJobSignal_, sim::FieldBuilder::build(), edm::ESWatcher< T >::check(), asciidump::cmd, AttachSD::create(), SurfaceDeformationFactory::create(), SimActivityRegistry::dddWorldSignal_, dir, DumpMagneticField(), edm::hlt::Exception, firstRun, g, edm::EventSetup::get(), reco::get(), edm::ParameterSet::getParameter(), DDDWorld::GetWorldVolume(), idealGeomRcdWatcher_, idealMagRcdWatcher_, recoMuon::in, initializeRun(), initializeUserActions(), m_attach, m_check, m_chordFinderSetter, m_fieldBuilder, m_FieldFile, m_G4Commands, m_kernel, m_managerInitialized, m_p, m_pField, m_physicsList, m_PhysicsTablesDir, m_pPhysics, m_primaryTransformer, m_pUseMagneticField, m_registry, m_RestorePhysicsTables, m_sensCaloDets, m_sensTkDets, m_StorePhysicsTables, m_trackManager, m_WriteFile, and AlCaHLTBitMon_QueryRunRegistry::string.

174 {
175  bool geomChanged = idealGeomRcdWatcher_.check(es);
176  if (geomChanged && (!firstRun)) {
177  throw cms::Exception("BadConfig")
178  << "[SimG4Core RunManager]\n"
179  << "The Geometry configuration is changed during the job execution\n"
180  << "this is not allowed, the geometry must stay unchanged\n";
181  }
182  if (m_pUseMagneticField) {
183  bool magChanged = idealMagRcdWatcher_.check(es);
184  if (magChanged && (!firstRun)) {
185  throw cms::Exception("BadConfig")
186  << "[SimG4Core RunManager]\n"
187  << "The MagneticField configuration is changed during the job execution\n"
188  << "this is not allowed, the MagneticField must stay unchanged\n";
189  }
190  }
191 
192  if (m_managerInitialized) return;
193 
194  // DDDWorld: get the DDCV from the ES and use it to build the World
196  es.get<IdealGeometryRecord>().get(pDD);
197 
199  SensitiveDetectorCatalog catalog_;
200  const DDDWorld * world = new DDDWorld(&(*pDD), map_, catalog_, m_check);
202 
203  if("" != m_WriteFile) {
204  G4GDMLParser gdml;
205  gdml.Write(m_WriteFile, world->GetWorldVolume());
206  }
207 
209  {
210  // setup the magnetic field
212  es.get<IdealMagneticFieldRecord>().get(pMF);
213  const GlobalPoint g(0.,0.,0.);
214 
216  m_fieldBuilder = new sim::FieldBuilder(&(*pMF), m_pField);
217  G4TransportationManager * tM =
218  G4TransportationManager::GetTransportationManager();
219  m_fieldBuilder->build( tM->GetFieldManager(),
220  tM->GetPropagatorInField(),
222  if("" != m_FieldFile) {
223  DumpMagneticField(tM->GetFieldManager()->GetDetectorField());
224  }
225  }
226 
227  // we need the track manager now
228  m_trackManager = std::auto_ptr<SimTrackManager>(new SimTrackManager);
229 
230  // attach sensitive detector
231  m_attach = new AttachSD;
232 
233  std::pair< std::vector<SensitiveTkDetector*>,
234  std::vector<SensitiveCaloDetector*> > sensDets =
235  m_attach->create(*world,(*pDD),catalog_,m_p,m_trackManager.get(),
236  m_registry);
237 
238  m_sensTkDets.swap(sensDets.first);
239  m_sensCaloDets.swap(sensDets.second);
240 
241  edm::LogInfo("SimG4CoreApplication")
242  << " RunManager: Sensitive Detector "
243  << "building finished; found "
244  << m_sensTkDets.size()
245  << " Tk type Producers, and "
246  << m_sensCaloDets.size()
247  << " Calo type producers ";
248 
250  es.get<PDTRecord>().get(fTable);
251  const HepPDT::ParticleDataTable *fPDGTable = &(*fTable);
252 
254 
255  std::auto_ptr<PhysicsListMakerBase>
256  physicsMaker(PhysicsListFactory::get()->create(
257  m_pPhysics.getParameter<std::string> ("type")));
258  if (physicsMaker.get()==0) {
259  throw SimG4Exception("Unable to find the Physics list requested");
260  }
261  m_physicsList =
262  physicsMaker->make(map_,fPDGTable,m_chordFinderSetter,m_pPhysics,m_registry);
263 
264  PhysicsList* phys = m_physicsList.get();
265  if (phys==0) {
266  throw SimG4Exception("Physics list construction failed!");
267  }
268 
269  // adding GFlash, Russian Roulette for eletrons and gamma,
270  // step limiters on top of any Physics Lists
271  phys->RegisterPhysics(new ParametrisedEMPhysics("EMoptions",m_pPhysics));
272 
273  m_kernel->SetPhysics(phys);
274  m_kernel->InitializePhysics();
275 
276  m_physicsList->ResetStoredInAscii();
277  std::string tableDir = m_PhysicsTablesDir;
279  m_physicsList->SetPhysicsTableRetrieved(tableDir);
280  }
281  if (m_kernel->RunInitialization()) { m_managerInitialized = true; }
282  else {
283  throw SimG4Exception("G4RunManagerKernel initialization failed!");
284  }
285 
287  {
288  std::ostringstream dir;
289  dir << tableDir << '\0';
290  std::string cmd = std::string("/control/shell mkdir -p ")+tableDir;
291  if (!std::ifstream(dir.str().c_str(), std::ios::in))
292  G4UImanager::GetUIpointer()->ApplyCommand(cmd);
293  m_physicsList->StorePhysicsTable(tableDir);
294  }
295 
296  //tell all interesting parties that we are beginning the job
297  BeginOfJob aBeginOfJob(&es);
298  m_registry.beginOfJobSignal_(&aBeginOfJob);
299 
301 
302  for (unsigned it=0; it<m_G4Commands.size(); it++) {
303  edm::LogInfo("SimG4CoreApplication") << "RunManager:: Requests UI: "
304  << m_G4Commands[it];
305  G4UImanager::GetUIpointer()->ApplyCommand(m_G4Commands[it]);
306  }
307 
308  // If the Geant4 particle table is needed, decomment the lines below
309  //
310  // G4cout << "Output of G4ParticleTable DumpTable:" << G4endl;
311  // G4ParticleTable::GetParticleTable()->DumpTable("ALL");
312 
313  initializeRun();
314  firstRun= false;
315 }
T getParameter(std::string const &) const
bool m_check
Definition: RunManager.h:131
std::auto_ptr< SimTrackManager > m_trackManager
Definition: RunManager.h:154
edm::ESWatcher< IdealMagneticFieldRecord > idealMagRcdWatcher_
Definition: RunManager.h:159
const G4VPhysicalVolume * GetWorldVolume() const
Definition: DDDWorld.h:18
SimActivityRegistry m_registry
Definition: RunManager.h:150
edm::ParameterSet m_p
Definition: RunManager.h:143
HepPDT::ParticleDataTable ParticleDataTable
void initializeRun()
Definition: RunManager.cc:457
void initializeUserActions()
Definition: RunManager.cc:421
bool m_pUseMagneticField
Definition: RunManager.h:118
edm::ESWatcher< IdealGeometryRecord > idealGeomRcdWatcher_
Definition: RunManager.h:158
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
std::vector< SensitiveCaloDetector * > m_sensCaloDets
Definition: RunManager.h:148
std::vector< SensitiveTkDetector * > m_sensTkDets
Definition: RunManager.h:147
BeginOfJobSignal beginOfJobSignal_
std::auto_ptr< PhysicsList > m_physicsList
Definition: RunManager.h:111
std::string m_WriteFile
Definition: RunManager.h:164
bool firstRun
Definition: RunManager.h:117
void build(G4FieldManager *fM=nullptr, G4PropagatorInField *fP=nullptr, ChordFinderSetter *setter=nullptr)
Definition: FieldBuilder.cc:48
string cmd
Definition: asciidump.py:19
bool m_RestorePhysicsTables
Definition: RunManager.h:129
edm::ParameterSet m_pField
Definition: RunManager.h:133
edm::ParameterSet m_pPhysics
Definition: RunManager.h:136
DDDWorldSignal dddWorldSignal_
const T & get() const
Definition: EventSetup.h:55
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > create(const DDDWorld &w, const DDCompactView &cpv, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *m, SimActivityRegistry &reg) const
Definition: AttachSD.cc:23
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
void DumpMagneticField(const G4Field *) const
Definition: RunManager.cc:538
sim::ChordFinderSetter * m_chordFinderSetter
Definition: RunManager.h:156
AttachSD * m_attach
Definition: RunManager.h:146
PrimaryTransformer * m_primaryTransformer
Definition: RunManager.h:112
sim::FieldBuilder * m_fieldBuilder
Definition: RunManager.h:155
std::string m_PhysicsTablesDir
Definition: RunManager.h:127
bool m_StorePhysicsTables
Definition: RunManager.h:128
dbl *** dir
Definition: mlp_gen.cc:35
std::vector< std::string > m_G4Commands
Definition: RunManager.h:142
SurfaceDeformation * create(int type, const std::vector< double > &params)
std::string m_FieldFile
Definition: RunManager.h:163
bool m_managerInitialized
Definition: RunManager.h:113
T get(const Candidate &c)
Definition: component.h:55
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105
void RunManager::initializeRun ( )

Definition at line 457 of file RunManager.cc.

References RunAction::BeginOfRunAction(), m_currentRun, m_runAborted, m_runInitialized, and m_userRunAction.

Referenced by initG4().

458 {
459  m_runInitialized = false;
460  if (m_currentRun==0) { m_currentRun = new G4Run(); }
461  G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
463  m_runAborted = false;
464  m_runInitialized = true;
465 }
G4Run * m_currentRun
Definition: RunManager.h:119
RunAction * m_userRunAction
Definition: RunManager.h:122
void BeginOfRunAction(const G4Run *aRun)
Definition: RunAction.cc:21
bool m_runInitialized
Definition: RunManager.h:114
bool m_runAborted
Definition: RunManager.h:116
void RunManager::initializeUserActions ( )

Definition at line 421 of file RunManager.cc.

References Connect(), m_EvtMgrVerbosity, m_generator, m_kernel, m_pEventAction, m_pRunAction, m_pStackingAction, m_pSteppingAction, m_pTrackingAction, m_runInterface, m_trackManager, and m_userRunAction.

Referenced by initG4().

422 {
423  m_runInterface = new SimRunInterface(this, false);
424 
427 
428  G4EventManager * eventManager = m_kernel->GetEventManager();
429  eventManager->SetVerboseLevel(m_EvtMgrVerbosity);
430 
431  if (m_generator!=0) {
432  EventAction * userEventAction =
434  Connect(userEventAction);
435  eventManager->SetUserAction(userEventAction);
436 
437  TrackingAction* userTrackingAction =
438  new TrackingAction(userEventAction,m_pTrackingAction);
439  Connect(userTrackingAction);
440  eventManager->SetUserAction(userTrackingAction);
441 
442  SteppingAction* userSteppingAction =
443  new SteppingAction(userEventAction,m_pSteppingAction);
444  Connect(userSteppingAction);
445  eventManager->SetUserAction(userSteppingAction);
446 
447  eventManager->SetUserAction(new StackingAction(userTrackingAction,
449 
450  } else {
451  edm::LogWarning("SimG4CoreApplication") << " RunManager: WARNING : "
452  << "No generator; initialized "
453  << "only RunAction!";
454  }
455 }
std::auto_ptr< SimTrackManager > m_trackManager
Definition: RunManager.h:154
Generator * m_generator
Definition: RunManager.h:107
int m_EvtMgrVerbosity
Definition: RunManager.h:130
SimRunInterface * m_runInterface
Definition: RunManager.h:123
edm::ParameterSet m_pStackingAction
Definition: RunManager.h:139
edm::ParameterSet m_pEventAction
Definition: RunManager.h:138
edm::ParameterSet m_pSteppingAction
Definition: RunManager.h:141
RunAction * m_userRunAction
Definition: RunManager.h:122
void Connect(RunAction *)
Definition: RunManager.cc:515
edm::ParameterSet m_pRunAction
Definition: RunManager.h:137
edm::ParameterSet m_pTrackingAction
Definition: RunManager.h:140
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105
void RunManager::produce ( edm::Event inpevt,
const edm::EventSetup es 
)

Definition at line 323 of file RunManager.cc.

References abortRun(), G4SimEvent::collisionPoint(), edm::EventID::event(), Generator::eventWeight(), generateEvent(), Generator::genEvent(), Generator::genVertex(), G4SimEvent::hepEvent(), edm::EventBase::id(), m_currentEvent, m_generator, m_kernel, m_simEvent, G4SimEvent::nGenParts(), G4SimEvent::nTracks(), G4SimEvent::nVertices(), edm::second(), and G4SimEvent::weight().

324 {
325  m_currentEvent = generateEvent(inpevt);
326  m_simEvent = new G4SimEvent;
329  if (m_generator->genVertex() !=0 ) {
332  m_generator->genVertex()->y()/centimeter,
333  m_generator->genVertex()->z()/centimeter,
334  m_generator->genVertex()->t()/second));
335  }
336  if (m_currentEvent->GetNumberOfPrimaryVertex()==0) {
337  edm::LogError("SimG4CoreApplication")
338  << " RunManager::produce event " << inpevt.id().event()
339  << " with no G4PrimaryVertices \n Aborting Run" ;
340 
341  abortRun(false);
342  } else {
343  m_kernel->GetEventManager()->ProcessOneEvent(m_currentEvent);
344  }
345 
346  edm::LogInfo("SimG4CoreApplication")
347  << " RunManager: saved : Event " << inpevt.id().event()
348  << " of weight " << m_simEvent->weight()
349  << " with " << m_simEvent->nTracks() << " tracks and "
350  << m_simEvent->nVertices()
351  << " vertices, generated by " << m_simEvent->nGenParts() << " particles ";
352 }
EventNumber_t event() const
Definition: EventID.h:41
virtual const math::XYZTLorentzVector * genVertex() const
Definition: Generator.h:30
virtual const double eventWeight() const
Definition: Generator.h:31
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
G4Event * m_currentEvent
Definition: RunManager.h:120
void abortRun(bool softAbort=false)
Definition: RunManager.cc:491
virtual const HepMC::GenEvent * genEvent() const
Definition: Generator.h:29
Generator * m_generator
Definition: RunManager.h:107
U second(std::pair< T, U > const &p)
void weight(float w)
Definition: G4SimEvent.h:27
void hepEvent(const HepMC::GenEvent *r)
Definition: G4SimEvent.h:25
unsigned int nTracks() const
Definition: G4SimEvent.h:22
unsigned int nVertices() const
Definition: G4SimEvent.h:23
unsigned int nGenParts() const
Definition: G4SimEvent.h:24
G4Event * generateEvent(edm::Event &inpevt)
Definition: RunManager.cc:354
edm::EventID id() const
Definition: EventBase.h:56
void collisionPoint(const math::XYZTLorentzVectorD &v)
Definition: G4SimEvent.h:29
G4SimEvent * m_simEvent
Definition: RunManager.h:121
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105
std::vector<std::shared_ptr<SimProducer> > RunManager::producers ( ) const
inline

Definition at line 87 of file RunManager.h.

References m_producers.

87  {
88  return m_producers;
89  }
std::vector< std::shared_ptr< SimProducer > > m_producers
Definition: RunManager.h:152
void RunManager::resetGenParticleId ( edm::Event inpevt)
protected

Definition at line 501 of file RunManager.cc.

References edm::Event::getByLabel(), edm::HandleBase::isValid(), m_theLHCTlinkTag, m_trackManager, and edm::Handle< T >::product().

Referenced by generateEvent().

502 {
504  inpevt.getByLabel( m_theLHCTlinkTag, theLHCTlink );
505  if ( theLHCTlink.isValid() ) {
506  m_trackManager->setLHCTransportLink( theLHCTlink.product() );
507  }
508 }
std::auto_ptr< SimTrackManager > m_trackManager
Definition: RunManager.h:154
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:402
T const * product() const
Definition: Handle.h:81
edm::InputTag m_theLHCTlinkTag
Definition: RunManager.h:161
std::vector<SensitiveCaloDetector*>& RunManager::sensCaloDetectors ( )
inline

Definition at line 84 of file RunManager.h.

References m_sensCaloDets.

84  {
85  return m_sensCaloDets;
86  }
std::vector< SensitiveCaloDetector * > m_sensCaloDets
Definition: RunManager.h:148
std::vector<SensitiveTkDetector*>& RunManager::sensTkDetectors ( )
inline

Definition at line 81 of file RunManager.h.

References m_sensTkDets.

81  {
82  return m_sensTkDets;
83  }
std::vector< SensitiveTkDetector * > m_sensTkDets
Definition: RunManager.h:147
G4SimEvent* RunManager::simEvent ( )
inline

Definition at line 80 of file RunManager.h.

References m_simEvent.

Referenced by SimRunInterface::simEvent().

80 { return m_simEvent; }
G4SimEvent * m_simEvent
Definition: RunManager.h:121
void RunManager::stopG4 ( )

Definition at line 317 of file RunManager.cc.

References m_runTerminated, and terminateRun().

318 {
319  G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
320  if (!m_runTerminated) { terminateRun(); }
321 }
void terminateRun()
Definition: RunManager.cc:467
bool m_runTerminated
Definition: RunManager.h:115
void RunManager::terminateRun ( )

Definition at line 467 of file RunManager.cc.

References RunAction::EndOfRunAction(), m_currentEvent, m_currentRun, m_kernel, m_runInitialized, m_runTerminated, m_simEvent, and m_userRunAction.

Referenced by abortRun(), stopG4(), and ~RunManager().

468 {
469  if (m_userRunAction!=0) {
471  delete m_userRunAction;
472  m_userRunAction = 0;
473  }
474  /*
475  if (m_currentRun!=0) {
476  delete m_currentRun;
477  m_currentRun = 0;
478  }
479  */
480  if (m_kernel!=0 && !m_runTerminated) {
481  delete m_currentEvent;
482  m_currentEvent = 0;
483  delete m_simEvent;
484  m_simEvent = 0;
485  m_kernel->RunTermination();
486  m_runInitialized = false;
487  m_runTerminated = true;
488  }
489 }
G4Event * m_currentEvent
Definition: RunManager.h:120
void EndOfRunAction(const G4Run *aRun)
Definition: RunAction.cc:39
G4Run * m_currentRun
Definition: RunManager.h:119
bool m_runTerminated
Definition: RunManager.h:115
RunAction * m_userRunAction
Definition: RunManager.h:122
bool m_runInitialized
Definition: RunManager.h:114
G4SimEvent * m_simEvent
Definition: RunManager.h:121
G4RunManagerKernel * m_kernel
Definition: RunManager.h:105

Member Data Documentation

bool RunManager::firstRun
private

Definition at line 117 of file RunManager.h.

Referenced by initG4().

edm::ESWatcher<IdealGeometryRecord> RunManager::idealGeomRcdWatcher_
private

Definition at line 158 of file RunManager.h.

Referenced by initG4().

edm::ESWatcher<IdealMagneticFieldRecord> RunManager::idealMagRcdWatcher_
private

Definition at line 159 of file RunManager.h.

Referenced by initG4().

AttachSD* RunManager::m_attach
private

Definition at line 146 of file RunManager.h.

Referenced by initG4().

bool RunManager::m_check
private

Definition at line 131 of file RunManager.h.

Referenced by initG4(), and RunManager().

sim::ChordFinderSetter* RunManager::m_chordFinderSetter
private

Definition at line 156 of file RunManager.h.

Referenced by initG4().

G4Event* RunManager::m_currentEvent
private

Definition at line 120 of file RunManager.h.

Referenced by abortEvent(), currentEvent(), generateEvent(), produce(), and terminateRun().

G4Run* RunManager::m_currentRun
private

Definition at line 119 of file RunManager.h.

Referenced by abortRun(), currentRun(), initializeRun(), and terminateRun().

int RunManager::m_EvtMgrVerbosity
private

Definition at line 130 of file RunManager.h.

Referenced by initializeUserActions().

sim::FieldBuilder* RunManager::m_fieldBuilder
private

Definition at line 155 of file RunManager.h.

Referenced by initG4().

std::string RunManager::m_FieldFile
private

Definition at line 163 of file RunManager.h.

Referenced by DumpMagneticField(), initG4(), and RunManager().

std::vector<std::string> RunManager::m_G4Commands
private

Definition at line 142 of file RunManager.h.

Referenced by initG4().

Generator* RunManager::m_generator
private

Definition at line 107 of file RunManager.h.

Referenced by generateEvent(), generator(), initializeUserActions(), produce(), and RunManager().

std::string RunManager::m_InTag
private

Definition at line 108 of file RunManager.h.

Referenced by generateEvent(), and RunManager().

G4RunManagerKernel* RunManager::m_kernel
private
bool RunManager::m_managerInitialized
private

Definition at line 113 of file RunManager.h.

Referenced by initG4().

bool RunManager::m_nonBeam
private

Definition at line 110 of file RunManager.h.

Referenced by generateEvent().

edm::ParameterSet RunManager::m_p
private

Definition at line 143 of file RunManager.h.

Referenced by initG4(), and RunManager().

edm::ParameterSet RunManager::m_pEventAction
private

Definition at line 138 of file RunManager.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManager::m_pField
private

Definition at line 133 of file RunManager.h.

Referenced by initG4().

edm::ParameterSet RunManager::m_pGenerator
private

Definition at line 134 of file RunManager.h.

Referenced by RunManager().

edm::ParameterSet RunManager::m_pGeometry
private

Definition at line 132 of file RunManager.h.

std::auto_ptr<PhysicsList> RunManager::m_physicsList
private

Definition at line 111 of file RunManager.h.

Referenced by initG4().

std::string RunManager::m_PhysicsTablesDir
private

Definition at line 127 of file RunManager.h.

Referenced by initG4().

edm::ParameterSet RunManager::m_pPhysics
private

Definition at line 136 of file RunManager.h.

Referenced by initG4().

PrimaryTransformer* RunManager::m_primaryTransformer
private

Definition at line 112 of file RunManager.h.

Referenced by initG4().

std::vector<std::shared_ptr<SimProducer> > RunManager::m_producers
private

Definition at line 152 of file RunManager.h.

Referenced by producers(), and RunManager().

edm::ParameterSet RunManager::m_pRunAction
private

Definition at line 137 of file RunManager.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManager::m_pStackingAction
private

Definition at line 139 of file RunManager.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManager::m_pSteppingAction
private

Definition at line 141 of file RunManager.h.

Referenced by initializeUserActions().

edm::ParameterSet RunManager::m_pTrackingAction
private

Definition at line 140 of file RunManager.h.

Referenced by initializeUserActions().

bool RunManager::m_pUseMagneticField
private

Definition at line 118 of file RunManager.h.

Referenced by initG4().

edm::ParameterSet RunManager::m_pVertexGenerator
private

Definition at line 135 of file RunManager.h.

SimActivityRegistry RunManager::m_registry
private

Definition at line 150 of file RunManager.h.

Referenced by Connect(), initG4(), and RunManager().

bool RunManager::m_RestorePhysicsTables
private

Definition at line 129 of file RunManager.h.

Referenced by initG4().

bool RunManager::m_runAborted
private

Definition at line 116 of file RunManager.h.

Referenced by abortRun(), and initializeRun().

bool RunManager::m_runInitialized
private

Definition at line 114 of file RunManager.h.

Referenced by abortRun(), initializeRun(), and terminateRun().

SimRunInterface* RunManager::m_runInterface
private

Definition at line 123 of file RunManager.h.

Referenced by initializeUserActions(), RunManager(), and ~RunManager().

bool RunManager::m_runTerminated
private

Definition at line 115 of file RunManager.h.

Referenced by abortEvent(), stopG4(), terminateRun(), and ~RunManager().

std::vector<SensitiveCaloDetector*> RunManager::m_sensCaloDets
private

Definition at line 148 of file RunManager.h.

Referenced by initG4(), and sensCaloDetectors().

std::vector<SensitiveTkDetector*> RunManager::m_sensTkDets
private

Definition at line 147 of file RunManager.h.

Referenced by initG4(), and sensTkDetectors().

G4SimEvent* RunManager::m_simEvent
private

Definition at line 121 of file RunManager.h.

Referenced by generateEvent(), produce(), simEvent(), and terminateRun().

bool RunManager::m_StorePhysicsTables
private

Definition at line 128 of file RunManager.h.

Referenced by initG4().

edm::InputTag RunManager::m_theLHCTlinkTag
private

Definition at line 161 of file RunManager.h.

Referenced by resetGenParticleId().

std::auto_ptr<SimTrackManager> RunManager::m_trackManager
private
RunAction* RunManager::m_userRunAction
private

Definition at line 122 of file RunManager.h.

Referenced by initializeRun(), initializeUserActions(), RunManager(), and terminateRun().

std::vector<std::shared_ptr<SimWatcher> > RunManager::m_watchers
private

Definition at line 151 of file RunManager.h.

Referenced by RunManager().

std::string RunManager::m_WriteFile
private

Definition at line 164 of file RunManager.h.

Referenced by initG4(), and RunManager().