BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
G4SvcRunManager.cpp
Go to the documentation of this file.
1//------------------------------------------------------------------
2//
3// ClassName: G4SvcRunManager
4//
5// Description: replacement G4RunManager with extra features
6//
7// $Id: G4SvcRunManager.cpp,v 1.13 2011/02/15 01:05:25 dengzy Exp $
8// Simulation/G4Sim/G4Svc tag $Name: G4Svc-00-01-58 $
9
10#include "G4SvcRunManager.h"
11#include "G4Event.hh"
12#include "G4HCofThisEvent.hh"
13#include "G4PrimaryParticle.hh"
14#include "G4SDManager.hh"
15#include "BesHepMCInterface.h"
16#include "G4THitsCollection.hh"
17#include "G4VHit.hh"
18#include "G4VHitsCollection.hh"
19#include "G4VUserDetectorConstruction.hh"
20#include "G4VUserPhysicsList.hh"
21#include "G4ios.hh"
22
23#include "G4Trajectory.hh"
24#include "G4TrajectoryContainer.hh"
25
26#include "GaudiKernel/IMessageSvc.h"
27#include "GaudiKernel/System.h"
28
29// #include "FadsKinematics/GeneratorCenter.hh"
30#include "G4VUserPrimaryGeneratorAction.hh"
31
32#include <iostream>
33#include <string>
34#include <vector>
35
36//*************************************************************************//
37
38G4SvcRunManager::G4SvcRunManager() : G4RunManager(), m_logLevel( 6 ) {}
39
40//*************************************************************************//
41
43
44G4Event* G4SvcRunManager::GenerateEvent( G4int i_event ) {
45 G4Event* anEvent = new G4Event( i_event );
46
47 if ( !userPrimaryGeneratorAction )
48 {
49 if ( m_logLevel <= 4 ) std::cout << "calling the hepmc interface" << std::endl;
50 BesHepMCInterface* hepmcInterface = new BesHepMCInterface;
51 hepmcInterface->SetLogLevel( m_logLevel );
52 HepMC::GenEvent* hepmcEvent = hepmcInterface->GenerateHepMCEvent();
53 if ( m_logLevel <= 4 ) std::cout << "got the hepmcEvent" << std::endl;
54 hepmcInterface->HepMC2G4( hepmcEvent, anEvent );
55 delete hepmcInterface;
56 if ( m_logLevel <= 4 ) PrintPrimary( anEvent );
57 }
58 else
59 {
60 if ( storeRandomNumberStatus )
61 {
62 G4String fileN = randomNumberStatusDir + "currentEvent.rndm";
63 CLHEP::HepRandom::saveEngineStatus( fileN );
64 }
65 userPrimaryGeneratorAction->GeneratePrimaries( anEvent );
66 }
67 return anEvent;
68}
69
70void G4SvcRunManager::PrintPrimary( G4Event* anEvent ) {
71 G4cout << G4endl << "primary particles of this event: " << G4endl;
72 G4int n_vertex = anEvent->GetNumberOfPrimaryVertex();
73 for ( G4int i = 0; i < n_vertex; i++ )
74 {
75 G4cout << "vertex:" << i << G4endl;
76 G4PrimaryVertex* primaryVertex = anEvent->GetPrimaryVertex( i );
77 G4PrimaryParticle* primaryParticle = primaryVertex->GetPrimary();
78 G4cout << "PDGCode:";
79 while ( primaryParticle != 0 )
80 {
81 G4int PDGcode = primaryParticle->GetPDGcode();
82 G4cout << PDGcode << " ";
83 primaryParticle = primaryParticle->GetNext();
84 }
85 G4cout << G4endl;
86 }
87 G4cout << G4endl;
88}
90 // G4StateManager* stateManager = G4StateManager::GetStateManager();
91 // stateManager->SetNewState(G4State_EventProc);
92 currentEvent = GenerateEvent( i );
93 eventManager->ProcessOneEvent( currentEvent );
94 AnalyzeEvent( currentEvent );
95 // stateManager->SetNewState(G4State_GeomClosed);
96 StackPreviousEvent( currentEvent );
97 currentEvent = 0;
98 if ( m_logLevel <= 4 )
99 std::cout << "SimulateEvent : done simulating one event " << std::endl << std::endl;
100}
HepMC::GenEvent * GenerateHepMCEvent()
void HepMC2G4(HepMC::GenEvent *hepmcevt, G4Event *g4event)
void SetLogLevel(G4int level)
void PrintPrimary(G4Event *anEvent)
void SimulateEvent(int i)
G4Event * GenerateEvent(G4int i_event)
virtual ~G4SvcRunManager()