Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Enumerations | Functions
G4TrajectoryDrawerUtils Namespace Reference

Enumerations

enum  TimesValidity { InvalidTimes, ValidTimes }
 

Functions

void GetPoints (const G4VTrajectory &traj, G4Polyline &trajectoryLine, G4Polymarker &auxiliaryPoints, G4Polymarker &stepPoints)
 
void DrawLineAndPoints (const G4VTrajectory &traj, const G4VisTrajContext &)
 
TimesValidity GetPointsAndTimes (const G4VTrajectory &traj, const G4VisTrajContext &context, G4Polyline &trajectoryLine, G4Polymarker &auxiliaryPoints, G4Polymarker &stepPoints, std::vector< G4double > &trajectoryLineTimes, std::vector< G4double > &auxiliaryPointTimes, std::vector< G4double > &stepPointTimes)
 

Enumeration Type Documentation

Function Documentation

void G4TrajectoryDrawerUtils::DrawLineAndPoints ( const G4VTrajectory traj,
const G4VisTrajContext context 
)

Definition at line 313 of file G4TrajectoryDrawerUtils.cc.

References G4VisTrajContext::GetDrawAuxPts(), G4VisTrajContext::GetDrawLine(), G4VisTrajContext::GetDrawStepPts(), GetPointsAndTimes(), G4VisTrajContext::GetTimeSliceInterval(), and ValidTimes.

Referenced by G4TrajectoryGenericDrawer::Draw(), G4TrajectoryDrawByOriginVolume::Draw(), G4TrajectoryDrawByParticleID::Draw(), G4TrajectoryDrawByAttribute::Draw(), and G4TrajectoryDrawByCharge::Draw().

