Hi Sue, Indeed, unless they are used for the definition of nodes, matrices are by default NOT registered (owned) by the manager class. This behavior was intentionally changed compared to the first release in order to allow usage of TGeo matrices outside the geometry definition (without a TGeoManager class). Since the behavior is quite recent, it is not reflected well in the class description, but it is very clearly spelled in the TGeo users guide chapter on which we are doing the very final revision these days. Best regards, Andrei Sue Kasahara wrote: > Hi roottalk, > I've noticed that the self-registering behavior of TGeoMatrix objects is different than > other TGeo objects (e.g. shapes, volumes, materials, mixtures, mediums), in that the construction > of a TGeoMatrix or derived object does not automatically result in its registration > with the TGeoManager. Instead the registration of the TGeoMatrix objects seems to occur > only when the matrix is used as part of the definition of a TGeoNode. > This means that in the following example: > { ... > // geomanager, top volume, vacuum medium previously defined > TGeoRotation* r1 = new TGeoRotation("R1",90,0,90,270,0,0); > TGeoCombiTrans *c1 = new TGeoCombiTrans("C1",20,0,0,r1); > TGeoVolume *tub = geomgr -> MakeTube("tub1",vacuum,25.,25.,5.); > topVol -> AddNode(tub1,1,c1); > } > > the "C1" matrix is in the end owned by the gGeoManager, but the "R1" matrix is not. > > Another example where this issue surfaces is in the > TGeoCompositeShape description: > // TGeoTranslation *t1 = new TGeoTranslation("T1",0,0,-20); > // TGeoTranslation *t2 = new TGeoTranslation("T2",0,0, 20); > // TGeoRotation *r1 = new TGeoRotation("R1"); // transformations need names > // r1->SetAngles(90,30,90,120,0,0); // rotation with 30 degrees about Z > // TGeoTube *a = new TGeoTube(0, 10,20); > // a->SetName("A"); // shapes need names too > // TGeoTube *b = new TGeoTube(0, 20,20); > // b->SetName("B"); > // TGeoBBox *c = new TGeoBBox(10,10,50); > // c->SetName("C"); > // TGeoBBox *d = new TGeoBBox(50,10,10); > // d->SetName("D"); > // > // TGeoCompositeShape *cs; > // cs = new TGeoCompositeShape("CS", "(A:t1+B:t2)\(C+D:r1)"); > > Running this example results in a segv, unless it's modified to include explicit > registeration of the rotation and translation matrices: > t1 -> RegisterYourself(); t2 -> RegisterYourSelf(); r1 -> RegisterYourself(); > before constructing the TGeoCompositeShape. > (and also the typo's to raise "t1" to "T1", etc. in the construction of the TGeoCompositeShape need > to be fixed.) > > I point this out because I think the different behavior of the transformation matrices from > the other types of objects that the TGeoManager manages is confusing and should either be made > more clear in the examples and class descriptions (e.g. in the TGeoManager class it > states: > // TGeoManager is the owner of all geometry objects defined in a session, > // therefore users must not try to control their deletion. It contains lists of > // media, materials, transformations, shapes and volumes. > ) > or it should be changed to follow the behavior of the other types. > Thanks for your consideration. > -Sue Kasahara > > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:17 MET