11#include "EmcSim/BesEmcDigi.hh"
12#include "EmcSim/BesEmcHit.hh"
13#include "G4HCofThisEvent.hh"
14#include "G4PrimaryParticle.hh"
15#include "G4PrimaryVertex.hh"
16#include "G4RunManager.hh"
17#include "G4SDManager.hh"
18#include "MdcSim/BesMdcDigi.hh"
19#include "MdcSim/BesMdcHit.hh"
20#include "MucSim/BesMucDigi.hh"
21#include "MucSim/BesMucHit.hh"
22#include "TofSim/BesTofDigi.hh"
23#include "TofSim/BesTofHit.hh"
24#include "TruSim/BesSensitiveManager.hh"
25#include "TruSim/BesTruthTrack.hh"
26#include "TruSim/BesTruthVertex.hh"
28#include "AsciiDmp/dmplib.hh"
30#include "G4DigiManager.hh"
34#include "GaudiKernel/Bootstrap.h"
35#include "GaudiKernel/IDataProviderSvc.h"
36#include "GaudiKernel/ISvcLocator.h"
37#include "GaudiKernel/MsgStream.h"
38#include "GaudiKernel/RegistryEntry.h"
39#include "GaudiKernel/SmartDataPtr.h"
40#include "McTruth/DecayMode.h"
43 G4int tofDigiFlag, G4int emcTruFlag, G4int emcDigiFlag,
44 G4int mucTruFlag, G4int mucDigiFlag, G4String name )
45 : m_mdcTruFlag( mdcTruFlag )
46 , m_mdcDigiFlag( mdcDigiFlag )
47 , m_tofTruFlag( tofTruFlag )
48 , m_tofDigiFlag( tofDigiFlag )
49 , m_emcTruFlag( emcTruFlag )
50 , m_emcDigiFlag( emcDigiFlag )
51 , m_mucTruFlag( mucTruFlag )
52 , m_mucDigiFlag( mucDigiFlag )
53 , m_asciiFile( name ) {
54 m_DigiMan = G4DigiManager::GetDMpointer();
123 if ( evt->GetEventID() == 0 )
125 os.open( m_asciiFile );
132 else os.open( m_asciiFile, ios::out | ios::app );
137 std::cerr <<
"wrong tag, got " << ex.
got() <<
" expected: " << ex.
expected() << std::endl;
139 { std::cerr <<
"AsciiDumpException was caught!" << std::endl; }
146 ISvcLocator* svcLocator = Gaudi::svcLocator();
147 IDataProviderSvc* evtSvc;
148 StatusCode sc = svcLocator->service(
"EventDataSvc", evtSvc );
149 if ( sc.isFailure() ) G4cout <<
"Could not accesss EventDataSvc!" << G4endl;
151 SmartDataPtr<DecayMode> decayMode( evtSvc,
"/Event/MC/DecayMode" );
154 for (
int i = 0; i < 10; i++ ) asciiEvt.
decayMode.
data[i] = 0;
158 int dm[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
159 decayMode->getData( dm, 10 );
160 for (
int i = 0; i < 10; i++ ) asciiEvt.
decayMode.
data[i] = dm[i];
168 vector<BesTruthTrack*>* trackList = sensitiveManager->
GetTrackList();
171 G4int nTrack = trackList->size();
173 for (
int i = 0; i < nTrack - 1; i++ )
174 for (
int j = i + 1; j < nTrack; j++ )
175 if ( ( *trackList )[i]->GetIndex() > ( *trackList )[j]->GetIndex() )
177 track = ( *trackList )[i];
178 ( *trackList )[i] = ( *trackList )[j];
179 ( *trackList )[j] = track;
182 for (
int i = 0; i < nTrack; i++ )
187 if ( track->
GetIndex() < 0 ) G4cout <<
"trackIndex<0!" << G4endl;
194 trackTruth.
px = track->
GetP4().x() / 1000.;
195 trackTruth.
py = track->
GetP4().y() / 1000.;
196 trackTruth.
pz = track->
GetP4().z() / 1000.;
197 trackTruth.
E = track->
GetP4().t() / 1000.;
220 vector<BesTruthVertex*>* vertexList = sensitiveManager->
GetVertexList();
222 G4int nVertex = vertexList->size();
224 for (
int i = 0; i < nVertex; i++ )
227 vertex = ( *vertexList )[i];
244 HCID = m_DigiMan->GetHitsCollectionID(
"BesMdcTruthCollection" );
249 G4int n_hit = HC->entries();
254 vector<BesMdcHit*>* vecHC = HC->GetVector();
255 for (
int i = 0; i < n_hit - 1; i++ )
256 for (
int j = i + 1; j < n_hit; j++ )
257 if ( ( *vecHC )[i]->GetTrackID() > ( *vecHC )[j]->GetTrackID() )
260 ( *vecHC )[i] = ( *vecHC )[j];
264 for ( G4int i = 0; i < n_hit; i++ )
287 HCID = m_DigiMan->GetHitsCollectionID(
"BesTofHitsList" );
292 G4int n_hit = HC->entries();
297 vector<BesTofHit*>* vecHC = HC->GetVector();
298 for (
int i = 0; i < n_hit - 1; i++ )
299 for (
int j = i + 1; j < n_hit; j++ )
300 if ( ( *vecHC )[i]->GetTrackIndex() > ( *vecHC )[j]->GetTrackIndex() )
303 ( *vecHC )[i] = ( *vecHC )[j];
307 for ( G4int i = 0; i < n_hit; i++ )
332 HCID = m_DigiMan->GetHitsCollectionID(
"BesEmcHitsList" );
337 G4int n_hit = HC->entries();
342 vector<BesEmcHit*>* vecHC = HC->GetVector();
343 for (
int i = 0; i < n_hit - 1; i++ )
344 for (
int j = i + 1; j < n_hit; j++ )
345 if ( ( *vecHC )[i]->GetTrackIndex() > ( *vecHC )[j]->GetTrackIndex() )
348 ( *vecHC )[i] = ( *vecHC )[j];
352 for ( G4int i = 0; i < n_hit; i++ )
377 HCID = m_DigiMan->GetHitsCollectionID(
"BesMucHitsList" );
382 G4int n_hit = HC->entries();
387 vector<BesMucHit*>* vecHC = HC->GetVector();
388 for (
int i = 0; i < n_hit - 1; i++ )
389 for (
int j = i + 1; j < n_hit; j++ )
390 if ( ( *vecHC )[i]->GetTrackIndex() > ( *vecHC )[j]->GetTrackIndex() )
393 ( *vecHC )[i] = ( *vecHC )[j];
397 for ( G4int i = 0; i < n_hit; i++ )
420 G4int mdcDigiCollID = -1;
421 mdcDigiCollID = m_DigiMan->GetDigiCollectionID(
"BesMdcDigisCollection" );
422 if ( mdcDigiCollID >= 0 )
426 G4int nDigi = mdcDC->entries();
430 for (
int i = 0; i < nDigi; i++ )
433 mdcDigi = ( *mdcDC )[i];
448 G4int tofDigiCollID = -1;
449 tofDigiCollID = m_DigiMan->GetDigiCollectionID(
"BesTofDigitsCollection" );
451 if ( tofDigiCollID >= 0 )
455 G4int nDigi = tofDC->entries();
460 vector<BesTofDigi*>* vecDC = tofDC->GetVector();
461 for (
int i = 0; i < nDigi - 1; i++ )
462 for (
int j = i + 1; j < nDigi; j++ )
463 if ( ( *vecDC )[i]->GetTrackIndex() > ( *vecDC )[j]->GetTrackIndex() )
465 digi = ( *vecDC )[i];
466 ( *vecDC )[i] = ( *vecDC )[j];
467 ( *vecDC )[j] = digi;
470 for (
int i = 0; i < nDigi; i++ )
473 digi = ( *tofDC )[i];
490 G4int emcDigiCollID = -1;
491 emcDigiCollID = m_DigiMan->GetDigiCollectionID(
"BesEmcDigitsCollection" );
492 if ( emcDigiCollID >= 0 )
496 G4int nDigi = emcDC->entries();
501 vector<BesEmcDigi*>* vecDC = emcDC->GetVector();
502 for (
int i = 0; i < nDigi - 1; i++ )
503 for (
int j = i + 1; j < nDigi; j++ )
504 if ( ( *vecDC )[i]->GetTrackIndex() > ( *vecDC )[j]->GetTrackIndex() )
506 digi = ( *vecDC )[i];
507 ( *vecDC )[i] = ( *vecDC )[j];
508 ( *vecDC )[j] = digi;
510 for (
int i = 0; i < nDigi; i++ )
513 digi = ( *emcDC )[i];
528 G4int mucDigiCollID = -1;
529 mucDigiCollID = m_DigiMan->GetDigiCollectionID(
"BesMucDigisCollection" );
530 if ( mucDigiCollID >= 0 )
534 G4int nDigi = mucDC->entries();
538 for (
int i = 0; i < nDigi; i++ )
541 mucDigi = ( *mucDC )[i];
620 if ( evt->GetEventID() == 0 )
622 os.open( m_asciiFile );
629 else os.open( m_asciiFile, ios::out | ios::app );
634 std::cerr <<
"wrong tag, got " << ex.
got() <<
" expected: " << ex.
expected() << std::endl;
636 { std::cerr <<
"AsciiDumpException was caught!" << std::endl; }
644 ISvcLocator* svcLocator = Gaudi::svcLocator();
645 IDataProviderSvc* evtSvc;
646 StatusCode sc = svcLocator->service(
"EventDataSvc", evtSvc );
647 if ( sc.isFailure() ) G4cout <<
"Could not accesss EventDataSvc!" << G4endl;
649 SmartDataPtr<DecayMode> decayMode( evtSvc,
"/Event/MC/DecayMode" );
652 for (
int i = 0; i < 10; i++ ) asciiEvt.
decayMode.
data[i] = 0;
656 int dm[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
657 decayMode->getData( dm, 10 );
658 for (
int i = 0; i < 10; i++ ) asciiEvt.
decayMode.
data[i] = dm[i];
666 vector<BesTruthTrack*>* trackList = sensitiveManager->
GetTrackList();
669 G4int nTrack = trackList->size();
671 for (
int i = 0; i < nTrack - 1; i++ )
672 for (
int j = i + 1; j < nTrack; j++ )
673 if ( ( *trackList )[i]->GetIndex() > ( *trackList )[j]->GetIndex() )
675 track = ( *trackList )[i];
676 ( *trackList )[i] = ( *trackList )[j];
677 ( *trackList )[j] = track;
680 for (
int i = 0; i < nTrack; i++ )
691 trackTruth.
px = track->
GetP4().x();
692 trackTruth.
py = track->
GetP4().y();
693 trackTruth.
pz = track->
GetP4().z();
694 trackTruth.
E = track->
GetP4().t();
717 vector<BesTruthVertex*>* vertexList = sensitiveManager->
GetVertexList();
719 G4int nVertex = vertexList->size();
721 for (
int i = 0; i < nVertex; i++ )
724 vertex = ( *vertexList )[i];
741 HCID = m_DigiMan->GetHitsCollectionID(
"BesMdcTruthCollection" );
746 G4int n_hit = HC->entries();
751 vector<BesMdcHit*>* vecHC = HC->GetVector();
752 for (
int i = 0; i < n_hit - 1; i++ )
753 for (
int j = i + 1; j < n_hit; j++ )
754 if ( ( *vecHC )[i]->GetTrackID() > ( *vecHC )[j]->GetTrackID() )
757 ( *vecHC )[i] = ( *vecHC )[j];
761 for ( G4int i = 0; i < n_hit; i++ )
783 G4int mdcHitCollID = -1;
784 mdcHitCollID = m_DigiMan->GetHitsCollectionID(
"BesMdcHitsCollection" );
785 if ( mdcHitCollID >= 0 )
789 G4int nHit = mdcDC->entries();
793 for (
int i = 0; i < nHit; i++ )
796 mdcHit = ( *mdcDC )[i];
G4TDigiCollection< BesEmcDigi > BesEmcDigitsCollection
G4THitsCollection< BesEmcHit > BesEmcHitsCollection
G4TDigiCollection< BesMdcDigi > BesMdcDigisCollection
G4THitsCollection< BesMdcHit > BesMdcHitsCollection
G4TDigiCollection< BesMucDigi > BesMucDigisCollection
G4THitsCollection< BesMucHit > BesMucHitsCollection
G4TDigiCollection< BesTofDigi > BesTofDigitsCollection
G4THitsCollection< BesTofHit > BesTofHitsCollection
std::string expected() const
void SaveMdcHits(HitEVENT &)
void SaveMucDigits(EVENT &)
void SaveTrackTruth(EVENT &)
void SaveDecayMode(EVENT &)
BesAsciiIO(G4int, G4int, G4int, G4int, G4int, G4int, G4int, G4int, G4String)
void SaveMdcDigits(EVENT &)
void SaveMucTruth(EVENT &)
void SaveEmcDigits(EVENT &)
void SaveEmcTruth(EVENT &)
void SaveTofTruth(EVENT &)
void SaveHitAsciiEvents(G4int, const G4Event *)
void SaveMdcTruth(EVENT &)
void SaveTofDigits(EVENT &)
void SaveVertexTruth(EVENT &)
void SaveAsciiEvents(G4int, const G4Event *)
G4ThreeVector GetPosCrystal()
G4double GetEdepCrystal()
G4ThreeVector GetMomentum()
G4int GetNumThetaCrystal()
G4ThreeVector GetMomentum()
std::vector< BesTruthVertex * > * GetVertexList()
std::vector< BesTruthTrack * > * GetTrackList()
static BesSensitiveManager * GetSensitiveManager()
G4ThreeVector GetMomentum()
HepLorentzVector GetP4() const
BesTruthVertex * GetTerminalVertex() const
BesTruthVertex * GetVertex() const
G4double GetPDGCharge() const
vector< int > GetDaughterIndexes() const
BesTruthTrack * GetParentTrack() const
G4ThreeVector GetPosition() const
std::vector< EmcDigiType > digiCol
std::vector< EmcTruthType > truthCol
std::vector< MdcDigiType > digiCol
std::vector< MdcHitType > hitCol
std::vector< MdcTruthType > truthCol
std::vector< MucDigiType > digiCol
std::vector< MucTruthType > truthCol
std::vector< TofDigiType > digiCol
std::vector< TofTruthType > truthCol
std::vector< TrackTruthType > truthCol
std::vector< VertexTruthType > truthCol