314  {
315  // Return if don't need to do anything
316  if (!context.GetDrawLine() && !context.GetDrawAuxPts() && !context.GetDrawStepPts()) return;
317 
318  // Get points and times (times are returned only if time-slicing
319  // is requested).
320  G4Polyline trajectoryLine;
321  G4Polymarker stepPoints;
322  G4Polymarker auxiliaryPoints;
323  std::vector<G4double> trajectoryLineTimes;
324  std::vector<G4double> stepPointTimes;
325  std::vector<G4double> auxiliaryPointTimes;
326 
328  (traj, context,
329  trajectoryLine, auxiliaryPoints, stepPoints,
330  trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
331 
332  if (validity == ValidTimes) {
333 
334  SliceLine(context.GetTimeSliceInterval(),
335  trajectoryLine, trajectoryLineTimes);
336 
337  DrawWithTime(context,
338  trajectoryLine, auxiliaryPoints, stepPoints,
339  trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
340 
341  } else {
342 
343  DrawWithoutTime(context, trajectoryLine, auxiliaryPoints, stepPoints);
344 
345  }
346  }
G4bool GetDrawLine() const
G4double GetTimeSliceInterval() const
G4bool GetDrawStepPts() const
G4bool GetDrawAuxPts() const
TimesValidity GetPointsAndTimes(const G4VTrajectory &traj, const G4VisTrajContext &context, G4Polyline &trajectoryLine, G4Polymarker &auxiliaryPoints, G4Polymarker &stepPoints, std::vector< G4double > &trajectoryLineTimes, std::vector< G4double > &auxiliaryPointTimes, std::vector< G4double > &stepPointTimes)
void G4TrajectoryDrawerUtils::GetPoints ( const G4VTrajectory traj,
G4Polyline trajectoryLine,
G4Polymarker auxiliaryPoints,
G4Polymarker stepPoints 
)
TimesValidity G4TrajectoryDrawerUtils::GetPointsAndTimes ( const G4VTrajectory traj,
const G4VisTrajContext context,
G4Polyline trajectoryLine,
G4Polymarker auxiliaryPoints,
G4Polymarker stepPoints,
std::vector< G4double > &  trajectoryLineTimes,
std::vector< G4double > &  auxiliaryPointTimes,
std::vector< G4double > &  stepPointTimes 
)

Definition at line 47 of file G4TrajectoryDrawerUtils.cc.

References G4UIcommand::ConvertToDimensionedDouble(), G4VTrajectoryPoint::CreateAttValues(), G4cout, G4endl, G4VTrajectoryPoint::GetAuxiliaryPoints(), G4VTrajectory::GetPoint(), G4VTrajectory::GetPointEntries(), G4VTrajectoryPoint::GetPosition(), G4VisTrajContext::GetTimeSliceInterval(), InvalidTimes, G4INCL::Math::max(), and ValidTimes.

Referenced by DrawLineAndPoints().

55  {
56  TimesValidity validity = InvalidTimes;
57  if (context.GetTimeSliceInterval()) validity = ValidTimes;
58 
59  // Memory for last trajectory point position for auxiliary point
60  // time interpolation algorithm. There are no auxiliary points
61  // for the first trajectory point, so its initial value is
62  // immaterial.
63  G4ThreeVector lastTrajectoryPointPosition;
64 
65  // Keep positions. Don't store unless first or different.
66  std::vector<G4ThreeVector> positions;
67 
68  for (G4int iPoint=0; iPoint<traj.GetPointEntries(); iPoint++) {
69 
70  G4VTrajectoryPoint* aTrajectoryPoint = traj.GetPoint(iPoint);
71  const G4ThreeVector& trajectoryPointPosition =
72  aTrajectoryPoint->GetPosition();
73 
74  // Only store if first or if different
75  if (positions.size() == 0 ||
76  trajectoryPointPosition != positions[positions.size()-1]) {
77 
78  // Pre- and Post-Point times from the trajectory point...
79  G4double trajectoryPointPreTime = -std::numeric_limits<double>::max();
80  G4double trajectoryPointPostTime = std::numeric_limits<double>::max();
81 
82  if (context.GetTimeSliceInterval() && validity == ValidTimes) {
83 
84  std::vector<G4AttValue>* trajectoryPointAttValues =
85  aTrajectoryPoint->CreateAttValues();
86  if (!trajectoryPointAttValues) {
87  static G4bool warnedNoAttValues = false;
88  if (!warnedNoAttValues) {
89  G4cout <<
90  "*************************************************************************"
91  "\n* WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: no att values."
92  "\n*************************************************************************"
93  << G4endl;
94  warnedNoAttValues = true;
95  }
96  validity = InvalidTimes;
97  } else {
98  G4bool foundPreTime = false, foundPostTime = false;
99  for (std::vector<G4AttValue>::iterator i =
100  trajectoryPointAttValues->begin();
101  i != trajectoryPointAttValues->end(); ++i) {
102  if (i->GetName() == "PreT") {
103  trajectoryPointPreTime =
105  foundPreTime = true;
106  }
107  if (i->GetName() == "PostT") {
108  trajectoryPointPostTime =
110  foundPostTime = true;
111  }
112  }
113  if (!foundPreTime || !foundPostTime) {
114  static G4bool warnedTimesNotFound = false;
115  if (!warnedTimesNotFound) {
116  G4cout <<
117  "*************************************************************************"
118  "\n* WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: times not found."
119  "\n*************************************************************************"
120  << G4endl;
121  warnedTimesNotFound = true;
122  }
123  validity = InvalidTimes;
124  }
125  }
126  }
127 
128  const std::vector<G4ThreeVector>* auxiliaries
129  = aTrajectoryPoint->GetAuxiliaryPoints();
130  if (0 != auxiliaries) {
131  for (size_t iAux=0; iAux<auxiliaries->size(); ++iAux) {
132  const G4ThreeVector& auxPointPosition = (*auxiliaries)[iAux];
133  if (positions.size() == 0 ||
134  auxPointPosition != positions[positions.size()-1]) {
135  // Only store if first or if different
136  positions.push_back(trajectoryPointPosition);
137  trajectoryLine.push_back(auxPointPosition);
138  auxiliaryPoints.push_back(auxPointPosition);
139  if (validity == ValidTimes) {
140  // Interpolate time for auxiliary points...
141  G4double s1 =
142  (auxPointPosition - lastTrajectoryPointPosition).mag();
143  G4double s2 =
144  (trajectoryPointPosition - auxPointPosition).mag();
145  G4double t = trajectoryPointPreTime +
146  (trajectoryPointPostTime - trajectoryPointPreTime) *
147  (s1 / (s1 + s2));
148  trajectoryLineTimes.push_back(t);
149  auxiliaryPointTimes.push_back(t);
150  }
151  }
152  }
153  }
154 
155  positions.push_back(trajectoryPointPosition);
156  trajectoryLine.push_back(trajectoryPointPosition);
157  stepPoints.push_back(trajectoryPointPosition);
158  if (validity == ValidTimes) {
159  trajectoryLineTimes.push_back(trajectoryPointPostTime);
160  stepPointTimes.push_back(trajectoryPointPostTime);
161  }
162  lastTrajectoryPointPosition = trajectoryPointPosition;
163  }
164  }
165  return validity;
166  }
virtual const std::vector< G4ThreeVector > * GetAuxiliaryPoints() const
virtual G4VTrajectoryPoint * GetPoint(G4int i) const =0
G4double GetTimeSliceInterval() const
int G4int
Definition: G4Types.hh:78
static G4double ConvertToDimensionedDouble(const char *st)
Definition: G4UIcommand.cc:437
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual int GetPointEntries() const =0
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
virtual const G4ThreeVector GetPosition() const =0
T max(const T t1, const T t2)
brief Return the largest of the two arguments
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76