00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 #ifndef G4PVDIVISION_HH
00070 #define G4PVDIVISION_HH
00071
00072 #include "geomdefs.hh"
00073 #include "G4VPhysicalVolume.hh"
00074 #include "G4VDivisionParameterisation.hh"
00075
00076 class G4LogicalVolume;
00077 class G4VSolid;
00078
00079 class G4PVDivision : public G4VPhysicalVolume
00080 {
00081 public:
00082
00083 G4PVDivision(const G4String& pName,
00084 G4LogicalVolume* pLogical,
00085 G4LogicalVolume* pMother,
00086 const EAxis pAxis,
00087 const G4int nReplicas,
00088 const G4double width,
00089 const G4double offset );
00090
00091
00092 G4PVDivision(const G4String& pName,
00093 G4LogicalVolume* pLogical,
00094 G4LogicalVolume* pMotherLogical,
00095 const EAxis pAxis,
00096 const G4int nReplicas,
00097 const G4double offset );
00098
00099
00100 G4PVDivision(const G4String& pName,
00101 G4LogicalVolume* pLogical,
00102 G4LogicalVolume* pMotherLogical,
00103 const EAxis pAxis,
00104 const G4double width,
00105 const G4double offset );
00106
00107
00108 public:
00109
00110 G4PVDivision(const G4String& pName,
00111 G4LogicalVolume* pLogical,
00112 G4VPhysicalVolume* pMother,
00113 const EAxis pAxis,
00114 const G4int nReplicas,
00115 const G4double width,
00116 const G4double offset);
00117
00118
00119 public:
00120
00121 virtual ~G4PVDivision();
00122
00123 virtual G4bool IsMany() const;
00124 virtual G4int GetCopyNo() const;
00125 virtual void SetCopyNo(G4int CopyNo);
00126 virtual G4bool IsReplicated() const;
00127 virtual G4VPVParameterisation* GetParameterisation() const;
00128 virtual void GetReplicationData( EAxis& axis,
00129 G4int& nReplicas,
00130 G4double& width,
00131 G4double& offset,
00132 G4bool& consuming ) const;
00133 EAxis GetDivisionAxis() const;
00134 G4bool IsParameterised() const;
00135
00136 public:
00137
00138 G4bool IsRegularStructure() const;
00139 G4int GetRegularStructureId() const;
00140
00141
00142
00143 private:
00144
00145 void CheckAndSetParameters( const EAxis pAxis,
00146 const G4int nDivs,
00147 const G4double width,
00148 const G4double offset,
00149 DivisionType divType,
00150 const G4LogicalVolume* pMotherLogical );
00151
00152 G4PVDivision(const G4PVDivision&);
00153 const G4PVDivision& operator=(const G4PVDivision&);
00154
00155 void SetParameterisation( G4LogicalVolume* motherLogical,
00156 const EAxis pAxis,
00157 const G4int nReplicas,
00158 const G4double width,
00159 const G4double offset,
00160 DivisionType divType );
00161 void ErrorInAxis( EAxis axis, G4VSolid* solid );
00162
00163 protected:
00164
00165 EAxis faxis;
00166 EAxis fdivAxis;
00167 G4int fnReplicas;
00168 G4double fwidth,foffset;
00169 G4int fcopyNo;
00170 G4VDivisionParameterisation *fparam;
00171 };
00172
00173 #endif