source: trunk/examples/advanced/cosmicray_charging/src/LISAEventAction.cc @ 1346

Last change on this file since 1346 was 807, checked in by garnier, 16 years ago

update

File size: 7.2 KB
Line 
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// *                                                                  *
28// * cosmicray_charging advanced example for Geant4                   *
29// * (adapted simulation of test-mass charging in the LISA mission)   *
30// *                                                                  *
31// * Henrique Araujo (h.araujo@imperial.ac.uk) & Peter Wass           *
32// * Imperial College London                                          *
33// *                                                                  *
34// * LISAEventAction class                                            *
35// *                                                                  *
36// ********************************************************************
37//
38// HISTORY
39// 22/02/2004: migrated from LISA-V04
40//
41// ********************************************************************
42
43
44#include "LISAEventAction.hh"
45
46#include "LISAPrimaryGeneratorAction.hh"
47#include "LISASteppingAction.hh"
48
49#ifdef G4ANALYSIS_USE
50#include "LISAAnalysisManager.hh"
51#endif
52
53#include "G4Event.hh"
54#include "G4EventManager.hh"
55#include "G4TrajectoryContainer.hh"
56#include "G4Trajectory.hh"
57#include "G4ParticleDefinition.hh"
58#include "G4VVisManager.hh"
59#include "G4UImanager.hh"
60#include "G4Polyline.hh"
61#include "G4Colour.hh"
62#include "G4VisAttributes.hh"
63#include "G4UnitsTable.hh"
64#include "G4ios.hh"
65
66#include <fstream>
67#include <iomanip>
68
69
70//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
71LISAEventAction::LISAEventAction(LISAPrimaryGeneratorAction* generatorAction,
72  LISASteppingAction* steppingAction)
73  : genAction(generatorAction),stepAction(steppingAction) {
74
75  energy_pri    = 0;
76  charge_in[0]  = 0;
77  charge_in[1]  = 0;
78  charge_out[0] = 0;
79  charge_out[1] = 0;
80  charge_tot[0] = 0;
81  charge_tot[1] = 0;
82  seeds         = NULL;
83  filename      = G4String();
84
85}
86
87
88//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
89LISAEventAction::~LISAEventAction() {;}
90
91
92//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
93void LISAEventAction::BeginOfEventAction(const G4Event* evt) {
94
95  // reset event charges
96  stepAction->Discharge();
97
98  // grab event seeds
99  seeds = genAction->GetEventSeeds();
100  //    G4cout << " 1st seed: " << *seeds << G4endl;;
101  //    G4cout << " 2nd seed: " << *(seeds+1) << G4endl;
102  //    HepRandom::showEngineStatus();
103
104  // grab energy of primary
105  energy_pri = genAction->GetEnergyPrimary();
106
107  event_id = evt->GetEventID();
108  if(event_id%1000==0 || (event_id%100==0 && event_id<1000))
109    G4cout << "\n---> Begin of event: " << event_id << G4endl;
110
111}
112
113
114//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
115void LISAEventAction::EndOfEventAction(const G4Event* evt) {
116
117
118  // Look at TM0 and TM1
119  for(int tm=0; tm<=1; ++tm) {
120
121    charge_in[tm]  = stepAction->GetChargeIn(tm);
122    charge_out[tm] = stepAction->GetChargeOut(tm);
123    charge_tot[tm] = charge_in[tm] - charge_out[tm];
124
125    // save if changed
126    if(charge_tot[tm]) {
127
128      // printout
129      G4cout << " *** Evt: " << event_id
130             << "\tTM: "     << tm
131             << "\tE: "      << energy_pri
132             << "\tQnet: "   << charge_tot[tm]
133             << "\tQin: "    << charge_in[tm] 
134             << "\tQout: "   << charge_out[tm] 
135             << G4endl;
136   
137      // append to file
138      std::ofstream chargefile(filename,std::ios::app);
139      chargefile << event_id       << "\t" 
140                 << tm             << "\t"
141                 << energy_pri     << "\t" 
142                 << charge_tot[tm] << "\t"
143                 << charge_in[tm]  << "\t"
144                 << charge_out[tm] << "\t"
145                 << *seeds         << "\t"
146                 << *(seeds+1)     << "\t"
147                 << G4endl;
148     
149      // Write event information to HBOOK NTuple if using analysis
150#ifdef G4ANALYSIS_USE
151      LISAAnalysisManager* analysis = LISAAnalysisManager::getInstance();
152      analysis->analyseRun(event_id, 
153                           tm,
154                           energy_pri,
155                           charge_tot[tm],
156                           charge_in[tm],
157                           charge_out[tm],
158                           *seeds, 
159                           *(seeds+1));
160#endif
161
162    } // if(charge_tot[tm])
163
164  } // for(int tm=0; tm<=1; ++tm)
165
166
167
168  // draw trajectories
169  // colours by particle type
170  G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
171  if(pVVisManager) {
172
173    G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
174    G4int n_trajectories = 0;
175    if (trajectoryContainer) 
176      n_trajectories = trajectoryContainer->entries();
177
178    for (G4int i=0; i<n_trajectories; i++) {
179      G4Trajectory* trj = 0;
180      trj = dynamic_cast<G4Trajectory*>((*trajectoryContainer)[i]);
181
182      G4String name = trj->GetParticleDefinition()->GetParticleName();
183      G4Colour colour = G4Colour(1.0, 1.0, 1.0);
184      G4Polyline pPolyline;
185
186      if (trj) {
187       
188        for (int i=0; i<trj->GetPointEntries(); i++)
189          pPolyline.push_back( trj->GetPoint(i)->GetPosition() );
190       
191             if(name=="proton")   colour=G4Colour(0.0, 0.0, 1.0);
192        else if(name=="alpha")    colour=G4Colour(0.0, 0.0, 0.5);
193        else if(name=="He3")      colour=G4Colour(1.0, 0.0, 1.0);
194        else if(name=="pi+")      colour=G4Colour(0.5, 0.5, 0.5);
195        else if(name=="pi-")      colour=G4Colour(0.5, 0.5, 0.5);
196        else if(name=="e+")       colour=G4Colour(0.0, 1.0, 1.0);
197        else if(name=="e-")       colour=G4Colour(1.0, 0.0, 0.0);
198        else if(name=="gamma")    colour=G4Colour(0.0, 1.0, 0.0);
199        else if(name=="neutron")  colour=G4Colour(1.0, 1.0, 0.0);
200        else                      colour=G4Colour(1.0, 1.0, 1.0);
201
202        G4VisAttributes attribs(colour);
203        pPolyline.SetVisAttributes(attribs);
204        if(pVVisManager) pVVisManager->Draw(pPolyline);
205       
206      } else
207        G4cerr << "EndOfEventAction: Failed to dynamic cast to G4Trajectory!" 
208               << G4endl;
209    }
210  }
211
212
213}
214
Note: See TracBrowser for help on using the repository browser.