2#include "EmcSim/BesEmcDigi.hh"
3#include "G4HCofThisEvent.hh"
4#include "G4PrimaryParticle.hh"
5#include "G4PrimaryVertex.hh"
6#include "G4RunManager.hh"
7#include "G4SDManager.hh"
8#include "MdcSim/BesMdcHit.hh"
9#include "RootEventData/TMcDigiEmc.h"
10#include "RootEventData/TMcHitEvent.h"
11#include "RootEventData/TMcHitTof.h"
12#include "TofSim/BesTofHit.hh"
13#include "TruSim/BesSensitiveManager.hh"
14#include "TruSim/BesTruthTrack.hh"
15#include "TruSim/BesTruthVertex.hh"
21#include "G4ThreeVector.hh"
23#include "AsciiDmp/AsciiData.hh"
24#include "G4DigiManager.hh"
30#include "GaudiKernel/Bootstrap.h"
31#include "GaudiKernel/IDataProviderSvc.h"
32#include "GaudiKernel/ISvcLocator.h"
33#include "GaudiKernel/MsgStream.h"
34#include "GaudiKernel/RegistryEntry.h"
35#include "GaudiKernel/SmartDataPtr.h"
38#include "G4Svc/IG4Svc.h"
41 G4int emcTruFlag, G4int emcDigiFlag, G4int mucTruFlag, G4int mucDigiFlag,
43 : m_mdcTruFlag( mdcTruFlag )
44 , m_mdcDigiFlag( mdcDigiFlag )
45 , m_tofTruFlag( tofTruFlag )
46 , m_tofDigiFlag( tofDigiFlag )
47 , m_emcTruFlag( emcTruFlag )
48 , m_emcDigiFlag( emcDigiFlag )
49 , m_mucTruFlag( mucTruFlag )
50 , m_mucDigiFlag( mucDigiFlag )
51 , m_rootFile( name ) {
52 m_DigiMan = G4DigiManager::GetDMpointer();
54 f =
new TFile( m_rootFile,
"RECREATE" );
57 HitTree =
new TTree(
"HitTree",
"staff data from HitCollection" );
59 HitTree->Branch(
"TMcHitEvent",
"TMcHitEvent", &m_TMcHitEvent, 32000, 99 );
72 m_TMcHitEvent->Clear();
77 G4int emcDigiCollID = -1;
78 emcDigiCollID = m_DigiMan->GetDigiCollectionID(
"BesEmcDigitsCollection" );
79 if ( emcDigiCollID >= 0 )
83 G4int nHits = emcDC->entries();
89 for (
int i = 0; i < nHits; i++ )
91 emcDigi = ( *emcDC )[i];
103 m_TMcHitEvent->addMcDigiEmc( tEmcDigi );
113 THCID = m_DigiMan->GetHitsCollectionID(
"BesMdcHitsCollection" );
118 G4int nHits = mdcDC->entries();
123 for (
int i = 0; i < nHits; i++ )
125 mdcHit = ( *mdcDC )[i];
138 G4ThreeVector gTemp = mdcHit->
GetPos();
139 TVector3 tTemp = TVector3( gTemp.x(), gTemp.y(), gTemp.z() );
143 m_TMcHitEvent->addMcHitMdc( tMdcHit );
151 ISvcLocator* svcLocator = Gaudi::svcLocator();
153 StatusCode sc = svcLocator->service(
"G4Svc", tmpSvc );
157 m_TMcHitEvent->setBeamTime( m_beamTime );
161 THCID = m_DigiMan->GetHitsCollectionID(
"BesTofHitsCollection" );
166 G4int nHits = tofDC->entries();
171 for (
int i = 0; i < nHits; i++ )
173 tofHit = ( *tofDC )[i];
186 G4ThreeVector gTemp = tofHit->
GetPos();
187 TVector3 tTemp( gTemp.x(), gTemp.y(), gTemp.z() );
191 tTemp = TVector3( gTemp.x(), gTemp.y(), gTemp.z() );
195 tTemp = TVector3( gTemp.x(), gTemp.y(), gTemp.z() );
199 m_TMcHitEvent->addMcHitTof( tTofHit );
G4TDigiCollection< BesEmcDigi > BesEmcDigitsCollection
G4THitsCollection< BesMdcHit > BesMdcHitsCollection
G4THitsCollection< BesTofHit > BesTofHitsCollection
void SaveHitRootEvent(G4int, const G4Event *)
void SaveEmcDigiRootEvent()
BesRootIO(G4int, G4int, G4int, G4int, G4int, G4int, G4int, G4int, G4String)
G4ThreeVector GetPDirection()
G4ThreeVector GetMomentum()
virtual double GetBeamTime()=0
void SetThetaNb(Int_t nTheta)
void SetPhiNb(Int_t nPhi)
void SetTime(Double_t time)
void SetTrackIndex(Int_t index)
void SetEnergy(Double_t energy)
void SetDriftT(Double_t time)
void SetDriftD(Double_t distance)
void SetPosFlag(Int_t flag)
void SetGlobalT(Double_t time)
void SetTheta(Double_t angle)
void SetCellNo(Int_t cell)
void SetEnterAngle(Double_t angle)
void SetPos(TVector3 xyz)
void SetTrackID(Int_t track)
void SetEdep(Double_t de)
void SetLayerNo(Int_t layer)
void SetStepL(Double_t stepL)
void SetTime(Double_t time)
void SetTrackIndex(Int_t trackIndex)
void SetG4Index(Int_t index)
void SetPos(TVector3 pos)
void SetMomentum(TVector3 momentum)
void SetDeltaT(Double_t deltaT)
void SetEdep(Double_t edep)
void SetPartId(Int_t partId)
void SetPDirection(TVector3 pDirection)
void SetCharge(Int_t charge)
void SetTrackL(Double_t length)
void SetScinNb(Int_t scinNb)