00001 #ifndef BDSBEAMLINEELEMENT_H
00002 #define BDSBEAMLINEELEMENT_H
00003
00004 #include "BDSAcceleratorComponent.hh"
00005 #include "BDSGeometryComponent.hh"
00006
00007 #include "globals.hh"
00008 #include "G4RotationMatrix.hh"
00009 #include "G4ThreeVector.hh"
00010
00011 #include <ostream>
00012
00026 class BDSBeamlineElement: public BDSGeometryComponent
00027 {
00028 public:
00029 BDSBeamlineElement(BDSAcceleratorComponent* component,
00030 G4ThreeVector positionStart,
00031 G4ThreeVector positionMiddle,
00032 G4ThreeVector positionEnd,
00033 G4RotationMatrix* rotationStart,
00034 G4RotationMatrix* rotationMiddle,
00035 G4RotationMatrix* rotationEnd,
00036 G4ThreeVector referencePositionStart,
00037 G4ThreeVector referencePositionMiddle,
00038 G4ThreeVector referencePositionEnd,
00039 G4RotationMatrix* referenceRotationStart,
00040 G4RotationMatrix* referenceRotationMiddle,
00041 G4RotationMatrix* referenceRotationEnd,
00042 G4double sPositionStart,
00043 G4double sPositionMiddle,
00044 G4double sPositionEnd,
00045 G4ThreeVector xAxisReferenceStart,
00046 G4ThreeVector yAxisReferenceStart,
00047 G4ThreeVector zAxisReferenceStart,
00048 G4ThreeVector xAxisReferenceMiddle,
00049 G4ThreeVector yAxisReferenceMiddle,
00050 G4ThreeVector zAxisReferenceMiddle,
00051 G4ThreeVector xAxisReferenceEnd,
00052 G4ThreeVector yAxisReferenceEnd,
00053 G4ThreeVector zAxisReferenceEnd);
00054
00055 ~BDSBeamlineElement();
00056
00058 inline BDSAcceleratorComponent* GetAcceleratorComponent() const;
00059 inline G4String GetName() const;
00060 inline G4ThreeVector GetPositionStart() const;
00061 inline G4ThreeVector GetPositionMiddle() const;
00062 inline G4ThreeVector GetPositionEnd() const;
00063 inline G4RotationMatrix* GetRotationStart() const;
00064 inline G4RotationMatrix* GetRotationMiddle() const;
00065 inline G4RotationMatrix* GetRotationEnd() const;
00066 inline G4ThreeVector GetReferencePositionStart() const;
00067 inline G4ThreeVector GetReferencePositionMiddle() const;
00068 inline G4ThreeVector GetReferencePositionEnd() const;
00069 inline G4RotationMatrix* GetReferenceRotationStart() const;
00070 inline G4RotationMatrix* GetReferenceRotationMiddle() const;
00071 inline G4RotationMatrix* GetReferenceRotationEnd() const;
00072 inline G4double GetSPositionStart() const;
00073 inline G4double GetSPositionMiddle() const;
00074 inline G4double GetSPositionEnd() const;
00075 inline G4ThreeVector GetXAxisReferenceStart() const;
00076 inline G4ThreeVector GetYAxisReferenceStart() const;
00077 inline G4ThreeVector GetZAxisReferenceStart() const;
00078 inline G4ThreeVector GetXAxisReferenceMiddle() const;
00079 inline G4ThreeVector GetYAxisReferenceMiddle() const;
00080 inline G4ThreeVector GetZAxisReferenceMiddle() const;
00081 inline G4ThreeVector GetXAxisReferenceEnd() const;
00082 inline G4ThreeVector GetYAxisReferenceEnd() const;
00083 inline G4ThreeVector GetZAxisReferenceEnd() const;
00085
00087 inline void SetReferencePositionEnd(G4ThreeVector newReferencePositionEnd);
00088 inline void SetReferenceRotationEnd(G4RotationMatrix* newReferenceRotatonEnd);
00089 inline void SetXAxisReferenceEnd (G4ThreeVector newXAxisReferenceEnd);
00090 inline void SetYAxisReferenceEnd (G4ThreeVector newYAxisReferenceEnd);
00091 inline void SetZAxisReferenceEnd (G4ThreeVector newZAxisReferenceEnd);
00093
00095 friend std::ostream& operator<< (std::ostream& out, BDSBeamlineElement const &element);
00096
00097 private:
00099 BDSBeamlineElement();
00100
00102 BDSAcceleratorComponent* component;
00103
00105 G4ThreeVector positionStart;
00106 G4ThreeVector positionMiddle;
00107 G4ThreeVector positionEnd;
00109
00111 G4RotationMatrix* rotationStart;
00112 G4RotationMatrix* rotationMiddle;
00113 G4RotationMatrix* rotationEnd;
00115
00118 G4ThreeVector referencePositionStart;
00119 G4ThreeVector referencePositionMiddle;
00120 G4ThreeVector referencePositionEnd;
00122
00125 G4RotationMatrix* referenceRotationStart;
00126 G4RotationMatrix* referenceRotationMiddle;
00127 G4RotationMatrix* referenceRotationEnd;
00129
00131 G4double sPositionStart;
00132 G4double sPositionMiddle;
00133 G4double sPositionEnd;
00135
00139 G4ThreeVector xAxisReferenceStart;
00140 G4ThreeVector yAxisReferenceStart;
00141 G4ThreeVector zAxisReferenceStart;
00142 G4ThreeVector xAxisReferenceMiddle;
00143 G4ThreeVector yAxisReferenceMiddle;
00144 G4ThreeVector zAxisReferenceMiddle;
00145 G4ThreeVector xAxisReferenceEnd;
00146 G4ThreeVector yAxisReferenceEnd;
00147 G4ThreeVector zAxisReferenceEnd;
00149 };
00150
00151 inline BDSAcceleratorComponent* BDSBeamlineElement::GetAcceleratorComponent() const
00152 {return component;}
00153
00154 inline G4String BDSBeamlineElement::GetName() const
00155 {return component->GetName();}
00156
00157 inline G4ThreeVector BDSBeamlineElement::GetPositionStart() const
00158 {return positionStart;}
00159
00160 inline G4ThreeVector BDSBeamlineElement::GetPositionMiddle() const
00161 {return positionMiddle;}
00162
00163 inline G4ThreeVector BDSBeamlineElement::GetPositionEnd() const
00164 {return positionEnd;}
00165
00166 inline G4RotationMatrix* BDSBeamlineElement::GetRotationStart() const
00167 {return rotationStart;}
00168
00169 inline G4RotationMatrix* BDSBeamlineElement::GetRotationMiddle() const
00170 {return rotationMiddle;}
00171
00172 inline G4RotationMatrix* BDSBeamlineElement::GetRotationEnd() const
00173 {return rotationEnd;}
00174
00175 inline G4ThreeVector BDSBeamlineElement::GetReferencePositionStart() const
00176 {return referencePositionStart;}
00177
00178 inline G4ThreeVector BDSBeamlineElement::GetReferencePositionMiddle() const
00179 {return referencePositionMiddle;}
00180
00181 inline G4ThreeVector BDSBeamlineElement::GetReferencePositionEnd() const
00182 {return referencePositionEnd;}
00183
00184 inline G4RotationMatrix* BDSBeamlineElement::GetReferenceRotationStart() const
00185 {return referenceRotationStart;}
00186
00187 inline G4RotationMatrix* BDSBeamlineElement::GetReferenceRotationMiddle() const
00188 {return referenceRotationMiddle;}
00189
00190 inline G4RotationMatrix* BDSBeamlineElement::GetReferenceRotationEnd() const
00191 {return referenceRotationEnd;}
00192
00193 inline G4double BDSBeamlineElement::GetSPositionStart() const
00194 {return sPositionStart;}
00195
00196 inline G4double BDSBeamlineElement::GetSPositionMiddle() const
00197 {return sPositionMiddle;}
00198
00199 inline G4double BDSBeamlineElement::GetSPositionEnd() const
00200 {return sPositionEnd;}
00201
00202 inline G4ThreeVector BDSBeamlineElement::GetXAxisReferenceStart() const
00203 {return xAxisReferenceStart;}
00204
00205 inline G4ThreeVector BDSBeamlineElement::GetYAxisReferenceStart() const
00206 {return yAxisReferenceStart;}
00207
00208 inline G4ThreeVector BDSBeamlineElement::GetZAxisReferenceStart() const
00209 {return zAxisReferenceStart;}
00210
00211 inline G4ThreeVector BDSBeamlineElement::GetXAxisReferenceMiddle() const
00212 {return xAxisReferenceMiddle;}
00213
00214 inline G4ThreeVector BDSBeamlineElement::GetYAxisReferenceMiddle() const
00215 {return yAxisReferenceMiddle;}
00216
00217 inline G4ThreeVector BDSBeamlineElement::GetZAxisReferenceMiddle() const
00218 {return zAxisReferenceMiddle;}
00219
00220 inline G4ThreeVector BDSBeamlineElement::GetXAxisReferenceEnd() const
00221 {return xAxisReferenceEnd;}
00222
00223 inline G4ThreeVector BDSBeamlineElement::GetYAxisReferenceEnd() const
00224 {return yAxisReferenceEnd;}
00225
00226 inline G4ThreeVector BDSBeamlineElement::GetZAxisReferenceEnd() const
00227 {return zAxisReferenceEnd;}
00228
00229
00230 #endif