#include <volumeHandle.h>
Public Types | |
typedef Surface::GlobalPoint | GlobalPoint |
typedef Surface::LocalPoint | LocalPoint |
typedef Surface::LocalVector | LocalVector |
typedef SurfaceOrientation::GlobalFace | Sides |
Public Member Functions | |
const GlobalPoint & | center () const |
Return the center of the volume. | |
bool | isIron () const |
Temporary hack to pass information on material. Will eventually be replaced! | |
bool | isPlaneMatched (int which_side) const |
if the specified surface has been matched. | |
Geom::Phi< float > | maxPhi () const |
Maximum value of phi covered by the volume. | |
double | maxZ () const |
Geom::Phi< float > | minPhi () const |
Minimum value of phi covered by the volume. | |
double | minR () const |
Minimum R for any point within the volume. | |
double | minZ () const |
Z limits. | |
const GloballyPositioned< float > * | placement () const |
FIXME: currently returns max RN (to be fixed?). Used by: bLayer::maxR() | |
int | references (int which_side) const |
const double | RN () const |
Distance of (x,y) plane from origin. | |
bool | sameSurface (const Surface &s1, Sides which_side, float tolerance=0.01) |
Find out if two surfaces are the same physical surface. | |
bool | setSurface (const Surface &s1, Sides which_side) |
Assign a shared surface perorming sanity checks. | |
DDSolidShape | shape () const |
Shape of the solid. | |
std::vector< VolumeSide > | sides () const |
The surfaces and they orientation, as required to build a MagVolume. | |
const Surface & | surface (Sides which_side) const |
const Surface & | surface (int which_side) const |
Get the current surface on specified side. | |
bool | toExpand () const |
volumeHandle (const DDExpandedView &fv, bool expand2Pi=false) | |
~volumeHandle () | |
Static Public Member Functions | |
static void | printUniqueNames (handles::const_iterator begin, handles::const_iterator end) |
Just for debugging... | |
Public Attributes | |
unsigned short | copyno |
copy number | |
std::string | magFile |
Name of magnetic field table file. | |
MagVolume6Faces * | magVolume |
Pointer to the final MagVolume (must be set from outside) | |
int | masterSector |
The sector for which an interpolator for this class of volumes should be built. | |
std::string | name |
Name of the volume. | |
unsigned short | volumeno |
volume number | |
Private Member Functions | |
void | buildBox (const DDExpandedView &fv) |
void | buildCons (const DDExpandedView &fv) |
void | buildPhiZSurf (double startPhi, double deltaPhi, double zhalf, double rCentr) |
void | buildPseudoTrap (const DDExpandedView &fv) |
void | buildTrap (const DDExpandedView &fv) |
void | buildTruncTubs (const DDExpandedView &fv) |
void | buildTubs (const DDExpandedView &fv) |
volumeHandle | operator= (const volumeHandle &v) |
void | referencePlane (const DDExpandedView &fv) |
volumeHandle (const volumeHandle &v) | |
Private Attributes | |
GlobalPoint | center_ |
bool | expand |
bool | isAssigned [6] |
bool | isIronFlag |
GloballyPositioned< float > * | refPlane |
DDSolid | solid |
RCPS | surfaces [6] |
Geom::Phi< float > | thePhiMin |
double | theRMax |
double | theRMin |
double | theRN |
A temporary container to cache info on a six-surface volume during the processing. Used to sort, organise, and build shared planes. One instance is created for each DDVolume. The parameters of the boundary surfaces are calculated during construction.
Definition at line 27 of file volumeHandle.h.
Definition at line 29 of file volumeHandle.h.
Definition at line 30 of file volumeHandle.h.
Definition at line 31 of file volumeHandle.h.
Definition at line 32 of file volumeHandle.h.
MagGeoBuilderFromDDD::volumeHandle::volumeHandle | ( | const DDExpandedView & | fv, |
bool | expand2Pi = false |
||
) |
Definition at line 41 of file volumeHandle.cc.
References buildBox(), buildCons(), buildPseudoTrap(), buildTrap(), buildTruncTubs(), buildTubs(), center(), center_, copyno, gather_cfg::cout, ddbox, ddcons, ddpseudotrap, ddtrap, ddtrunctubs, ddtubs, MagGeoBuilderFromDDD::debug, i, isAssigned, isIronFlag, DDExpandedView::logicalPart(), magFile, masterSector, DDLogicalPart::material(), name, DDName::name(), DDBase< N, C >::name(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), referencePlane(), DDSolid::shape(), shape(), solid, AlCaHLTBitMon_QueryRunRegistry::string, surfaces, theRMax, theRMin, theRN, and volumeno.
: name(fv.logicalPart().name().name()), copyno(fv.copyno()), magVolume(0), masterSector(1), theRN(0.), theRMin(0.), theRMax(0.), refPlane(0), solid(fv.logicalPart().solid()), center_(GlobalPoint(fv.translation().x()/cm, fv.translation().y()/cm, fv.translation().z()/cm)), expand(expand2Pi), isIronFlag(false) { // ASSUMPTION: volume names ends with "_NUM" where NUM is the volume number string volName = name; volName.erase(0,volName.rfind('_')+1); volumeno =boost::lexical_cast<unsigned short>(volName); for (int i=0; i<6; ++i) { isAssigned[i] = false; } if (MagGeoBuilderFromDDD::debug) { cout.precision(7); } referencePlane(fv); if (solid.shape() == ddbox) { buildBox(fv); } else if (solid.shape() == ddtrap) { buildTrap(fv); } else if (solid.shape() == ddcons) { buildCons(fv); } else if (solid.shape() == ddtubs) { buildTubs(fv); } else if (solid.shape() == ddpseudotrap) { buildPseudoTrap(fv); } else if (solid.shape() == ddtrunctubs) { buildTruncTubs(fv); } else { cout << "volumeHandle ctor: Unexpected solid: " << (int) solid.shape() << endl; } // NOTE: Table name and master sector are no longer taken from xml! // DDsvalues_type sv(fv.mergedSpecifics()); // { // Extract the name of associated field file. // std::vector<std::string> temp; // std::string pname = "table"; // DDValue val(pname); // DDsvalues_type sv(fv.mergedSpecifics()); // if (DDfetch(&sv,val)) { // temp = val.strings(); // if (temp.size() != 1) { // cout << "*** WARNING: volume has > 1 SpecPar " << pname << endl; // } // magFile = temp[0]; // string find="[copyNo]"; // std::size_t j; // for ( ; (j = magFile.find(find)) != string::npos ; ) { // stringstream conv; // conv << setfill('0') << setw(2) << copyno; // string repl; // conv >> repl; // magFile.replace(j, find.length(), repl); // } // } else { // cout << "*** WARNING: volume does not have a SpecPar " << pname << endl; // cout << " DDsvalues_type: " << fv.mergedSpecifics() << endl; // } // } // { // Extract the number of the master sector. // std::vector<double> temp; // const std::string pname = "masterSector"; // DDValue val(pname); // if (DDfetch(&sv,val)) { // temp = val.doubles(); // if (temp.size() != 1) { // cout << "*** WARNING: volume has > 1 SpecPar " << pname << endl; // } // masterSector = int(temp[0]+.5); // } else { // if (MagGeoBuilderFromDDD::debug) { // cout << "Volume does not have a SpecPar " << pname // << " using: " << copyno << endl; // cout << " DDsvalues_type: " << fv.mergedSpecifics() << endl; // } // masterSector = copyno; // } // } // Get material for this volume if (fv.logicalPart().material().name().name() == "Iron") isIronFlag=true; if (MagGeoBuilderFromDDD::debug) { cout << " RMin = " << theRMin <<endl; cout << " RMax = " << theRMax <<endl; if (theRMin < 0 || theRN < theRMin || theRMax < theRN) cout << "*** WARNING: wrong RMin/RN/RMax , shape: " << (int) shape() << endl; cout << "Summary: " << name << " " << copyno << " Shape= " << (int) shape() << " trasl " << center() << " R " << center().perp() << " phi " << center().phi() << " magFile " << magFile << " Material= " << fv.logicalPart().material().name() << " isIron= " << isIronFlag << " masterSector= " << masterSector << std::endl; cout << " Orientation of surfaces:"; std::string sideName[3] = {"positiveSide", "negativeSide", "onSurface"}; for (int i=0; i<6; ++i) { cout << " " << i << ":" << sideName[surfaces[i]->side(center_,0.3)]; } cout << endl; } }
MagGeoBuilderFromDDD::volumeHandle::~volumeHandle | ( | ) |
Definition at line 37 of file volumeHandle.cc.
{ delete refPlane; }
MagGeoBuilderFromDDD::volumeHandle::volumeHandle | ( | const volumeHandle & | v | ) | [private] |
void MagGeoBuilderFromDDD::volumeHandle::buildBox | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
void MagGeoBuilderFromDDD::volumeHandle::buildCons | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
void MagGeoBuilderFromDDD::volumeHandle::buildPhiZSurf | ( | double | startPhi, |
double | deltaPhi, | ||
double | zhalf, | ||
double | rCentr | ||
) | [private] |
Definition at line 248 of file volumeHandle.cc.
References funct::cos(), gather_cfg::cout, MagGeoBuilderFromDDD::debug, SurfaceOrientation::phiminus, SurfaceOrientation::phiplus, funct::sin(), SurfaceOrientation::zminus, and SurfaceOrientation::zplus.
{ // This is 100% equal for cons and tubs!!! GlobalVector planeXAxis = refPlane->toGlobal(LocalVector( 1, 0, 0)); GlobalVector planeYAxis = refPlane->toGlobal(LocalVector( 0, 1, 0)); GlobalVector planeZAxis = refPlane->toGlobal(LocalVector( 0, 0, 1)); // Local Y axis of the faces at +-phi. GlobalVector y_phiplus = refPlane->toGlobal(LocalVector(cos(startPhi+deltaPhi), sin(startPhi+deltaPhi),0.)); GlobalVector y_phiminus = refPlane->toGlobal(LocalVector(cos(startPhi), sin(startPhi),0.)); Surface::RotationType rot_Z(planeXAxis,planeYAxis); Surface::RotationType rot_phiplus(planeZAxis, y_phiplus); Surface::RotationType rot_phiminus(planeZAxis, y_phiminus); GlobalPoint pos_zplus(center_.x(),center_.y(),center_.z()+zhalf); GlobalPoint pos_zminus(center_.x(),center_.y(),center_.z()-zhalf); // BEWARE: in this case, the origin for phiplus,phiminus surfaces is // at radius R and not on a plane passing by center_ orthogonal to the radius. GlobalPoint pos_phiplus(refPlane->toGlobal(LocalPoint(rCentr*cos(startPhi+deltaPhi),rCentr*sin(startPhi+deltaPhi),0.))); GlobalPoint pos_phiminus(refPlane->toGlobal(LocalPoint(rCentr*cos(startPhi), rCentr*sin(startPhi), 0.))); surfaces[zplus] = new Plane(pos_zplus, rot_Z); surfaces[zminus] = new Plane(pos_zminus, rot_Z); surfaces[phiplus] = new Plane(pos_phiplus, rot_phiplus); surfaces[phiminus] = new Plane(pos_phiminus, rot_phiminus); if (MagGeoBuilderFromDDD::debug) { cout << "Actual Center at: " << center_ << " R " << center_.perp() << " phi " << center_.phi() << endl; cout << "RN " << theRN << endl; cout << "pos_zplus " << pos_zplus << " " << pos_zplus.perp() << " " << pos_zplus.phi() << endl << "pos_zminus " << pos_zminus << " " << pos_zminus.perp() << " " << pos_zminus.phi() << endl << "pos_phiplus " << pos_phiplus << " " << pos_phiplus.perp() << " " << pos_phiplus.phi() <<endl << "pos_phiminus " << pos_phiminus << " " << pos_phiminus.perp() << " " << pos_phiminus.phi() <<endl; cout << "y_phiplus " << y_phiplus << endl; cout << "y_phiminus " << y_phiminus << endl; cout << "rot_Z " << surfaces[zplus]->toGlobal(LocalVector(0.,0.,1.)) << endl << "rot_phi+ " << surfaces[phiplus]->toGlobal(LocalVector(0.,0.,1.)) << " phi " << surfaces[phiplus]->toGlobal(LocalVector(0.,0.,1.)).phi() << endl << "rot_phi- " << surfaces[phiminus]->toGlobal(LocalVector(0.,0.,1.)) << " phi " << surfaces[phiminus]->toGlobal(LocalVector(0.,0.,1.)).phi() << endl; } // // Check ordering. if (MagGeoBuilderFromDDD::debug) { if (pos_zplus.z() < pos_zminus.z()) { cout << "*** WARNING: pos_zplus < pos_zminus " << endl; } if (Geom::Phi<float>(pos_phiplus.phi()-pos_phiminus.phi()) < 0. ) { cout << "*** WARNING: pos_phiplus < pos_phiminus " << endl; } } }
void MagGeoBuilderFromDDD::volumeHandle::buildPseudoTrap | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
void MagGeoBuilderFromDDD::volumeHandle::buildTrap | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
void MagGeoBuilderFromDDD::volumeHandle::buildTruncTubs | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
void MagGeoBuilderFromDDD::volumeHandle::buildTubs | ( | const DDExpandedView & | fv | ) | [private] |
Referenced by volumeHandle().
const Surface::GlobalPoint & MagGeoBuilderFromDDD::volumeHandle::center | ( | ) | const |
Return the center of the volume.
Definition at line 173 of file volumeHandle.cc.
Referenced by MagGeoBuilderFromDDD::build(), MagGeoBuilderFromDDD::buildInterpolator(), MagGeoBuilderFromDDD::LessZ::operator()(), MagGeoBuilderFromDDD::ExtractPhi::operator()(), MagGeoBuilderFromDDD::ExtractR::operator()(), MagGeoBuilderFromDDD::ExtractAbsZ::operator()(), MagGeoBuilderFromDDD::ExtractZ::operator()(), and volumeHandle().
{ return center_; }
bool MagGeoBuilderFromDDD::volumeHandle::isIron | ( | ) | const [inline] |
Temporary hack to pass information on material. Will eventually be replaced!
Definition at line 110 of file volumeHandle.h.
References isIronFlag.
{return isIronFlag;}
bool MagGeoBuilderFromDDD::volumeHandle::isPlaneMatched | ( | int | which_side | ) | const [inline] |
if the specified surface has been matched.
Definition at line 48 of file volumeHandle.h.
References isAssigned.
{ return isAssigned[which_side]; }
Geom::Phi<float> MagGeoBuilderFromDDD::volumeHandle::maxPhi | ( | ) | const [inline] |
Maximum value of phi covered by the volume.
Definition at line 81 of file volumeHandle.h.
References SurfaceOrientation::phiplus, GloballyPositioned< T >::position(), and surface().
Referenced by MagGeoBuilderFromDDD::ExtractPhiMax::operator()().
{return surface(SurfaceOrientation::phiplus).position().phi();}
double MagGeoBuilderFromDDD::volumeHandle::maxZ | ( | ) | const [inline] |
Definition at line 87 of file volumeHandle.h.
References GloballyPositioned< T >::position(), surface(), and SurfaceOrientation::zplus.
{return surface(SurfaceOrientation::zplus).position().z();}
Geom::Phi<float> MagGeoBuilderFromDDD::volumeHandle::minPhi | ( | ) | const [inline] |
Minimum value of phi covered by the volume.
Definition at line 77 of file volumeHandle.h.
References thePhiMin.
{return thePhiMin;}
double MagGeoBuilderFromDDD::volumeHandle::minR | ( | ) | const [inline] |
Minimum R for any point within the volume.
Definition at line 90 of file volumeHandle.h.
References theRMin.
{return theRMin;}
double MagGeoBuilderFromDDD::volumeHandle::minZ | ( | ) | const [inline] |
Z limits.
Definition at line 86 of file volumeHandle.h.
References GloballyPositioned< T >::position(), surface(), and SurfaceOrientation::zminus.
{return surface(SurfaceOrientation::zminus).position().z();}
volumeHandle MagGeoBuilderFromDDD::volumeHandle::operator= | ( | const volumeHandle & | v | ) | [private] |
const GloballyPositioned<float>* MagGeoBuilderFromDDD::volumeHandle::placement | ( | ) | const [inline] |
FIXME: currently returns max RN (to be fixed?). Used by: bLayer::maxR()
Position and rotation
Definition at line 96 of file volumeHandle.h.
References refPlane.
Referenced by MagGeoBuilderFromDDD::buildInterpolator().
{return refPlane;}
void MagGeoBuilderFromDDD::volumeHandle::printUniqueNames | ( | handles::const_iterator | begin, |
handles::const_iterator | end | ||
) | [static] |
Just for debugging...
Definition at line 466 of file volumeHandle.cc.
References filterCSVwithJSON::copy, gather_cfg::cout, end, i, cscdqm::h::names, and python::multivaluedict::sort().
Referenced by MagGeoBuilderFromDDD::bLayer::bLayer(), MagGeoBuilderFromDDD::bRod::bRod(), MagGeoBuilderFromDDD::bSector::bSector(), and MagGeoBuilderFromDDD::eSector::eSector().
{ std::vector<std::string> names; for (handles::const_iterator i = begin; i != end; ++i){ names.push_back((*i)->name); } sort(names.begin(),names.end()); std::vector<std::string>::iterator i = unique(names.begin(),names.end()); int nvols = int(i - names.begin()); cout << nvols << " "; copy(names.begin(), i, ostream_iterator<std::string>(cout, " ")); cout << endl; }
void MagGeoBuilderFromDDD::volumeHandle::referencePlane | ( | const DDExpandedView & | fv | ) | [private] |
Definition at line 177 of file volumeHandle.cc.
References gather_cfg::cout, ddpseudotrap, MagGeoBuilderFromDDD::debug, Vector3DBase< T, FrameTag >::dot(), DDExpandedView::rotation(), x, detailsBasic3DVector::y, and z.
Referenced by volumeHandle().
{ // The refPlane is the "main plane" for the solid. It corresponds to the // x,y plane in the DDD local frame, and defines a frame where the local // coordinates are the same as in DDD. // In the geometry version 85l_030919, this plane is normal to the // beam line for all volumes but pseudotraps, so that global R is along Y, // global phi is along -X and global Z along Z: // // Global(for vol at pi/2) Local // +R (+Y) +Y // +phi(-X) -X // +Z +Z // // For pseudotraps the refPlane is parallel to beam line and global R is // along Z, global phi is along +-X and and global Z along Y: // // Global(for vol at pi/2) Local // +R (+Y) +Z // +phi(-X) +X // +Z +Y // // Note that the frame is centered in the DDD volume center, which is // inside the volume for DDD boxes and (pesudo)trapezoids, on the beam line // for tubs, cons and trunctubs. // In geometry version 1103l, trapezoids have X and Z in the opposite direction // than the above. Boxes are either oriented as described above or in some case // have opposite direction for Y and X. // The global position Surface::PositionType & posResult = center_; // The reference plane rotation DD3Vector x, y, z; fv.rotation().GetComponents(x,y,z); if (MagGeoBuilderFromDDD::debug) { if (x.Cross(y).Dot(z) < 0.5) { cout << "*** WARNING: Rotation is not RH "<< endl; } } // The global rotation Surface::RotationType rotResult(float(x.X()),float(x.Y()),float(x.Z()), float(y.X()),float(y.Y()),float(y.Z()), float(z.X()),float(z.Y()),float(z.Z())); refPlane = new GloballyPositioned<float>(posResult, rotResult); // Check correct orientation if (MagGeoBuilderFromDDD::debug) { cout << "Refplane pos " << refPlane->position() << endl; // See comments above for the conventions for orientation. LocalVector globalZdir(0.,0.,1.); // Local direction of the axis along global Z if (solid.shape() == ddpseudotrap) { globalZdir = LocalVector(0.,1.,0.); } if (refPlane->toGlobal(globalZdir).z()<0.) { globalZdir=-globalZdir; } float chk = refPlane->toGlobal(globalZdir).dot(GlobalVector(0,0,1)); if (chk < .999) cout << "*** WARNING RefPlane check failed!***" << chk << endl; } }
int MagGeoBuilderFromDDD::volumeHandle::references | ( | int | which_side | ) | const [inline] |
Definition at line 52 of file volumeHandle.h.
{ // FIXME! /* return surfaces[which_side]->references(); */ return 0; }
const double MagGeoBuilderFromDDD::volumeHandle::RN | ( | ) | const [inline] |
Distance of (x,y) plane from origin.
Definition at line 39 of file volumeHandle.h.
References theRN.
Referenced by MagGeoBuilderFromDDD::ExtractRN::operator()().
{return theRN;}
bool MagGeoBuilderFromDDD::volumeHandle::sameSurface | ( | const Surface & | s1, |
Sides | which_side, | ||
float | tolerance = 0.01 |
||
) |
Find out if two surfaces are the same physical surface.
Definition at line 320 of file volumeHandle.cc.
References gather_cfg::cout, MagGeoBuilderFromDDD::debug, Vector3DBase< T, FrameTag >::dot(), mag(), Plane::normalVector(), p1, p2, GloballyPositioned< T >::position(), indexGen::s2, and GloballyPositioned< T >::toLocal().
{ //Check for null comparison if (&s1==(surfaces[which_side]).get()){ if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: OK (same ptr)" << endl; return true; } const float maxtilt = 0.999; const Surface & s2 = *(surfaces[which_side]); // Try with a plane. const Plane * p1 = dynamic_cast<const Plane*>(&s1); if (p1!=0) { const Plane * p2 = dynamic_cast<const Plane*>(&s2); if (p2==0) { if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: different types" << endl; return false; } if ( (fabs(p1->normalVector().dot(p2->normalVector())) > maxtilt) && (fabs((p1->toLocal(p2->position())).z()) < tolerance) ) { if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: OK " << fabs(p1->normalVector().dot(p2->normalVector())) << " " << fabs((p1->toLocal(p2->position())).z()) << endl; return true; } else{ if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: not the same: " << p1->normalVector() << p1->position() << endl << " " << p2->normalVector() << p2->position() << endl << fabs(p1->normalVector().dot(p2->normalVector())) << " " << (p1->toLocal(p2->position())).z()<< endl; return false; } } // Try with a cylinder. const Cylinder * cy1 = dynamic_cast<const Cylinder*>(&s1); if (cy1!=0) { const Cylinder * cy2 = dynamic_cast<const Cylinder*>(&s2); if (cy2==0) { if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: different types" << endl; return false; } // Assume axis is the same! if (fabs(cy1->radius() - cy2->radius()) < tolerance) { return true; } else { return false; } } // Try with a cone. const Cone * co1 = dynamic_cast<const Cone*>(&s1); if (co1!=0) { const Cone * co2 = dynamic_cast<const Cone*>(&s2); if (co2==0) { if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: different types" << endl; return false; } // FIXME if (fabs(co1->openingAngle()-co2->openingAngle()) < maxtilt && (co1->vertex()-co2->vertex()).mag() < tolerance) { return true; } else { return false; } } if (MagGeoBuilderFromDDD::debug) cout << " sameSurface: unknown surfaces..." << endl; return false; }
Assign a shared surface perorming sanity checks.
Definition at line 396 of file volumeHandle.cc.
References gather_cfg::cout, MagGeoBuilderFromDDD::debug, mergeVDriftHistosByStation::name, Plane::normalVector(), p1, p2, GloballyPositioned< T >::position(), and indexGen::s2.
{ //Check for null assignment if (&s1==(surfaces[which_side]).get()){ isAssigned[which_side] = true; return true; } if (!sameSurface(s1,which_side)){ cout << "***ERROR: setSurface: trying to assign a surface that does not match destination surface. Skipping." << endl; const Surface & s2 = *(surfaces[which_side]); //FIXME: Just planes for the time being!!! const Plane * p1 = dynamic_cast<const Plane*>(&s1); const Plane * p2 = dynamic_cast<const Plane*>(&s2); if (p1!=0 && p2 !=0) cout << p1->normalVector() << p1->position() << endl << p2->normalVector() << p2->position() << endl; return false; } if (isAssigned[which_side]) { if (&s1!=(surfaces[which_side]).get()){ cout << "*** WARNING volumeHandle::setSurface: trying to reassign a surface to a different surface instance" << endl; return false; } } else { surfaces[which_side] = &s1; isAssigned[which_side] = true; if (MagGeoBuilderFromDDD::debug) cout << " Volume " << name << " # " << copyno << " Assigned: " << (int) which_side << endl; return true; } return false; // let the compiler be happy }
DDSolidShape MagGeoBuilderFromDDD::volumeHandle::shape | ( | void | ) | const [inline] |
Shape of the solid.
Definition at line 99 of file volumeHandle.h.
References DDSolid::shape(), and solid.
Referenced by MagGeoBuilderFromDDD::buildInterpolator(), and volumeHandle().
std::vector< VolumeSide > MagGeoBuilderFromDDD::volumeHandle::sides | ( | void | ) | const |
The surfaces and they orientation, as required to build a MagVolume.
Definition at line 449 of file volumeHandle.cc.
References ddtubs, i, SurfaceOrientation::inner, SurfaceOrientation::phiminus, SurfaceOrientation::phiplus, query::result, and alignCSCRings::s.
Referenced by MagGeoBuilderFromDDD::buildInterpolator().
{ std::vector<VolumeSide> result; for (int i=0; i<6; ++i){ // If this is just a master volume out of wich a 2pi volume // should be built (e.g. central cylinder), skip the phi boundaries. if (expand && (i==phiplus || i==phiminus)) continue; // FIXME: Skip null inner degenerate cylindrical surface if (solid.shape() == ddtubs && i == SurfaceOrientation::inner && theRMin < 0.001) continue; ReferenceCountingPointer<Surface> s = const_cast<Surface*> (surfaces[i].get()); result.push_back(VolumeSide(s, GlobalFace(i), surfaces[i]->side(center_,0.3))); } return result; }
const Surface & MagGeoBuilderFromDDD::volumeHandle::surface | ( | int | which_side | ) | const |
Definition at line 435 of file volumeHandle.cc.
{ return *(surfaces[which_side]); }
bool MagGeoBuilderFromDDD::volumeHandle::toExpand | ( | ) | const [inline] |
Definition at line 107 of file volumeHandle.h.
References expand.
Referenced by MagGeoBuilderFromDDD::buildInterpolator().
{return expand;}
Definition at line 163 of file volumeHandle.h.
Referenced by volumeHandle().
unsigned short MagGeoBuilderFromDDD::volumeHandle::copyno |
copy number
Definition at line 64 of file volumeHandle.h.
Referenced by MagGeoBuilderFromDDD::build(), MagGeoBuilderFromDDD::buildInterpolator(), and volumeHandle().
bool MagGeoBuilderFromDDD::volumeHandle::expand [private] |
Definition at line 167 of file volumeHandle.h.
Referenced by toExpand().
bool MagGeoBuilderFromDDD::volumeHandle::isAssigned[6] [private] |
Definition at line 124 of file volumeHandle.h.
Referenced by isPlaneMatched(), and volumeHandle().
bool MagGeoBuilderFromDDD::volumeHandle::isIronFlag [private] |
Definition at line 170 of file volumeHandle.h.
Referenced by isIron(), and volumeHandle().
std::string MagGeoBuilderFromDDD::volumeHandle::magFile |
Name of magnetic field table file.
Definition at line 60 of file volumeHandle.h.
Referenced by MagGeoBuilderFromDDD::build(), MagGeoBuilderFromDDD::buildInterpolator(), and volumeHandle().
Pointer to the final MagVolume (must be set from outside)
Definition at line 105 of file volumeHandle.h.
The sector for which an interpolator for this class of volumes should be built.
Definition at line 113 of file volumeHandle.h.
Referenced by MagGeoBuilderFromDDD::build(), MagGeoBuilderFromDDD::buildInterpolator(), and volumeHandle().
std::string MagGeoBuilderFromDDD::volumeHandle::name |
GloballyPositioned<float>* MagGeoBuilderFromDDD::volumeHandle::refPlane [private] |
Definition at line 157 of file volumeHandle.h.
Referenced by placement().
Definition at line 160 of file volumeHandle.h.
Referenced by shape(), and volumeHandle().
RCPS MagGeoBuilderFromDDD::volumeHandle::surfaces[6] [private] |
Definition at line 122 of file volumeHandle.h.
Referenced by volumeHandle().
Geom::Phi<float> MagGeoBuilderFromDDD::volumeHandle::thePhiMin [private] |
Definition at line 152 of file volumeHandle.h.
Referenced by minPhi().
double MagGeoBuilderFromDDD::volumeHandle::theRMax [private] |
Definition at line 151 of file volumeHandle.h.
Referenced by volumeHandle().
double MagGeoBuilderFromDDD::volumeHandle::theRMin [private] |
Definition at line 150 of file volumeHandle.h.
Referenced by minR(), and volumeHandle().
double MagGeoBuilderFromDDD::volumeHandle::theRN [private] |
Definition at line 146 of file volumeHandle.h.
Referenced by RN(), and volumeHandle().
unsigned short MagGeoBuilderFromDDD::volumeHandle::volumeno |
volume number
Definition at line 62 of file volumeHandle.h.
Referenced by MagGeoBuilderFromDDD::build(), MagGeoBuilderFromDDD::buildInterpolator(), and volumeHandle().