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;
 
  128     const std::vector<G4ThreeVector>* auxiliaries
 
  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]) {
 
  136           positions.push_back(trajectoryPointPosition);
 
  137           trajectoryLine.push_back(auxPointPosition);
 
  138           auxiliaryPoints.push_back(auxPointPosition);
 
  142           (auxPointPosition - lastTrajectoryPointPosition).mag();
 
  144           (trajectoryPointPosition - auxPointPosition).mag();
 
  145         G4double t = trajectoryPointPreTime +
 
  146           (trajectoryPointPostTime - trajectoryPointPreTime) *
 
  148         trajectoryLineTimes.push_back(t);
 
  149         auxiliaryPointTimes.push_back(t);
 
  155     positions.push_back(trajectoryPointPosition);
 
  156     trajectoryLine.push_back(trajectoryPointPosition);
 
  157     stepPoints.push_back(trajectoryPointPosition);
 
  159       trajectoryLineTimes.push_back(trajectoryPointPostTime);
 
  160       stepPointTimes.push_back(trajectoryPointPostTime);
 
  162         lastTrajectoryPointPosition = trajectoryPointPosition;
 
  168   static void SliceLine(
G4double timeIncrement,
 
  170             std::vector<G4double>& trajectoryLineTimes)
 
  175     std::vector<G4double> newTrajectoryLineTimes;
 
  177     newTrajectoryLine.push_back(trajectoryLine[0]);
 
  178     newTrajectoryLineTimes.push_back(trajectoryLineTimes[0]);
 
  179     size_t lineSize = trajectoryLine.size();
 
  181       for (
size_t i = 1; i < trajectoryLine.size(); ++i) {
 
  182     G4double deltaT = trajectoryLineTimes[i] - trajectoryLineTimes[i - 1];
 
  185         std::max(timeIncrement, deltaT / 100.);
 
  187          (
int(trajectoryLineTimes[i - 1]/practicalTimeIncrement) + 1) *
 
  188          practicalTimeIncrement;
 
  189            t <= trajectoryLineTimes[i];
 
  190            t += practicalTimeIncrement) {
 
  192           (trajectoryLine[i] - trajectoryLine[i - 1]) *
 
  193           ((t - trajectoryLineTimes[i - 1]) / deltaT);
 
  194         newTrajectoryLine.push_back(pos);
 
  195         newTrajectoryLineTimes.push_back(t);
 
  198     newTrajectoryLine.push_back(trajectoryLine[i]);
 
  199     newTrajectoryLineTimes.push_back(trajectoryLineTimes[i]);
 
  203     trajectoryLine = newTrajectoryLine;
 
  204     trajectoryLineTimes = newTrajectoryLineTimes;
 
  215     if (0 == pVVisManager) 
return;
 
  222       pVVisManager->
Draw(trajectoryLine);
 
  225     if (myContext.
GetDrawAuxPts() && (auxiliaryPoints.size() > 0)) {
 
  234       pVVisManager->
Draw(auxiliaryPoints);
 
  246       pVVisManager->
Draw(stepPoints);
 
  254                std::vector<G4double>& trajectoryLineTimes,
 
  255                std::vector<G4double>& auxiliaryPointTimes,
 
  256                std::vector<G4double>& stepPointTimes)
 
  261     if (0 == pVVisManager) 
return;
 
  267       for (
size_t i = 1; i < trajectoryLine.size(); ++i ) {
 
  269     slice.push_back(trajectoryLine[i -1]);
 
  270     slice.push_back(trajectoryLine[i]);
 
  271     trajectoryLineAttribs.SetStartTime(trajectoryLineTimes[i - 1]);
 
  272     trajectoryLineAttribs.SetEndTime(trajectoryLineTimes[i]);
 
  274     pVVisManager->
Draw(slice);
 
  278     if (myContext.
GetDrawAuxPts() && (auxiliaryPoints.size() > 0)) {
 
  282       for (
size_t i = 0; i < auxiliaryPoints.size(); ++i ) {
 
  284     point.push_back(auxiliaryPoints[i]);
 
  288     auxiliaryPointsAttribs.SetStartTime(auxiliaryPointTimes[i]);
 
  289     auxiliaryPointsAttribs.SetEndTime(auxiliaryPointTimes[i]);
 
  291     pVVisManager->
Draw(point);
 
  299       for (
size_t i = 0; i < stepPoints.size(); ++i ) {
 
  301     point.push_back(stepPoints[i]);
 
  305     stepPointsAttribs.SetStartTime(stepPointTimes[i]);
 
  306     stepPointsAttribs.SetEndTime(stepPointTimes[i]);
 
  308     pVVisManager->
Draw(point);
 
  323     std::vector<G4double> trajectoryLineTimes;
 
  324     std::vector<G4double> stepPointTimes;
 
  325     std::vector<G4double> auxiliaryPointTimes;
 
  329        trajectoryLine, auxiliaryPoints, stepPoints,
 
  330        trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
 
  335         trajectoryLine, trajectoryLineTimes);
 
  337       DrawWithTime(context,
 
  338            trajectoryLine, auxiliaryPoints, stepPoints,
 
  339            trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes);
 
  343       DrawWithoutTime(context, trajectoryLine, auxiliaryPoints, stepPoints);
 
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 SetVisibility(G4bool)
 
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 
 
G4bool GetAuxPtsVisible() const 
 
virtual int GetPointEntries() const =0
 
G4GLOB_DLL std::ostream G4cout
 
void DrawLineAndPoints(const G4VTrajectory &traj, const G4VisTrajContext &)
 
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 
 
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)