Skip to content

Commit d995e08

Browse files
author
Richard T. Jones
committed
* add header files from the G4ROOT/source/geometry/divisions/include
source tree into G4.10.07.p03fixes to make sure that all instances of #include "G4VDivisionParameterisation.hh" pick up the modified version of that file. [rtj]
1 parent 964e259 commit d995e08

9 files changed

+1838
-0
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
//
2+
// ********************************************************************
3+
// * License and Disclaimer *
4+
// * *
5+
// * The Geant4 software is copyright of the Copyright Holders of *
6+
// * the Geant4 Collaboration. It is provided under the terms and *
7+
// * conditions of the Geant4 Software License, included in the file *
8+
// * LICENSE and available at http://cern.ch/geant4/license . These *
9+
// * include a list of copyright holders. *
10+
// * *
11+
// * Neither the authors of this software system, nor their employing *
12+
// * institutes,nor the agencies providing financial support for this *
13+
// * work make any representation or warranty, express or implied, *
14+
// * regarding this software system or assume any liability for its *
15+
// * use. Please see the license in the file LICENSE and URL above *
16+
// * for the full disclaimer and the limitation of liability. *
17+
// * *
18+
// * This code implementation is the result of the scientific and *
19+
// * technical work of the GEANT4 collaboration. *
20+
// * By using, copying, modifying or distributing the software (or *
21+
// * any work based on the software) you agree to acknowledge its *
22+
// * use in resulting scientific publications, and indicate your *
23+
// * acceptance of all terms of the Geant4 Software license. *
24+
// ********************************************************************
25+
//
26+
// G4PVDivision
27+
//
28+
// Class description:
29+
//
30+
// Represents many touchable detector elements differing only in their
31+
// positioning. The elements' positions are calculated by means of a simple
32+
// linear formula.
33+
//
34+
// G4PVDivision(const G4String& pName,
35+
// G4LogicalVolume* pLogical,
36+
// G4LogicalVolume* pMother,
37+
// const EAxis pAxis,
38+
// const G4int nReplicas,
39+
// const G4double width,
40+
// const G4double offset=0)
41+
//
42+
// Division may occur along:
43+
//
44+
// o Cartesian axes (kXAxis,kYAxis,kZAxis)
45+
//
46+
// The divisions, of specified width have coordinates of
47+
// form (-width*(nReplicas-1)*0.5+n*width,0,0) where n=0.. nReplicas-1
48+
// for the case of kXAxis, and are unrotated.
49+
//
50+
// o Radial axis (cylindrical polar) (kRho)
51+
//
52+
// The divisions are cons/tubs sections, centred on the origin
53+
// and are unrotated.
54+
// They have radii of width*n+offset to width*(n+1)+offset
55+
// where n=0..nReplicas-1
56+
//
57+
// o Phi axis (cylindrical polar) (kPhi)
58+
// The divisions are `phi sections' or wedges, and of cons/tubs form
59+
// They have phi of offset+n*width to offset+(n+1)*width where
60+
// n=0..nReplicas-1
61+
62+
// 09.05.01 - P.Arce, Initial version
63+
// ----------------------------------------------------------------------
64+
#ifndef G4PVDIVISION_HH
65+
#define G4PVDIVISION_HH
66+
67+
#include "geomdefs.hh"
68+
#include "G4PVReplica.hh"
69+
#include "G4VDivisionParameterisation.hh"
70+
71+
class G4LogicalVolume;
72+
class G4VSolid;
73+
74+
class G4PVDivision : public G4PVReplica
75+
{
76+
public: // with description
77+
78+
G4PVDivision(const G4String& pName,
79+
G4LogicalVolume* pLogical,
80+
G4LogicalVolume* pMother,
81+
const EAxis pAxis,
82+
const G4int nReplicas,
83+
const G4double width,
84+
const G4double offset );
85+
// Constructor with number of divisions and width
86+
87+
G4PVDivision(const G4String& pName,
88+
G4LogicalVolume* pLogical,
89+
G4LogicalVolume* pMotherLogical,
90+
const EAxis pAxis,
91+
const G4int nReplicas,
92+
const G4double offset );
93+
// Constructor with number of divisions
94+
95+
G4PVDivision(const G4String& pName,
96+
G4LogicalVolume* pLogical,
97+
G4LogicalVolume* pMotherLogical,
98+
const EAxis pAxis,
99+
const G4double width,
100+
const G4double offset );
101+
// Constructor with width
102+
103+
G4PVDivision(const G4String& pName,
104+
G4LogicalVolume* pLogical,
105+
G4VPhysicalVolume* pMother,
106+
const EAxis pAxis,
107+
const G4int nReplicas,
108+
const G4double width,
109+
const G4double offset);
110+
// Constructor in mother physical volume (same as first constructor)
111+
112+
virtual ~G4PVDivision();
113+
114+
G4PVDivision(const G4PVDivision&) = delete;
115+
G4PVDivision& operator=(const G4PVDivision&) = delete;
116+
117+
virtual G4bool IsMany() const;
118+
virtual G4bool IsReplicated() const;
119+
virtual G4int GetMultiplicity() const;
120+
virtual G4VPVParameterisation* GetParameterisation() const;
121+
virtual void GetReplicationData( EAxis& axis,
122+
G4int& nReplicas,
123+
G4double& width,
124+
G4double& offset,
125+
G4bool& consuming ) const;
126+
EAxis GetDivisionAxis() const;
127+
G4bool IsParameterised() const;
128+
129+
virtual EVolume VolumeType() const;
130+
// Characterise the type of volume - normal/replicated/parameterised.
131+
132+
G4bool IsRegularStructure() const;
133+
G4int GetRegularStructureId() const;
134+
// Methods to identify volume that can have revised 'regular' navigation.
135+
// Currently divisions do not qualify for this.
136+
137+
private:
138+
139+
void CheckAndSetParameters( const EAxis pAxis,
140+
const G4int nDivs,
141+
const G4double width,
142+
const G4double offset,
143+
DivisionType divType,
144+
const G4LogicalVolume* pMotherLogical );
145+
146+
void SetParameterisation( G4LogicalVolume* motherLogical,
147+
const EAxis pAxis,
148+
const G4int nReplicas,
149+
const G4double width,
150+
const G4double offset,
151+
DivisionType divType );
152+
void ErrorInAxis( EAxis axis, G4VSolid* solid );
153+
154+
protected:
155+
156+
EAxis faxis; // axis of optimisation
157+
EAxis fdivAxis; // axis of division
158+
G4int fnReplicas = 0;
159+
G4double fwidth = 0.0, foffset = 0.0;
160+
G4VDivisionParameterisation* fparam = nullptr;
161+
};
162+
163+
#endif
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
//
2+
// ********************************************************************
3+
// * License and Disclaimer *
4+
// * *
5+
// * The Geant4 software is copyright of the Copyright Holders of *
6+
// * the Geant4 Collaboration. It is provided under the terms and *
7+
// * conditions of the Geant4 Software License, included in the file *
8+
// * LICENSE and available at http://cern.ch/geant4/license . These *
9+
// * include a list of copyright holders. *
10+
// * *
11+
// * Neither the authors of this software system, nor their employing *
12+
// * institutes,nor the agencies providing financial support for this *
13+
// * work make any representation or warranty, express or implied, *
14+
// * regarding this software system or assume any liability for its *
15+
// * use. Please see the license in the file LICENSE and URL above *
16+
// * for the full disclaimer and the limitation of liability. *
17+
// * *
18+
// * This code implementation is the result of the scientific and *
19+
// * technical work of the GEANT4 collaboration. *
20+
// * By using, copying, modifying or distributing the software (or *
21+
// * any work based on the software) you agree to acknowledge its *
22+
// * use in resulting scientific publications, and indicate your *
23+
// * acceptance of all terms of the Geant4 Software license. *
24+
// ********************************************************************
25+
//
26+
// G4ParameterisationBox[X/Y/Z]
27+
//
28+
// Class description:
29+
//
30+
// These classes represent the parameterised positioning equivalent to
31+
// dividing a G4Box along one of each axis X, Y, Z.
32+
33+
// 09.05.01 - P.Arce, Initial version
34+
// 08.04.04 - I.Hrivnacova, Implemented reflection
35+
// --------------------------------------------------------------------
36+
#ifndef G4PARAMETERISATIONBOX_HH
37+
#define G4PARAMETERISATIONBOX_HH 1
38+
39+
#include "G4VDivisionParameterisation.hh"
40+
41+
class G4VSolid;
42+
class G4VPhysicalVolume;
43+
44+
// Dummy declarations to get rid of warnings ...
45+
//
46+
class G4Cons;
47+
class G4Trd;
48+
class G4Sphere;
49+
class G4Orb;
50+
class G4Ellipsoid;
51+
class G4Torus;
52+
class G4Para;
53+
class G4Hype;
54+
class G4Tubs;
55+
class G4Polycone;
56+
class G4Polyhedra;
57+
58+
class G4VParameterisationBox : public G4VDivisionParameterisation
59+
{
60+
public: // with description
61+
62+
G4VParameterisationBox( EAxis axis, G4int nCopies,
63+
G4double offset, G4double step,
64+
G4VSolid* msolid, DivisionType divType );
65+
66+
virtual ~G4VParameterisationBox();
67+
};
68+
69+
class G4ParameterisationBoxX : public G4VParameterisationBox
70+
{
71+
public: // with description
72+
73+
G4ParameterisationBoxX( EAxis axis, G4int nCopies,
74+
G4double offset, G4double step,
75+
G4VSolid* msolid, DivisionType divType );
76+
~G4ParameterisationBoxX();
77+
78+
G4double GetMaxParameter() const;
79+
80+
void ComputeTransformation( const G4int copyNo,
81+
G4VPhysicalVolume* physVol ) const;
82+
void ComputeDimensions(G4Box& box, const G4int copyNo,
83+
const G4VPhysicalVolume* physVol) const;
84+
85+
private: // Dummy declarations to get rid of warnings ...
86+
87+
void ComputeDimensions (G4Cons&,const G4int,
88+
const G4VPhysicalVolume*) const {}
89+
void ComputeDimensions (G4Trd&,const G4int,
90+
const G4VPhysicalVolume*) const {}
91+
void ComputeDimensions (G4Sphere&,const G4int,
92+
const G4VPhysicalVolume*) const {}
93+
void ComputeDimensions (G4Orb&,const G4int,
94+
const G4VPhysicalVolume*) const {}
95+
void ComputeDimensions (G4Ellipsoid&,const G4int,
96+
const G4VPhysicalVolume*) const {}
97+
void ComputeDimensions (G4Torus&,const G4int,
98+
const G4VPhysicalVolume*) const {}
99+
void ComputeDimensions (G4Para&,const G4int,
100+
const G4VPhysicalVolume*) const {}
101+
void ComputeDimensions (G4Trap&,const G4int,
102+
const G4VPhysicalVolume*) const {}
103+
void ComputeDimensions (G4Hype&,const G4int,
104+
const G4VPhysicalVolume*) const {}
105+
void ComputeDimensions (G4Tubs&,const G4int,
106+
const G4VPhysicalVolume*) const {}
107+
void ComputeDimensions (G4Polycone&,const G4int,
108+
const G4VPhysicalVolume*) const {}
109+
void ComputeDimensions (G4Polyhedra&,const G4int,
110+
const G4VPhysicalVolume*) const {}
111+
};
112+
113+
class G4ParameterisationBoxY : public G4VParameterisationBox
114+
{
115+
public: // with description
116+
117+
G4ParameterisationBoxY( EAxis axis, G4int nCopies,
118+
G4double offset, G4double step,
119+
G4VSolid* msolid, DivisionType divType );
120+
~G4ParameterisationBoxY();
121+
122+
G4double GetMaxParameter() const;
123+
124+
void ComputeTransformation( const G4int copyNo,
125+
G4VPhysicalVolume* physVol ) const;
126+
127+
void ComputeDimensions(G4Box& box, const G4int copyNo,
128+
const G4VPhysicalVolume* physVol) const;
129+
130+
private: // Dummy declarations to get rid of warnings ...
131+
132+
void ComputeDimensions (G4Cons&,const G4int,
133+
const G4VPhysicalVolume*) const {}
134+
void ComputeDimensions (G4Trd&,const G4int,
135+
const G4VPhysicalVolume*) const {}
136+
void ComputeDimensions (G4Sphere&,const G4int,
137+
const G4VPhysicalVolume*) const {}
138+
void ComputeDimensions (G4Orb&,const G4int,
139+
const G4VPhysicalVolume*) const {}
140+
void ComputeDimensions (G4Ellipsoid&,const G4int,
141+
const G4VPhysicalVolume*) const {}
142+
void ComputeDimensions (G4Torus&,const G4int,
143+
const G4VPhysicalVolume*) const {}
144+
void ComputeDimensions (G4Para&,const G4int,
145+
const G4VPhysicalVolume*) const {}
146+
void ComputeDimensions (G4Trap&,const G4int,
147+
const G4VPhysicalVolume*) const {}
148+
void ComputeDimensions (G4Hype&,const G4int,
149+
const G4VPhysicalVolume*) const {}
150+
void ComputeDimensions (G4Tubs&,const G4int,
151+
const G4VPhysicalVolume*) const {}
152+
void ComputeDimensions (G4Polycone&,const G4int,
153+
const G4VPhysicalVolume*) const {}
154+
void ComputeDimensions (G4Polyhedra&,const G4int,
155+
const G4VPhysicalVolume*) const {}
156+
};
157+
158+
class G4ParameterisationBoxZ : public G4VParameterisationBox
159+
{
160+
public: // with description
161+
162+
G4ParameterisationBoxZ( EAxis axis, G4int nCopies,
163+
G4double offset, G4double step,
164+
G4VSolid* msolid, DivisionType divType );
165+
~G4ParameterisationBoxZ();
166+
167+
G4double GetMaxParameter() const;
168+
169+
void ComputeTransformation( const G4int copyNo,
170+
G4VPhysicalVolume* physVol ) const;
171+
void ComputeDimensions(G4Box& box, const G4int copyNo,
172+
const G4VPhysicalVolume* physVol) const;
173+
174+
private: // Dummy declarations to get rid of warnings ...
175+
176+
void ComputeDimensions (G4Cons&,const G4int,
177+
const G4VPhysicalVolume*) const {}
178+
void ComputeDimensions (G4Trd&,const G4int,
179+
const G4VPhysicalVolume*) const {}
180+
void ComputeDimensions (G4Sphere&,const G4int,
181+
const G4VPhysicalVolume*) const {}
182+
void ComputeDimensions (G4Orb&,const G4int,
183+
const G4VPhysicalVolume*) const {}
184+
void ComputeDimensions (G4Ellipsoid&,const G4int,
185+
const G4VPhysicalVolume*) const {}
186+
void ComputeDimensions (G4Torus&,const G4int,
187+
const G4VPhysicalVolume*) const {}
188+
void ComputeDimensions (G4Para&,const G4int,
189+
const G4VPhysicalVolume*) const {}
190+
void ComputeDimensions (G4Trap&,const G4int,
191+
const G4VPhysicalVolume*) const {}
192+
void ComputeDimensions (G4Hype&,const G4int,
193+
const G4VPhysicalVolume*) const {}
194+
void ComputeDimensions (G4Tubs&,const G4int,
195+
const G4VPhysicalVolume*) const {}
196+
void ComputeDimensions (G4Polycone&,const G4int,
197+
const G4VPhysicalVolume*) const {}
198+
void ComputeDimensions (G4Polyhedra&,const G4int,
199+
const G4VPhysicalVolume*) const {}
200+
};
201+
202+
#endif

0 commit comments

Comments
 (0)