95 auto sdManager = G4SDManager::GetSDMpointer();
96 auto analysisManager = G4AnalysisManager::Instance();
99 array<G4String, kDim> hHCName
100 = {{
"hodoscope1/hodoscopeColl",
"hodoscope2/hodoscopeColl" }};
101 array<G4String, kDim> dHCName
102 = {{
"chamber1/driftChamberColl",
"chamber2/driftChamberColl" }};
103 array<G4String, kDim> cHCName
104 = {{
"EMcalorimeter/EMcalorimeterColl",
"HadCalorimeter/HadCalorimeterColl" }};
107 array<array<G4String, kDim>,
kDim> histoName
108 = {{ {{
"Chamber1",
"Chamber2" }}, {{
"Chamber1 XY",
"Chamber2 XY" }} }};
110 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
112 fHodHCID[iDet] = sdManager->GetCollectionID(hHCName[iDet]);
113 fDriftHCID[iDet] = sdManager->GetCollectionID(dHCName[iDet]);
114 fCalHCID[iDet] = sdManager->GetCollectionID(cHCName[iDet]);
131 auto analysisManager = G4AnalysisManager::Instance();
134 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
138 auto nhit = hc->GetSize();
141 analysisManager->FillNtupleIColumn(iDet, nhit);
143 for (
unsigned long i = 0; i < nhit; ++i) {
146 analysisManager->FillH2(
fDriftHistoID[
kH2][iDet], localPos.x(), localPos.y());
151 array<G4int, kDim> totalCalHit = {{ 0, 0 }};
152 array<G4double, kDim> totalCalEdep = {{ 0., 0. }};
154 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
155 auto hc = GetHC(event,
fCalHCID[iDet]);
158 totalCalHit[iDet] = 0;
159 totalCalEdep[iDet] = 0.;
160 for (
unsigned long i = 0; i < hc->GetSize(); ++i) {
172 totalCalEdep[iDet] += edep;
177 analysisManager->FillNtupleDColumn(iDet + 2, totalCalEdep[iDet]);
181 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
182 auto hc = GetHC(event,
fHodHCID[iDet]);
185 for (
unsigned int i = 0; i<hc->GetSize(); ++i) {
188 analysisManager->FillNtupleDColumn(iDet + 4, hit->GetTime());
191 analysisManager->AddNtupleRow();
197 auto printModulo = G4RunManager::GetRunManager()->GetPrintProgress();
198 if ( printModulo == 0 || event->GetEventID() % printModulo != 0)
return;
200 auto primary =
event->GetPrimaryVertex(0)->GetPrimary(0);
203 <<
">>> Event " <<
event->GetEventID() <<
" >>> Simulation truth : "
204 << primary->GetG4code()->GetParticleName()
205 <<
" " << primary->GetMomentum() << G4endl;
208 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
209 auto hc = GetHC(event,
fHodHCID[iDet]);
211 G4cout <<
"Hodoscope " << iDet + 1 <<
" has " << hc->GetSize() <<
" hits." << G4endl;
212 for (
unsigned int i = 0; i<hc->GetSize(); ++i) {
213 hc->GetHit(i)->Print();
218 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
221 G4cout <<
"Drift Chamber " << iDet + 1 <<
" has " << hc->GetSize() <<
" hits." << G4endl;
223 for (
unsigned int i = 0; i < hc->GetSize(); i++) {
225 if (hit->GetLayerID() == layer) hit->
Print();
231 array<G4String, kDim> calName = {{
"EM",
"Hadron" }};
232 for (G4int iDet = 0; iDet <
kDim; ++iDet) {
233 G4cout << calName[iDet] <<
" Calorimeter has " << totalCalHit[iDet] <<
" hits."
234 <<
" Total Edep is " << totalCalEdep[iDet]/MeV <<
" (MeV)" << G4endl;