/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/include/BDSBeamline.hh

00001 #ifndef BDSBEAMLINE_H
00002 #define BDSBEAMLINE_H
00003 
00004 #include "globals.hh" // geant4 globals / types
00005 
00006 #include "BDSBeamlineElement.hh"
00007 
00008 #include <iterator>
00009 #include <ostream>
00010 #include <utility>    //for std::pair
00011 #include <vector>
00012 
00033 
00034 class BDSBeamline;
00035 
00036 class BDSLine;
00037 class BDSTransform3D;
00038 
00040 typedef std::vector<BDSBeamlineElement*>::const_iterator BDSBeamlineIterator;
00041 
00042 class BDSBeamline{
00043 public:
00046   BDSBeamline();
00047 
00051   BDSBeamline(G4ThreeVector     initialGlobalPosition,
00052               G4RotationMatrix* initialGlobalRotation);
00053   
00054   ~BDSBeamline();
00055 
00058   void AddSingleComponent(BDSAcceleratorComponent* component);
00059 
00063   void AddComponent(BDSAcceleratorComponent* component);
00064 
00070   void ApplyTransform3D(BDSTransform3D* component);
00071 
00074   void PrintAllComponents(std::ostream& out) const;
00075   
00076   BDSBeamlineElement* GetFirstItem();             
00077   BDSBeamlineElement* GetLastItem();              
00078 
00080   inline G4double     GetTotalChordLength() const;
00081 
00083   inline G4double     GetTotalArcLength() const;
00084 
00086   std::vector<BDSBeamlineElement*>::size_type size() const;
00087 
00089   G4ThreeVector GetMaximumExtentPositive() const;
00090 
00092   G4ThreeVector GetMaximumExtentNegative() const;
00093 
00095   G4ThreeVector GetMaximumExtentAbsolute() const;
00096 
00097   // Accessors in a similar style to std::vector
00099   BDSBeamlineElement* front() const;
00101   BDSBeamlineElement* back()  const;
00103   inline std::vector<BDSBeamlineElement*>::iterator begin();
00105   inline std::vector<BDSBeamlineElement*>::iterator end();
00107   inline std::vector<BDSBeamlineElement*>::reverse_iterator rbegin();
00109   inline std::vector<BDSBeamlineElement*>::reverse_iterator rend();
00111   inline std::vector<BDSBeamlineElement*>::const_iterator begin() const;
00113   inline std::vector<BDSBeamlineElement*>::const_iterator end()   const;
00115   inline std::vector<BDSBeamlineElement*>::const_reverse_iterator rbegin() const;
00117   inline std::vector<BDSBeamlineElement*>::const_reverse_iterator rend()   const;
00119   inline G4bool empty() const;
00120 
00122   friend std::ostream& operator<< (std::ostream &out, BDSBeamline const &bl);
00123   
00124 private: 
00125   std::vector<BDSBeamlineElement*> beamline; 
00126 
00127   G4double totalChordLength;
00128   G4double totalArcLength;
00129 
00130   G4ThreeVector maximumExtentPositive; 
00131   G4ThreeVector maximumExtentNegative; 
00132 
00135   G4ThreeVector xARS, yARS, zARS, xARM, yARM, zARM, xARE, yARE, zARE;
00137 
00139   G4RotationMatrix* previousReferenceRotationEnd;
00140 
00142   G4ThreeVector previousReferencePositionEnd;
00143 
00145   G4double previousSPositionEnd;
00146   
00148   BDSBeamline& operator=(const BDSBeamline&);
00149   BDSBeamline(BDSBeamline&);
00150 };
00151 
00152 inline BDSBeamlineElement* BDSBeamline::GetFirstItem()
00153 {return front();}
00154 
00155 inline BDSBeamlineElement* BDSBeamline::GetLastItem()
00156 {return back();}
00157 
00158 inline G4double BDSBeamline::GetTotalChordLength() const
00159 {return totalChordLength;}
00160 
00161 inline G4double BDSBeamline::GetTotalArcLength() const
00162 {return totalArcLength;}
00163 
00164 inline std::vector<BDSBeamlineElement*>::size_type BDSBeamline::size() const
00165 {return beamline.size();}
00166 
00167 inline G4ThreeVector BDSBeamline::GetMaximumExtentPositive() const
00168 {return maximumExtentPositive;}
00169 
00170 inline G4ThreeVector BDSBeamline::GetMaximumExtentNegative() const
00171 {return maximumExtentNegative;}
00172 
00173 inline BDSBeamlineElement* BDSBeamline::front() const
00174 {return beamline.front();}
00175 
00176 inline BDSBeamlineElement* BDSBeamline::back() const
00177 {return beamline.back();}
00178 
00179 inline std::vector<BDSBeamlineElement*>::iterator BDSBeamline::begin()
00180 {return beamline.begin();}
00181 
00182 inline std::vector<BDSBeamlineElement*>::iterator BDSBeamline::end()
00183 {return beamline.end();}
00184 
00185 inline std::vector<BDSBeamlineElement*>::reverse_iterator BDSBeamline::rbegin()
00186 {return beamline.rbegin();}
00187 
00188 inline std::vector<BDSBeamlineElement*>::reverse_iterator BDSBeamline::rend()
00189 {return beamline.rend();}
00190 
00191 inline std::vector<BDSBeamlineElement*>::const_iterator BDSBeamline::begin() const
00192 {return beamline.begin();}
00193 
00194 inline std::vector<BDSBeamlineElement*>::const_iterator BDSBeamline::end() const
00195 {return beamline.end();}
00196 
00197 inline std::vector<BDSBeamlineElement*>::const_reverse_iterator BDSBeamline::rbegin() const
00198 {return beamline.rbegin();}
00199 
00200 inline std::vector<BDSBeamlineElement*>::const_reverse_iterator BDSBeamline::rend() const
00201 {return beamline.rend();}
00202 
00203 inline G4bool BDSBeamline::empty() const
00204 {return beamline.empty();}
00205 
00206 #endif

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7