|
ATLAS Offline Software
|
Go to the documentation of this file.
7 #include "GeoModelKernel/GeoTube.h"
8 #include "GeoModelKernel/GeoPcon.h"
41 if (nextPoint.
last()) {
44 nextRay.
set(nextPoint, nextRay.
end());
47 if (nextPoint.
child()) {
65 const Zone* child = *iter;
72 if (!nextPoint.
valid()) {
81 if (!point2.
valid())
return point1;
83 if (!point1.
valid())
return point2;
85 if ((point2.
r() == point1.
r() && point2.
z() < point1.
z()) ||
86 (point2.
z() == point1.
z() && point2.
r() < point1.
r())) {
101 const Zone* child = *iter;
159 m_zmin(zOffset - shape->getZHalfLength()),
160 m_zmax(zOffset + shape->getZHalfLength()),
161 m_rmin(shape->getRMin()),
162 m_rmax(shape->getRMax())
168 return(
inZ(point.
z()) &&
inR(point.
r()));
197 std::cout <<
"Unexpected case" << std::endl;
219 std::cout <<
"Unexpected case" << std::endl;
231 for (
unsigned int i = 0;
i < shape->getNPlanes(); ++
i) {
232 addPlane(shape->getZPlane(
i), shape->getRMinPlane(
i), shape->getRMaxPlane(
i));
246 for (
unsigned int i = 0;
i + 1 <
m_z.size();
i += 2) {
247 if (
inZ(
i, point.
z()) &&
inR(
i, point.
r()))
return true;
259 if (
i >=
m_z.size())
return false;
268 for (
unsigned int i = 0;
i + 1 <
m_z.size();
i += 2) {
276 for (
unsigned int i = 0;
i + 1 <
m_z.size();
i += 2) {
284 std::cout <<
"Unexpected case" << std::endl;
294 for (
unsigned int i = 0;
i + 1 <
m_z.size();
i += 2) {
302 for (
unsigned int i = 0;
i + 1 <
m_z.size();
i += 2) {
310 std::cout <<
"Unexpected case" << std::endl;
398 for (std::vector<Segment>::const_iterator iter =
m_segments.begin(); iter !=
m_segments.end(); ++iter) {
425 if (!point.
valid()) {
428 os <<
"(" << point.
z() <<
", " << point.
r() <<
")";
std::vector< const Zone * >::const_iterator ChildIterator
const Zone * child() const
void addSegment(const Zone *, const Point &start, const Point &end)
void addPlane(double z, double rmin, double rmax)
const SegmentList & split(const Zone *, const Ray &)
std::vector< double > m_z
std::vector< Segment > m_segments
ChildIterator begin() const
virtual Point findExit(const Ray &ray) const
Segment(const std::string &label, const Point &start, const Point &end, bool rotated=false)
const Point & end() const
Point nearestPoint(const Point &point1, const Point &point2)
Ray addChildSegment(const Zone *, const Ray &)
std::ostream & operator<<(std::ostream &os, const SiCellId &cellId)
bool inR(unsigned int i, double r) const
std::vector< double > m_rmax
virtual Point findEntry(const Ray &ray) const
unsigned int size() const
PconZone(const std::string &label, bool rotated=false)
ChildIterator end() const
Point getNextBoundary(const Zone *, const Ray &)
virtual bool inSide(const Point &point) const
const Point & start() const
void add(const std::string &label, const Point &start, const Point &end, bool rotated=false)
virtual bool inSide(const Point &point) const =0
std::vector< double > m_rmin
virtual Point findEntry(const Ray &ray) const
void set(const Point &start, const Point &end)
virtual bool inSide(const Point &point) const
virtual Point findEntry(const Ray &ray) const
std::vector< const Zone * > m_children
virtual Point findExit(const Ray &ray) const
virtual Point findEntry(const Ray &ray) const =0
UnboundedZone(const std::string &label)
bool inZ(unsigned int i, double z) const
Zone(const std::string &label, bool rotated=false)
virtual bool inSide(const Point &point) const
TubeZone(const std::string &label, double zmin, double zmax, double rmin, double rmax, bool rotated=false)
Ray searchPoint(const Zone *zone, const Ray &ray)
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
virtual Point findExit(const Ray &ray) const