- Timestamp:
- Dec 22, 2010, 3:52:27 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/persistency/ascii/src/G4tgbGeometryDumper.cc
r1337 r1347 25 25 // 26 26 // 27 // $Id: G4tgbGeometryDumper.cc,v 1.1 2 2009/11/19 13:29:04 arceExp $28 // GEANT4 tag $Name: geant4-09-04- beta-01$27 // $Id: G4tgbGeometryDumper.cc,v 1.15 2010/11/02 11:13:05 gcosmo Exp $ 28 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 29 29 // 30 30 // … … 81 81 //------------------------------------------------------------------------ 82 82 G4tgbGeometryDumper::G4tgbGeometryDumper() 83 { 84 85 theRotationNumber = 0; 83 : theFile(0), theRotationNumber(0) 84 { 86 85 } 87 86 … … 649 648 } else if (solidType == "REFLECTEDSOLID") { 650 649 G4ReflectedSolid* solidrefl = dynamic_cast<G4ReflectedSolid*>(solid); 650 if (!solidrefl) 651 { 652 G4Exception("G4tgbGeometryDumper::DumpSolid()", 653 "InvalidType", FatalException, "Invalid reflected solid!"); 654 return solidName; 655 } 651 656 G4VSolid* solidori = solidrefl->GetConstituentMovedSolid(); 652 657 DumpSolid( solidori ); … … 669 674 { 670 675 G4BooleanSolid * bso = dynamic_cast < G4BooleanSolid * > (so); 676 if (!bso) { return; } 671 677 G4VSolid* solid0 = bso->GetConstituentSolid( 0 ); 672 678 G4VSolid* solid1 = bso->GetConstituentSolid( 1 ); … … 676 682 { 677 683 solid1Disp = dynamic_cast<G4DisplacedSolid*>(solid1); 678 solid1 = solid1Disp->GetConstituentMovedSolid();684 if (solid1Disp) { solid1 = solid1Disp->GetConstituentMovedSolid(); } 679 685 } 680 686 DumpSolid( solid0 ); … … 736 742 if (solidType == "BOX") { 737 743 const G4Box * sb = dynamic_cast < const G4Box*>(so); 738 params.push_back( sb->GetXHalfLength() ); 739 params.push_back( sb->GetYHalfLength() ); 740 params.push_back( sb->GetZHalfLength() ); 741 744 if (sb) { 745 params.push_back( sb->GetXHalfLength() ); 746 params.push_back( sb->GetYHalfLength() ); 747 params.push_back( sb->GetZHalfLength() ); 748 } 742 749 } else if (solidType == "TUBS") { 743 750 const G4Tubs * tu = dynamic_cast < const G4Tubs * > (so); 744 params.push_back( tu->GetInnerRadius() ); 745 params.push_back( tu->GetOuterRadius() ); 746 params.push_back( tu->GetZHalfLength() ); 747 params.push_back( tu->GetStartPhiAngle()/deg ); 748 params.push_back( tu->GetDeltaPhiAngle()/deg ); 749 751 if (tu) { 752 params.push_back( tu->GetInnerRadius() ); 753 params.push_back( tu->GetOuterRadius() ); 754 params.push_back( tu->GetZHalfLength() ); 755 params.push_back( tu->GetStartPhiAngle()/deg ); 756 params.push_back( tu->GetDeltaPhiAngle()/deg ); 757 } 750 758 } else if (solidType == "TRAP") { 751 759 const G4Trap * trp = dynamic_cast < const G4Trap * > (so); 752 G4ThreeVector symAxis(trp->GetSymAxis());753 G4double theta, phi;754 theta = symAxis.theta()/deg;755 phi = symAxis.phi()/deg;756 params.push_back( trp->GetZHalfLength() );757 params.push_back( theta );758 params.push_back( phi);759 params.push_back( trp->GetYHalfLength1() );760 params.push_back( trp->GetXHalfLength1() );761 params.push_back( trp->GetXHalfLength2() );762 params.push_back( std::atan(trp->GetTanAlpha1())/deg );763 params.push_back( trp->GetYHalfLength2() );764 params.push_back( trp->GetXHalfLength3() );765 params.push_back( trp->GetXHalfLength4() );766 params.push_back( std::atan(trp->GetTanAlpha2())/deg );767 760 if (trp) { 761 G4ThreeVector symAxis(trp->GetSymAxis()); 762 G4double theta = symAxis.theta()/deg; 763 G4double phi = symAxis.phi()/deg; 764 params.push_back( trp->GetZHalfLength() ); 765 params.push_back( theta ); 766 params.push_back( phi); 767 params.push_back( trp->GetYHalfLength1() ); 768 params.push_back( trp->GetXHalfLength1() ); 769 params.push_back( trp->GetXHalfLength2() ); 770 params.push_back( std::atan(trp->GetTanAlpha1())/deg ); 771 params.push_back( trp->GetYHalfLength2() ); 772 params.push_back( trp->GetXHalfLength3() ); 773 params.push_back( trp->GetXHalfLength4() ); 774 params.push_back( std::atan(trp->GetTanAlpha2())/deg ); 775 } 768 776 } else if (solidType == "TRD") { 769 777 const G4Trd * tr = dynamic_cast < const G4Trd * > (so); 770 params.push_back( tr->GetXHalfLength1() ); 771 params.push_back( tr->GetXHalfLength2() ); 772 params.push_back( tr->GetYHalfLength1() ); 773 params.push_back( tr->GetYHalfLength2() ); 774 params.push_back( tr->GetZHalfLength()); 775 778 if (tr) { 779 params.push_back( tr->GetXHalfLength1() ); 780 params.push_back( tr->GetXHalfLength2() ); 781 params.push_back( tr->GetYHalfLength1() ); 782 params.push_back( tr->GetYHalfLength2() ); 783 params.push_back( tr->GetZHalfLength()); 784 } 776 785 } else if (solidType == "PARA") { 777 786 const G4Para * para = dynamic_cast < const G4Para * > (so); 778 double phi; 779 if(para->GetSymAxis().z()!=1.0) 780 { phi = std::atan(para->GetSymAxis().y()/para->GetSymAxis().x()); } 781 else 782 { phi = 0; } 783 params.push_back( para->GetXHalfLength()); 784 params.push_back( para->GetYHalfLength()); 785 params.push_back( para->GetZHalfLength()); 786 params.push_back( std::atan(para->GetTanAlpha())/deg); 787 params.push_back( std::acos(para->GetSymAxis().z())/deg); 788 params.push_back( phi/deg); 789 787 if (para) { 788 G4double phi = 0.; 789 if(para->GetSymAxis().z()!=1.0) 790 { phi = std::atan(para->GetSymAxis().y()/para->GetSymAxis().x()); } 791 params.push_back( para->GetXHalfLength()); 792 params.push_back( para->GetYHalfLength()); 793 params.push_back( para->GetZHalfLength()); 794 params.push_back( std::atan(para->GetTanAlpha())/deg); 795 params.push_back( std::acos(para->GetSymAxis().z())/deg); 796 params.push_back( phi/deg); 797 } 790 798 } else if (solidType == "CONS") { 791 799 const G4Cons * cn = dynamic_cast < const G4Cons * > (so); 792 params.push_back( cn->GetInnerRadiusMinusZ() ); 793 params.push_back( cn->GetOuterRadiusMinusZ() ); 794 params.push_back( cn->GetInnerRadiusPlusZ() ); 795 params.push_back( cn->GetOuterRadiusPlusZ() ); 796 params.push_back( cn->GetZHalfLength() ); 797 params.push_back( cn->GetStartPhiAngle()/deg ); 798 params.push_back( cn->GetDeltaPhiAngle()/deg ); 799 800 if (cn) { 801 params.push_back( cn->GetInnerRadiusMinusZ() ); 802 params.push_back( cn->GetOuterRadiusMinusZ() ); 803 params.push_back( cn->GetInnerRadiusPlusZ() ); 804 params.push_back( cn->GetOuterRadiusPlusZ() ); 805 params.push_back( cn->GetZHalfLength() ); 806 params.push_back( cn->GetStartPhiAngle()/deg ); 807 params.push_back( cn->GetDeltaPhiAngle()/deg ); 808 } 800 809 } else if (solidType == "SPHERE") { 801 810 const G4Sphere * sphere = dynamic_cast < const G4Sphere * > (so); 802 params.push_back( sphere->GetInnerRadius()); 803 params.push_back( sphere->GetOuterRadius()); 804 params.push_back( sphere->GetStartPhiAngle()/deg); 805 params.push_back( sphere->GetDeltaPhiAngle()/deg); 806 params.push_back( sphere->GetStartThetaAngle()/deg); 807 params.push_back( sphere->GetDeltaThetaAngle()/deg); 808 811 if (sphere) { 812 params.push_back( sphere->GetInnerRadius()); 813 params.push_back( sphere->GetOuterRadius()); 814 params.push_back( sphere->GetStartPhiAngle()/deg); 815 params.push_back( sphere->GetDeltaPhiAngle()/deg); 816 params.push_back( sphere->GetStartThetaAngle()/deg); 817 params.push_back( sphere->GetDeltaThetaAngle()/deg); 818 } 809 819 } else if (solidType == "ORB") { 810 820 const G4Orb * orb = dynamic_cast < const G4Orb * > (so); 811 params.push_back( orb->GetRadius()); 812 821 if (orb) { 822 params.push_back( orb->GetRadius()); 823 } 813 824 } else if (solidType == "TORUS") { 814 825 const G4Torus * torus = dynamic_cast < const G4Torus * > (so); 815 params.push_back( torus->GetRmin()); 816 params.push_back( torus->GetRmax()); 817 params.push_back( torus->GetRtor()); 818 params.push_back( torus->GetSPhi()/deg); 819 params.push_back( torus->GetDPhi()/deg); 820 826 if (torus) { 827 params.push_back( torus->GetRmin()); 828 params.push_back( torus->GetRmax()); 829 params.push_back( torus->GetRtor()); 830 params.push_back( torus->GetSPhi()/deg); 831 params.push_back( torus->GetDPhi()/deg); 832 } 821 833 } else if (solidType == "POLYCONE") { 822 834 //--- Dump RZ corners, as original parameters will not be present 823 835 // if it was build from RZ corners 824 836 const G4Polycone * pc = dynamic_cast < const G4Polycone * > (so); 837 if (pc) { 838 G4double angphi = pc->GetStartPhi()/deg; 839 if( angphi > 180*deg ) { angphi -= 360*deg; } 840 G4int ncor = pc->GetNumRZCorner(); 841 params.push_back( angphi ); 842 params.push_back( pc->GetOriginalParameters()->Opening_angle/deg ); 843 params.push_back( ncor ); 825 844 826 G4double angphi = pc->GetStartPhi()/deg; 827 if( angphi > 180*deg ) { angphi -= 360*deg; } 828 G4int ncor = pc->GetNumRZCorner(); 829 params.push_back( angphi ); 830 params.push_back( pc->GetOriginalParameters()->Opening_angle/deg ); 831 params.push_back( ncor ); 832 833 for( G4int ii = 0; ii < ncor; ii++ ) 834 { 835 params.push_back( pc->GetCorner(ii).r ); 836 params.push_back( pc->GetCorner(ii).z ); 837 } 838 839 845 for( G4int ii = 0; ii < ncor; ii++ ) 846 { 847 params.push_back( pc->GetCorner(ii).r ); 848 params.push_back( pc->GetCorner(ii).z ); 849 } 850 } 840 851 } else if (solidType == "POLYHEDRA") { 841 852 //--- Dump RZ corners, as original parameters will not be present 842 853 // if it was build from RZ corners 843 854 const G4Polyhedra * ph = (dynamic_cast < const G4Polyhedra * > (so)); 855 if (ph) { 856 G4double angphi = ph->GetStartPhi()/deg; 857 if( angphi > 180*deg ) angphi -= 360*deg; 858 859 G4int ncor = ph->GetNumRZCorner(); 844 860 845 G4double angphi = ph->GetStartPhi()/deg; 846 if( angphi > 180*deg ) angphi -= 360*deg; 847 848 G4int ncor = ph->GetNumRZCorner(); 849 850 params.push_back( angphi ); 851 params.push_back( ph->GetOriginalParameters()->Opening_angle/deg ); 852 params.push_back( ph->GetNumSide() ); 853 params.push_back( ncor ); 854 855 for( G4int ii = 0; ii < ncor; ii++ ) 856 { 857 params.push_back( ph->GetCorner(ii).r ); 858 params.push_back( ph->GetCorner(ii).z ); 859 } 860 861 params.push_back( angphi ); 862 params.push_back( ph->GetOriginalParameters()->Opening_angle/deg ); 863 params.push_back( ph->GetNumSide() ); 864 params.push_back( ncor ); 865 866 for( G4int ii = 0; ii < ncor; ii++ ) 867 { 868 params.push_back( ph->GetCorner(ii).r ); 869 params.push_back( ph->GetCorner(ii).z ); 870 } 871 } 861 872 } else if (solidType == "ELLIPTICALTUBE") { 862 873 const G4EllipticalTube * eltu = 863 874 dynamic_cast < const G4EllipticalTube * > (so); 864 params.push_back( eltu->GetDx()); 865 params.push_back( eltu->GetDy()); 866 params.push_back( eltu->GetDz()); 867 875 if (eltu) { 876 params.push_back( eltu->GetDx()); 877 params.push_back( eltu->GetDy()); 878 params.push_back( eltu->GetDz()); 879 } 868 880 } else if (solidType == "ELLIPSOID" ){ 869 881 const G4Ellipsoid* dso = dynamic_cast < const G4Ellipsoid * > (so); 870 params.push_back( dso->GetSemiAxisMax(0) ); 871 params.push_back( dso->GetSemiAxisMax(1) ); 872 params.push_back( dso->GetSemiAxisMax(2) ); 873 params.push_back( dso->GetZBottomCut() ); 874 params.push_back( dso->GetZTopCut() ); 875 882 if (dso) { 883 params.push_back( dso->GetSemiAxisMax(0) ); 884 params.push_back( dso->GetSemiAxisMax(1) ); 885 params.push_back( dso->GetSemiAxisMax(2) ); 886 params.push_back( dso->GetZBottomCut() ); 887 params.push_back( dso->GetZTopCut() ); 888 } 876 889 } else if (solidType == "ELLIPTICAL_CONE") { 877 890 const G4EllipticalCone * elco = 878 891 dynamic_cast < const G4EllipticalCone * > (so); 879 params.push_back( elco-> GetSemiAxisX() ); 880 params.push_back( elco-> GetSemiAxisY() ); 881 params.push_back( elco-> GetZMax() ); 882 params.push_back( elco-> GetZTopCut() ); 883 892 if (elco) { 893 params.push_back( elco-> GetSemiAxisX() ); 894 params.push_back( elco-> GetSemiAxisY() ); 895 params.push_back( elco-> GetZMax() ); 896 params.push_back( elco-> GetZTopCut() ); 897 } 884 898 } else if (solidType == "HYPE") { 885 899 const G4Hype* hype = dynamic_cast < const G4Hype * > (so); 886 params.push_back( hype->GetInnerRadius()); 887 params.push_back( hype->GetOuterRadius()); 888 params.push_back( hype->GetInnerStereo()/deg); 889 params.push_back( hype->GetOuterStereo()/deg); 890 params.push_back( 2*hype->GetZHalfLength()); 891 900 if (hype) { 901 params.push_back( hype->GetInnerRadius()); 902 params.push_back( hype->GetOuterRadius()); 903 params.push_back( hype->GetInnerStereo()/deg); 904 params.push_back( hype->GetOuterStereo()/deg); 905 params.push_back( 2*hype->GetZHalfLength()); 906 } 892 907 // } else if( solidType == "TET" ) { 893 908 894 909 } else if( solidType == "TWISTEDBOX" ) { 895 910 const G4TwistedBox* tbox = dynamic_cast < const G4TwistedBox * > (so); 896 params.push_back( tbox->GetPhiTwist()/deg ); 897 params.push_back( tbox->GetXHalfLength() ); 898 params.push_back( tbox->GetYHalfLength() ); 899 params.push_back( tbox->GetZHalfLength() ); 900 911 if (tbox) { 912 params.push_back( tbox->GetPhiTwist()/deg ); 913 params.push_back( tbox->GetXHalfLength() ); 914 params.push_back( tbox->GetYHalfLength() ); 915 params.push_back( tbox->GetZHalfLength() ); 916 } 901 917 } else if( solidType == "TWISTEDTRAP" ) { 902 918 const G4TwistedTrap * ttrap = dynamic_cast < const G4TwistedTrap * > (so); 903 params.push_back( ttrap->GetPhiTwist()/deg ); 904 params.push_back( ttrap->GetZHalfLength() ); 905 params.push_back( ttrap->GetPolarAngleTheta()/deg ); 906 params.push_back( ttrap->GetAzimuthalAnglePhi()/deg ); 907 params.push_back( ttrap->GetY1HalfLength() ); 908 params.push_back( ttrap->GetX1HalfLength() ); 909 params.push_back( ttrap->GetX2HalfLength() ); 910 params.push_back( ttrap->GetY2HalfLength() ); 911 params.push_back( ttrap->GetX3HalfLength() ); 912 params.push_back( ttrap->GetX4HalfLength() ); 913 params.push_back( ttrap->GetTiltAngleAlpha()/deg ); 914 919 if (ttrap) { 920 params.push_back( ttrap->GetPhiTwist()/deg ); 921 params.push_back( ttrap->GetZHalfLength() ); 922 params.push_back( ttrap->GetPolarAngleTheta()/deg ); 923 params.push_back( ttrap->GetAzimuthalAnglePhi()/deg ); 924 params.push_back( ttrap->GetY1HalfLength() ); 925 params.push_back( ttrap->GetX1HalfLength() ); 926 params.push_back( ttrap->GetX2HalfLength() ); 927 params.push_back( ttrap->GetY2HalfLength() ); 928 params.push_back( ttrap->GetX3HalfLength() ); 929 params.push_back( ttrap->GetX4HalfLength() ); 930 params.push_back( ttrap->GetTiltAngleAlpha()/deg ); 931 } 915 932 } else if( solidType == "TWISTEDTRD" ) { 916 933 const G4TwistedTrd * ttrd = dynamic_cast < const G4TwistedTrd * > (so); 917 params.push_back( ttrd->GetX1HalfLength()); 918 params.push_back( ttrd->GetX2HalfLength() ); 919 params.push_back( ttrd->GetY1HalfLength() ); 920 params.push_back( ttrd->GetY2HalfLength() ); 921 params.push_back( ttrd->GetZHalfLength() ); 922 params.push_back( ttrd->GetPhiTwist()/deg ); 923 934 if (ttrd) { 935 params.push_back( ttrd->GetX1HalfLength()); 936 params.push_back( ttrd->GetX2HalfLength() ); 937 params.push_back( ttrd->GetY1HalfLength() ); 938 params.push_back( ttrd->GetY2HalfLength() ); 939 params.push_back( ttrd->GetZHalfLength() ); 940 params.push_back( ttrd->GetPhiTwist()/deg ); 941 } 924 942 } else if( solidType == "TWISTEDTUBS" ) { 925 943 const G4TwistedTubs * ttub = dynamic_cast < const G4TwistedTubs * > (so); 926 params.push_back( ttub->GetInnerRadius() ); 927 params.push_back( ttub->GetOuterRadius() ); 928 params.push_back( ttub->GetZHalfLength() ); 929 params.push_back( ttub->GetDPhi()/deg ); 930 params.push_back( ttub->GetPhiTwist()/deg ); 931 944 if (ttub) { 945 params.push_back( ttub->GetInnerRadius() ); 946 params.push_back( ttub->GetOuterRadius() ); 947 params.push_back( ttub->GetZHalfLength() ); 948 params.push_back( ttub->GetDPhi()/deg ); 949 params.push_back( ttub->GetPhiTwist()/deg ); 950 } 932 951 } 933 952 else … … 945 964 G4String G4tgbGeometryDumper::DumpRotationMatrix( G4RotationMatrix* rotm ) 946 965 { 966 if (!rotm) { rotm = new G4RotationMatrix(); } 967 947 968 G4double de = MatDeterminant(rotm); 948 949 969 G4String rotName = LookForExistingRotation( rotm ); 950 970 if( rotName != "" ) { return rotName; } 951 952 if (!rotm) { rotm = new G4RotationMatrix(); }953 971 954 972 G4ThreeVector v(1.,1.,1.);
Note: See TracChangeset
for help on using the changeset viewer.