Skip to content

Commit

Permalink
Merge pull request cms-sw#7303 from makortel/geant4mt_fix_G4Event
Browse files Browse the repository at this point in the history
Move G4Event to TLS in RunManagerMTWorker
  • Loading branch information
cmsbuild committed Jan 21, 2015
2 parents a481104 + a52ca19 commit 680b597
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
1 change: 0 additions & 1 deletion SimG4Core/Application/interface/RunManagerMTWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ class RunManagerMTWorker {
struct TLSData;
static thread_local TLSData *m_tls;

std::unique_ptr<G4Event> m_currentEvent;
std::unique_ptr<G4SimEvent> m_simEvent;
};

Expand Down
13 changes: 7 additions & 6 deletions SimG4Core/Application/src/RunManagerMTWorker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ struct RunManagerMTWorker::TLSData {
std::vector<std::shared_ptr<SimProducer> > producers;
std::unique_ptr<sim::FieldBuilder> fieldBuilder;
std::unique_ptr<G4Run> currentRun;
std::unique_ptr<G4Event> currentEvent;
edm::RunNumber_t currentRunNumber = 0;
bool threadInitialized = false;
bool runTerminated = false;
Expand Down Expand Up @@ -364,7 +365,7 @@ void RunManagerMTWorker::terminateRun() {

G4RunManagerKernel *kernel = G4WorkerRunManagerKernel::GetRunManagerKernel();
if(!kernel && !m_tls->runTerminated) {
m_currentEvent.reset();
m_tls->currentEvent.reset();
m_simEvent.reset();
kernel->RunTermination();
m_tls->runTerminated = true;
Expand Down Expand Up @@ -397,7 +398,7 @@ void RunManagerMTWorker::produce(const edm::Event& inpevt, const edm::EventSetup
m_tls->runInterface->setRunManagerMTWorker(this); // For UserActions


m_currentEvent.reset(generateEvent(inpevt));
m_tls->currentEvent.reset(generateEvent(inpevt));

m_simEvent.reset(new G4SimEvent());
m_simEvent->hepEvent(m_generator.genEvent());
Expand All @@ -410,7 +411,7 @@ void RunManagerMTWorker::produce(const edm::Event& inpevt, const edm::EventSetup
genVertex->z()/centimeter,
genVertex->t()/second));
}
if (m_currentEvent->GetNumberOfPrimaryVertex()==0) {
if (m_tls->currentEvent->GetNumberOfPrimaryVertex()==0) {
edm::LogError("SimG4CoreApplication")
<< " RunManagerMT::produce event " << inpevt.id().event()
<< " with no G4PrimaryVertices \n Aborting Run" ;
Expand All @@ -423,7 +424,7 @@ void RunManagerMTWorker::produce(const edm::Event& inpevt, const edm::EventSetup
ss << "No G4WorkerRunManagerKernel yet for thread index" << getThreadIndex() << ", id " << std::hex << std::this_thread::get_id();
throw SimG4Exception(ss.str());
}
kernel->GetEventManager()->ProcessOneEvent(m_currentEvent.get());
kernel->GetEventManager()->ProcessOneEvent(m_tls->currentEvent.get());
}

edm::LogInfo("SimG4CoreApplication")
Expand All @@ -448,7 +449,7 @@ void RunManagerMTWorker::abortEvent() {
static_cast<TrackingAction *>(kernel->GetEventManager()->GetUserTrackingAction());
uta->PostUserTrackingAction(t) ;

m_currentEvent->SetEventAborted();
m_tls->currentEvent->SetEventAborted();

// do NOT call this method for now
// because it'll set abortRequested=true (withing G4EventManager)
Expand All @@ -475,7 +476,7 @@ void RunManagerMTWorker::abortRun(bool softAbort) {
}

G4Event * RunManagerMTWorker::generateEvent(const edm::Event& inpevt) {
m_currentEvent.reset();
m_tls->currentEvent.reset();
m_simEvent.reset();

// 64 bits event ID in CMSSW converted into Geant4 event ID
Expand Down

0 comments on commit 680b597

Please sign in to comment.