ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DMXSteppingAction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DMXSteppingAction.cc
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 // GEANT 4 - Underground Dark Matter Detector Advanced Example
29 //
30 // For information related to this code contact: Alex Howard
31 // e-mail: alexander.howard@cern.ch
32 // --------------------------------------------------------------
33 // Comments
34 //
35 // Underground Advanced
36 // by A. Howard and H. Araujo
37 // (27th November 2001)
38 //
39 // History:
40 // 21 Feb 2002 AH: Added Analysis
41 //
42 // SteppingAction program
43 // --------------------------------------------------------------
44 
45 #include "DMXSteppingAction.hh"
47 
48 #include "DMXEventAction.hh"
49 #include "DMXAnalysisManager.hh"
50 
51 #include "G4RunManager.hh"
52 #include "G4Track.hh"
53 #include "G4Step.hh"
54 #include "G4StepPoint.hh"
55 #include "G4TrackStatus.hh"
56 #include "G4ParticleDefinition.hh"
57 #include "G4ParticleTypes.hh"
58 #include "G4VVisManager.hh"
59 #include "G4Colour.hh"
60 #include "G4Polyline.hh"
61 #include "G4VisAttributes.hh"
62 #include "globals.hh"
63 #include "G4ios.hh"
64 
65 
66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
67 
69  : evtAction(0) {
70 
72 
73  // defaults for messenger
74  colourNeutronFlag = "magenta";
75  colourGammaFlag = "cyan";
76  colourOpticalFlag = "white";
77  colourChargedPlusFlag = "red";
78  colourChargedMinusFlag = "blue";
79 
80 }
81 
82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
83 
85 {
86 
87  delete steppingMessenger;
88 
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
92 
94 {
95  if (!evtAction)
96  evtAction =
97  dynamic_cast<const DMXEventAction*>
99 
100 
101  // removed 28/11/01 - unnecessary unless program "freezes"
102  // kill track if too many steps
103  // NB: This is set to DBL_MAX - therefore may cause program to "hang"
104  // G4int MaxNoSteps = DBL_MAX;
105  // G4int StepNo = fStep->GetTrack()->GetCurrentStepNumber();
106  // if(StepNo >= MaxNoSteps) fStep->GetTrack()->SetTrackStatus(fStopAndKill);
107 
108  G4int StepNo = fStep->GetTrack()->GetCurrentStepNumber();
109  if(StepNo == 1)
110  {
111  G4double partEnergy = fStep->GetPreStepPoint()->GetKineticEnergy();
112  G4ParticleDefinition* particleType = fStep->GetTrack()->GetDefinition();
113 
115  if (particleType == G4Gamma::Definition())
116  man->FillH1(8,partEnergy);
117  else if (particleType == G4Neutron::Definition())
118  man->FillH1(9,partEnergy);
119  else if (particleType == G4Electron::Definition())
120  man->FillH1(10,partEnergy);
121  else if (particleType == G4Positron::Definition())
122  man->FillH1(11,partEnergy);
123  else
124  man->FillH1(12,partEnergy);
125  }
126 
127 
128  // check what is to be drawn from EventAction/EventActionMessenger
129  G4String drawColsFlag = evtAction->GetDrawColsFlag();
130  G4String drawTrksFlag = evtAction->GetDrawTrksFlag();
131 
132  // draw by step (here) instead of by event (event action)
133  if (drawColsFlag=="custom" && drawTrksFlag!="none") {
134 
135  // check that VisManager exists
137  if(pVVisManager) {
138 
139  // particle colour in a string
141  G4String strColour;
142  if(name=="neutron") {
143  if(drawTrksFlag=="charged") return;
144  strColour = colourNeutronFlag;
145  } else if (name=="gamma") {
146  if(drawTrksFlag=="charged") return;
147  strColour = colourGammaFlag;
148  } else if (name=="opticalphoton") {
149  if(drawTrksFlag!="all") return;
150  strColour = colourOpticalFlag;
151  }
152  else if (name=="alpha" || name=="e+")
153  strColour = colourChargedPlusFlag;
154  else
155  strColour = colourChargedMinusFlag;
156 
157  // convert string to G4Colour
158  G4Colour colour;
159  if (strColour=="white") colour=G4Colour(1.0, 1.0, 1.0);
160  else if(strColour=="grey" ) colour=G4Colour(0.5, 0.5, 0.5);
161  else if(strColour=="lgrey") colour=G4Colour(.75, .75, .75);
162  else if(strColour=="black") colour=G4Colour(0.0, 0.0, 0.0);
163  else if(strColour=="red") colour=G4Colour(1.0, 0.0, 0.0);
164  else if(strColour=="green") colour=G4Colour(0.0, 1.0, 0.0);
165  else if(strColour=="blue") colour=G4Colour(0.0, 0.0, 1.0);
166  else if(strColour=="cyan") colour=G4Colour(0.0, 1.0, 1.0);
167  else if(strColour=="magenta") colour=G4Colour(1.0, 0.0, 1.0);
168  else if(strColour=="yellow") colour=G4Colour(1.0, 1.0, 0.0);
169  else if(strColour=="lgreen") colour=G4Colour(0.0, .75, 0.0);
170  else if(strColour=="lblue") colour=G4Colour(0.0, 0.0, .75);
171  else colour=G4Colour(1.0, 1.0, 1.0);
172 
173  // create line with colour
174  G4VisAttributes attribs(colour);
175  G4Polyline polyline;
176  polyline.SetVisAttributes(attribs);
177 
178  // draw line
180  G4Point3D end(fStep->GetPostStepPoint()->GetPosition());
181  polyline.push_back(start);
182  polyline.push_back(end);
183  pVVisManager->Draw(polyline);
184  }
185 
186  }
187 
188 }
189 
190