Message: Re: G4RandFlat::shoot(0,..) gives negative number in G4Cons::GetPointOnSurface() Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None Re: G4RandFlat::shoot(0,..) gives negative number in G4Cons::GetPointOnSurface()  

Forum: Run Management
Re: Question G4RandFlat::shoot(0,..) gives negative number in G4Cons::GetPointOnSurface() (Stefan E. Mueller)
Re: None Re: G4RandFlat::shoot(0,..) gives negative number in G4Cons::GetPointOnSurface() (Makoto Asai)
Date: 16 Mar, 2018
From: Gabriele Cosmo <Gabriele Cosmo>

Hi Stefan,

If the random number generator produces a negative number instead
of a number within the specified interval, it is clearly a problem of the
random engine in use, Rankux64 and has nothing to do with G4Cons itself.
In such case, I would recommend to file a bug report to CLHEP (cern.ch/clhep)
providing a clear test case (code) where this can be reproduced.

Cheers, Gabriele

++ btw, importing/exporting a geometry from/to GDML cannot transform a tube
in a cone. You likely have defined a tube as a cone in your own code!

--
Gabriele Cosmo - CERN EP/SFT 

> On 16 Mar 2018, at 19:04, Asai, Makoto <asai@slac.stanford.edu> wrote:
> 
> Dear Stefan,
> Thank you for your report.
> It seems to me an issue of G4Cons implementation so let me invite our
> Geant4 Geometry WG coordinator in CC for his comment.
> Kind regards,
> Makoto Asai
> 
>> On 3/16/18, 10:50 AM, "Stefan E. Mueller" <stefan.mueller@hzdr.de> wrote:
>> 
>> 
>> *** Discussion title: Run Management
>> 
>> Dear all,
>> 
>> I am just debugging a Geant4 application of a colleague of mine in which
>> we get warnings like this:
>> 
>> Checking overlaps for volume Tripple Cluster Casing ...
>> -------- WWWW ------- G4Exception-START -------- WWWW -------
>> *** G4Exception : GeomVol1002
>>     issued by : G4PVPlacement::CheckOverlaps()
>> Overlap with mother volume !
>>         Overlap is detected for volume Tripple Cluster Casing
>>         with its mother volume World
>>         at mother local point (-1.02845e+07,2.51897e-09,-2.91064e+08),
>> overlapping by at least: 291.061 km
>> NOTE: Reached maximum fixed number -1- of overlaps reports for this
>> volume !
>> *** This is just a warning message. ***
>> 
>> I tracked this done to the call to G4Cons::GetPointOnSurface() in
>> source/geometry/solids/CSG/src/G4Cons.cc, coming from
>> G4PVPlacement::CheckOverlaps(...).
>> 
>> The volume "Tripple Cluster Casing" is a simple cylinder with r=115mm and
>> z=706mm, but apparently since it is imported from a GDML-file it is
>> defined as 
>> a cone.
>> 
>> Now what I found is that the line 2166 in G4Cons.cc
>> 
>> chose  = G4RandFlat::shoot(0.,Aone+Atwo+Athree+Afour+2.*Afive);
>> 
>> sometimes yields (very large) negative numbers for the variable "chose",
>> which is not what I'd naively expect from this call to G4RandFlat::shoot.
>> 
>> In the next lines, the several cases for the different surfaces of the
>> cone on which the point should sit are sampled via
>> 
>> if( (chose >= 0.) && (chose < Aone) )
>> {
>> ...
>> } 
>> else if( (chose >= Aone) && (chose <= Aone + Atwo) )
>> {
>> ...
>> }
>> (more cases probed, but always "chose" > 0.)
>> ...
>> else
>> { 
>>   zRand  = G4RandFlat::shoot(-1.*fDz,fDz);
>>   rRand1 = 
>> G4RandFlat::shoot(fRmin2-((zRand-fDz)/(2.*fDz))*(fRmin1-fRmin2),
>> 
>> fRmax2-((zRand-fDz)/(2.*fDz))*(fRmax1-fRmax2));
>>   return G4ThreeVector (rRand1*std::cos(fSPhi+fDPhi),
>>                         rRand1*std::sin(fSPhi+fDPhi), zRand);
>> }
>> 
>> So indeed if "chose" is negative, one ends up with this last "else"-case,
>> in which (again) G4RandFlat::shoot(..) gives very negative numbers for
>> zRand and rRand1:
>> 
>> (gdb) p zRand
>> $44 = -291063511.72417974
>> (gdb) p rRand1
>> $45 = -10284491.597954744
>> 
>> and consequently the "surface"-point which is returned back to
>> G4PVPlacement::CheckOverlaps(..) has coordinates which are far off the
>> geometry:
>> 
>> (gdb) p point
>> $46 = {dx = -10284491.597954744, dy = 2.5189739432586253e-09,
>> dz = -291063511.72417974, static tolerance = 2.22045e-14}
>> 
>> And this triggers the above warning.
>> 
>> I tried to find out what G4RandFlat::shoot(..) is supposed to do and what
>> it means if it returns a negative value from a positive interval, but was
>> not succesful. Maybe somebody could shed some light on this problem?
>> 
>> I am using geant4.10.04p01 with gcc 7.2.0, compiled in "debug" mode and
>> with multithreading support enabled (but never used...). System is Debian
>> 4.14.13-1 (2018-01-14) x86_64 GNU/Linux (problem was also seen with on
>> other machines with geant4.10.04).
>> 
>> Random number engine is initialized like this:
>> 
>>       //choose the Random engine
>>       CLHEP::HepRandom::setTheEngine(new CLHEP::Ranlux64Engine);
>>       // get new randomseed at every start
>>       time_t systime = time(NULL);
>>       CLHEP::HepRandom::setTheSeed(systime);
>> 
>> Is this a legitimate way to do this? Maybe that is where the problem
>> comes from?
>> 
>> Cheers,
>> 
>> Stefan
>> 
>> -------------------------------------------------------------
>> Visit this GEANT4 at hypernews.slac.stanford.edu message (to reply or
>> unsubscribe) at: 
>> http://hypernews.slac.stanford.edu/HyperNews/geant4/get/runmanage/437.html
>> 
> 

 Add Message Add Message
to: "Re: G4RandFlat::shoot(0,..) gives negative number in G4Cons::GetPointOnSurface() "

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]