Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParameterisationPolycone.cc
Go to the documentation of this file.
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//
27// $Id$
28//
29// class G4ParameterisationPolycone Implementation file
30//
31// 26.05.03 - P.Arce, Initial version
32// 08.04.04 - I.Hrivnacova, Implemented reflection
33//---------------------------------------------------------------------
34
36
37#include <iomanip>
38#include "G4ThreeVector.hh"
39#include "G4RotationMatrix.hh"
40#include "G4VPhysicalVolume.hh"
41#include "G4LogicalVolume.hh"
42#include "G4ReflectedSolid.hh"
43
44//-----------------------------------------------------------------------
47 G4double offset, G4VSolid* msolid,
48 DivisionType divType )
49 : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid )
50{
51 G4Polycone* msol = (G4Polycone*)(msolid);
52 if ((msolid->GetEntityType() != "G4ReflectedSolid") && (msol->IsGeneric()))
53 {
54 std::ostringstream message;
55 message << "Generic construct for G4Polycone NOT supported." << G4endl
56 << "Sorry! Solid: " << msol->GetName() << ".";
57 G4Exception("G4VParameterisationPolycone::G4VParameterisationPolycone()",
58 "GeomDiv0001", FatalException, message);
59 }
60 if (msolid->GetEntityType() == "G4ReflectedSolid")
61 {
62 // Get constituent solid
63 G4VSolid* mConstituentSolid
64 = ((G4ReflectedSolid*)msolid)->GetConstituentMovedSolid();
65 msol = (G4Polycone*)(mConstituentSolid);
66
67 // Get parameters
68 G4int nofZplanes = msol->GetOriginalParameters()->Num_z_planes;
69 G4double* zValues = msol->GetOriginalParameters()->Z_values;
70 G4double* rminValues = msol->GetOriginalParameters()->Rmin;
71 G4double* rmaxValues = msol->GetOriginalParameters()->Rmax;
72
73 // Invert z values
74 G4double* zValuesRefl = new double[nofZplanes];
75 for (G4int i=0; i<nofZplanes; i++) zValuesRefl[i] = - zValues[i];
76
77 G4Polycone* newSolid
78 = new G4Polycone(msol->GetName(),
79 msol->GetStartPhi(),
80 msol->GetEndPhi() - msol->GetStartPhi(),
81 nofZplanes, zValuesRefl, rminValues, rmaxValues);
82
83 delete [] zValuesRefl;
84
85 msol = newSolid;
86 fmotherSolid = newSolid;
87 fReflectedSolid = true;
88 fDeleteSolid = true;
89 }
90}
91
92//---------------------------------------------------------------------
94{
95}
96
97//---------------------------------------------------------------------
100 G4double width, G4double offset,
101 G4VSolid* msolid, DivisionType divType )
102 : G4VParameterisationPolycone( axis, nDiv, width, offset, msolid, divType )
103{
105 SetType( "DivisionPolyconeRho" );
106
108 G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters();
109
110 if( divType == DivWIDTH )
111 {
112 fnDiv = CalculateNDiv( origparamMother->Rmax[0]
113 - origparamMother->Rmin[0], width, offset );
114 }
115 else if( divType == DivNDIV )
116 {
117 fwidth = CalculateWidth( origparamMother->Rmax[0]
118 - origparamMother->Rmin[0], nDiv, offset );
119 }
120
121#ifdef G4DIVDEBUG
122 if( verbose >= -1 )
123 {
124 G4cout << " G4ParameterisationPolyconeRho - # divisions " << fnDiv
125 << " = " << nDiv << G4endl
126 << " Offset " << foffset << " = " << offset << G4endl
127 << " Width " << fwidth << " = " << width << G4endl;
128 }
129#endif
130}
131
132//---------------------------------------------------------------------
134{
135}
136
137//---------------------------------------------------------------------
139{
141
143
145 {
146 std::ostringstream message;
147 message << "In solid " << msol->GetName() << G4endl
148 << "Division along R will be done with a width "
149 << "different for each solid section." << G4endl
150 << "WIDTH will not be used !";
151 G4Exception("G4VParameterisationPolycone::CheckParametersValidity()",
152 "GeomDiv1001", JustWarning, message);
153 }
154 if( foffset != 0. )
155 {
156 std::ostringstream message;
157 message << "In solid " << msol->GetName() << G4endl
158 << "Division along R will be done with a width "
159 << "different for each solid section." << G4endl
160 << "OFFSET will not be used !";
161 G4Exception("G4VParameterisationPolycone::CheckParametersValidity()",
162 "GeomDiv1001", JustWarning, message);
163 }
164}
165
166//------------------------------------------------------------------------
168{
170 G4PolyconeHistorical* original_pars = msol->GetOriginalParameters();
171 return original_pars->Rmax[0] - original_pars->Rmin[0];
172}
173
174
175//---------------------------------------------------------------------
176void
178ComputeTransformation( const G4int, G4VPhysicalVolume* physVol ) const
179{
180 //----- translation
181 G4ThreeVector origin(0.,0.,0.);
182 //----- set translation
183 physVol->SetTranslation( origin );
184
185 //----- calculate rotation matrix: unit
186
187#ifdef G4DIVDEBUG
188 if( verbose >= 2 )
189 {
190 G4cout << " G4ParameterisationPolyconeRho " << G4endl
191 << " foffset: " << foffset
192 << " - fwidth: " << fwidth << G4endl;
193 }
194#endif
195
196 ChangeRotMatrix( physVol );
197
198#ifdef G4DIVDEBUG
199 if( verbose >= 2 )
200 {
201 G4cout << std::setprecision(8) << " G4ParameterisationPolyconeRho "
202 << G4endl
203 << " Position: " << origin/mm
204 << " - Width: " << fwidth/deg
205 << " - Axis: " << faxis << G4endl;
206 }
207#endif
208}
209
210//---------------------------------------------------------------------
211void
213ComputeDimensions( G4Polycone& pcone, const G4int copyNo,
214 const G4VPhysicalVolume* ) const
215{
217
218 G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters();
219 G4PolyconeHistorical origparam( *origparamMother );
220 G4int nZplanes = origparamMother->Num_z_planes;
221
222 G4double width = 0.;
223 for( G4int ii = 0; ii < nZplanes; ii++ )
224 {
225 width = CalculateWidth( origparamMother->Rmax[ii]
226 - origparamMother->Rmin[ii], fnDiv, foffset );
227 origparam.Rmin[ii] = origparamMother->Rmin[ii]+foffset+width*copyNo;
228 origparam.Rmax[ii] = origparamMother->Rmin[ii]+foffset+width*(copyNo+1);
229 }
230
231 pcone.SetOriginalParameters(&origparam); // copy values & transfer pointers
232 pcone.Reset(); // reset to new solid parameters
233
234#ifdef G4DIVDEBUG
235 if( verbose >= -2 )
236 {
237 G4cout << "G4ParameterisationPolyconeRho::ComputeDimensions()" << G4endl
238 << "-- Parametrised pcone copy-number: " << copyNo << G4endl;
239 pcone.DumpInfo();
240 }
241#endif
242}
243
244//---------------------------------------------------------------------
247 G4double width, G4double offset,
248 G4VSolid* msolid, DivisionType divType )
249 : G4VParameterisationPolycone( axis, nDiv, width, offset, msolid, divType )
250{
252 SetType( "DivisionPolyconePhi" );
253
255 G4double deltaPhi = msol->GetEndPhi() - msol->GetStartPhi();
256
257 if( divType == DivWIDTH )
258 {
259 fnDiv = CalculateNDiv( deltaPhi, width, offset );
260 }
261 else if( divType == DivNDIV )
262 {
263 fwidth = CalculateWidth( deltaPhi, nDiv, offset );
264 }
265
266#ifdef G4DIVDEBUG
267 if( verbose >= 1 )
268 {
269 G4cout << " G4ParameterisationPolyconePhi - # divisions " << fnDiv
270 << " = " << nDiv << G4endl
271 << " Offset " << foffset/deg << " = " << offset/deg << G4endl
272 << " Width " << fwidth/deg << " = " << width/deg << G4endl;
273 }
274#endif
275}
276
277//---------------------------------------------------------------------
279{
280}
281
282//------------------------------------------------------------------------
284{
286 return msol->GetEndPhi() - msol->GetStartPhi();
287}
288
289//---------------------------------------------------------------------
290void
292ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const
293{
294 //----- translation
295 G4ThreeVector origin(0.,0.,0.);
296 //----- set translation
297 physVol->SetTranslation( origin );
298
299 //----- calculate rotation matrix (so that all volumes point to the centre)
300 G4double posi = foffset + copyNo*fwidth;
301
302#ifdef G4DIVDEBUG
303 if( verbose >= 2 )
304 {
305 G4cout << " G4ParameterisationPolyconePhi - position: " << posi/deg
306 << G4endl
307 << " copyNo: " << copyNo << " - foffset: " << foffset/deg
308 << " - fwidth: " << fwidth/deg << G4endl;
309 }
310#endif
311
312 ChangeRotMatrix( physVol, -posi );
313
314#ifdef G4DIVDEBUG
315 if( verbose >= 2 )
316 {
317 G4cout << std::setprecision(8) << " G4ParameterisationPolyconePhi "
318 << copyNo << G4endl
319 << " Position: " << origin << " - Width: " << fwidth
320 << " - Axis: " << faxis << G4endl;
321 }
322#endif
323}
324
325//---------------------------------------------------------------------
326void
328ComputeDimensions( G4Polycone& pcone, const G4int,
329 const G4VPhysicalVolume* ) const
330{
332
333 G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters();
334 G4PolyconeHistorical origparam( *origparamMother );
335 origparam.Start_angle = origparamMother->Start_angle;
336 origparam.Opening_angle = fwidth;
337
338 pcone.SetOriginalParameters(&origparam); // copy values & transfer pointers
339 pcone.Reset(); // reset to new solid parameters
340
341#ifdef G4DIVDEBUG
342 if( verbose >= 2 )
343 {
344 G4cout << "G4ParameterisationPolyconePhi::ComputeDimensions():" << G4endl;
345 pcone.DumpInfo();
346 }
347#endif
348}
349
350//---------------------------------------------------------------------
353 G4double width, G4double offset,
354 G4VSolid* msolid, DivisionType divType)
355 : G4VParameterisationPolycone( axis, nDiv, width, offset, msolid, divType ),
356 fNSegment(0),
357 fOrigParamMother(((G4Polycone*)fmotherSolid)->GetOriginalParameters())
358{
359
361 SetType( "DivisionPolyconeZ" );
362
363 if( divType == DivWIDTH )
364 {
365 fnDiv =
366 CalculateNDiv( fOrigParamMother->Z_values[fOrigParamMother->Num_z_planes-1]
367 - fOrigParamMother->Z_values[0] , width, offset );
368 }
369 else if( divType == DivNDIV )
370 {
371 fwidth =
372 CalculateNDiv( fOrigParamMother->Z_values[fOrigParamMother->Num_z_planes-1]
373 - fOrigParamMother->Z_values[0] , nDiv, offset );
374 }
375
376#ifdef G4DIVDEBUG
377 if( verbose >= 1 )
378 {
379 G4cout << " G4ParameterisationPolyconeZ - # divisions " << fnDiv << " = "
380 << nDiv << G4endl
381 << " Offset " << foffset << " = " << offset << G4endl
382 << " Width " << fwidth << " = " << width << G4endl;
383 }
384#endif
385}
386
387//---------------------------------------------------------------------
389{
390}
391
392//------------------------------------------------------------------------
393G4double G4ParameterisationPolyconeZ::GetR(G4double z,
394 G4double z1, G4double r1,
395 G4double z2, G4double r2) const
396{
397 // Linear parameterisation:
398 // r = az + b
399 // a = (r1 - r2)/(z1-z2)
400 // b = r1 - a*z1
401
402 return (r1-r2)/(z1-z2)*z + ( r1 - (r1-r2)/(z1-z2)*z1 ) ;
403}
404
405//------------------------------------------------------------------------
406G4double G4ParameterisationPolyconeZ::GetRmin(G4double z, G4int nseg) const
407{
408// Get Rmin in the given z position for the given polycone segment
409
410 return GetR(z,
411 fOrigParamMother->Z_values[nseg],
412 fOrigParamMother->Rmin[nseg],
413 fOrigParamMother->Z_values[nseg+1],
414 fOrigParamMother->Rmin[nseg+1]);
415}
416
417//------------------------------------------------------------------------
418G4double G4ParameterisationPolyconeZ::GetRmax(G4double z, G4int nseg) const
419{
420// Get Rmax in the given z position for the given polycone segment
421
422 return GetR(z,
423 fOrigParamMother->Z_values[nseg],
424 fOrigParamMother->Rmax[nseg],
425 fOrigParamMother->Z_values[nseg+1],
426 fOrigParamMother->Rmax[nseg+1]);
427}
428
429//------------------------------------------------------------------------
431{
432 return std::abs (fOrigParamMother->Z_values[fOrigParamMother->Num_z_planes-1]
433 -fOrigParamMother->Z_values[0]);
434}
435
436//---------------------------------------------------------------------
438{
440
441 // Division will be following the mother polycone segments
442 if( fDivisionType == DivNDIV ) {
443 if( fnDiv > fOrigParamMother->Num_z_planes-1 ) {
444 std::ostringstream error;
445 error << "Configuration not supported." << G4endl
446 << "Division along Z will be done by splitting in the defined"
447 << G4endl
448 << "Z planes, i.e, the number of division would be: "
449 << fOrigParamMother->Num_z_planes-1
450 << ", instead of: " << fnDiv << " !";
451 G4Exception("G4ParameterisationPolyconeZ::CheckParametersValidity()",
452 "GeomDiv0001", FatalException, error);
453 }
454 }
455
456 // Division will be done within one polycone segment
457 // with applying given width and offset
459 // Check if divided region does not span over more
460 // than one z segment
461
462 G4int isegstart = -1; // number of the segment containing start position
463 G4int isegend = -1; // number of the segment containing end position
464
465 if ( ! fReflectedSolid ) {
466 // The start/end position of the divided region
467 G4double zstart
468 = fOrigParamMother->Z_values[0] + foffset;
469 G4double zend
470 = fOrigParamMother->Z_values[0] + foffset + fnDiv* fwidth;
471
472 G4int counter = 0;
473 while ( isegend < 0 && counter < fOrigParamMother->Num_z_planes-1 ) {
474 // first segment
475 if ( zstart >= fOrigParamMother->Z_values[counter] &&
476 zstart < fOrigParamMother->Z_values[counter+1] ) {
477 isegstart = counter;
478 }
479 // last segment
480 if ( zend > fOrigParamMother->Z_values[counter] &&
481 zend <= fOrigParamMother->Z_values[counter+1] ) {
482 isegend = counter;
483 }
484 ++counter;
485 }
486 }
487 else {
488 // The start/end position of the divided region
489 G4double zstart
490 = fOrigParamMother->Z_values[0] - foffset;
491 G4double zend
492 = fOrigParamMother->Z_values[0] - ( foffset + fnDiv* fwidth);
493
494 G4int counter = 0;
495 while ( isegend < 0 && counter < fOrigParamMother->Num_z_planes-1 ) {
496 // first segment
497 if ( zstart <= fOrigParamMother->Z_values[counter] &&
498 zstart > fOrigParamMother->Z_values[counter+1] ) {
499 isegstart = counter;
500 }
501 // last segment
502 if ( zend < fOrigParamMother->Z_values[counter] &&
503 zend >= fOrigParamMother->Z_values[counter+1] ) {
504 isegend = counter;
505 }
506 ++counter;
507 }
508 }
509
510
511 if ( isegstart != isegend ) {
512 std::ostringstream message;
513 message << "Condiguration not supported." << G4endl
514 << "Division with user defined width." << G4endl
515 << "Solid " << fmotherSolid->GetName() << G4endl
516 << "Divided region is not between two z planes.";
517 G4Exception("G4ParameterisationPolyconeZ::CheckParametersValidity()",
518 "GeomDiv0001", FatalException, message);
519 }
520
521 fNSegment = isegstart;
522 }
523}
524
525//---------------------------------------------------------------------
526void
528ComputeTransformation( const G4int copyNo, G4VPhysicalVolume* physVol) const
529{
530 if ( fDivisionType == DivNDIV ) {
531 // The position of the centre of copyNo-th mother polycone segment
532 G4double posi
533 = ( fOrigParamMother->Z_values[copyNo]
534 + fOrigParamMother->Z_values[copyNo+1])/2;
535 physVol->SetTranslation( G4ThreeVector(0, 0, posi) );
536 }
537
539 // The position of the centre of copyNo-th division
540 G4double posi = fOrigParamMother->Z_values[0];
541
542 if ( ! fReflectedSolid )
543 posi += foffset + (2*copyNo + 1) * fwidth/2.;
544 else
545 posi -= foffset + (2*copyNo + 1) * fwidth/2.;
546
547 physVol->SetTranslation( G4ThreeVector(0, 0, posi) );
548 }
549
550 //----- calculate rotation matrix: unit
551
552#ifdef G4DIVDEBUG
553 if( verbose >= 2 )
554 {
555 G4cout << " G4ParameterisationPolyconeZ - position: " << posi << G4endl
556 << " copyNo: " << copyNo << " - foffset: " << foffset/deg
557 << " - fwidth: " << fwidth/deg << G4endl;
558 }
559#endif
560
561 ChangeRotMatrix( physVol );
562
563#ifdef G4DIVDEBUG
564 if( verbose >= 2 )
565 {
566 G4cout << std::setprecision(8) << " G4ParameterisationPolyconeZ "
567 << copyNo << G4endl
568 << " Position: " << origin << " - Width: " << fwidth
569 << " - Axis: " << faxis << G4endl;
570 }
571#endif
572}
573
574//---------------------------------------------------------------------
575void
577ComputeDimensions( G4Polycone& pcone, const G4int copyNo,
578 const G4VPhysicalVolume* ) const
579{
580
581 // Define division solid
582 G4PolyconeHistorical origparam;
583 G4int nz = 2;
584 origparam.Num_z_planes = nz;
585 origparam.Start_angle = fOrigParamMother->Start_angle;
586 origparam.Opening_angle = fOrigParamMother->Opening_angle;
587
588 // Define division solid z sections
589 origparam.Z_values = new G4double[nz];
590 origparam.Rmin = new G4double[nz];
591 origparam.Rmax = new G4double[nz];
592
593 if ( fDivisionType == DivNDIV ) {
594 // The position of the centre of copyNo-th mother polycone segment
595 G4double posi = (fOrigParamMother->Z_values[copyNo]
596 + fOrigParamMother->Z_values[copyNo+1])/2;
597
598 origparam.Z_values[0] = fOrigParamMother->Z_values[copyNo] - posi;
599 origparam.Z_values[1] = fOrigParamMother->Z_values[copyNo+1] - posi;
600 origparam.Rmin[0] = fOrigParamMother->Rmin[copyNo];
601 origparam.Rmin[1] = fOrigParamMother->Rmin[copyNo+1];
602 origparam.Rmax[0] = fOrigParamMother->Rmax[copyNo];
603 origparam.Rmax[1] = fOrigParamMother->Rmax[copyNo+1];
604 }
605
607 if ( ! fReflectedSolid ) {
608 origparam.Z_values[0] = - fwidth/2.;
609 origparam.Z_values[1] = fwidth/2.;
610
611 // The position of the centre of copyNo-th division
612 G4double posi
613 = fOrigParamMother->Z_values[0] + foffset + (2*copyNo + 1) * fwidth/2.;
614
615 // The first and last z sides z values
616 G4double zstart = posi - fwidth/2.;
617 G4double zend = posi + fwidth/2.;
618 origparam.Rmin[0] = GetRmin(zstart, fNSegment);
619 origparam.Rmax[0] = GetRmax(zstart, fNSegment);
620 origparam.Rmin[1] = GetRmin(zend, fNSegment);
621 origparam.Rmax[1] = GetRmax(zend, fNSegment);
622 }
623 else {
624 origparam.Z_values[0] = fwidth/2.;
625 origparam.Z_values[1] = - fwidth/2.;
626
627 // The position of the centre of copyNo-th division
628 G4double posi
629 = fOrigParamMother->Z_values[0] - ( foffset + (2*copyNo + 1) * fwidth/2.);
630
631 // The first and last z sides z values
632 G4double zstart = posi + fwidth/2.;
633 G4double zend = posi - fwidth/2.;
634 origparam.Rmin[0] = GetRmin(zstart, fNSegment);
635 origparam.Rmax[0] = GetRmax(zstart, fNSegment);
636 origparam.Rmin[1] = GetRmin(zend, fNSegment);
637 origparam.Rmax[1] = GetRmax(zend, fNSegment);
638 }
639
640 // It can happen due to rounding errors
641 if ( origparam.Rmin[0] < 0.0 ) origparam.Rmin[0] = 0.0;
642 if ( origparam.Rmin[nz-1] < 0.0 ) origparam.Rmin[1] = 0.0;
643 }
644
645 pcone.SetOriginalParameters(&origparam); // copy values & transfer pointers
646 pcone.Reset(); // reset to new solid parameters
647
648#ifdef G4DIVDEBUG
649 if( verbose >= 2 )
650 {
651 G4cout << "G4ParameterisationPolyconeZ::ComputeDimensions()" << G4endl
652 << "-- Parametrised pcone copy-number: " << copyNo << G4endl;
653 pcone.DumpInfo();
654 }
655#endif
656}
@ JustWarning
@ FatalException
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
void ComputeDimensions(G4Polycone &pcone, const G4int copyNo, const G4VPhysicalVolume *physVol) const
G4ParameterisationPolyconePhi(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void ComputeDimensions(G4Polycone &pcone, const G4int copyNo, const G4VPhysicalVolume *physVol) const
G4ParameterisationPolyconeRho(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
G4ParameterisationPolyconeZ(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
void ComputeDimensions(G4Polycone &pcone, const G4int copyNo, const G4VPhysicalVolume *physVol) const
G4double Opening_angle
Definition: G4Polycone.hh:78
G4double * Z_values
Definition: G4Polycone.hh:80
G4double GetEndPhi() const
void SetOriginalParameters(G4PolyconeHistorical *pars)
G4double GetStartPhi() const
G4bool IsGeneric() const
G4PolyconeHistorical * GetOriginalParameters() const
G4bool Reset()
Definition: G4Polycone.cc:409
void ChangeRotMatrix(G4VPhysicalVolume *physVol, G4double rotZ=0.) const
void SetType(const G4String &type)
G4double CalculateWidth(G4double motherDim, G4int nDiv, G4double offset) const
G4int CalculateNDiv(G4double motherDim, G4double width, G4double offset) const
G4VParameterisationPolycone(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *msolid, DivisionType divType)
void SetTranslation(const G4ThreeVector &v)
G4String GetName() const
void DumpInfo() const
virtual G4GeometryType GetEntityType() const =0
EAxis
Definition: geomdefs.hh:54
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41