Hi Mohammad,
You can, of course, get the seed from gRandom
and pass it to Geant4 (even in a more simpler
way, as you can access directly the CLHEP random
generator via its static methods),
but I wanted to avoid going through gRandom,
as it has nothing to do with Geant4 random
number generator.
And at the end, what we try to do is just to pass a seed value, that's why, as a more appropriate interface, it seems to me to interface just this action, without going through a global object.
Regards,
Ivana
Al-Turany, Mohammad Dr. wrote:
> Hallo,
>
> I think I found avery simple to do that without changing anything!
> Simply in the g4Config.C I added the following three lines:
>
> Text_t buffer[50];
> sprintf(buffer,"/random/SetSeeds %i %i "
> ,gRandom->GetSeed(), gRandom->GetSeed());
> geant4->ProcessGeantCommand(buffer);
>
> with this our users set the seed as usual using gRandom and this is now
> seeted for G4. For those who want to set more complicated things they
> have to do it in all cases in the g4config.in or where ever they like.
>
> regards
>
> Mohammad
>
> -----Original Message-----
> From: Ivana Hrivnacova [mailto:Ivana.Hrivnacova_at_cern.ch]
> Sent: Tue 10/6/2009 10:41 AM
> To: Rene Brun
> Cc: Al-Turany, Mohammad Dr.; vmc_at_root.cern.ch
> Subject: Re: [VMC] Random Seeds in G4_VMC
>
>
> I agree, that it is not a general solution,
> but it is working fine with both Root and CLHEP
> default generators (maybe with replacement of Long_t
> to UInt_t, as TRandom generators get this type
> in setSeed), while the current implementation in VMC
> does not work.
> A clean solution would be to remove
> virtual void SetRandom(TRandom* random);
> from VMC, as TRandom is not common to all MCs,
> and let user to access each random number via
> its way (gRandom in case of G3, Fluka and
> G4 commands in case of G4).
>
> Ivana
>
> Rene Brun wrote:
> > This is not good because random number classes may have a seed that is
> > an int, a longlong or an array.
> >
> > Rene
> >
> > Ivana Hrivnacova wrote:
> >>
> >> I think much simpler, and more transparent to the user
> >> would be to change the current TVirtualMC function:
> >> virtual void SetRandom(TRandom* random);
> >> to
> >> virtual void SetRandomSeed(Long_t seed);
> >>
> >> Ivana
> >>
> >>
> >> Mohammad Al-Turany wrote:
> >>> Hallo Ivana,
> >>>
> >>> Ok, I agree it is more complicated than what I expected! But all what
> >>> I want
> >>> is to be able to set the seed myself in a consistence way, without
> >>> really
> >>> caring which random generator is running behind.
> >>>
> >>> So what about implementing something in the init of VMC which simply
> >>> put the
> >>> gRandom::GetSeed() in an ASCII (current.rnd) file that is read by
> >>> default in
> >>> the g4config.in with
> >>>
> >>> /random/resetEngineFrom current.rnd
> >>>
> >>> And for the advanced users who would like to restore or re-process
> a run
> >>> they have to change the config.in. But at least for the normal use
> >>> one has
> >>> the control over the random seed whatever generator is setting behind,
> >>> because originally we had the problem with G4_VMC that it always uses
> >>> the
> >>> same seed and that is way we need to control it specially on the grid
> >>> and
> >>> batch farms.
> >>>
> >>>
> >>> Regards
> >>>
> >>> Mohammad
> >>>
> >>>
> >>> On 10/5/09 11:33 AM, "Ivana Hrivnacova" <Ivana.Hrivnacova_at_cern.ch>
> >>> wrote:
> >>>
> >>>> Hi Mohammad,
> >>>>
> >>>> Geant4 does not use the random number generator from Root,
> >>>> but from CLHEP, that's why I considered it as misleading
> >>>> to implement setting its seed via gRandom.
> >>>>
> >>>> The reason is that this way would not allow you
> >>>> to re-process a run or event from a previous simulation
> >>>> by storing gRandom status and restoring it in a new
> >>>> simulation, as gRandom status has nothing to do with
> >>>> the random generator used by Geant4.
> >>>>
> >>>> The command
> >>>> /random/resetEngineFrom current.rnd
> >>>> should be used together with a file stored via Geant4
> >>>> commands
> >>>> /random/saveThisRun
> >>>> /random/saveThisEvent
> >>>> If you try the command and look at the file, you
> >>>> will see that there is more data than just one long number.
> >>>>
> >>>> You can use gRandom->GetSeed() (=mySeed) number for setting
> >>>> initial seed:
> >>>> /random/setSeeds mySeed mySeed
> >>>> (G4 setSeeds requires at least two long values)
> >>>> but a question is what it will be good for.
> >>>>
> >>>> A possible solution to handle the different random generators
> >>>> in a common way via VMC could be to interface the appropriate
> >>>> functions for storing/restoring the generator status.
> >>>>
> >>>> Best regards,
> >>>>
> >>>> Ivana
> >>>>
> >>>>
> >>>> Mohammad Al-Turany wrote:
> >>>>> Hallo,
> >>>>>
> >>>>> As you all know to set the Random seed in G3_VMC it is enough to use
> >>>>> gRandom->SetSeed(seed), in G4_VMC this does not work, and what I
> >>>>> do to
> >>>>> set the seed is to go via the g4config.in macro and put there:
> >>>>>
> >>>>> /random/resetEngineFrom seed.rnd
> >>>>>
> >>>>> Where seed.rnd is an ASCII file containing my seeds.
> >>>>>
> >>>>> Is it possible to unify this behavior and to pass the seed from
> >>>>> gRandom
> >>>>> to the G4_VMC in the initialization? Or do you have any other
> >>>>> suggestion?
> >>>>>
> >>>>> Regards
> >>>>>
> >>>>> Mohammad
> >>>>>
> >>>
> >>
> >
>
> --
> ==============================================================
> e-mail: Ivana.Hrivnacova_at_cern.ch
> address: Institut Physique Nucleaire, 91406 Orsay, France
> phone: (33) 01 69 15 65 94
> ==============================================================
>
-- ============================================================== e-mail: Ivana.Hrivnacova_at_cern.ch address: Institut Physique Nucleaire, 91406 Orsay, France phone: (33) 01 69 15 65 94 ==============================================================Received on Thu Oct 08 2009 - 17:26:24 CEST
This archive was generated by hypermail 2.2.0 : Thu Oct 08 2009 - 23:25:01 CEST