#include "Riostream.h"
#include "TGeoManager.h"
#include "TGeoVoxelFinder.h"
#include "TGeoMatrix.h"
#include "TGeoVolume.h"
#include "TGeoNode.h"
#include "TGeoShapeAssembly.h"
#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TMath.h"
ClassImp(TGeoShapeAssembly)
TGeoShapeAssembly::TGeoShapeAssembly()
{
fCurrent = 0;
fNext = 0;
fVolume = 0;
fBBoxOK = kFALSE;
}
TGeoShapeAssembly::TGeoShapeAssembly(TGeoVolumeAssembly *vol)
{
fVolume = vol;
fCurrent = 0;
fNext = 0;
fBBoxOK = kFALSE;
}
TGeoShapeAssembly::~TGeoShapeAssembly()
{
}
void TGeoShapeAssembly::ComputeBBox()
{
if (!fVolume) {
Fatal("ComputeBBox", "Assembly shape %s without volume", GetName());
return;
}
if (fBBoxOK) return;
Int_t nd = fVolume->GetNdaughters();
if (!nd) {fBBoxOK = kTRUE; return;}
TGeoNode *node;
TGeoBBox *box;
Double_t xmin, xmax, ymin, ymax, zmin, zmax;
xmin = ymin = zmin = TGeoShape::Big();
xmax = ymax = zmax = -TGeoShape::Big();
Double_t vert[24];
Double_t pt[3];
for (Int_t i=0; i<nd; i++) {
node = fVolume->GetNode(i);
if (node->GetVolume()->IsAssembly()) node->GetVolume()->GetShape()->ComputeBBox();
box = (TGeoBBox*)node->GetVolume()->GetShape();
box->SetBoxPoints(vert);
for (Int_t ipt=0; ipt<8; ipt++) {
node->LocalToMaster(&vert[3*ipt], pt);
if (pt[0]<xmin) xmin=pt[0];
if (pt[0]>xmax) xmax=pt[0];
if (pt[1]<ymin) ymin=pt[1];
if (pt[1]>ymax) ymax=pt[1];
if (pt[2]<zmin) zmin=pt[2];
if (pt[2]>zmax) zmax=pt[2];
}
}
fDX = 0.5*(xmax-xmin);
fOrigin[0] = 0.5*(xmin+xmax);
fDY = 0.5*(ymax-ymin);
fOrigin[1] = 0.5*(ymin+ymax);
fDZ = 0.5*(zmax-zmin);
fOrigin[2] = 0.5*(zmin+zmax);
fBBoxOK = kTRUE;
}
void TGeoShapeAssembly::RecomputeBoxLast()
{
Int_t nd = fVolume->GetNdaughters();
if (!nd) {
Warning("RecomputeBoxLast", "No daughters for volume %s yet", fVolume->GetName());
return;
}
TGeoNode *node = fVolume->GetNode(nd-1);
Double_t xmin, xmax, ymin, ymax, zmin, zmax;
if (nd==1) {
xmin = ymin = zmin = TGeoShape::Big();
xmax = ymax = zmax = -TGeoShape::Big();
} else {
xmin = fOrigin[0]-fDX;
xmax = fOrigin[0]+fDX;
ymin = fOrigin[1]-fDY;
ymax = fOrigin[1]+fDY;
zmin = fOrigin[2]-fDZ;
zmax = fOrigin[2]+fDZ;
}
Double_t vert[24];
Double_t pt[3];
TGeoBBox *box = (TGeoBBox*)node->GetVolume()->GetShape();
if (TGeoShape::IsSameWithinTolerance(box->GetDX(), 0) ||
node->GetVolume()->IsAssembly()) node->GetVolume()->GetShape()->ComputeBBox();
box->SetBoxPoints(vert);
for (Int_t ipt=0; ipt<8; ipt++) {
node->LocalToMaster(&vert[3*ipt], pt);
if (pt[0]<xmin) xmin=pt[0];
if (pt[0]>xmax) xmax=pt[0];
if (pt[1]<ymin) ymin=pt[1];
if (pt[1]>ymax) ymax=pt[1];
if (pt[2]<zmin) zmin=pt[2];
if (pt[2]>zmax) zmax=pt[2];
}
fDX = 0.5*(xmax-xmin);
fOrigin[0] = 0.5*(xmin+xmax);
fDY = 0.5*(ymax-ymin);
fOrigin[1] = 0.5*(ymin+ymax);
fDZ = 0.5*(zmax-zmin);
fOrigin[2] = 0.5*(zmin+zmax);
fBBoxOK = kTRUE;
}
void TGeoShapeAssembly::ComputeNormal(Double_t *point, Double_t *dir, Double_t *norm)
{
if (!fBBoxOK) ((TGeoShapeAssembly*)this)->ComputeBBox();
Int_t inext = fVolume->GetNextNodeIndex();
if (inext<0) {
DistFromOutside(point,dir,3);
inext = fVolume->GetNextNodeIndex();
if (inext<0) {
Error("ComputeNormal","Invalid inext=%i (Ncomponents=%i)",inext,fVolume->GetNdaughters());
return;
}
}
TGeoNode *node = fVolume->GetNode(inext);
Double_t local[3],ldir[3],lnorm[3];
node->MasterToLocal(point,local);
node->MasterToLocalVect(dir,ldir);
node->GetVolume()->GetShape()->ComputeNormal(local,ldir,lnorm);
node->LocalToMasterVect(lnorm,norm);
}
Bool_t TGeoShapeAssembly::Contains(Double_t *point) const
{
if (!fBBoxOK) ((TGeoShapeAssembly*)this)->ComputeBBox();
if (!TGeoBBox::Contains(point)) return kFALSE;
TGeoVoxelFinder *voxels = fVolume->GetVoxels();
TGeoNode *node;
TGeoShape *shape;
Int_t *check_list = 0;
Int_t ncheck, id;
Double_t local[3];
if (voxels) {
check_list = voxels->GetCheckList(&point[0], ncheck);
if (!check_list) return kFALSE;
for (id=0; id<ncheck; id++) {
node = fVolume->GetNode(check_list[id]);
shape = node->GetVolume()->GetShape();
node->MasterToLocal(point,local);
if (shape->Contains(local)) {
fVolume->SetCurrentNodeIndex(check_list[id]);
fVolume->SetNextNodeIndex(check_list[id]);
return kTRUE;
}
}
return kFALSE;
}
Int_t nd = fVolume->GetNdaughters();
for (id=0; id<nd; id++) {
node = fVolume->GetNode(id);
shape = node->GetVolume()->GetShape();
node->MasterToLocal(point,local);
if (shape->Contains(local)) {
fVolume->SetCurrentNodeIndex(id);
fVolume->SetNextNodeIndex(id);
return kTRUE;
}
}
return kFALSE;
}
Int_t TGeoShapeAssembly::DistancetoPrimitive(Int_t , Int_t )
{
return 9999;
}
Double_t TGeoShapeAssembly::DistFromInside(Double_t * , Double_t * , Int_t , Double_t , Double_t * ) const
{
Info("DistFromInside", "Cannot compute distance from inside the assembly (but from a component)");
return TGeoShape::Big();
}
Double_t TGeoShapeAssembly::DistFromOutside(Double_t *point, Double_t *dir, Int_t iact, Double_t step, Double_t *safe) const
{
if (!fBBoxOK) ((TGeoShapeAssembly*)this)->ComputeBBox();
if (iact<3 && safe) {
*safe = Safety(point, kFALSE);
if (iact==0) return TGeoShape::Big();
if ((iact==1) && (step<=*safe)) return TGeoShape::Big();
}
Double_t snext = 0.0;
Double_t dist;
Double_t stepmax = step;
Double_t pt[3];
Int_t i;
Bool_t found = kFALSE;
memcpy(pt,point,3*sizeof(Double_t));
if (!TGeoBBox::Contains(point)) {
snext = TGeoBBox::DistFromOutside(point, dir, 3, stepmax);
if (snext > stepmax) return TGeoShape::Big();
for (i=0; i<3; i++) pt[i] += (snext+TGeoShape::Tolerance())*dir[i];
if (Contains(pt)) {
fVolume->SetNextNodeIndex(fVolume->GetCurrentNodeIndex());
return snext;
}
snext += TGeoShape::Tolerance();
stepmax -= snext;
}
Int_t nd = fVolume->GetNdaughters();
TGeoNode *node;
Double_t lpoint[3],ldir[3];
TGeoVoxelFinder *voxels = fVolume->GetVoxels();
if (nd<5 || !voxels) {
for (i=0; i<nd; i++) {
node = fVolume->GetNode(i);
if (voxels && voxels->IsSafeVoxel(pt, i, stepmax)) continue;
node->MasterToLocal(pt, lpoint);
node->MasterToLocalVect(dir, ldir);
dist = node->GetVolume()->GetShape()->DistFromOutside(lpoint, ldir, 3, stepmax);
if (dist<stepmax) {
stepmax = dist;
fVolume->SetNextNodeIndex(i);
found = kTRUE;
}
}
if (found) {
snext += stepmax;
return snext;
}
return TGeoShape::Big();
}
Int_t ncheck = 0;
Int_t *vlist = 0;
voxels->SortCrossedVoxels(pt, dir);
while ((vlist=voxels->GetNextVoxel(pt, dir, ncheck))) {
for (i=0; i<ncheck; i++) {
node = fVolume->GetNode(vlist[i]);
node->MasterToLocal(pt, lpoint);
node->MasterToLocalVect(dir, ldir);
dist = node->GetVolume()->GetShape()->DistFromOutside(lpoint, ldir, 3, stepmax);
if (dist<stepmax) {
stepmax = dist;
fVolume->SetNextNodeIndex(vlist[i]);
found = kTRUE;
}
}
}
if (found) {
snext += stepmax;
return snext;
}
return TGeoShape::Big();
}
TGeoVolume *TGeoShapeAssembly::Divide(TGeoVolume * , const char *divname, Int_t , Int_t ,
Double_t , Double_t )
{
Error("Divide", "Assemblies cannot be divided. Division volume %s not created", divname);
return 0;
}
TGeoShape *TGeoShapeAssembly::GetMakeRuntimeShape(TGeoShape * , TGeoMatrix * ) const
{
Error("GetMakeRuntimeShape", "Assemblies cannot be parametrized.");
return NULL;
}
void TGeoShapeAssembly::InspectShape() const
{
printf("*** Shape %s: TGeoShapeAssembly ***\n", GetName());
printf(" Volume assembly %s with %i nodes\n", fVolume->GetName(), fVolume->GetNdaughters());
printf(" Bounding box:\n");
if (!fBBoxOK) ((TGeoShapeAssembly*)this)->ComputeBBox();
TGeoBBox::InspectShape();
}
void TGeoShapeAssembly::SetSegsAndPols(TBuffer3D & ) const
{
Error("SetSegsAndPols", "Drawing functions should not be called for assemblies, but rather for their content");
}
Double_t TGeoShapeAssembly::Safety(Double_t *point, Bool_t in) const
{
Double_t safety = TGeoShape::Big();
Double_t pt[3], loc[3];
if (!fBBoxOK) ((TGeoShapeAssembly*)this)->ComputeBBox();
if (in) {
Int_t index = fVolume->GetCurrentNodeIndex();
TGeoVolume *vol = fVolume;
TGeoNode *node;
memcpy(loc, point, 3*sizeof(Double_t));
while (index>=0) {
memcpy(pt, loc, 3*sizeof(Double_t));
node = vol->GetNode(index);
node->GetMatrix()->MasterToLocal(pt,loc);
vol = node->GetVolume();
index = vol->GetCurrentNodeIndex();
if (index<0) {
safety = vol->GetShape()->Safety(loc, in);
return safety;
}
}
return TGeoShape::Big();
}
Double_t safe;
TGeoVoxelFinder *voxels = fVolume->GetVoxels();
Int_t nd = fVolume->GetNdaughters();
Double_t *boxes = 0;
if (voxels) boxes = voxels->GetBoxes();
TGeoNode *node;
for (Int_t id=0; id<nd; id++) {
if (boxes && id>0) {
Int_t ist = 6*id;
Double_t dxyz = 0.;
Double_t dxyz0 = TMath::Abs(point[0]-boxes[ist+3])-boxes[ist];
if (dxyz0 > safety) continue;
Double_t dxyz1 = TMath::Abs(point[1]-boxes[ist+4])-boxes[ist+1];
if (dxyz1 > safety) continue;
Double_t dxyz2 = TMath::Abs(point[2]-boxes[ist+5])-boxes[ist+2];
if (dxyz2 > safety) continue;
if (dxyz0>0) dxyz+=dxyz0*dxyz0;
if (dxyz1>0) dxyz+=dxyz1*dxyz1;
if (dxyz2>0) dxyz+=dxyz2*dxyz2;
if (dxyz >= safety*safety) continue;
}
node = fVolume->GetNode(id);
safe = node->Safety(point, kFALSE);
if (safe<=0.0) return 0.0;
if (safe<safety) safety = safe;
}
return safety;
}
void TGeoShapeAssembly::SavePrimitive(ostream & , Option_t * )
{
}
void TGeoShapeAssembly::SetPoints(Double_t * ) const
{
Error("SetPoints", "Drawing functions should not be called for assemblies, but rather for their content");
}
void TGeoShapeAssembly::SetPoints(Float_t * ) const
{
Error("SetPoints", "Drawing functions should not be called for assemblies, but rather for their content");
}
void TGeoShapeAssembly::GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
{
nvert = 0;
nsegs = 0;
npols = 0;
}
TGeoShapeAssembly.cxx:100 TGeoShapeAssembly.cxx:101 TGeoShapeAssembly.cxx:102 TGeoShapeAssembly.cxx:103 TGeoShapeAssembly.cxx:104 TGeoShapeAssembly.cxx:105 TGeoShapeAssembly.cxx:106 TGeoShapeAssembly.cxx:107 TGeoShapeAssembly.cxx:108 TGeoShapeAssembly.cxx:109 TGeoShapeAssembly.cxx:110 TGeoShapeAssembly.cxx:111 TGeoShapeAssembly.cxx:112 TGeoShapeAssembly.cxx:113 TGeoShapeAssembly.cxx:114 TGeoShapeAssembly.cxx:115 TGeoShapeAssembly.cxx:116 TGeoShapeAssembly.cxx:117 TGeoShapeAssembly.cxx:118 TGeoShapeAssembly.cxx:119 TGeoShapeAssembly.cxx:120 TGeoShapeAssembly.cxx:121 TGeoShapeAssembly.cxx:122 TGeoShapeAssembly.cxx:123 TGeoShapeAssembly.cxx:124 TGeoShapeAssembly.cxx:125 TGeoShapeAssembly.cxx:126 TGeoShapeAssembly.cxx:127 TGeoShapeAssembly.cxx:128 TGeoShapeAssembly.cxx:129 TGeoShapeAssembly.cxx:130 TGeoShapeAssembly.cxx:131 TGeoShapeAssembly.cxx:132 TGeoShapeAssembly.cxx:133 TGeoShapeAssembly.cxx:134 TGeoShapeAssembly.cxx:135 TGeoShapeAssembly.cxx:136 TGeoShapeAssembly.cxx:137 TGeoShapeAssembly.cxx:138 TGeoShapeAssembly.cxx:139 TGeoShapeAssembly.cxx:140 TGeoShapeAssembly.cxx:141 TGeoShapeAssembly.cxx:142 TGeoShapeAssembly.cxx:143 TGeoShapeAssembly.cxx:144 TGeoShapeAssembly.cxx:145 TGeoShapeAssembly.cxx:146 TGeoShapeAssembly.cxx:147 TGeoShapeAssembly.cxx:148 TGeoShapeAssembly.cxx:149 TGeoShapeAssembly.cxx:150 TGeoShapeAssembly.cxx:151 TGeoShapeAssembly.cxx:152 TGeoShapeAssembly.cxx:153 TGeoShapeAssembly.cxx:154 TGeoShapeAssembly.cxx:155 TGeoShapeAssembly.cxx:156 TGeoShapeAssembly.cxx:157 TGeoShapeAssembly.cxx:158 TGeoShapeAssembly.cxx:159 TGeoShapeAssembly.cxx:160 TGeoShapeAssembly.cxx:161 TGeoShapeAssembly.cxx:162 TGeoShapeAssembly.cxx:163 TGeoShapeAssembly.cxx:164 TGeoShapeAssembly.cxx:165 TGeoShapeAssembly.cxx:166 TGeoShapeAssembly.cxx:167 TGeoShapeAssembly.cxx:168 TGeoShapeAssembly.cxx:169 TGeoShapeAssembly.cxx:170 TGeoShapeAssembly.cxx:171 TGeoShapeAssembly.cxx:172 TGeoShapeAssembly.cxx:173 TGeoShapeAssembly.cxx:174 TGeoShapeAssembly.cxx:175 TGeoShapeAssembly.cxx:176 TGeoShapeAssembly.cxx:177 TGeoShapeAssembly.cxx:178 TGeoShapeAssembly.cxx:179 TGeoShapeAssembly.cxx:180 TGeoShapeAssembly.cxx:181 TGeoShapeAssembly.cxx:182 TGeoShapeAssembly.cxx:183 TGeoShapeAssembly.cxx:184 TGeoShapeAssembly.cxx:185 TGeoShapeAssembly.cxx:186 TGeoShapeAssembly.cxx:187 TGeoShapeAssembly.cxx:188 TGeoShapeAssembly.cxx:189 TGeoShapeAssembly.cxx:190 TGeoShapeAssembly.cxx:191 TGeoShapeAssembly.cxx:192 TGeoShapeAssembly.cxx:193 TGeoShapeAssembly.cxx:194 TGeoShapeAssembly.cxx:195 TGeoShapeAssembly.cxx:196 TGeoShapeAssembly.cxx:197 TGeoShapeAssembly.cxx:198 TGeoShapeAssembly.cxx:199 TGeoShapeAssembly.cxx:200 TGeoShapeAssembly.cxx:201 TGeoShapeAssembly.cxx:202 TGeoShapeAssembly.cxx:203 TGeoShapeAssembly.cxx:204 TGeoShapeAssembly.cxx:205 TGeoShapeAssembly.cxx:206 TGeoShapeAssembly.cxx:207 TGeoShapeAssembly.cxx:208 TGeoShapeAssembly.cxx:209 TGeoShapeAssembly.cxx:210 TGeoShapeAssembly.cxx:211 TGeoShapeAssembly.cxx:212 TGeoShapeAssembly.cxx:213 TGeoShapeAssembly.cxx:214 TGeoShapeAssembly.cxx:215 TGeoShapeAssembly.cxx:216 TGeoShapeAssembly.cxx:217 TGeoShapeAssembly.cxx:218 TGeoShapeAssembly.cxx:219 TGeoShapeAssembly.cxx:220 TGeoShapeAssembly.cxx:221 TGeoShapeAssembly.cxx:222 TGeoShapeAssembly.cxx:223 TGeoShapeAssembly.cxx:224 TGeoShapeAssembly.cxx:225 TGeoShapeAssembly.cxx:226 TGeoShapeAssembly.cxx:227 TGeoShapeAssembly.cxx:228 TGeoShapeAssembly.cxx:229 TGeoShapeAssembly.cxx:230 TGeoShapeAssembly.cxx:231 TGeoShapeAssembly.cxx:232 TGeoShapeAssembly.cxx:233 TGeoShapeAssembly.cxx:234 TGeoShapeAssembly.cxx:235 TGeoShapeAssembly.cxx:236 TGeoShapeAssembly.cxx:237 TGeoShapeAssembly.cxx:238 TGeoShapeAssembly.cxx:239 TGeoShapeAssembly.cxx:240 TGeoShapeAssembly.cxx:241 TGeoShapeAssembly.cxx:242 TGeoShapeAssembly.cxx:243 TGeoShapeAssembly.cxx:244 TGeoShapeAssembly.cxx:245 TGeoShapeAssembly.cxx:246 TGeoShapeAssembly.cxx:247 TGeoShapeAssembly.cxx:248 TGeoShapeAssembly.cxx:249 TGeoShapeAssembly.cxx:250 TGeoShapeAssembly.cxx:251 TGeoShapeAssembly.cxx:252 TGeoShapeAssembly.cxx:253 TGeoShapeAssembly.cxx:254 TGeoShapeAssembly.cxx:255 TGeoShapeAssembly.cxx:256 TGeoShapeAssembly.cxx:257 TGeoShapeAssembly.cxx:258 TGeoShapeAssembly.cxx:259 TGeoShapeAssembly.cxx:260 TGeoShapeAssembly.cxx:261 TGeoShapeAssembly.cxx:262 TGeoShapeAssembly.cxx:263 TGeoShapeAssembly.cxx:264 TGeoShapeAssembly.cxx:265 TGeoShapeAssembly.cxx:266 TGeoShapeAssembly.cxx:267 TGeoShapeAssembly.cxx:268 TGeoShapeAssembly.cxx:269 TGeoShapeAssembly.cxx:270 TGeoShapeAssembly.cxx:271 TGeoShapeAssembly.cxx:272 TGeoShapeAssembly.cxx:273 TGeoShapeAssembly.cxx:274 TGeoShapeAssembly.cxx:275 TGeoShapeAssembly.cxx:276 TGeoShapeAssembly.cxx:277 TGeoShapeAssembly.cxx:278 TGeoShapeAssembly.cxx:279 TGeoShapeAssembly.cxx:280 TGeoShapeAssembly.cxx:281 TGeoShapeAssembly.cxx:282 TGeoShapeAssembly.cxx:283 TGeoShapeAssembly.cxx:284 TGeoShapeAssembly.cxx:285 TGeoShapeAssembly.cxx:286 TGeoShapeAssembly.cxx:287 TGeoShapeAssembly.cxx:288 TGeoShapeAssembly.cxx:289 TGeoShapeAssembly.cxx:290 TGeoShapeAssembly.cxx:291 TGeoShapeAssembly.cxx:292 TGeoShapeAssembly.cxx:293 TGeoShapeAssembly.cxx:294 TGeoShapeAssembly.cxx:295 TGeoShapeAssembly.cxx:296 TGeoShapeAssembly.cxx:297 TGeoShapeAssembly.cxx:298 TGeoShapeAssembly.cxx:299 TGeoShapeAssembly.cxx:300 TGeoShapeAssembly.cxx:301 TGeoShapeAssembly.cxx:302 TGeoShapeAssembly.cxx:303 TGeoShapeAssembly.cxx:304 TGeoShapeAssembly.cxx:305 TGeoShapeAssembly.cxx:306 TGeoShapeAssembly.cxx:307 TGeoShapeAssembly.cxx:308 TGeoShapeAssembly.cxx:309 TGeoShapeAssembly.cxx:310 TGeoShapeAssembly.cxx:311 TGeoShapeAssembly.cxx:312 TGeoShapeAssembly.cxx:313 TGeoShapeAssembly.cxx:314 TGeoShapeAssembly.cxx:315 TGeoShapeAssembly.cxx:316 TGeoShapeAssembly.cxx:317 TGeoShapeAssembly.cxx:318 TGeoShapeAssembly.cxx:319 TGeoShapeAssembly.cxx:320 TGeoShapeAssembly.cxx:321 TGeoShapeAssembly.cxx:322 TGeoShapeAssembly.cxx:323 TGeoShapeAssembly.cxx:324 TGeoShapeAssembly.cxx:325 TGeoShapeAssembly.cxx:326 TGeoShapeAssembly.cxx:327 TGeoShapeAssembly.cxx:328 TGeoShapeAssembly.cxx:329 TGeoShapeAssembly.cxx:330 TGeoShapeAssembly.cxx:331 TGeoShapeAssembly.cxx:332 TGeoShapeAssembly.cxx:333 TGeoShapeAssembly.cxx:334 TGeoShapeAssembly.cxx:335 TGeoShapeAssembly.cxx:336 TGeoShapeAssembly.cxx:337 TGeoShapeAssembly.cxx:338 TGeoShapeAssembly.cxx:339 TGeoShapeAssembly.cxx:340 TGeoShapeAssembly.cxx:341 TGeoShapeAssembly.cxx:342 TGeoShapeAssembly.cxx:343 TGeoShapeAssembly.cxx:344 TGeoShapeAssembly.cxx:345 TGeoShapeAssembly.cxx:346 TGeoShapeAssembly.cxx:347 TGeoShapeAssembly.cxx:348 TGeoShapeAssembly.cxx:349 TGeoShapeAssembly.cxx:350 TGeoShapeAssembly.cxx:351 TGeoShapeAssembly.cxx:352 TGeoShapeAssembly.cxx:353 TGeoShapeAssembly.cxx:354 TGeoShapeAssembly.cxx:355 TGeoShapeAssembly.cxx:356 TGeoShapeAssembly.cxx:357 TGeoShapeAssembly.cxx:358 TGeoShapeAssembly.cxx:359 TGeoShapeAssembly.cxx:360 TGeoShapeAssembly.cxx:361 TGeoShapeAssembly.cxx:362 TGeoShapeAssembly.cxx:363 TGeoShapeAssembly.cxx:364 TGeoShapeAssembly.cxx:365 TGeoShapeAssembly.cxx:366 TGeoShapeAssembly.cxx:367 TGeoShapeAssembly.cxx:368 TGeoShapeAssembly.cxx:369 TGeoShapeAssembly.cxx:370 TGeoShapeAssembly.cxx:371 TGeoShapeAssembly.cxx:372 TGeoShapeAssembly.cxx:373 TGeoShapeAssembly.cxx:374 TGeoShapeAssembly.cxx:375 TGeoShapeAssembly.cxx:376 TGeoShapeAssembly.cxx:377 TGeoShapeAssembly.cxx:378 TGeoShapeAssembly.cxx:379 TGeoShapeAssembly.cxx:380 TGeoShapeAssembly.cxx:381 TGeoShapeAssembly.cxx:382 TGeoShapeAssembly.cxx:383 TGeoShapeAssembly.cxx:384 TGeoShapeAssembly.cxx:385 TGeoShapeAssembly.cxx:386 TGeoShapeAssembly.cxx:387 TGeoShapeAssembly.cxx:388 TGeoShapeAssembly.cxx:389 TGeoShapeAssembly.cxx:390 TGeoShapeAssembly.cxx:391 TGeoShapeAssembly.cxx:392 TGeoShapeAssembly.cxx:393 TGeoShapeAssembly.cxx:394 TGeoShapeAssembly.cxx:395 TGeoShapeAssembly.cxx:396 TGeoShapeAssembly.cxx:397 TGeoShapeAssembly.cxx:398 TGeoShapeAssembly.cxx:399 TGeoShapeAssembly.cxx:400 TGeoShapeAssembly.cxx:401 TGeoShapeAssembly.cxx:402 TGeoShapeAssembly.cxx:403 TGeoShapeAssembly.cxx:404 TGeoShapeAssembly.cxx:405 TGeoShapeAssembly.cxx:406 TGeoShapeAssembly.cxx:407 TGeoShapeAssembly.cxx:408 TGeoShapeAssembly.cxx:409 TGeoShapeAssembly.cxx:410 TGeoShapeAssembly.cxx:411 TGeoShapeAssembly.cxx:412 TGeoShapeAssembly.cxx:413 TGeoShapeAssembly.cxx:414 TGeoShapeAssembly.cxx:415 TGeoShapeAssembly.cxx:416 TGeoShapeAssembly.cxx:417 TGeoShapeAssembly.cxx:418 TGeoShapeAssembly.cxx:419 TGeoShapeAssembly.cxx:420 TGeoShapeAssembly.cxx:421 TGeoShapeAssembly.cxx:422 TGeoShapeAssembly.cxx:423 TGeoShapeAssembly.cxx:424 TGeoShapeAssembly.cxx:425 TGeoShapeAssembly.cxx:426 TGeoShapeAssembly.cxx:427 TGeoShapeAssembly.cxx:428