85 : theFile(0), theRotationNumber(0)
103 theFile =
new std::ofstream(fname);
113 G4PhysicalVolumeStore::const_iterator ite;
118 if( lv == 0 ) {
break; }
121 for( ite = pvstore->begin(); ite != pvstore->end(); ite++ )
196 std::vector<G4VPhysicalVolume*> pvChildren =
GetPVChildren( lv );
197 std::vector<G4VPhysicalVolume*>::const_iterator ite;
198 for( ite = pvChildren.begin(); ite != pvChildren.end(); ite++ )
223 G4cout <<
" G4tgbGeometryDumper::DumpPVPlacement() - Reflected volume: " 234 colx.
y(),coly.
y(),colz.
y(),
235 colx.
z(),coly.
z(),colz.
z());
238 *rotMat = (*rotMat).inverse();
258 <<
" " << copyNo <<
" " 261 << pos.
x() <<
" " << pos.
y() <<
" " << pos.
z() <<
G4endl;
286 std::vector<G4double> newParams;
290 for(
G4int ii = 0; ii < nReplicas; ii++ )
377 if( ii == 0 || mate1st != newMate || params1st[0] != newParams[0] )
385 lvName =
DumpLogVol( lv, extraName, newSolid, newMate );
424 G4String ErrMessage =
"Unknown axis of replication for volume" 446 <<
" " << offset <<
G4endl;
451 <<
" " << width/
deg <<
"*deg" 452 <<
" " << offset/
deg <<
"*deg" <<
G4endl;
467 if( extraName ==
"" )
473 lvName = lv->
GetName()+extraName;
481 if( !solid ) { solid = lv->
GetSolid(); }
516 if (numElements == 1)
518 (*theFile) <<
":MATE " <<
AddQuotes(mateName) <<
" " 526 for (
size_t ii = 0; ii < numElements; ii++)
531 (*theFile) <<
":MIXT "<<
AddQuotes(mateName) <<
" " 532 << density <<
" " << numElements <<
G4endl;
534 for (
size_t ii = 0; ii < numElements; ii++)
538 << fractions[ii] <<
G4endl;
543 (*theFile) <<
":MATE_MEE " <<
AddQuotes(mateName) <<
" " 547 (*theFile) <<
":MATE_TEMPERATURE " <<
AddQuotes(mateName) <<
" " 550 (*theFile) <<
":MATE_PRESSURE " <<
AddQuotes(mateName) <<
" " 557 stateStr =
"Undefined";
570 (*theFile) <<
":MATE_STATE " <<
AddQuotes(mateName) <<
" " 593 if( symbol ==
"" || symbol ==
" " )
600 (*theFile) <<
":ELEM " <<
AddQuotes(elemName) <<
" " 612 (*theFile) <<
":ELEM_FROM_ISOT " <<
AddQuotes(elemName) <<
" " 620 << fractions[ii] <<
G4endl;
636 (*theFile) <<
":ISOT " <<
AddQuotes(isotName) <<
" " 637 << isot->
GetZ() <<
" " << isot->
GetN() <<
" " 649 if( extraName ==
"" )
655 solidName = solid->
GetName()+extraName;
666 if (solidType ==
"UNIONSOLID")
670 }
else if (solidType ==
"SUBTRACTIONSOLID") {
673 }
else if (solidType ==
"INTERSECTIONSOLID") {
676 }
else if (solidType ==
"REFLECTEDSOLID") {
689 (*theFile) <<
":SOLID " <<
AddQuotes(solidName) <<
" ";
690 (*theFile) <<
AddQuotes(solidType) <<
" ";
704 if (!bso) {
return; }
723 GetTransform().NetRotation()).inverse() ) );
736 (*theFile) <<
":SOLID " 754 for(
size_t ii = 0 ; ii < params.size(); ii++ )
756 (*theFile) << params[ii] <<
" " ;
765 std::vector<G4double> params;
770 if (solidType ==
"BOX") {
771 const G4Box * sb = dynamic_cast <
const G4Box*>(so);
777 }
else if (solidType ==
"TUBS") {
778 const G4Tubs * tu = dynamic_cast <
const G4Tubs * > (so);
786 }
else if (solidType ==
"TRAP") {
787 const G4Trap * trp = dynamic_cast <
const G4Trap * > (so);
791 params.push_back( symAxis.theta()/
deg);
792 params.push_back( symAxis.phi()/
deg);
802 }
else if (solidType ==
"TRD") {
803 const G4Trd * tr = dynamic_cast <
const G4Trd * > (so);
811 }
else if (solidType ==
"PARA") {
812 const G4Para * para = dynamic_cast <
const G4Para * > (so);
819 params.push_back( symAxis.theta()/
deg);
820 params.push_back( symAxis.phi()/
deg);
822 }
else if (solidType ==
"CONS") {
823 const G4Cons * cn = dynamic_cast <
const G4Cons * > (so);
833 }
else if (solidType ==
"SPHERE") {
843 }
else if (solidType ==
"ORB") {
844 const G4Orb * orb = dynamic_cast <
const G4Orb * > (so);
848 }
else if (solidType ==
"TORUS") {
851 params.push_back( torus->
GetRmin());
852 params.push_back( torus->
GetRmax());
853 params.push_back( torus->
GetRtor());
857 }
else if (solidType ==
"POLYCONE") {
863 if( angphi > 180*
deg ) { angphi -= 360*
deg; }
865 params.push_back( angphi );
867 params.push_back( ncor );
869 for(
G4int ii = 0; ii < ncor; ii++ )
875 }
else if (solidType ==
"GENERICPOLYCONE") {
881 if( angphi > 180*
deg ) { angphi -= 360*
deg; }
883 if( endphi > 180*
deg ) { endphi -= 360*
deg; }
885 params.push_back( angphi );
886 params.push_back( endphi-angphi );
887 params.push_back( ncor );
889 for(
G4int ii = 0; ii < ncor; ii++ )
895 }
else if (solidType ==
"POLYHEDRA") {
901 if( angphi > 180*
deg ) angphi -= 360*
deg;
905 params.push_back( angphi );
908 params.push_back( ncor );
910 for(
G4int ii = 0; ii < ncor; ii++ )
916 }
else if (solidType ==
"ELLIPTICALTUBE") {
920 params.push_back( eltu->
GetDx());
921 params.push_back( eltu->
GetDy());
922 params.push_back( eltu->
GetDz());
924 }
else if (solidType ==
"ELLIPSOID" ){
933 }
else if (solidType ==
"ELLIPTICAL_CONE") {
937 params.push_back( elco-> GetSemiAxisX() );
938 params.push_back( elco-> GetSemiAxisY() );
939 params.push_back( elco-> GetZMax() );
940 params.push_back( elco-> GetZTopCut() );
942 }
else if (solidType ==
"HYPE") {
943 const G4Hype* hype = dynamic_cast <
const G4Hype * > (so);
953 }
else if( solidType ==
"TWISTEDBOX" ) {
961 }
else if( solidType ==
"TWISTEDTRAP" ) {
976 }
else if( solidType ==
"TWISTEDTRD" ) {
986 }
else if( solidType ==
"TWISTEDTUBS" ) {
998 G4String ErrMessage =
"Solid type not supported, sorry... " + solidType;
999 G4Exception(
"G4tgbGeometryDumpe::DumpSolidParams()",
1014 if( rotName !=
"" ) {
return rotName; }
1019 (*theFile) <<
":ROTM ";
1023 (*theFile) <<
AddQuotes(rotName) << std::setprecision(9) <<
" " 1036 (*theFile) <<
":ROTM ";
1056 std::vector<G4VPhysicalVolume*>
1060 G4PhysicalVolumeStore::const_iterator ite;
1061 std::vector<G4VPhysicalVolume*> children;
1062 for( ite = pvstore->begin(); ite != pvstore->end(); ite++ )
1064 if( (*ite)->GetMotherLogical() == lv )
1066 children.push_back( *ite );
1070 G4cout <<
" G4tgbGeometryDumper::GetPVChildren() - adding children: " 1084 G4String newsolidType = solidType.substr(2,solidType.length() );
1085 for(
size_t ii = 0; ii < newsolidType.length(); ii++ )
1087 newsolidType[ii] = toupper(newsolidType[ii] );
1089 return newsolidType;
1109 if( std::fabs(val) < precision ) { val = 0; }
1120 size_t siz = str.length();
1121 for(
size_t ii = 0; ii < siz; ii++ )
1123 if( str.substr(ii,1) ==
" " )
1141 G4int irefl = name.rfind(
"_refl");
1144 name = name.substr( 0, irefl );
1152 G4int irefl = name.rfind(
"_refl");
1155 name = name.substr( 0, irefl ) +
"_REFL";
1168 std::map<G4String,G4Isotope*>::const_iterator ite;
1171 if( isot == (*ite).second ) {
return (*ite).
first; }
1181 if( isot != isotold )
1189 G4String newIsotName = isotName +
"_" 1191 std::map<G4String,G4Isotope*>::const_iterator ite2 =
1195 isotName = newIsotName;
1202 isotName = newIsotName;
1223 typename std::map<G4String,TYP*>::const_iterator ite;
1224 for( ite = objectsDumped.begin(); ite != objectsDumped.end(); ite++ )
1226 if( obj == (*ite).second ) {
return (*ite).
first; }
1232 ite = objectsDumped.find( objName );
1234 if( ite != objectsDumped.end() )
1236 TYP* objold = (*ite).second;
1243 typename std::map<G4String,TYP*>::const_iterator ite2 =
1244 objectsDumped.find( newObjName );
1245 if( ite2 == objectsDumped.end() )
1247 objName = newObjName;
1294 G4cout <<
" G4tgbGeometryDumper::CheckIfPhysVolExists() - " 1306 G4cerr <<
" G4tgbGeometryDumper::CheckIfPhysVolExists () -" 1307 <<
" Placement found but not same as before : " << name <<
G4endl;
1324 std::map<G4String,G4RotationMatrix*>::const_iterator ite;
1327 if( (*ite).second->isNear( *rotm ) )
1329 rmName = (*ite).
first;
1341 if ( (isot1->
GetZ() != isot2->
GetZ())
1342 || (isot1->
GetN() != isot2->
GetN())
1343 || (isot1->
GetA() != isot2->
GetA()) )
1357 std::map<G4String,G4VSolid*>::const_iterator ite;
1360 if( solid == (*ite).second ) {
return (*ite).
first; }
1365 G4Exception(
"G4tgbGeometryDumper::FindSolidName()",
"ReadError",
1368 return (*ite).first;
G4double GetPolarAngleTheta() const
G4IonisParamMat * GetIonisation() const
G4double GetX2HalfLength() const
G4double GetXHalfLength1() const
G4String SupressRefl(G4String name)
virtual G4Material * ComputeMaterial(const G4int repNo, G4VPhysicalVolume *currentVol, const G4VTouchable *parentTouch=0)
G4double GetStartPhi() const
G4double GetOuterRadius() const
G4double GetSemiAxisMax(G4int i) const
std::vector< G4Isotope * > G4IsotopeVector
G4int GetNumRZCorner() const
G4ThreeVector GetSymAxis() const
std::vector< G4Element * > G4ElementVector
G4double GetZHalfLength() const
G4double GetOuterRadiusPlusZ() const
const G4RotationMatrix * GetRotation() const
G4double GetStartPhiAngle() const
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
G4double GetZHalfLength() const
void DumpIsotope(G4Isotope *ele)
virtual G4bool IsReplicated() const =0
G4double GetDeltaPhiAngle() const
G4String DumpMaterial(G4Material *mat)
const G4String & FindSolidName(G4VSolid *solid)
G4double GetStartThetaAngle() const
G4VPVParameterisation * GetParameterisation() const
G4String LookForExistingRotation(const G4RotationMatrix *rotm)
G4double GetY2HalfLength() const
G4double GetYHalfLength1() const
G4double GetX2HalfLength() const
G4double GetStartPhi() const
virtual G4VSolid * ComputeSolid(const G4int, G4VPhysicalVolume *)
void DumpSolidParams(G4VSolid *so)
G4double GetInnerRadiusMinusZ() const
G4double GetXHalfLength() const
G4Material * GetMaterial() const
std::map< G4String, G4Material * > theMaterials
const G4double * GetFractionVector() const
G4ThreeVector GetSymAxis() const
G4double GetDensity() const
static G4String ConvertToString(G4bool boolVal)
G4double GetXHalfLength3() const
G4PolyconeSideRZ GetCorner(G4int index) const
std::map< G4String, G4Element * > theElements
G4ThreeVector GetObjectTranslation() const
G4double GetXHalfLength4() const
G4double GetSurfaceTolerance() const
G4double GetZBottomCut() const
G4double GetStartPhi() const
virtual G4GeometryType GetEntityType() const =0
G4double GetYHalfLength2() const
G4VSolid * GetConstituentMovedSolid() const
G4double GetX1HalfLength() const
G4bool IsReflected(G4LogicalVolume *lv) const
size_t GetNumberOfIsotopes() const
G4double GetZHalfLength() const
G4double * GetRelativeAbundanceVector() const
std::map< G4String, G4LogicalVolume * > theLogVols
G4double GetZHalfLength() const
static G4ReflectionFactory * Instance()
static G4ThreadLocal G4tgbGeometryDumper * theInstance
std::vector< G4VPhysicalVolume * > GetPVChildren(G4LogicalVolume *lv)
void DumpPVReplica(G4PVReplica *pv, const G4String &lvName)
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
void DumpPhysVol(G4VPhysicalVolume *pv)
G4bool CheckIfLogVolExists(const G4String &name, G4LogicalVolume *pt)
static G4PhysicalVolumeStore * GetInstance()
G4double GetZHalfLength() const
G4double GetXHalfLength() const
virtual const G4VSolid * GetConstituentSolid(G4int no) const
void DumpGeometry(const G4String &fname)
G4bool Same2G4Isotopes(G4Isotope *ele1, G4Isotope *ele2)
std::map< G4String, G4VSolid * > theSolids
G4String AddQuotes(const G4String &str)
G4double GetPhiTwist() const
G4PolyhedraHistorical * GetOriginalParameters() const
G4GLOB_DLL std::ostream G4cout
G4double GetMeanExcitationEnergy() const
G4double GetYHalfLength1() const
static G4int GetVerboseLevel()
const G4String & GetName() const
G4double GetXHalfLength2() const
G4double GetZHalfLength() const
G4double GetYHalfLength() const
G4double GetRadius() const
G4double GetInnerRadius() const
G4double GetTanAlpha() const
G4double GetY1HalfLength() const
G4double GetZHalfLength() const
G4double GetInnerStereo() const
G4double GetTiltAngleAlpha() const
G4IsotopeVector * GetIsotopeVector() const
G4double GetPhiTwist() const
G4String GetTGSolidType(const G4String &solidtype)
G4double GetY2HalfLength() const
G4double GetPhiTwist() const
G4double GetOuterRadius() const
G4VSolid * GetConstituentMovedSolid() const
G4double GetPressure() const
G4double GetXHalfLength() const
G4double GetTemperature() const
G4double GetXHalfLength2() const
G4bool CheckIfPhysVolExists(const G4String &name, G4VPhysicalVolume *)
G4PolyconeHistorical * GetOriginalParameters() const
G4double approxTo0(G4double val)
G4double GetInnerRadiusPlusZ() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static const double kelvin
virtual G4bool IsParameterised() const =0
G4double GetZHalfLength() const
G4double GetStartPhiAngle() const
G4double GetYHalfLength() const
std::map< G4String, G4Isotope * > theIsotopes
void DumpPVPlacement(G4VPhysicalVolume *pv, const G4String &lvName, G4int copyNo=-999)
const G4String & GetName() const
G4String SubstituteRefl(G4String name)
G4String DumpRotationMatrix(G4RotationMatrix *rotm)
std::map< G4String, G4VPhysicalVolume * > thePhysVols
void DumpBooleanVolume(const G4String &solidType, G4VSolid *so)
G4double GetOuterStereo() const
G4double GetInnerRadius() const
static G4tgbGeometryDumper * GetInstance()
G4double GetOuterRadius() const
G4double GetDeltaPhiAngle() const
std::vector< G4double > GetSolidParams(const G4VSolid *so)
G4double GetZHalfLength() const
void DumpPVParameterised(G4PVParameterised *pv)
G4VPhysicalVolume * GetTopPhysVol()
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
G4PolyhedraSideRZ GetCorner(const G4int index) const
G4double GetOuterRadiusMinusZ() const
virtual G4int GetCopyNo() const =0
G4double GetXHalfLength1() const
G4double GetX3HalfLength() const
static const G4double ele
G4double GetTanAlpha2() const
size_t GetNumberOfElements() const
static const double atmosphere
G4LogicalVolume * GetMotherLogical() const
G4double GetDeltaThetaAngle() const
G4double GetX1HalfLength() const
G4String GetIsotopeName(G4Isotope *)
G4double MatDeterminant(G4RotationMatrix *ro)
G4int GetNumRZCorner() const
G4PolyconeSideRZ GetCorner(G4int index) const
const G4String & GetSymbol() const
G4double GetX4HalfLength() const
G4double GetInnerRadius() const
G4double GetYHalfLength() const
G4double GetY1HalfLength() const
G4double GetInnerRadius() const
const G4ElementVector * GetElementVector() const
G4String DumpSolid(G4VSolid *solid, const G4String &extraName="")
G4double GetStartPhiAngle() const
G4double GetZTopCut() const
G4double GetYHalfLength2() const
std::map< G4String, G4RotationMatrix * > theRotMats
G4double GetZHalfLength() const
const G4String & GetName() const
G4LogicalVolume * GetLogicalVolume() const
const G4ThreeVector & GetTranslation() const
G4double GetAzimuthalAnglePhi() const
G4double GetZHalfLength() const
G4VSolid * GetSolid() const
G4double GetDeltaPhiAngle() const
G4double GetTanAlpha1() const
static const G4double pos
G4double GetPhiTwist() const
static G4GeometryTolerance * GetInstance()
G4int GetNumRZCorner() const
G4GLOB_DLL std::ostream G4cerr
G4String DumpLogVol(G4LogicalVolume *lv, G4String extraName="", G4VSolid *solid=0, G4Material *mate=0)
void DumpElement(G4Element *ele)
G4double GetOuterRadius() const
G4double GetEndPhi() const
virtual void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const
G4String GetObjectName(TYP *obj, std::map< G4String, TYP *> objectsDumped)