00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "G4SmoothTrajectoryPoint.hh"
00037
00038 #include "G4AttDefStore.hh"
00039 #include "G4AttDef.hh"
00040 #include "G4AttValue.hh"
00041 #include "G4UnitsTable.hh"
00042
00043
00044 #ifdef G4ATTDEBUG
00045 #include "G4AttCheck.hh"
00046 #endif
00047
00048 G4Allocator<G4SmoothTrajectoryPoint> aSmoothTrajectoryPointAllocator;
00049
00050 G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint()
00051 : fAuxiliaryPointVector(0)
00052 {
00053 fPosition = G4ThreeVector(0.,0.,0.);
00054 }
00055
00056 G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(G4ThreeVector pos)
00057 : fAuxiliaryPointVector(0)
00058 {
00059 fPosition = pos;
00060 }
00061
00062 G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(G4ThreeVector pos,
00063 std::vector<G4ThreeVector>* auxiliaryPoints)
00064 : fPosition(pos),
00065 fAuxiliaryPointVector(auxiliaryPoints)
00066 {}
00067
00068 G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint &right)
00069 : G4VTrajectoryPoint(),
00070 fPosition(right.fPosition),fAuxiliaryPointVector(right.fAuxiliaryPointVector)
00071 {
00072 }
00073
00074 G4SmoothTrajectoryPoint::~G4SmoothTrajectoryPoint()
00075 {
00076 if(fAuxiliaryPointVector) {
00077 delete fAuxiliaryPointVector;
00078 }
00079 }
00080
00081
00082 const std::map<G4String,G4AttDef>*
00083 G4SmoothTrajectoryPoint::GetAttDefs() const
00084 {
00085 G4bool isNew;
00086 std::map<G4String,G4AttDef>* store
00087 = G4AttDefStore::GetInstance("G4SmoothTrajectoryPoint",isNew);
00088 if (isNew) {
00089 G4String Pos("Pos");
00090 (*store)[Pos] = G4AttDef(Pos, "Step Position",
00091 "Physics","G4BestUnit","G4ThreeVector");
00092 G4String Aux("Aux");
00093 (*store)[Aux] = G4AttDef(Aux, "Auxiliary Point Position",
00094 "Physics","G4BestUnit","G4ThreeVector");
00095 }
00096 return store;
00097 }
00098
00099 std::vector<G4AttValue>* G4SmoothTrajectoryPoint::CreateAttValues() const
00100 {
00101 std::vector<G4AttValue>* values = new std::vector<G4AttValue>;
00102
00103 if (fAuxiliaryPointVector) {
00104 std::vector<G4ThreeVector>::iterator iAux;
00105 for (iAux = fAuxiliaryPointVector->begin();
00106 iAux != fAuxiliaryPointVector->end(); ++iAux) {
00107 values->push_back(G4AttValue("Aux",G4BestUnit(*iAux,"Length"),""));
00108 }
00109 }
00110
00111 values->push_back(G4AttValue("Pos",G4BestUnit(fPosition,"Length"),""));
00112
00113 #ifdef G4ATTDEBUG
00114 G4cout << G4AttCheck(values,GetAttDefs());
00115 #endif
00116
00117 return values;
00118 }