| Summary: | Don't scale in G4Polyhedra::Reset() | ||
|---|---|---|---|
| Product: | Geant4 | Reporter: | nanjo |
| Component: | geometry/solids | Assignee: | Gabriele Cosmo <Gabriele.Cosmo> |
| Status: | RESOLVED WONTFIX | ||
| Severity: | normal | ||
| Priority: | P2 | ||
| Version: | 8.0 | ||
| Hardware: | PC | ||
| OS: | Linux | ||
The suggested fix is under evaluation and will be eventually provided in a future release. Thanks. Indeed the specifications of G4Polyhedra::Reset() assume that this method is called
-after- that a proper structure for the 'original_parameters' is assigned to the polyhedra.
The new 'original_parameters' structure is not assumed to be scaled, since the scaling is
implicitely done inside Reset(), and this is consistent with the way the constructor itself
initialises the internal parameters...
Therefore, in your case the correct procedure would be:
1. Get the original_parameters with GetOriginalParameters();
2. Generate from them a new (not scaled) G4PolyhedraHistorical object including
the modifications you wish to include;
3. Assign it to your polyhedra with SetOriginalParameters() and then call Reset().
|
In G4Polyhedra::Reset(), the ReduciblePolygon is created from original_parameters, which was already scaled in the constructor. So rz->ScaleA at the line 493 is unnecessary. Could you delete the line? 460 G4bool G4Polyhedra::Reset() 479 // Rebuild polyhedra 480 // 481 G4ReduciblePolygon *rz = 482 new G4ReduciblePolygon( original_parameters->Rmin, 483 original_parameters->Rmax, 484 original_parameters->Z_values, 485 original_parameters->Num_z_planes ); 493 rz->ScaleA( 1/convertRad ); By the way, currently I reset a G4Polyhedra object correctly in the following way. 1. Get original_parameters with G4Polyhedra::GetOriginalParameters(). 2. Scale it by convertRad temporarlly. 3. Call G4Polyhedra::Reset(). 4. Scale back original_parameters by 1/convertRad. I'm affraid the fix (deletion of unnecessary ScaleA) may affect some users who did such treatment. Best regards, Hajime