12 #ifndef ROOT_TGDMLWRITE
13 #define ROOT_TGDMLWRITE
52 class TGeoOpticalSurface;
53 class TGeoSkinSurface;
54 class TGeoBorderSurface;
56 class TGDMLWrite :
public TObject {
59 virtual ~TGDMLWrite();
61 static void StartGDMLWriting(TGeoManager * geomanager,
const char* filename, TString option) {
69 TGDMLWrite *writer =
new TGDMLWrite;
70 writer->SetFltPrecision(TGeoManager::GetExportPrecision());
71 writer->WriteGDMLfile(geomanager, filename, option);
75 void WriteGDMLfile(TGeoManager * geomanager,
const char* filename =
"test.gdml", TString option =
"");
77 void WriteGDMLfile(TGeoManager * geomanager, TGeoNode* top_node,
const char* filename =
"test.gdml", TString option =
"");
81 kwithoutSufixNotUniq = 1,
84 void SetNamingSpeed(ENamingType naming);
85 void SetG4Compatibility(Bool_t G4Compatible) {
86 fgG4Compatibility = G4Compatible;
96 typedef std::set<const TGeoOpticalSurface*> SurfaceList;
97 typedef std::set<const TGeoVolume*> VolList;
98 typedef std::set<const TGeoNode*> NodeList;
99 typedef std::map<TString, Bool_t> NameList;
100 typedef std::map<TString, TString> NameListS;
101 typedef std::map<TString, Int_t> NameListI;
102 typedef std::map<TString, Float_t> NameListF;
112 StructLst *fIsotopeList;
113 StructLst *fElementList;
115 StructLst *fRejShape;
116 SurfaceList fSurfaceList;
123 static TGDMLWrite *fgGDMLWrite;
125 Bool_t fgG4Compatibility;
126 XMLDocPointer_t fGdmlFile;
127 TString fTopVolumeName;
130 XMLNodePointer_t fDefineNode;
131 XMLNodePointer_t fMaterialsNode;
132 XMLNodePointer_t fSolidsNode;
133 XMLNodePointer_t fStructureNode;
138 UInt_t fFltPrecision;
140 static const UInt_t fgkProcBit = BIT(14);
141 static const UInt_t fgkProcBitVol = BIT(19);
142 static const UInt_t fgkMaxNameErr = 5;
146 XMLNodePointer_t ExtractMaterials(TList* materialsLst);
147 TString ExtractSolid(TGeoShape* volShape);
148 void ExtractVolumes(TGeoNode* topNode);
149 void ExtractMatrices(TObjArray *matrices);
150 void ExtractConstants(TGeoManager *geom);
151 void ExtractOpticalSurfaces(TObjArray *surfaces);
152 void ExtractSkinSurfaces(TObjArray *surfaces);
153 void ExtractBorderSurfaces(TObjArray *surfaces);
156 void WriteGDMLfile(TGeoManager * geomanager, TGeoNode* top_node, TList* materialsLst,
const char* filename, TString option);
159 XMLNodePointer_t CreateAtomN(Double_t atom,
const char * unit =
"g/mole");
160 XMLNodePointer_t CreateDN(Double_t density,
const char * unit =
"g/cm3");
161 XMLNodePointer_t CreateFractionN(Double_t percentage,
const char * refName);
162 XMLNodePointer_t CreatePropertyN(TNamed
const &property);
164 XMLNodePointer_t CreateIsotopN(TGeoIsotope * isotope,
const char * name);
165 XMLNodePointer_t CreateElementN(TGeoElement * element, XMLNodePointer_t materials,
const char * name);
166 XMLNodePointer_t CreateMixtureN(TGeoMixture * mixture, XMLNodePointer_t materials, TString mname);
167 XMLNodePointer_t CreateMaterialN(TGeoMaterial * material, TString mname);
171 XMLNodePointer_t ChooseObject(TGeoShape *geoShape);
172 XMLNodePointer_t CreateZplaneN(Double_t z, Double_t rmin, Double_t rmax);
174 XMLNodePointer_t CreateBoxN(TGeoBBox * geoShape);
175 XMLNodePointer_t CreateParaboloidN(TGeoParaboloid * geoShape);
176 XMLNodePointer_t CreateSphereN(TGeoSphere * geoShape);
177 XMLNodePointer_t CreateArb8N(TGeoArb8 * geoShape);
178 XMLNodePointer_t CreateConeN(TGeoConeSeg * geoShape);
179 XMLNodePointer_t CreateConeN(TGeoCone * geoShape);
180 XMLNodePointer_t CreateParaN(TGeoPara * geoShape);
181 XMLNodePointer_t CreateTrapN(TGeoTrap * geoShape);
182 XMLNodePointer_t CreateTwistedTrapN(TGeoGtra * geoShape);
183 XMLNodePointer_t CreateTrdN(TGeoTrd1 * geoShape);
184 XMLNodePointer_t CreateTrdN(TGeoTrd2 * geoShape);
185 XMLNodePointer_t CreateTubeN(TGeoTubeSeg * geoShape);
186 XMLNodePointer_t CreateCutTubeN(TGeoCtub * geoShape);
187 XMLNodePointer_t CreateTubeN(TGeoTube * geoShape);
188 XMLNodePointer_t CreatePolyconeN(TGeoPcon * geoShape);
189 XMLNodePointer_t CreateTorusN(TGeoTorus * geoShape);
190 XMLNodePointer_t CreatePolyhedraN(TGeoPgon * geoShape);
191 XMLNodePointer_t CreateEltubeN(TGeoEltu * geoShape);
192 XMLNodePointer_t CreateHypeN(TGeoHype * geoShape);
193 XMLNodePointer_t CreateXtrusionN(TGeoXtru * geoShape);
194 XMLNodePointer_t CreateEllipsoidN(TGeoCompositeShape * geoShape, TString elName);
195 XMLNodePointer_t CreateElConeN(TGeoScaledShape * geoShape);
196 XMLNodePointer_t CreateOpticalSurfaceN(TGeoOpticalSurface * geoSurf);
197 XMLNodePointer_t CreateSkinSurfaceN(TGeoSkinSurface * geoSurf);
198 XMLNodePointer_t CreateBorderSurfaceN(TGeoBorderSurface * geoSurf);
200 XMLNodePointer_t CreateCommonBoolN(TGeoCompositeShape *geoShape);
203 XMLNodePointer_t CreatePhysVolN(
const char * name, Int_t copyno,
const char * volref,
const char * posref,
const char * rotref, XMLNodePointer_t scaleN);
204 XMLNodePointer_t CreateDivisionN(Double_t offset, Double_t width, Int_t number,
const char * axis,
const char * unit,
const char * volref);
206 XMLNodePointer_t CreateSetupN(
const char * topVolName ,
const char * name =
"default",
const char * version =
"1.0");
207 XMLNodePointer_t StartVolumeN(
const char * name,
const char * solid,
const char * material);
208 XMLNodePointer_t StartAssemblyN(
const char * name);
212 Xyz GetXYZangles(
const Double_t * rotationMatrix);
214 XMLNodePointer_t CreatePositionN(
const char * name, Xyz position,
const char * type =
"position",
const char * unit =
"cm");
215 XMLNodePointer_t CreateRotationN(
const char * name, Xyz rotation,
const char * type =
"rotation",
const char * unit =
"deg");
216 XMLNodePointer_t CreateMatrixN(TGDMLMatrix
const *matrix);
217 XMLNodePointer_t CreateConstantN(
const char *name, Double_t value);
218 TGeoCompositeShape* CreateFakeCtub(TGeoCtub * geoShape);
221 Bool_t IsInList(NameList list, TString name2check);
222 TString GenName(TString oldname);
223 TString GenName(TString oldname, TString objPointer);
224 Bool_t CanProcess(TObject *pointer);
225 TString GetPattAxis(Int_t divAxis,
const char * pattName, TString& unit);
226 Bool_t IsNullParam(Double_t parValue, TString parName, TString objName);
227 void UnsetTemporaryBits(TGeoManager * geoMng);
228 UInt_t GetFltPrecision()
const {
return fFltPrecision; }
229 void SetFltPrecision(UInt_t prec) { fFltPrecision = prec; }
238 void WriteGDMLfile(TGeoManager * geomanager, TGeoVolume* top_vol,
const char* filename =
"test.gdml", TString option =
"");
241 void WriteGDMLfile(TGeoManager * geomanager, TGeoVolume* top_vol, TList* materialsLst,
const char* filename, TString option);
242 void ExtractVolumes(TGeoVolume* topVolume);
244 ClassDef(TGDMLWrite, 0)