42 namespace G4TrajectoryDrawerUtils {
 
   52    std::vector<G4double>& trajectoryLineTimes,
 
   53    std::vector<G4double>& auxiliaryPointTimes,
 
   54    std::vector<G4double>& stepPointTimes)
 
   66     std::vector<G4ThreeVector> positions;
 
   75       if (positions.size() == 0 ||
 
   76       trajectoryPointPosition != positions[positions.size()-1]) {
 
   84       std::vector<G4AttValue>* trajectoryPointAttValues =
 
   86       if (!trajectoryPointAttValues) {
 
   87         static G4bool warnedNoAttValues = 
false;
 
   88         if (!warnedNoAttValues) {
 
   90   "*************************************************************************" 
   91   "\n*  WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: no att values." 
   92   "\n*************************************************************************" 
   94           warnedNoAttValues = 
true;
 
   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 =
 
  107           if (i->GetName() == 
"PostT") {
 
  108         trajectoryPointPostTime =
 
  110         foundPostTime = 
true;
 
  113         if (!foundPreTime || !foundPostTime) {
 
  114           static G4bool warnedTimesNotFound = 
false;
 
  115           if (!warnedTimesNotFound) {
 
  117   "*************************************************************************" 
  118   "\n*  WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: times not found." 
  119   "\n*************************************************************************" 
  121         warnedTimesNotFound = 
true;
 
  126           delete trajectoryPointAttValues;  
 
  129     const std::vector<G4ThreeVector>* auxiliaries
 
  131     if (0 != auxiliaries) {
 
  132       for (
size_t iAux=0; iAux<auxiliaries->size(); ++iAux) {
 
  133         const G4ThreeVector& auxPointPosition = (*auxiliaries)[iAux];
 
  134         if (positions.size() == 0 ||
 
  135         auxPointPosition != positions[positions.size()-1]) {
 
  137           positions.push_back(trajectoryPointPosition);
 
  138           trajectoryLine.push_back(auxPointPosition);
 
  139           auxiliaryPoints.push_back(auxPointPosition);
 
  143           (auxPointPosition - lastTrajectoryPointPosition).mag();
 
  145           (trajectoryPointPosition - auxPointPosition).mag();
 
  146         G4double t = trajectoryPointPreTime +
 
  147           (trajectoryPointPostTime - trajectoryPointPreTime) *
 
  149         trajectoryLineTimes.push_back(t);
 
  150         auxiliaryPointTimes.push_back(t);
 
  156     positions.push_back(trajectoryPointPosition);
 
  157     trajectoryLine.push_back(trajectoryPointPosition);
 
  158     stepPoints.push_back(trajectoryPointPosition);
 
  160       trajectoryLineTimes.push_back(trajectoryPointPostTime);
 
  161       stepPointTimes.push_back(trajectoryPointPostTime);
 
  163         lastTrajectoryPointPosition = trajectoryPointPosition;
 
  171             std::vector<G4double>& trajectoryLineTimes)
 
  176     std::vector<G4double> newTrajectoryLineTimes;
 
  178     newTrajectoryLine.push_back(trajectoryLine[0]);
 
  179     newTrajectoryLineTimes.push_back(trajectoryLineTimes[0]);
 
  180     size_t lineSize = trajectoryLine.size();
 
  182       for (
size_t i = 1; i < trajectoryLine.size(); ++i) {
 
  183     G4double deltaT = trajectoryLineTimes[i] - trajectoryLineTimes[i - 1];
 
  186         std::max(timeIncrement, deltaT / 100.);
 
  188          (
int(trajectoryLineTimes[i - 1]/practicalTimeIncrement) + 1) *
 
  189          practicalTimeIncrement;
 
  190            t <= trajectoryLineTimes[i];
 
  191            t += practicalTimeIncrement) {
 
  193           (trajectoryLine[i] - trajectoryLine[i - 1]) *
 
  194           ((t - trajectoryLineTimes[i - 1]) / deltaT);
 
  195         newTrajectoryLine.push_back(pos);
 
  196         newTrajectoryLineTimes.push_back(t);
 
  199     newTrajectoryLine.push_back(trajectoryLine[i]);
 
  200     newTrajectoryLineTimes.push_back(trajectoryLineTimes[i]);
 
  204     trajectoryLine = newTrajectoryLine;
 
  205     trajectoryLineTimes = newTrajectoryLineTimes;
 
  216     if (0 == pVVisManager) 
return;
 
  223       pVVisManager->
Draw(trajectoryLine);
 
  226     if (myContext.
GetDrawAuxPts() && (auxiliaryPoints.size() > 0)) {
 
  235       pVVisManager->
Draw(auxiliaryPoints);
 
  247       pVVisManager->
Draw(stepPoints);
 
  255                std::vector<G4double>& trajectoryLineTimes,
 
  256                std::vector<G4double>& auxiliaryPointTimes,
 
  257                std::vector<G4double>& stepPointTimes)
 
  262     if (0 == pVVisManager) 
return;
 
  268       for (
size_t i = 1; i < trajectoryLine.size(); ++i ) {
 
  270     slice.push_back(trajectoryLine[i -1]);
 
  271     slice.push_back(trajectoryLine[i]);
 
  272     trajectoryLineAttribs.SetStartTime(trajectoryLineTimes[i - 1]);
 
  273     trajectoryLineAttribs.SetEndTime(trajectoryLineTimes[i]);
 
  275     pVVisManager->
Draw(slice);
 
  279     if (myContext.
GetDrawAuxPts() && (auxiliaryPoints.size() > 0)) {
 
  283       for (
size_t i = 0; i < auxiliaryPoints.size(); ++i ) {
 
  285     point.push_back(auxiliaryPoints[i]);
 
  289     auxiliaryPointsAttribs.SetStartTime(auxiliaryPointTimes[i]);
 
  290     auxiliaryPointsAttribs.SetEndTime(auxiliaryPointTimes[i]);
 
  292     pVVisManager->
Draw(point);
 
  300       for (
size_t i = 0; i < stepPoints.size(); ++i ) {
 
  302     point.push_back(stepPoints[i]);
 
  306     stepPointsAttribs.SetStartTime(stepPointTimes[i]);
 
  307     stepPointsAttribs.SetEndTime(stepPointTimes[i]);
 
  309     pVVisManager->
Draw(point);
 
  324     std::vector<G4double> trajectoryLineTimes;
 
  325     std::vector<G4double> stepPointTimes;
 
  326     std::vector<G4double> auxiliaryPointTimes;
 
  330        trajectoryLine, auxiliaryPoints, stepPoints,
 
  331        trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
 
  336         trajectoryLine, trajectoryLineTimes);
 
  339            trajectoryLine, auxiliaryPoints, stepPoints,
 
  340            trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
 
virtual void Draw(const G4Circle &, const G4Transform3D &objectTransformation=G4Transform3D())=0
 
G4VMarker::FillStyle GetAuxPtsFillStyle() const 
 
G4double GetStepPtsSize() const 
 
G4VMarker::FillStyle GetStepPtsFillStyle() const 
 
G4bool GetDrawLine() const 
 
virtual const std::vector< G4ThreeVector > * GetAuxiliaryPoints() const 
 
static G4VVisManager * GetConcreteInstance()
 
G4double GetAuxPtsSize() const 
 
virtual G4VTrajectoryPoint * GetPoint(G4int i) const =0
 
void SetMarkerType(MarkerType)
 
void SetFillStyle(FillStyle)
 
G4Colour GetAuxPtsColour() const 
 
G4Polymarker::MarkerType GetAuxPtsType() const 
 
G4double GetTimeSliceInterval() const 
 
static G4double ConvertToDimensionedDouble(const char *st)
 
G4VMarker::SizeType GetAuxPtsSizeType() const 
 
virtual std::vector< G4AttValue > * CreateAttValues() const 
 
static void SliceLine(G4double timeIncrement, G4Polyline &trajectoryLine, std::vector< G4double > &trajectoryLineTimes)
 
G4bool GetAuxPtsVisible() const 
 
virtual int GetPointEntries() const =0
 
static void DrawWithTime(const G4VisTrajContext &myContext, G4Polyline &trajectoryLine, G4Polymarker &auxiliaryPoints, G4Polymarker &stepPoints, std::vector< G4double > &trajectoryLineTimes, std::vector< G4double > &auxiliaryPointTimes, std::vector< G4double > &stepPointTimes)
 
G4GLOB_DLL std::ostream G4cout
 
void DrawLineAndPoints(const G4VTrajectory &traj, const G4VisTrajContext &)
 
void SetVisibility(G4bool=true)
 
G4bool GetLineVisible() const 
 
G4VMarker::SizeType GetStepPtsSizeType() const 
 
void SetSize(SizeType, G4double)
 
G4bool GetDrawStepPts() const 
 
void SetVisAttributes(const G4VisAttributes *)
 
G4Colour GetLineColour() const 
 
virtual const G4ThreeVector GetPosition() const =0
 
G4Colour GetStepPtsColour() const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4Polymarker::MarkerType GetStepPtsType() const 
 
static void DrawWithoutTime(const G4VisTrajContext &myContext, G4Polyline &trajectoryLine, G4Polymarker &auxiliaryPoints, G4Polymarker &stepPoints)
 
G4bool GetDrawAuxPts() const 
 
G4bool GetStepPtsVisible() 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)
 
static const G4double pos