BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesMucDigitizer.cc
Go to the documentation of this file.
1//---------------------------------------------------------------------------//
2// BOOST --- BESIII Object_Oriented Simulation Tool //
3//---------------------------------------------------------------------------//
4// Description:
5// Author: Youzy
6// Created: Mar, 2004
7// Modified:
8// Comment:
9//---------------------------------------------------------------------------//
10//$Id: BesMucDigitizer.cc
11
12#include "MucSim/BesMucDigitizer.hh"
13#include "MucSim/BesMucDigi.hh"
14#include "MucSim/BesMucDigit.hh"
15#include "MucSim/BesMucHit.hh"
16
17#include "G4DigiManager.hh"
18#include "GaudiKernel/Bootstrap.h"
19#include "GaudiKernel/IDataProviderSvc.h"
20#include "GaudiKernel/ISvcLocator.h"
21#include "Randomize.hh"
22
23#include "G4Svc/IG4Svc.h"
24// #include "G4Svc/G4Svc.h"
25
26const G4int BesMucDigitizer::m_nPartMax;
27const G4int BesMucDigitizer::m_nSegMax;
28const G4int BesMucDigitizer::m_nGapMax;
29const G4int BesMucDigitizer::m_nStripMax;
30
31BesMucDigitizer::BesMucDigitizer( G4String modName ) : G4VDigitizerModule( modName ) {
32 collectionName.push_back( "BesMucDigisCollection" );
33 m_besMucDigisCollection = 0;
34
35 // Standard unit: length in mm; time in ns; energy in MeV; att in mm;
36 // Here: att in mm; vel in m/s; threshold in MeV; mucRes in ps;
37
38 // retrieve G4Svc
39 ISvcLocator* svcLocator = Gaudi::svcLocator();
40 IG4Svc* tmpSvc;
41 StatusCode sc = svcLocator->service( "G4Svc", tmpSvc );
42 // m_G4Svc = dynamic_cast<G4Svc *>(tmpSvc);
43 m_G4Svc = tmpSvc;
44
45 // get Muc Ntuple from G4Svc
46 if ( m_G4Svc->MucRootFlag() )
47 {
48 m_tupleMuc = m_G4Svc->GetTupleMuc();
49 sc = m_tupleMuc->addItem( "part", m_part );
50 sc = m_tupleMuc->addItem( "seg", m_seg );
51 sc = m_tupleMuc->addItem( "gap", m_gap );
52 sc = m_tupleMuc->addItem( "strip", m_strip );
53 }
54
55 Initialize();
56}
57
59
60void BesMucDigitizer::Initialize() {
61 for ( G4int i = 0; i < m_nPartMax; i++ )
62 {
63 for ( G4int j = 0; j < m_nSegMax; j++ )
64 {
65 for ( G4int k = 0; k < m_nGapMax; k++ )
66 {
67 for ( G4int l = 0; l < m_nStripMax; l++ ) { m_stripID[i][j][k][l] = 0; }
68 }
69 }
70 }
71}
72
74 Initialize();
75
76 m_besMucDigisCollection = new BesMucDigisCollection( moduleName, collectionName[0] );
77 G4DigiManager* DigiMan = G4DigiManager::GetDMpointer();
78
79 // hits collection ID
80 G4int THCID;
81 THCID = DigiMan->GetHitsCollectionID( "BesMucHitsCollection" );
82
83 // hits collection
84 BesMucHitsCollection* THC = 0;
85 THC = (BesMucHitsCollection*)( DigiMan->GetHitsCollection( THCID ) );
86
87 if ( THC )
88 {
89 G4int trackIndex, part, seg, gap, strip;
90 BesMucDigit* aDigit = new BesMucDigit();
91
92 G4int n_hit = THC->entries();
93 for ( G4int i = 0; i < n_hit; i++ )
94 {
95 aDigit->SetHit( ( *THC )[i] );
96 trackIndex = aDigit->GetTrackIndex();
97 part = aDigit->GetPart();
98 seg = aDigit->GetSeg();
99 gap = aDigit->GetGap();
100 strip = aDigit->GetNearestStripNo();
101
102 // fill muc Ntuple
103 if ( m_G4Svc->MucRootFlag() )
104 {
105 m_part = part;
106 m_seg = seg;
107 m_gap = gap;
108 m_strip = strip;
109
110 m_tupleMuc->write();
111 }
112
113 ( *THC )[i]->SetPart( part );
114 ( *THC )[i]->SetSeg( seg );
115 ( *THC )[i]->SetGap( gap );
116 ( *THC )[i]->SetStrip( strip );
117 if ( m_stripID[part][seg][gap][strip] == 0 )
118 { NewDigi( trackIndex, part, seg, gap, strip ); }
119 else { OldDigi(); }
120 }
121 // Smear();
122 StoreDigiCollection( m_besMucDigisCollection );
123 delete aDigit;
124 }
125}
126
127void BesMucDigitizer::NewDigi( G4int trackIndex, G4int part, G4int seg, G4int gap,
128 G4int strip ) {
129 BesMucDigi* digi = new BesMucDigi();
130 digi->SetTrackIndex( trackIndex );
131 digi->SetPartId( part );
132 digi->SetSegId( seg );
133 digi->SetGapId( gap );
134 digi->SetStripId( strip );
135 m_besMucDigisCollection->insert( digi );
136
137 m_stripID[part][seg][gap][strip] = 1;
138}
139
140void BesMucDigitizer::OldDigi() {}
141
142void BesMucDigitizer::Smear() {}
G4TDigiCollection< BesMucDigi > BesMucDigisCollection
G4THitsCollection< BesMucHit > BesMucHitsCollection
G4int GetNearestStripNo()
void SetHit(BesMucHit *hit)
BesMucDigitizer(G4String modName)
virtual void Digitize()