Loading...
Searching...
No Matches
ExGflashEventAction.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27/// \file ExGflashEventAction.cc
28/// \brief Implementation of the ExGflashEventAction class
29//
30// Created by Joanna Weng 26.11.2004
31
33
34#include "ExGflashHit.hh"
35
36#include "G4Event.hh"
37#include "G4EventManager.hh"
38#include "G4SDManager.hh"
39#include "G4SystemOfUnits.hh"
40#include "G4TrajectoryContainer.hh"
41#include "G4UImanager.hh"
42// std
43#include <algorithm>
44#include <iostream>
45// Gflash
46using namespace std;
47
48//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
49
51
52//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
53
55{
56 if (fNevent > 0) {
57 G4cout << "Internal Real Elapsed Time /event is: " << fDtime / fNevent << G4endl;
58 }
59}
60
61//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
62
64{
65 fTimerIntern.Start();
66 G4cout << " ------ Start ExGflashEventAction ----- " << G4endl;
67 fNevent = evt->GetEventID();
68 G4cout << " Start generating event Nr " << fNevent << G4endl << G4endl;
69}
70
71//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
72
74{
75 fTimerIntern.Stop();
76 G4cout << G4endl;
77 G4cout << "******************************************";
78 G4cout << G4endl;
79 G4cout << "Internal Real Elapsed Time is: " << fTimerIntern.GetRealElapsed();
80 G4cout << G4endl;
81 G4cout << "Internal System Elapsed Time: " << fTimerIntern.GetSystemElapsed();
82 G4cout << G4endl;
83 G4cout << "Internal GetUserElapsed Time: " << fTimerIntern.GetUserElapsed();
84 G4cout << G4endl;
85 G4cout << "******************************************" << G4endl;
86 fDtime += fTimerIntern.GetRealElapsed();
87 G4cout << " ------ ExGflashEventAction::End of event nr. " << fNevent << " -----" << G4endl;
88
89 G4SDManager* SDman = G4SDManager::GetSDMpointer();
90 G4String colNam;
91 fCalorimeterCollectionId = SDman->GetCollectionID(colNam = "ExGflashCollection");
92 if (fCalorimeterCollectionId < 0) return;
93 G4HCofThisEvent* HCE = evt->GetHCofThisEvent();
94 ExGflashHitsCollection* THC = nullptr;
95 G4double totE = 0;
96 // Read out of the crysta ECAL
98 if (THC) {
99 /// Hits in sensitive Detector
100 int n_hit = THC->entries();
101 G4cout << " " << n_hit << " hits are stored in ExGflashHitsCollection " << G4endl;
102 G4PrimaryVertex* pvertex = evt->GetPrimaryVertex();
103 /// Computing (x,y,z) of vertex of initial particles
104 G4ThreeVector vtx = pvertex->GetPosition();
105 G4PrimaryParticle* pparticle = pvertex->GetPrimary();
106 // direction of the Shower
107 G4ThreeVector mom = pparticle->GetMomentum() / pparticle->GetMomentum().mag();
108
109 //@@@ ExGflashEventAction: Magicnumber
110 G4double energyincrystal[100];
111 G4int hitsincrystal[100];
112 for (int i = 0; i < 100; i++)
113 energyincrystal[i] = 0.;
114 for (int i = 0; i < 100; i++)
115 hitsincrystal[i] = 0.;
116
117 //@@@ ExGflashEventAction: Magicnumber
118 /// For all Hits in sensitive detector
119 for (int i = 0; i < n_hit; i++) {
120 G4double estep = (*THC)[i]->GetEdep() / GeV;
121 if (estep > 0.0) {
122 totE += (*THC)[i]->GetEdep() / GeV;
123 G4int num = (*THC)[i]->GetCrystalNum();
124
125 energyincrystal[num] += (*THC)[i]->GetEdep() / GeV;
126 hitsincrystal[num]++;
127 // G4cout << num << G4endl;
128 // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl;
129 // G4cout << (*THC)[i]->GetCrystalNum() /10 <<
130 // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl;
131
132 G4ThreeVector hitpos = (*THC)[i]->GetPos();
133 G4ThreeVector l(hitpos.x(), hitpos.y(), hitpos.z());
134 // distance from shower start
135 l = l - vtx;
136 // projection on shower axis = longitudinal profile
137 G4ThreeVector longitudinal = l;
138 // shower profiles (Radial)
139 G4ThreeVector radial = vtx.cross(l);
140 }
141 }
142 G4double max = 0;
143 G4int index = 0;
144 // Find crystal with maximum energy
145 for (int i = 0; i < 100; i++) {
146 // G4cout << i <<" " << energyincrystal[i] << G4endl;
147 if (max < energyincrystal[i]) {
148 max = energyincrystal[i];
149 index = i;
150 }
151 }
152 // G4cout << index <<" NMAX " << index << G4endl;
153
154 // 3x3 matrix of crystals around the crystal with the maximum energy deposit
155 G4double e3x3 = energyincrystal[index] + energyincrystal[index + 1] + energyincrystal[index - 1]
156 + energyincrystal[index - 10] + energyincrystal[index - 9]
157 + energyincrystal[index - 11] + energyincrystal[index + 10]
158 + energyincrystal[index + 11] + energyincrystal[index + 9];
159
160 // 5x5 matrix of crystals around the crystal with the maximum energy deposit
161 G4double e5x5 =
162 energyincrystal[index] + energyincrystal[index + 1] + energyincrystal[index - 1]
163 + energyincrystal[index + 2] + energyincrystal[index - 2] + energyincrystal[index - 10]
164 + energyincrystal[index - 9] + energyincrystal[index - 11] + energyincrystal[index - 8]
165 + energyincrystal[index - 12] + energyincrystal[index + 10] + energyincrystal[index + 11]
166 + energyincrystal[index + 9] + energyincrystal[index + 12] + energyincrystal[index + 8];
167
168 // 3x3 matrix of crystals around the crystal with the maximum energy deposit
169 G4int num3x3 = hitsincrystal[index] + hitsincrystal[index + 1] + hitsincrystal[index - 1]
170 + hitsincrystal[index - 10] + hitsincrystal[index - 9]
171 + hitsincrystal[index - 11] + hitsincrystal[index + 10]
172 + hitsincrystal[index + 11] + hitsincrystal[index + 9];
173
174 // 5x5 matrix of crystals around the crystal with the maximum energy deposit
175 G4int num5x5 = hitsincrystal[index] + hitsincrystal[index + 1] + hitsincrystal[index - 1]
176 + hitsincrystal[index + 2] + hitsincrystal[index - 2] + hitsincrystal[index - 10]
177 + hitsincrystal[index - 9] + hitsincrystal[index - 11] + hitsincrystal[index - 8]
178 + hitsincrystal[index - 12] + hitsincrystal[index + 10]
179 + hitsincrystal[index + 11] + hitsincrystal[index + 9]
180 + hitsincrystal[index + 12] + hitsincrystal[index + 8];
181
182 G4cout << " e1 " << energyincrystal[index] << " e3x3 " << e3x3 << " GeV e5x5 " << e5x5
183 << G4endl;
184
185 G4cout << " num1 " << hitsincrystal[index] << " num3x3 " << num3x3 << " num5x5 "
186 << num5x5 << G4endl;
187 }
188
189 G4cout << " Total energy deposited in the calorimeter: " << totE << " (GeV)" << G4endl;
190 G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
191 G4int n_trajectories = 0;
192 if (trajectoryContainer) {
193 n_trajectories = trajectoryContainer->entries();
194 }
195 G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl;
196}
197
198//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Definition of the ExGflashEventAction class.
Definition of the ExGflashHit class.
void BeginOfEventAction(const G4Event *) override
void EndOfEventAction(const G4Event *) override

Applications | User Support | Publications | Collaboration