Tessellated shapes geometry with small facets showing some warning

I am getting some warning like message: Tile degenerated 2: Length of sides of facet are too small.
for the tessellated solid shown in the figure.

What could be the reason ?? I am using vecGeom and veccore. May be @agheata could answer

is this a problem from the GDML file or is there something that we have to take care in the CAD while modelling the solids to meet the minimum facet size defined in ROOT for the tessellated soilds?

ROOT Version: Master branch
Platform: Ubuntu 22.04.3 LTS

I’m sure @agheata can help

The warning tells us that the edges of some triangles are too short. Still, VecGeom prints this message which normally should not happen because this condition should be intercepted before conversion to VecGeom. Can you share the gdml file?

Here I am attaching the google drive link which contains the create_geom.C macro and gdml file. I am using the convertor after closegeometry. and the message is like following:

Tile degenerated 2: Length of sides of facet are too small.
Tile degenerated 2: Length of sides of facet are too small.
Converted 31 shapes to VecGeom ones
Info in TCanvas::MakeDefCanvas: created default TCanvas with name c1
Random box : 1000.000000, 1000.000000, 2000.000000

I am only getting messages on terminal while converting small tessellated solids. for a bigger objects the message is not appearing

https://drive.google.com/drive/folders/1CRwR651v3RJwqNY-sRcHBQl8qw7Bpa3O?usp=sharing

Dear Agheta,

I was checking with VecGeom Convertor for tessellated and other shapes like tube, box shapes. but somehow it is loosing the actual shapes information and probably the material infromation(Not sure).

These informations are required for us during the track reconstruction is there any way to get all the information as they were before convertor. for example using TGeoManager. A small part of the reconstruction code where geometry information are being used after transportation.

When we are not using the convertor it is working fine. but as soon as we run it with the convertor it is throwing fatal error becuase somehow it is not recongnizing the shapes from the line TGeoShape* shape = volume->GetShape();

if (!targetNode) {
LOG(fatal) << “Could not find the target.”;
}

Double_t local[3] = {0., 0., 0.}; // target centre, local c.s.
Double_t global[3]; // target centre, global c.s.
gGeoManager->cd(targetPath);
gGeoManager->GetCurrentMatrix()->LocalToMaster(local, global);
target.x = global[0];
target.y = global[1];
target.z = global[2];

fTargetXYZ[0] = target.x;
fTargetXYZ[1] = target.y;
fTargetXYZ[2] = target.z;

if (fVerbose) {
cout << “KALMAN FILTER : === READ TARGET MATERIAL ===” << endl;
cout << " found targed "" << targetPath << "" at ( " << target.x << " " << target.y << " " << target.z << " ) "
<< endl;
}

TGeoVolume* volume = targetNode->GetVolume();

TGeoShape* shape = volume->GetShape();
if (shape->TestShapeBit(TGeoShape::kGeoTube)) {
target.r = static_cast<TGeoTube*>(shape)->GetRmin();
target.R = static_cast<TGeoTube*>(shape)->GetRmax();
target.dz = static_cast<TGeoTube*>(shape)->GetDz();
}
else {
LOG(fatal) << “Only a target of a tube shape is supported”;
}

TGeoMaterial* material = volume->GetMaterial();
Double_t radlength = material->GetRadLen();
target.RadLength = radlength;
target.Fe = 0.02145;

target.rr = target.r * target.r;
target.RR = target.R * target.R;
target.ZThickness = target.dz;
target.ZReference = target.z;

vTargets.push_back(target);
LOG(info) << "Target info: " << target.KFInfo();
}

it is showing the volume information:

before convertor

Info in TGeoManager::CloseGeometry: Geometry loaded from file…
Info in TGeoManager::SetTopVolume: Top volume is cave. Master volume is cave
Info in TGeoNavigator::BuildCache: — Maximum geometry depth set to 100
Info in TGeoManager::Voxelize: Voxelizing…
Info in TGeoManager::CountLevels: max level = 10, max placements = 372
Info in TGeoManager::CloseGeometry: 577444 nodes/ 1093 volume UID’s in FAIR geometry
Info in TGeoManager::CloseGeometry: ----------------modeler ready----------------
*** Shape target: TGeoTube ***
Rmin = 0.00000
Rmax = 1.25000
dz = 0.01250
Bounding box:
*** Shape target: TGeoBBox ***
dX = 1.25000
dY = 1.25000
dZ = 0.01250
origin: x= 0.00000 y= 0.00000 z= 0.00000

After the convertor:

Info in TGeoManager::SetTopVolume: Top volume is cave. Master volume is cave
Info in TGeoNavigator::BuildCache: — Maximum geometry depth set to 100
Info in TGeoManager::Voxelize: Voxelizing…
Info in TGeoManager::CountLevels: max level = 7, max placements = 22
Info in TGeoManager::CloseGeometry: 17665 nodes/ 484 volume UID’s in FAIR geometry
Info in TGeoManager::CloseGeometry: ----------------modeler ready----------------
UnplacedTube {0.00, 1.25, 0.01, 0.00, 6.28}

Here I am attchaing the root files before the convertor and after the convertor
test.geo_convertor.root (307.8 KB)
test.geo.root (268.0 KB)