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: " 
  233     G4Rep3x3 rottemp(colx.x(),coly.x(),colz.x(),
 
  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;
 
 1097    return       r.xx_*(r.yy_*r.zz_ - r.zy_*r.yz_)
 
 1098               - r.yx_*(r.xy_*r.zz_ - r.zy_*r.xz_)
 
 1099               + r.zx_*(r.xy_*r.yz_ - r.yy_*r.xz_);
 
 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;
 
G4ThreeVector GetSymAxis() const 
 
G4double GetPressure() const 
 
size_t GetNumberOfIsotopes() const 
 
G4PolyconeSideRZ GetCorner(G4int index) const 
 
G4double GetXHalfLength4() const 
 
G4IonisParamMat * GetIonisation() const 
 
G4double GetXHalfLength() const 
 
G4double GetOuterStereo() const 
 
G4String SupressRefl(G4String name)
 
G4double GetX1HalfLength() const 
 
virtual G4Material * ComputeMaterial(const G4int repNo, G4VPhysicalVolume *currentVol, const G4VTouchable *parentTouch=0)
 
std::vector< G4Isotope * > G4IsotopeVector
 
G4double GetY1HalfLength() const 
 
G4double GetPolarAngleTheta() const 
 
const G4String & GetName() const 
 
G4double GetYHalfLength2() const 
 
const G4ThreeVector & GetTranslation() const 
 
std::vector< G4Element * > G4ElementVector
 
G4double GetYHalfLength1() const 
 
G4double GetInnerStereo() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
G4double GetInnerRadius() const 
 
CLHEP::HepRotation G4RotationMatrix
 
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const 
 
void DumpIsotope(G4Isotope *ele)
 
virtual G4bool IsReplicated() const =0
 
G4String DumpMaterial(G4Material *mat)
 
const G4String & FindSolidName(G4VSolid *solid)
 
G4String LookForExistingRotation(const G4RotationMatrix *rotm)
 
G4Material * GetMaterial() const 
 
const G4String & GetSymbol() const 
 
G4int GetNumRZCorner() const 
 
virtual G4VSolid * ComputeSolid(const G4int, G4VPhysicalVolume *)
 
void DumpSolidParams(G4VSolid *so)
 
G4double GetZTopCut() const 
 
G4double GetZHalfLength() const 
 
G4double GetSurfaceTolerance() const 
 
G4double GetZHalfLength() const 
 
std::map< G4String, G4Material * > theMaterials
 
G4double GetDensity() const 
 
static G4String ConvertToString(G4bool boolVal)
 
G4double GetZBottomCut() const 
 
std::map< G4String, G4Element * > theElements
 
G4double GetOuterRadiusMinusZ() const 
 
G4double GetX2HalfLength() const 
 
G4double GetInnerRadius() const 
 
virtual G4GeometryType GetEntityType() const =0
 
G4double GetZHalfLength() const 
 
G4double GetDeltaPhiAngle() const 
 
const G4ElementVector * GetElementVector() const 
 
CLHEP::HepRep3x3 G4Rep3x3
 
G4double GetZHalfLength() const 
 
G4double GetSemiAxisMax(G4int i) const 
 
G4bool IsReflected(G4LogicalVolume *lv) const 
 
G4ThreeVector GetObjectTranslation() const 
 
G4double GetXHalfLength2() const 
 
std::map< G4String, G4LogicalVolume * > theLogVols
 
static G4ReflectionFactory * Instance()
 
static G4ThreadLocal G4tgbGeometryDumper * theInstance
 
G4double GetZHalfLength() const 
 
G4double GetZHalfLength() const 
 
std::vector< G4VPhysicalVolume * > GetPVChildren(G4LogicalVolume *lv)
 
void DumpPVReplica(G4PVReplica *pv, const G4String &lvName)
 
G4double GetEndPhi() const 
 
G4double GetTanAlpha2() const 
 
G4int GetNumRZCorner() const 
 
void DumpPhysVol(G4VPhysicalVolume *pv)
 
G4double GetPhiTwist() const 
 
G4bool CheckIfLogVolExists(const G4String &name, G4LogicalVolume *pt)
 
static G4PhysicalVolumeStore * GetInstance()
 
G4double GetY1HalfLength() const 
 
G4double GetXHalfLength2() const 
 
G4double GetRadius() const 
 
void DumpGeometry(const G4String &fname)
 
G4bool Same2G4Isotopes(G4Isotope *ele1, G4Isotope *ele2)
 
std::map< G4String, G4VSolid * > theSolids
 
G4String AddQuotes(const G4String &str)
 
G4VPVParameterisation * GetParameterisation() const 
 
G4double GetXHalfLength1() const 
 
G4GLOB_DLL std::ostream G4cout
 
G4double GetDeltaPhiAngle() const 
 
G4double GetStartThetaAngle() const 
 
const G4String & GetName() const 
 
G4double GetXHalfLength3() const 
 
static G4int GetVerboseLevel()
 
G4double GetY2HalfLength() const 
 
G4String GetTGSolidType(const G4String &solidtype)
 
G4String GetObjectName(TYP *obj, std::map< G4String, TYP * > objectsDumped)
 
G4double GetX3HalfLength() const 
 
G4double GetPhiTwist() const 
 
G4double * GetRelativeAbundanceVector() const 
 
G4double GetYHalfLength() const 
 
G4double GetStartPhiAngle() const 
 
G4double GetYHalfLength2() const 
 
G4double GetOuterRadius() const 
 
G4double GetStartPhiAngle() const 
 
G4double GetStartPhi() const 
 
G4double GetInnerRadiusPlusZ() const 
 
G4LogicalVolume * GetMotherLogical() const 
 
G4bool CheckIfPhysVolExists(const G4String &name, G4VPhysicalVolume *)
 
G4double GetInnerRadius() const 
 
G4PolyconeHistorical * GetOriginalParameters() const 
 
G4double GetStartPhi() const 
 
G4VSolid * GetConstituentMovedSolid() const 
 
G4double GetXHalfLength() const 
 
G4double GetInnerRadius() const 
 
G4double approxTo0(G4double val)
 
virtual const G4VSolid * GetConstituentSolid(G4int no) const 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static const double kelvin
 
virtual G4bool IsParameterised() const =0
 
virtual void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const 
 
G4double GetX4HalfLength() const 
 
std::map< G4String, G4Isotope * > theIsotopes
 
void DumpPVPlacement(G4VPhysicalVolume *pv, const G4String &lvName, G4int copyNo=-999)
 
G4double GetYHalfLength() const 
 
G4IsotopeVector * GetIsotopeVector() const 
 
G4String SubstituteRefl(G4String name)
 
G4String DumpRotationMatrix(G4RotationMatrix *rotm)
 
G4double GetZHalfLength() const 
 
G4LogicalVolume * GetLogicalVolume() const 
 
std::map< G4String, G4VPhysicalVolume * > thePhysVols
 
G4double GetTanAlpha() const 
 
void DumpBooleanVolume(const G4String &solidType, G4VSolid *so)
 
static G4tgbGeometryDumper * GetInstance()
 
void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const 
 
G4VSolid * GetConstituentMovedSolid() const 
 
std::vector< G4double > GetSolidParams(const G4VSolid *so)
 
void DumpPVParameterised(G4PVParameterised *pv)
 
G4VPhysicalVolume * GetTopPhysVol()
 
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
 
virtual G4int GetCopyNo() const =0
 
static const G4double ele
 
static const double atmosphere
 
const G4RotationMatrix * GetRotation() const 
 
G4PolyhedraHistorical * GetOriginalParameters() const 
 
G4double GetZHalfLength() const 
 
G4double GetZHalfLength() const 
 
G4String GetIsotopeName(G4Isotope *)
 
G4ThreeVector GetSymAxis() const 
 
G4double MatDeterminant(G4RotationMatrix *ro)
 
G4double GetZHalfLength() const 
 
G4double GetMeanExcitationEnergy() const 
 
G4double GetAzimuthalAnglePhi() const 
 
G4double GetTemperature() const 
 
G4double GetStartPhi() const 
 
G4double GetXHalfLength1() const 
 
size_t GetNumberOfElements() const 
 
G4double GetOuterRadius() const 
 
G4double GetStartPhiAngle() const 
 
G4PolyhedraSideRZ GetCorner(const G4int index) const 
 
G4double GetYHalfLength1() const 
 
G4String DumpSolid(G4VSolid *solid, const G4String &extraName="")
 
G4double GetPhiTwist() const 
 
std::map< G4String, G4RotationMatrix * > theRotMats
 
G4double GetInnerRadiusMinusZ() const 
 
G4double GetTanAlpha1() const 
 
const G4double * GetFractionVector() const 
 
G4int GetNumRZCorner() const 
 
G4double GetDeltaThetaAngle() const 
 
G4PolyconeSideRZ GetCorner(G4int index) const 
 
G4double GetX1HalfLength() const 
 
G4double GetTiltAngleAlpha() const 
 
G4double GetX2HalfLength() const 
 
G4double GetOuterRadiusPlusZ() const 
 
G4double GetZHalfLength() const 
 
G4double GetOuterRadius() const 
 
G4double GetXHalfLength() const 
 
static const G4double pos
 
static G4GeometryTolerance * GetInstance()
 
G4double GetPhiTwist() const 
 
G4VSolid * GetSolid() const 
 
G4double GetOuterRadius() const 
 
G4GLOB_DLL std::ostream G4cerr
 
G4String DumpLogVol(G4LogicalVolume *lv, G4String extraName="", G4VSolid *solid=0, G4Material *mate=0)
 
G4double GetY2HalfLength() const 
 
void DumpElement(G4Element *ele)
 
G4double GetDeltaPhiAngle() const 
 
G4double GetYHalfLength() const