Skip to content

Commit

Permalink
Merge pull request #3609 from civanch/stacking_steping_cleanup
Browse files Browse the repository at this point in the history
Sim -- Cleanup of SIM core
  • Loading branch information
ktf committed May 1, 2014
2 parents fda7482 + 4fc0862 commit e0aa78a
Show file tree
Hide file tree
Showing 16 changed files with 191 additions and 132 deletions.
2 changes: 1 addition & 1 deletion SimG4Core/Application/interface/OscarMTProducer.h
Expand Up @@ -23,7 +23,7 @@ class OscarMTProducer : public edm::one::EDProducer<edm::one::SharedResources, e
explicit OscarMTProducer(edm::ParameterSet const & p);
virtual ~OscarMTProducer();
virtual void beginRun(const edm::Run & r,const edm::EventSetup& c) override;
virtual void endRun(const edm::Run & r,const edm::EventSetup& c) override { }
virtual void endRun(const edm::Run & r,const edm::EventSetup& c) override;
virtual void produce(edm::Event & e, const edm::EventSetup& c) override;

private:
Expand Down
2 changes: 1 addition & 1 deletion SimG4Core/Application/interface/OscarProducer.h
Expand Up @@ -23,7 +23,7 @@ class OscarProducer : public edm::one::EDProducer<edm::one::SharedResources, edm
explicit OscarProducer(edm::ParameterSet const & p);
virtual ~OscarProducer();
virtual void beginRun(const edm::Run & r,const edm::EventSetup& c) override;
virtual void endRun(const edm::Run & r,const edm::EventSetup& c) override { }
virtual void endRun(const edm::Run & r,const edm::EventSetup& c) override;
virtual void produce(edm::Event & e, const edm::EventSetup& c) override;

private:
Expand Down
3 changes: 3 additions & 0 deletions SimG4Core/Application/interface/RunManager.h
Expand Up @@ -67,8 +67,11 @@ class RunManager
void initG4(const edm::EventSetup & es);
void initializeUserActions();
void initializeRun();

void stopG4();
void terminateRun();
void abortRun(bool softAbort=false);

const G4Run * currentRun() const { return m_currentRun; }
void produce(edm::Event& inpevt, const edm::EventSetup& es);
void abortEvent();
Expand Down
2 changes: 2 additions & 0 deletions SimG4Core/Application/interface/RunManagerMT.h
Expand Up @@ -69,6 +69,8 @@ class RunManagerMT : public RunManager
void initG4(const edm::EventSetup & es);
void initializeUserActions();
void initializeRun();

