CLHEP::Hep3Vector envelopeDimensions(uint64_t aVolumeId) { DD4hep::Geometry::VolumeManager volMgr = DD4hep::Geometry::LCDD::getInstance().volumeManager(); auto pvol = volMgr.lookupPlacement(aVolumeId); auto solid = pvol.volume().solid(); // get the envelope of the shape TGeoBBox* box = (dynamic_cast<TGeoBBox*>(solid.ptr())); // get half-widths return CLHEP::Hep3Vector(box->GetDX(), box->GetDY(), box->GetDZ()); }
int BoxTrafos() { string xml = "file:"; xml += gSystem->Getenv("DD4hepINSTALL"); xml += "/examples/ClientTests/compact/BoxTrafos.xml"; const char* argv[] = {xml.c_str(), "BUILD_DEFAULT", 0}; gSystem->Load("libDDCore"); LCDD& lcdd = LCDD::getInstance(); lcdd.apply("DD4hepCompactLoader",2,(char**)argv); lcdd.apply("DD4hepGeometryDisplay",0,0); DetElement de = lcdd.detector("B3"); PlacedVolume pv = de.placement(); Volume vol = pv.volume(); Solid solid = vol.solid(); TGeoBBox* box = (TGeoBBox*)(solid.ptr()); Position glob,loc, pos(-10,30,10); printf("\n++++ local->world:\n\n"); loc = Position(-pos.x(),-pos.y(),-pos.z()); local_to_world("origine",de,pos,loc); loc = Position(); local_to_world("center",de,pos,loc); loc = Position(box->GetDX(),box->GetDY(),box->GetDZ()); local_to_world("top edge",de,pos,loc); loc = Position(box->GetDX(),box->GetDY(),-box->GetDZ()); local_to_world("top edge",de,pos,loc); loc = Position(-box->GetDX(),box->GetDY(),box->GetDZ()); local_to_world("top edge",de,pos,loc); loc = Position(-box->GetDX(),box->GetDY(),-box->GetDZ()); local_to_world("top edge",de,pos,loc); loc = Position(box->GetDX(),-box->GetDY(),box->GetDZ()); local_to_world("bottom edge",de,pos,loc); loc = Position(box->GetDX(),-box->GetDY(),-box->GetDZ()); local_to_world("bottom edge",de,pos,loc); loc = Position(-box->GetDX(),-box->GetDY(),box->GetDZ()); local_to_world("bottom edge",de,pos,loc); loc = Position(-box->GetDX(),-box->GetDY(),-box->GetDZ()); local_to_world("bottom edge",de,pos,loc); printf("\n++++ world->local:\n\n"); glob = Position(0,0,0); world_to_local("world center",de,pos,glob); glob = Position(pos.x(),pos.y(),pos.z()); world_to_local("position",de,pos,glob); glob = Position( box->GetDX()+pos.x(), box->GetDY()+pos.y(), box->GetDZ()+pos.z()); world_to_local("top edge",de,pos,glob); glob = Position( box->GetDX()+pos.x(), box->GetDY()+pos.y(), -box->GetDZ()+pos.z()); world_to_local("top edge",de,pos,glob); glob = Position(-box->GetDX()+pos.x(), box->GetDY()+pos.y(), box->GetDZ()+pos.z()); world_to_local("top edge",de,pos,glob); glob = Position(-box->GetDX()+pos.x(), box->GetDY()+pos.y(), -box->GetDZ()+pos.z()); world_to_local("top edge",de,pos,glob); glob = Position( box->GetDX()+pos.x(), -box->GetDY()+pos.y(), box->GetDZ()+pos.z()); world_to_local("bottom edge",de,pos,glob); glob = Position( box->GetDX()+pos.x(), -box->GetDY()+pos.y(), -box->GetDZ()+pos.z()); world_to_local("bottom edge",de,pos,glob); glob = Position(-box->GetDX()+pos.x(), -box->GetDY()+pos.y(), box->GetDZ()+pos.z()); world_to_local("bottom edge",de,pos,glob); glob = Position(-box->GetDX()+pos.x(), -box->GetDY()+pos.y(), -box->GetDZ()+pos.z()); world_to_local("bottom edge",de,pos,glob); return 1; }