Dear ALL!
Creation of ROOT geometry is simpler than creation of GEANT one. So it may be
good to change GEANT geometry description to ROOT style.
I managed to write some code
( http://gams.ihep.su/~zvyagin/home/ROOT_GEANT/1998-02-24/ROOT_GEANT.c )
that produces GEANT geometry from TGeometry. It works with very simple
geometries. But it WORKS. See
http://gams.ihep.su/~zvyagin/home/ROOT_GEANT/1998-02-24/test/GEANT/
One problem stops me. I do not know how to insert correctly
in mother TNode several identical son-TNodes. This is GSPOS level of GEANT
calls. The next code is bad:
TNode *mother=....; // mother node.
mother->cd();
TNode *son=...; // pointer to node that we want to insert several times
son->SetParent(NULL);
for( int j=0; j<son_nodes_amount; j++ )
{
TNode *son_node = (TNode*) son->Clone(); // The problem is here.
mother->GetListOfNodes->Add(cell_node);
char name[111];
sprintf(name,"n%d",j);
son_node->SetName(name);
son_node->SetPosition(....);
son->SetParent(mother);
}
The problem is in TNode->Clone(). See
http://root.cern.ch/root/roottalk/roottalk98/0217.html
The call time of TNode->Clone() depends strongly on geometry.
At present time I don not know how to solve the problem...
I belive that other steps of this work (in automatic creation of GEANT geometry
from ROOT TGeometry) are simpler.
Step I. GEANT::GSVOLU does not place volume to mother one.
but
ROOT::TNode do it.
Step II. We need add some new classes or modify the current ones.
Example: GEANT::GSPOS uses "volume copy number", geant material has
"radiation length", "absorbtion length".
See http://gams.ihep.su/~zvyagin/home/ROOT_GEANT/1998-02-24/TNode_G.h
Step III. Something else...
P.S. I hope that GEANT4 will solve a lot of problems ...