ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RE01Trajectory.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RE01Trajectory.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 //
28 //
29 //
30 //
31 
32 #include "RE01Trajectory.hh"
33 #include "G4ParticleTable.hh"
34 #include "G4ParticleTypes.hh"
35 #include "G4Polyline.hh"
36 #include "G4Circle.hh"
37 #include "G4Colour.hh"
38 #include "G4AttDefStore.hh"
39 #include "G4AttDef.hh"
40 #include "G4AttValue.hh"
41 #include "G4UIcommand.hh"
42 #include "G4VisAttributes.hh"
43 #include "G4VVisManager.hh"
44 #include "G4UnitsTable.hh"
45 #include "G4DynamicParticle.hh"
46 #include "G4PrimaryParticle.hh"
47 #include "RE01TrackInformation.hh"
48 
50 
51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
53 :G4VTrajectory(),
54  fPositionRecord(0),fParticleDefinition(0)
55 {
60  if(fParticleName=="unknown")
61  {
63  if(pp)
64  {
65  if(pp->GetCharge()<DBL_MAX) fPDGCharge = pp->GetCharge();
66  fPDGEncoding = pp->GetPDGcode();
67  if(pp->GetG4code()!=0)
68  {
69  fParticleName += " : ";
71  }
72  }
73  }
74  fTrackID = aTrack->GetTrackID();
75  RE01TrackInformation* trackInfo
77  fTrackStatus = trackInfo->GetTrackingStatus();
78  if(fTrackStatus == 1)
79  { fParentID = aTrack->GetParentID(); }
80  else if(fTrackStatus == 2)
81  { fParentID = trackInfo->GetSourceTrackID(); }
82  else
83  { fParentID = -1; }
85  fPositionRecord->push_back(new G4TrajectoryPoint(aTrack->GetPosition()));
86  fMomentum = aTrack->GetMomentum();
87  fVertexPosition = aTrack->GetPosition();
88  fGlobalTime = aTrack->GetGlobalTime();
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
93 {
94  size_t i;
95  for(i=0;i<fPositionRecord->size();i++){
96  delete (*fPositionRecord)[i];
97  }
98  fPositionRecord->clear();
99 
100  delete fPositionRecord;
101 }
102 
103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
104 void RE01Trajectory::ShowTrajectory(std::ostream& os) const
105 {
106  os << G4endl << "TrackID =" << fTrackID
107  << " : ParentID=" << fParentID << " : TrackStatus=" << fTrackStatus << G4endl;
108  os << "Particle name : " << fParticleName << " PDG code : " << fPDGEncoding
109  << " Charge : " << fPDGCharge << G4endl;
110  os << "Original momentum : " <<
111  G4BestUnit(fMomentum,"Energy") << G4endl;
112  os << "Vertex : " << G4BestUnit(fVertexPosition,"Length")
113  << " Global time : " << G4BestUnit(fGlobalTime,"Time") << G4endl;
114  os << " Current trajectory has " << fPositionRecord->size()
115  << " points." << G4endl;
116 
117  for( size_t i=0 ; i < fPositionRecord->size() ; i++){
118  G4TrajectoryPoint* aTrajectoryPoint =
120  os << "Point[" << i << "]"
121  << " Position= " << aTrajectoryPoint->GetPosition() << G4endl;
122  }
123 }
124 
125 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127 {
128 
131 
132  G4Polyline pPolyline;
133  for (size_t i = 0; i < fPositionRecord->size() ; i++) {
134  G4TrajectoryPoint* aTrajectoryPoint =
136  pos = aTrajectoryPoint->GetPosition();
137  pPolyline.push_back( pos );
138  }
139 
140  G4Colour colour(0.2,0.2,0.2);
142  colour = G4Colour(0.,0.,1.);
145  colour = G4Colour(1.,1.,0.);
148  colour = G4Colour(0.,1.,0.);
149  else if(fParticleDefinition->GetParticleType()=="meson")
150  {
151  if(fPDGCharge!=0.)
152  colour = G4Colour(1.,0.,0.);
153  else
154  colour = G4Colour(0.5,0.,0.);
155  }
156  else if(fParticleDefinition->GetParticleType()=="baryon")
157  {
158  if(fPDGCharge!=0.)
159  colour = G4Colour(0.,1.,1.);
160  else
161  colour = G4Colour(0.,0.5,0.5);
162  }
163 
164  G4VisAttributes attribs(colour);
165  pPolyline.SetVisAttributes(attribs);
166  if(pVVisManager) pVVisManager->Draw(pPolyline);
167 }
168 
169 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
170 const std::map<G4String,G4AttDef>* RE01Trajectory::GetAttDefs() const
171 {
172  G4bool isNew;
173  std::map<G4String,G4AttDef>* store
174  = G4AttDefStore::GetInstance("RE01Trajectory",isNew);
175  if (isNew) {
176 
177  G4String id("ID");
178  (*store)[id] = G4AttDef(id,"Track ID","Bookkeeping","","G4int");
179 
180  G4String pid("PID");
181  (*store)[pid] = G4AttDef(pid,"Parent ID","Bookkeeping","","G4int");
182 
183  G4String status("Status");
184  (*store)[status] = G4AttDef(status,"Track Status","Bookkeeping","","G4int");
185 
186  G4String pn("PN");
187  (*store)[pn] = G4AttDef(pn,"Particle Name","Bookkeeping","","G4String");
188 
189  G4String ch("Ch");
190  (*store)[ch] = G4AttDef(ch,"Charge","Physics","e+","G4double");
191 
192  G4String pdg("PDG");
193  (*store)[pdg] = G4AttDef(pdg,"PDG Encoding","Bookkeeping","","G4int");
194 
195  G4String imom("IMom");
196  (*store)[imom] = G4AttDef(imom, "Momentum of track at start of trajectory",
197  "Physics","G4BestUnit","G4ThreeVector");
198 
199  G4String imag("IMag");
200  (*store)[imag] =
201  G4AttDef(imag, "Magnitude of momentum of track at start of trajectory",
202  "Physics","G4BestUnit","G4double");
203 
204  G4String vtxPos("VtxPos");
205  (*store)[vtxPos] = G4AttDef(vtxPos, "Vertex position",
206  "Physics","G4BestUnit","G4ThreeVector");
207 
208  G4String ntp("NTP");
209  (*store)[ntp] = G4AttDef(ntp,"No. of points","Bookkeeping","","G4int");
210 
211  }
212  return store;
213 }
214 
215 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
216 std::vector<G4AttValue>* RE01Trajectory::CreateAttValues() const
217 {
218  std::vector<G4AttValue>* values = new std::vector<G4AttValue>;
219 
220  values->push_back
222 
223  values->push_back
225 
226  values->push_back
228 
229  values->push_back(G4AttValue("PN",fParticleName,""));
230 
231  values->push_back
233 
234  values->push_back
236 
237  values->push_back
238  (G4AttValue("IMom",G4BestUnit(fMomentum,"Energy"),""));
239 
240  values->push_back
241  (G4AttValue("IMag",G4BestUnit(fMomentum.mag(),"Energy"),""));
242 
243  values->push_back
244  (G4AttValue("VtxPos",G4BestUnit(fVertexPosition,"Length"),""));
245 
246  values->push_back
248 
249  return values;
250 }
251 
252 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
254 {
255  fPositionRecord->push_back(
257 }
258 
259 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
261 {
262  if(!secondTrajectory) return;
263 
264  RE01Trajectory* seco = (RE01Trajectory*)secondTrajectory;
265  G4int ent = seco->GetPointEntries();
266  //
267  // initial point of the second trajectory should not be merged
268  for(int i=1;i<ent;i++)
269  {
270  fPositionRecord->push_back((*(seco->fPositionRecord))[i]);
271  }
272  delete (*seco->fPositionRecord)[0];
273  seco->fPositionRecord->clear();
274 
275 }