source: trunk/examples/extended/analysis/A01/src/A01Trajectory.cc@ 1230

Last change on this file since 1230 was 807, checked in by garnier, 17 years ago

update

File size: 6.3 KB
RevLine 
[807]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// $Id: A01Trajectory.cc,v 1.6 2006/06/29 16:33:11 gunter Exp $
27// --------------------------------------------------------------
28//
29
30#include "A01Trajectory.hh"
31#include "G4TrajectoryPoint.hh"
32#include "G4ParticleTable.hh"
33#include "G4ParticleTypes.hh"
34#include "G4ThreeVector.hh"
35#include "G4Polyline.hh"
36#include "G4Circle.hh"
37#include "G4Colour.hh"
38#include "G4VisAttributes.hh"
39#include "G4VVisManager.hh"
40
41G4Allocator<A01Trajectory> myTrajectoryAllocator;
42
43A01Trajectory::A01Trajectory()
44{
45 fpParticleDefinition = 0;
46 ParticleName = "";
47 PDGCharge = 0;
48 PDGEncoding = 0;
49 fTrackID = 0;
50 fParentID = 0;
51 positionRecord = 0;
52}
53
54A01Trajectory::A01Trajectory(const G4Track* aTrack)
55{
56 fpParticleDefinition = aTrack->GetDefinition();
57 ParticleName = fpParticleDefinition->GetParticleName();
58 PDGCharge = fpParticleDefinition->GetPDGCharge();
59 PDGEncoding = fpParticleDefinition->GetPDGEncoding();
60 fTrackID = aTrack->GetTrackID();
61 fParentID = aTrack->GetParentID();
62 positionRecord = new A01TrajectoryPointContainer();
63 positionRecord->push_back(new G4TrajectoryPoint(aTrack->GetPosition()));
64}
65
66A01Trajectory::A01Trajectory(A01Trajectory & right)
67 : G4VTrajectory()
68{
69 ParticleName = right.ParticleName;
70 fpParticleDefinition = right.fpParticleDefinition;
71 PDGCharge = right.PDGCharge;
72 PDGEncoding = right.PDGEncoding;
73 fTrackID = right.fTrackID;
74 fParentID = right.fParentID;
75 positionRecord = new A01TrajectoryPointContainer();
76 for(int i=0;i<(int)right.positionRecord->size();i++)
77 {
78 G4TrajectoryPoint* rightPoint = (G4TrajectoryPoint*)((*(right.positionRecord))[i]);
79 positionRecord->push_back(new G4TrajectoryPoint(*rightPoint));
80 }
81}
82
83A01Trajectory::~A01Trajectory()
84{
85 size_t i;
86 for(i=0;i<positionRecord->size();i++){
87 delete (*positionRecord)[i];
88 }
89 positionRecord->clear();
90
91 delete positionRecord;
92}
93
94void A01Trajectory::ShowTrajectory() const
95{
96 G4cout << G4endl << "TrackID =" << fTrackID
97 << ":ParentID=" << fParentID << G4endl;
98 G4cout << "Particle name : " << ParticleName
99 << " Charge : " << PDGCharge << G4endl;
100 G4cout << " Current trajectory has " << positionRecord->size()
101 << " points." << G4endl;
102
103 for( size_t i=0 ; i < positionRecord->size() ; i++){
104 G4TrajectoryPoint* aTrajectoryPoint = (G4TrajectoryPoint*)((*positionRecord)[i]);
105 G4cout << "Point[" << i << "]"
106 << " Position= " << aTrajectoryPoint->GetPosition() << G4endl;
107 }
108}
109
110void A01Trajectory::ShowTrajectory(std::ostream& o) const
111{
112 G4VTrajectory::ShowTrajectory(o);
113}
114
115
116void A01Trajectory::DrawTrajectory(G4int /*i_mode*/) const
117{
118
119 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
120 G4ThreeVector pos;
121
122 G4Polyline pPolyline;
123 for (int i = 0; i < (int)positionRecord->size() ; i++) {
124 G4TrajectoryPoint* aTrajectoryPoint = (G4TrajectoryPoint*)((*positionRecord)[i]);
125 pos = aTrajectoryPoint->GetPosition();
126 pPolyline.push_back( pos );
127 }
128
129 G4Colour colour(0.75,0.75,0.75); // LightGray
130 if(fpParticleDefinition==G4Gamma::GammaDefinition())
131 colour = G4Colour(0.,1.,1.); // Cyan
132 else if(fpParticleDefinition==G4Electron::ElectronDefinition()
133 ||fpParticleDefinition==G4Positron::PositronDefinition())
134 colour = G4Colour(1.,1.,0.); // Yellow
135 else if(fpParticleDefinition==G4MuonMinus::MuonMinusDefinition()
136 ||fpParticleDefinition==G4MuonPlus::MuonPlusDefinition())
137 colour = G4Colour(1.,0.,1.); // Magenta
138 else if(fpParticleDefinition->GetParticleType()=="meson")
139 {
140 if(PDGCharge!=0.)
141 colour = G4Colour(1.,0.,0.); // Red
142 else
143 colour = G4Colour(0.5,0.,0.); // HalfRed
144 }
145 else if(fpParticleDefinition->GetParticleType()=="baryon")
146 {
147 if(PDGCharge!=0.)
148 colour = G4Colour(1.,0.78,0.); // Orange
149 else
150 colour = G4Colour(0.5,0.39,0.);// HalfOrange
151 }
152
153 G4VisAttributes attribs(colour);
154 pPolyline.SetVisAttributes(attribs);
155 if(pVVisManager) pVVisManager->Draw(pPolyline);
156}
157
158void A01Trajectory::AppendStep(const G4Step* aStep)
159{
160 positionRecord->push_back( new G4TrajectoryPoint(aStep->GetPostStepPoint()->
161 GetPosition() ));
162}
163
164G4ParticleDefinition* A01Trajectory::GetParticleDefinition()
165{
166 return (G4ParticleTable::GetParticleTable()->FindParticle(ParticleName));
167}
168
169void A01Trajectory::MergeTrajectory(G4VTrajectory* secondTrajectory)
170{
171 if(!secondTrajectory) return;
172
173 A01Trajectory* seco = (A01Trajectory*)secondTrajectory;
174 G4int ent = seco->GetPointEntries();
175 for(int i=1;i<ent;i++) // initial point of the second trajectory should not be merged
176 {
177 positionRecord->push_back((*(seco->positionRecord))[i]);
178 }
179 delete (*seco->positionRecord)[0];
180 seco->positionRecord->clear();
181
182}
183
184
Note: See TracBrowser for help on using the repository browser.