00001 #ifndef Geom_BoundCylinder_H
00002 #define Geom_BoundCylinder_H
00003
00017 #include "DataFormats/GeometrySurface/interface/Cylinder.h"
00018 #include "DataFormats/GeometrySurface/interface/BoundSurface.h"
00019 #include "boost/intrusive_ptr.hpp"
00020
00021 class BoundCylinder : public Cylinder, public BoundSurface {
00022 public:
00023
00024 typedef ReferenceCountingPointer<BoundCylinder> BoundCylinderPointer;
00025 typedef ConstReferenceCountingPointer<BoundCylinder> ConstBoundCylinderPointer;
00026
00029 static BoundCylinderPointer build(const PositionType& pos,
00030 const RotationType& rot,
00031 Scalar radius,
00032 const Bounds* bounds,
00033 MediumProperties* mp=0) {
00034 return BoundCylinderPointer(new BoundCylinder(pos, rot, radius, bounds, mp));
00035 }
00036
00037
00040 static BoundCylinderPointer build(const PositionType& pos,
00041 const RotationType& rot,
00042 Scalar radius,
00043 const Bounds& bounds,
00044 MediumProperties* mp=0) {
00045 return BoundCylinderPointer(new BoundCylinder(pos, rot, radius, &bounds, mp));
00046 }
00047
00048 virtual ~BoundCylinder() {}
00049
00050
00051
00055 BoundCylinder(const PositionType& pos,
00056 const RotationType& rot,
00057 Scalar radius,
00058 const Bounds& bounds) :
00059 Surface( pos,rot ),
00060 Cylinder( pos, rot, radius),
00061 BoundSurface(pos, rot, bounds)
00062 { }
00063
00067 BoundCylinder(const PositionType& pos,
00068 const RotationType& rot,
00069 Scalar radius,
00070 MediumProperties* mp,
00071 const Bounds& bounds) :
00072 Surface( pos,rot ),
00073 Cylinder( pos, rot, radius, mp ),
00074 BoundSurface( pos, rot, bounds )
00075 { }
00076
00078 BoundCylinder(const PositionType& pos,
00079 const RotationType& rot,
00080 const Bounds* bounds);
00081
00083 BoundCylinder(const PositionType& pos,
00084 const RotationType& rot,
00085 const Bounds& bounds);
00086
00087 protected:
00088
00089 BoundCylinder(const PositionType& pos,
00090 const RotationType& rot,
00091 Scalar radius,
00092 const Bounds* bounds,
00093 MediumProperties* mp=0) :
00094 Surface( pos,rot ),
00095 Cylinder(pos, rot, radius, mp),
00096 BoundSurface(pos, rot, bounds, mp)
00097 { }
00098
00099 };
00100
00101 #endif // Geom_BoundCylinder_H