Skip to content

Commit

Permalink
Setup magnetic field in RunManagerMTWorker
Browse files Browse the repository at this point in the history
  • Loading branch information
makortel committed Jul 3, 2014
1 parent ea23e0f commit b8841ad
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
6 changes: 6 additions & 0 deletions SimG4Core/Application/interface/RunManagerMTWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ namespace edm {
class ConsumesCollector;
class HepMCProduct;
}
namespace sim {
class FieldBuilder;
}
class CustomUIsession;
class Generator;
class RunManagerMT;
Expand Down Expand Up @@ -88,7 +91,9 @@ class RunManagerMTWorker {
edm::EDGetTokenT<edm::HepMCProduct> m_InToken;
edm::EDGetTokenT<edm::LHCTransportLinkContainer> m_theLHCTlinkToken;
const bool m_nonBeam;
const bool m_pUseMagneticField;
const int m_EvtMgrVerbosity;
edm::ParameterSet m_pField;
edm::ParameterSet m_pRunAction;
edm::ParameterSet m_pEventAction;
edm::ParameterSet m_pStackingAction;
Expand All @@ -103,6 +108,7 @@ class RunManagerMTWorker {
static thread_local SimTrackManager *m_trackManager;
static thread_local std::vector<SensitiveTkDetector*> m_sensTkDets;
static thread_local std::vector<SensitiveCaloDetector*> m_sensCaloDets;
static thread_local sim::FieldBuilder *m_fieldBuilder;

static thread_local G4Run *m_currentRun;

Expand Down
23 changes: 23 additions & 0 deletions SimG4Core/Application/src/RunManagerMTWorker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
#include "DetectorDescription/Core/interface/DDCompactView.h"

#include "SimG4Core/Geometry/interface/DDDWorld.h"
#include "SimG4Core/MagneticField/interface/FieldBuilder.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"

#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"

Expand All @@ -44,6 +47,7 @@
#include "G4WorkerThread.hh"
#include "G4WorkerRunManagerKernel.hh"
#include "G4StateManager.hh"
#include "G4TransportationManager.hh"

#include <atomic>
#include <thread>
Expand Down Expand Up @@ -106,14 +110,17 @@ thread_local SimActivityRegistry RunManagerMTWorker::m_registry;
thread_local SimTrackManager *RunManagerMTWorker::m_trackManager = nullptr;
thread_local std::vector<SensitiveTkDetector*> RunManagerMTWorker::m_sensTkDets;
thread_local std::vector<SensitiveCaloDetector*> RunManagerMTWorker::m_sensCaloDets;
thread_local sim::FieldBuilder *RunManagerMTWorker::m_fieldBuilder;
thread_local G4Run *RunManagerMTWorker::m_currentRun = nullptr;

RunManagerMTWorker::RunManagerMTWorker(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC):
m_generator(iConfig.getParameter<edm::ParameterSet>("Generator")),
m_InToken(iC.consumes<edm::HepMCProduct>(iConfig.getParameter<edm::ParameterSet>("Generator").getParameter<std::string>("HepMCProductLabel"))),
m_theLHCTlinkToken(iC.consumes<edm::LHCTransportLinkContainer>(iConfig.getParameter<edm::InputTag>("theLHCTlinkTag"))),
m_nonBeam(iConfig.getParameter<bool>("NonBeamEvent")),
m_pUseMagneticField(iConfig.getParameter<bool>("UseMagneticField")),
m_EvtMgrVerbosity(iConfig.getUntrackedParameter<int>("G4EventManagerVerbosity",0)),
m_pField(iConfig.getParameter<edm::ParameterSet>("MagneticField")),
m_pRunAction(iConfig.getParameter<edm::ParameterSet>("RunAction")),
m_pEventAction(iConfig.getParameter<edm::ParameterSet>("EventAction")),
m_pStackingAction(iConfig.getParameter<edm::ParameterSet>("StackingAction")),
Expand Down Expand Up @@ -170,6 +177,22 @@ void RunManagerMTWorker::initializeThread(const RunManagerMT& runManagerMaster,
edm::ESTransientHandle<DDCompactView> pDD;
es.get<IdealGeometryRecord>().get(pDD);

// setup the magnetic field
if (m_pUseMagneticField)
{
const GlobalPoint g(0.,0.,0.);

edm::ESHandle<MagneticField> pMF;
es.get<IdealMagneticFieldRecord>().get(pMF);

m_fieldBuilder = new sim::FieldBuilder(pMF.product(), m_pField);
G4TransportationManager * tM =
G4TransportationManager::GetTransportationManager();
m_fieldBuilder->build( tM->GetFieldManager(),
tM->GetPropagatorInField());
}


// attach sensitive detector
AttachSD attach;
std::pair< std::vector<SensitiveTkDetector*>,
Expand Down

0 comments on commit b8841ad

Please sign in to comment.