void stopG4();
void terminateRun();
void abortRun(bool softAbort=false);
const G4Run * currentRun() const { return m_currentRun; }
Expand Down
7 changes: 6 additions & 1 deletion SimG4Core/Application/interface/StackingAction.h
Expand Up @@ -29,12 +29,17 @@ class StackingAction : public G4UserStackingAction {
void initPointer();

int isItPrimaryDecayProductOrConversion(const G4Track*, const G4Track &) const;

int isItFromPrimary(const G4Track &, int) const;

bool rrApplicable(const G4Track*, const G4Track&) const;

bool isItLongLived(const G4Track*) const;

bool isThisRegion(const G4Region*, std::vector<const G4Region*>&) const;
void printRegions(const std::vector<const G4Region*>& reg) const;

void printRegions(const std::vector<const G4Region*>& reg,
const std::string& word) const;

private:

Expand Down
12 changes: 6 additions & 6 deletions SimG4Core/Application/interface/SteppingAction.h
Expand Up @@ -8,13 +8,14 @@
#include "G4Region.hh"
#include "G4UserSteppingAction.hh"
#include "G4VPhysicalVolume.hh"
#include "G4Track.hh"

#include <string>
#include <vector>

class EventAction;
class G4VTouchable;
class G4Track;
//class G4Track;

class SteppingAction: public G4UserSteppingAction {

Expand All @@ -30,13 +31,12 @@ class SteppingAction: public G4UserSteppingAction {

bool initPointer();

bool catchLowEnergyInVacuum(G4Track * theTrack) const;
bool killInsideDeadRegion(G4Track * theTrack) const;
bool catchLongLived(const G4Step * aStep) const;
bool killInsideDeadRegion(G4Track * theTrack, const G4Region* reg) const;
bool catchLongLived(G4Track* theTrack, const G4Region* reg) const;
bool killLowEnergy(const G4Step * aStep) const;
bool isThisVolume(const G4VTouchable* touch, G4VPhysicalVolume* pv) const;

void PrintKilledTrack(const G4Track*, int type) const;
bool isThisVolume(const G4VTouchable* touch, G4VPhysicalVolume* pv) const;
void PrintKilledTrack(const G4Track*, const std::string&) const;

private:

Expand Down
8 changes: 7 additions & 1 deletion SimG4Core/Application/plugins/OscarMTProducer.cc
Expand Up @@ -137,6 +137,12 @@ OscarMTProducer::beginRun(const edm::Run & r, const edm::EventSetup & es)
m_runManager->initG4(es);
}

void
OscarProducer::endRun(const edm::Run&, const edm::EventSetup&)
{
m_runManager->stopG4();
}

void OscarMTProducer::produce(edm::Event & e, const edm::EventSetup & es)
{
StaticRandomEngineSetUnset random(e.streamID());
Expand All @@ -148,7 +154,7 @@ void OscarMTProducer::produce(edm::Event & e, const edm::EventSetup & es)

try {

m_runManager->produce(e,es);
m_runManager->produce(e, es);

std::auto_ptr<edm::SimTrackContainer>
p1(new edm::SimTrackContainer);
Expand Down
10 changes: 8 additions & 2 deletions SimG4Core/Application/plugins/OscarProducer.cc
Expand Up @@ -130,13 +130,19 @@ OscarProducer::~OscarProducer()
{ }

void
OscarProducer::beginRun(const edm::Run & r, const edm::EventSetup & es)
OscarProducer::beginRun(const edm::Run&, const edm::EventSetup & es)
{
// Random number generation not allowed here
StaticRandomEngineSetUnset random(nullptr);
m_runManager->initG4(es);
}

void
OscarProducer::endRun(const edm::Run&, const edm::EventSetup&)
{
m_runManager->stopG4();
}

void OscarProducer::produce(edm::Event & e, const edm::EventSetup & es)
{
StaticRandomEngineSetUnset random(e.streamID());
Expand All @@ -148,7 +154,7 @@ void OscarProducer::produce(edm::Event & e, const edm::EventSetup & es)

try {

m_runManager->produce(e,es);
m_runManager->produce(e, es);

std::auto_ptr<edm::SimTrackContainer>
p1(new edm::SimTrackContainer);
Expand Down
21 changes: 16 additions & 5 deletions SimG4Core/Application/python/NeutronBGforMuonsHP_cff.py
Expand Up @@ -4,14 +4,25 @@ def customise(process):

# fragment allowing to simulate neutron background in muon system

# time window 1 millisecond
process.common_maximum_time.MaxTrackTime = cms.double(1000000.0)

# Physics List HP
if hasattr(process,'g4SimHits'):
# time window 10 millisecond
process.common_maximum_time.MaxTrackTime = cms.double(100000000.0)
process.common_maximum_time.DeadRegions = cms.vstring()
# Physics List XS
process.g4SimHits.Physics.type = cms.string('SimG4Core/Physics/FTFP_BERT_HP_EML')

# Eta cut
process.g4SimHits.Generator.MinEtaCut = cms.double(-7.0)
process.g4SimHits.Generator.MaxEtaCut = cms.double(7.0)
# stacking action
process.g4SimHits.StackingAction.MaxTrackTime = cms.double(100000000.0)
process.g4SimHits.StackingAction.DeadRegions = cms.vstring()
# stepping action
process.g4SimHits.SteppingAction.MaxTrackTime = cms.double(100000000.0)
process.g4SimHits.SteppingAction.DeadRegions = cms.vstring()
# Russian roulette disabled
process.g4SimHits.StackingAction.RusRoGammaEnergyLimit = cms.double(0.0)
process.g4SimHits.StackingAction.RusRoNeutronEnergyLimit = cms.double(0.0)
# full simulation of HF
process.g4SimHits.HFShower.UseHFGflash = cms.bool(False)

return(process)
20 changes: 15 additions & 5 deletions SimG4Core/Application/python/NeutronBGforMuonsXS_cff.py
Expand Up @@ -4,15 +4,25 @@ def customise(process):

# fragment allowing to simulate neutron background in muon system

# time window 1 millisecond
process.common_maximum_time.MaxTrackTime = cms.double(1000000.0)

if hasattr(process,'g4SimHits'):
# time window 10 millisecond
process.common_maximum_time.MaxTrackTime = cms.double(100000000.0)
process.common_maximum_time.DeadRegions = cms.vstring()
# Physics List XS
process.g4SimHits.Physics.type = cms.string('SimG4Core/Physics/FTFP_BERT_XS_EML')

# Eta cut
process.g4SimHits.Generator.MinEtaCut = cms.double(-7.0)
process.g4SimHits.Generator.MaxEtaCut = cms.double(7.0)
# stacking action
process.g4SimHits.StackingAction.MaxTrackTime = cms.double(100000000.0)
process.g4SimHits.StackingAction.DeadRegions = cms.vstring()
# stepping action
process.g4SimHits.SteppingAction.MaxTrackTime = cms.double(100000000.0)
process.g4SimHits.SteppingAction.DeadRegions = cms.vstring()
# Russian roulette disabled

process.g4SimHits.StackingAction.RusRoGammaEnergyLimit = cms.double(0.0)
process.g4SimHits.StackingAction.RusRoNeutronEnergyLimit = cms.double(0.0)
# full simulation of HF
process.g4SimHits.HFShower.UseHFGflash = cms.bool(False)

return(process)
2 changes: 1 addition & 1 deletion SimG4Core/Application/python/g4SimHits_cfi.py
Expand Up @@ -344,7 +344,7 @@
FillHisto = cms.untracked.bool(True)
),
CastorSD = cms.PSet(
useShowerLibrary = cms.bool(True),
useShowerLibrary = cms.bool(False),
minEnergyInGeVforUsingSLibrary = cms.double(1.0),
nonCompensationFactor = cms.double(0.85),
Verbosity = cms.untracked.int32(0)
Expand Down
2 changes: 0 additions & 2 deletions SimG4Core/Application/src/RunAction.cc
Expand Up @@ -19,7 +19,6 @@ void RunAction::BeginOfRunAction(const G4Run * aRun)
{
edm::LogWarning("SimG4CoreApplication")
<< "BeginOfRunAction: termination signal received";
//std::cout << "BeginOfRunAction: termination signal received" << std::endl;
m_runInterface->abortRun(true);
}
BeginOfRun r(aRun);
Expand All @@ -32,7 +31,6 @@ void RunAction::EndOfRunAction(const G4Run * aRun)
{
edm::LogWarning("SimG4CoreApplication")
<< "EndOfRunAction: termination signal received";
//std::cout << "EndOfRunAction: termination signal received" << std::endl;
m_runInterface->abortRun(true);
}
EndOfRun r(aRun);
Expand Down
30 changes: 20 additions & 10 deletions SimG4Core/Application/src/RunManager.cc
Expand Up @@ -164,7 +164,8 @@ RunManager::RunManager(edm::ParameterSet const & p)

RunManager::~RunManager()
{
// if (m_kernel!=0) delete m_kernel;
if (!m_runTerminated) { terminateRun(); }
G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
delete m_runInterface;
}

Expand Down Expand Up @@ -308,7 +309,13 @@ void RunManager::initG4(const edm::EventSetup & es)

initializeRun();
firstRun= false;
}

void RunManager::stopG4()
{
//std::cout << "RunManager::stopG4" << std::endl;
if (!m_runTerminated) { terminateRun(); }
G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
}

void RunManager::produce(edm::Event& inpevt, const edm::EventSetup & es)
Expand Down Expand Up @@ -375,6 +382,7 @@ G4Event * RunManager::generateEvent(edm::Event & inpevt)

void RunManager::abortEvent()
{
if (m_runTerminated) { return; }
G4Track* t =
m_kernel->GetEventManager()->GetTrackingManager()->GetTrack();
t->SetTrackStatus(fStopAndKill) ;
Expand All @@ -390,7 +398,7 @@ void RunManager::abortEvent()
// do NOT call this method for now
// because it'll set abortRequested=true (withing G4EventManager)
// this will make Geant4, in the event *next* after the aborted one
// NOT to get the primamry, thus there's NOTHING to trace, and it goes
// NOT to get the primary, thus there's NOTHING to trace, and it goes
// to the end of G4Event::DoProcessing(G4Event*), where abortRequested
// will be reset to true again
//
Expand All @@ -403,8 +411,6 @@ void RunManager::abortEvent()

G4StateManager* stateManager = G4StateManager::GetStateManager();
stateManager->SetNewState(G4State_GeomClosed);

return;
}

void RunManager::initializeUserActions()
Expand Down Expand Up @@ -440,7 +446,6 @@ void RunManager::initializeUserActions()
<< "No generator; initialized "
<< "only RunAction!";
}
return;
}

void RunManager::initializeRun()
Expand All @@ -451,27 +456,32 @@ void RunManager::initializeRun()
if (m_userRunAction!=0) { m_userRunAction->BeginOfRunAction(m_currentRun); }
m_runAborted = false;
m_runInitialized = true;
return;
}

void RunManager::terminateRun()
{
G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
m_runTerminated = false;
if (m_userRunAction!=0) {
m_userRunAction->EndOfRunAction(m_currentRun);
delete m_userRunAction;
m_userRunAction = 0;
}
/*
if (m_currentRun!=0) {
delete m_currentRun;
m_currentRun = 0;
}
if (m_kernel!=0) {
*/
if (m_kernel!=0 && !m_runTerminated) {
delete m_currentEvent;
m_currentEvent = 0;
delete m_simEvent;
m_simEvent = 0;
m_kernel->RunTermination();
m_runInitialized = false;
m_runTerminated = true;
}
return;
}

void RunManager::abortRun(bool softAbort)
Expand All @@ -481,7 +491,7 @@ void RunManager::abortRun(bool softAbort)
if (m_currentRun!=0) { delete m_currentRun; m_currentRun = 0; }
m_runInitialized = false;
m_runAborted = true;
return;
G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
}

void RunManager::resetGenParticleId( edm::Event& inpevt )
Expand All @@ -491,7 +501,6 @@ void RunManager::resetGenParticleId( edm::Event& inpevt )
if ( theLHCTlink.isValid() ) {
m_trackManager->setLHCTransportLink( theLHCTlink.product() );
}
return;
}

SimTrackManager* RunManager::GetSimTrackManager()
Expand Down Expand Up @@ -521,6 +530,7 @@ void RunManager::Connect(SteppingAction* steppingAction)
{
steppingAction->m_g4StepSignal.connect(m_registry.g4StepSignal_);
}

void RunManager::DumpMagneticField(const G4Field* field) const
{
std::ofstream fout(m_FieldFile.c_str(), std::ios::out);
Expand Down

0 comments on commit e0aa78a

Please sign in to comment.