43 #ifndef G3G4_NO_REFLECTION 
   56     fNofDivisions(nofDivisions),
 
  135   if (shape == 
"PARA") {
 
  144        if (position.y()!=0.) 
 
  145          position.setX(position.y()*((
G4Para*)lv->
GetSolid())->GetTanAlpha());
 
  147        #ifndef G3G4_NO_REFLECTION 
  162     G4cout << 
"Create G4PVReplica name " << name << 
" logical volume name "  
  163            << lv->
GetName() << 
" mother logical volme name " 
  164            << mlv->
GetName() << 
" axis " << 
fAxis << 
" ndivisions "  
  169   #ifndef G3G4_NO_REFLECTION 
  183   G4String err_message = 
"G3Division::" + where + 
" for " 
  184                        + what + 
" is not implemented";
 
  185   G4Exception(
"G3Division::Exception()", 
"G3toG40004",
 
  203       default: 
G4Exception(
"G3Division::SetRangeAndAxis()", 
"G3toG40005",
 
  207     if ( shape == 
"BOX" ) {
 
  211     else if ( shape == 
"TRD1" ) {
 
  223     else if ( shape == 
"TRD2" ) {
 
  234     else if ( shape == 
"TRAP" ) {
 
  239     else if ( shape == 
"TUBE" ) {
 
  255     else if ( shape == 
"TUBS" ) {
 
  274     else if ( shape == 
"CONE" ) {
 
  291     else if ( shape == 
"CONS" ) {
 
  310     else if ( shape == 
"SPHE" ) {
 
  327     else if ( shape == 
"PARA" ) {
 
  331     else if ( shape == 
"PGON" ) {
 
  353             DzArray[i] = Rpar[i4]*
cm;
 
  354             Rmin[i] = Rpar[i5]*
cm;
 
  355             Rmax[i] = Rpar[i6]*
cm;
 
  356             rangelo[0] = 
std::min(rangelo[0], Rmin[i]);
 
  357             rangehi[0] = 
std::max(rangehi[0], Rmax[i]);
 
  358             rangelo[2] = 
std::min(rangelo[2], DzArray[i]);
 
  359             rangehi[2] = 
std::max(rangehi[2], DzArray[i]);
 
  362             assert(Rmin[i]>=0 && Rmax[i]>=Rmin[i]);
 
  364         rangehi[1] = pPhi1 + dPhi;
 
  377     else if ( shape == 
"PCON" ) {
 
  399             DzArray[i] = Rpar[i4]*
cm;
 
  400             Rmin[i] = Rpar[i5]*
cm;
 
  401             Rmax[i] = Rpar[i6]*
cm;
 
  402             rangelo[0] = 
std::min(rangelo[0], Rmin[i]);
 
  403             rangehi[0] = 
std::max(rangehi[0], Rmax[i]);
 
  404             rangelo[2] = 
std::min(rangelo[2], DzArray[i]);
 
  405             rangehi[2] = 
std::max(rangehi[2], DzArray[i]);
 
  408             assert(Rmin[i]>=0 && Rmax[i]>=Rmin[i]);
 
  410         rangehi[1] = pPhi1 + dPhi;
 
  423     else if ( shape == 
"ELTU" ||  shape == 
"HYPE" || shape == 
"GTRA" ||
 
  428        Exception(
"SetRangeAndAxis", 
"Unknown shape" + shape);
 
  433       G4cout << 
"Shape " << shape << 
" SetRangeAndAxis: "  
  450     for (
G4int i=0; i<npar; ++i){ Rpar[i] = par[i];}
 
  453     if ( shape == 
"BOX" ) {
 
  455       pos [
fIAxis-1] = (hi + lo)/2.;
 
  457     else if ( shape == 
"TRD1" ) {
 
  464         tn = (Rpar[1] - Rpar[0])/(2.* Rpar[3]); 
 
  465         x1 = Rpar[0]; z1 = -Rpar[3];
 
  466         Rpar[0] = x1 + tn * (lo/
cm - z1);
 
  467         Rpar[1] = x1 + tn * (hi/
cm - z1);
 
  468         Rpar[3] = (hi - lo)/2./
cm;
 
  469         pos[2]  = (hi + lo)/2.;
 
  472     else if ( shape == 
"TRD2" ) {
 
  480         tn1 = (Rpar[1] - Rpar[0])/(2.* Rpar[4]); 
 
  481         tn2 = (Rpar[3] - Rpar[2])/(2.* Rpar[4]); 
 
  482         x1 = Rpar[0]; y1 = Rpar[2]; z1 = -Rpar[3];
 
  483         Rpar[0] = x1 + tn1 * (lo/
cm - z1);
 
  484         Rpar[1] = x1 + tn1 * (hi/
cm - z1);
 
  485         Rpar[2] = y1 + tn2 * (lo/
cm - z1);
 
  486         Rpar[3] = y1 + tn2 * (hi/
cm - z1);
 
  487         Rpar[4] = (hi - lo)/2./
cm;
 
  488         pos[2]  = (hi + lo)/2.;
 
  491     else if ( shape == 
"TRAP" ) {
 
  492       Exception(
"CreateEnvelope",
"TRAP-x,y,z");
 
  494     else if ( shape == 
"TUBE" ) {
 
  506         Rpar[2] = (hi - lo)/2./
cm;
 
  507         pos [2] = (hi + lo)/2.;
 
  510     else if ( shape == 
"TUBS" ) {
 
  520         Rpar[2] = (hi - lo)/2./
cm;
 
  521         pos [2] = (hi + lo)/2.;
 
  524     else if ( shape == 
"CONE" ) {
 
  536         tn1 = (Rpar[3] - Rpar[1])/(2.* Rpar[0]); 
 
  537         tn2 = (Rpar[4] - Rpar[2])/(2.* Rpar[0]); 
 
  538         rmin = Rpar[1]; rmax = Rpar[2]; z1 = -Rpar[0];
 
  539         Rpar[1] = rmin + tn1 * (lo/
cm - z1);
 
  540         Rpar[3] = rmin + tn1 * (hi/
cm - z1);
 
  541         Rpar[2] = rmax + tn2 * (lo/
cm - z1);
 
  542         Rpar[4] = rmax + tn2 * (hi/
cm - z1);
 
  543         Rpar[0] = (hi - lo)/2./
cm;
 
  544         pos[2]  = (hi + lo)/2.;
 
  547     else if ( shape == 
"CONS" ) {
 
  557         tn1 = (Rpar[3] - Rpar[1])/(2.* Rpar[0]); 
 
  558         tn2 = (Rpar[4] - Rpar[2])/(2.* Rpar[0]); 
 
  559         rmin = Rpar[1]; rmax = Rpar[2]; z1 = -Rpar[0];
 
  560         Rpar[1] = rmin + tn1 * (lo/
cm - z1);
 
  561         Rpar[3] = rmin + tn1 * (hi/
cm - z1);
 
  562         Rpar[2] = rmax + tn2 * (lo/
cm - z1);
 
  563         Rpar[4] = rmax + tn2 * (hi/
cm - z1);
 
  564         Rpar[0] = (hi - lo)/2./
cm;
 
  565         pos[2]  = (hi + lo)/2.;
 
  568     else if ( shape == 
"SPHE" ) {
 
  569       Exception(
"CreateEnvelope",
"SPHE-x,y,z");                
 
  571     else if ( shape == 
"PARA" ) {
 
  572       Exception(
"CreateEnvelope",
"PARA-x,y,z");
 
  574     else if ( shape == 
"PGON" ) {
 
  584     else if ( shape == 
"PCON" ) {
 
  595        Exception(
"CreateEnvelope", 
"Unknown shape" + shape);
 
  607     G3Pos* aG3Pos = 
new G3Pos(motherName, 1, offset, 0, only);              
 
  620     for (
G4int i=0; i<npar; ++i){ Rpar[i] = par[i];}
 
  629     if ( shape == 
"BOX" ) {
 
  634     else if ( shape == 
"TRD1" ) {
 
  642     else if ( shape == 
"TRD2" ) {
 
  650     else if ( shape == 
"TRAP" ) {
 
  658     else if ( shape == 
"TUBE" ) {
 
  673     else if ( shape == 
"TUBS" ) {
 
  687     else if ( shape == 
"CONE" ) {
 
  701     else if ( shape == 
"CONS" ) {
 
  714     else if (shape == 
"PARA") {
 
  718       else if ( Rpar[4] == 0. && Rpar[5] == 0. ) {
 
  730     else if (shape == 
"SPHE") {
 
  733     else if ( shape == 
"PGON" ) {
 
  743     else if ( shape == 
"PCON" ) {
 
  754        Exception(
"CreateSolid", 
"Unknown shape" + shape);
 
  766                             + 
" has negative parameters.";
 
  767        G4Exception(
"G3Division::CreateSolid()", 
"G3toG40006",
 
  850   if (ndvmx > 255) ndvmx = 255;
 
  851   if (ndiv > ndvmx && ndvmx > 0 ) ndiv = ndvmx;
 
  898   if (ndvmx > 255) ndvmx = 255;
 
  899   if (ndiv > ndvmx && ndvmx > 0 ) ndiv = ndvmx;
 
G3G4DLL_API G4double Rpar[1000]
 
void Exception(G4String where, G4String what)
 
void CreateSolid(G4String shape, G4double par[], G4int npar)
 
static const G4double kInfinity
 
CLHEP::Hep3Vector G4ThreeVector
 
G3VolTableEntry * GetMasterClone()
 
G4LogicalVolume * GetLV()
 
G4PhysicalVolumesPair Replicate(const G4String &name, G4LogicalVolume *LV, G4LogicalVolume *motherLV, EAxis axis, G4int nofReplicas, G4double width, G4double offset=0)
 
static G4ReflectionFactory * Instance()
 
G4GLOB_DLL std::ostream G4cout
 
G4PhysicalVolumesPair Place(const G4Transform3D &transform3D, const G4String &name, G4LogicalVolume *LV, G4LogicalVolume *motherLV, G4bool isMany, G4int copyNo, G4bool surfCheck=false)
 
G3VolTableEntry * CreateEnvelope(G4String shape, G4double hi, G4double lo, G4double par[], G4int npar)
 
void SetNRpar(G4int npar, G4double *Rpar)
 
G3Division(G3DivType type, G3VolTableEntry *vte, G3VolTableEntry *mvte, G4int nofDivision, G4int iaxis, G4int nmed, G4double c0, G4double step)
 
void SetHasNegPars(G4bool hasNegPars)
 
void SetSolid(G4VSolid *solid)
 
G3VolTableEntry * G4CreateVTE(G4String vname, G4String shape, G4int nmed, G4double Rpar[], G4int npar)
 
G4VSolid * G3toG4MakeSolid(const G4String &vname, const G4String &shape, const G4double *Rpar, const G4int npar, G4bool &NegVolPars, G4bool &Deferred, G4bool *OKAxis)
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
void AddG3Pos(G3Pos *aG3Pos)
 
void AddMother(G3VolTableEntry *aDaughter)
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
void ReplaceMother(G3VolTableEntry *vteOld, G3VolTableEntry *vteNew)
 
void ReplaceDaughter(G3VolTableEntry *vteOld, G3VolTableEntry *vteNew)
 
static const G4double pos
 
void AddDaughter(G3VolTableEntry *aDaughter)
 
G4VSolid * GetSolid() const