[neutron-mc] Neutron parameters and EXTEND
Aaron M. Percival
percival at physics.queensu.ca
Fri Mar 28 18:06:11 CET 2008
Hello again,
Excellent. Glad the source of the problem was found.
I would like to extend this ability one step further. What I would like to
do is somehow "pass" the x, y, z variables of interaction position with the
PowderN through a virtual_output component. I can immediately think of two
ways to do this:
1) Write x,y,z as a list in a file (much like the virtual_output output
file). Then when the virtual_input is used, add and EXTEND and make use of
the read_table-lib to read from the x,y,z data file and once again attach
these variables to each neutron.
This would only work if the virtual_input picks neutrons from the
virtual_output file sequentially. Moreover, the virtual_out must also store
the neutron data sequentially (but I think this is the case).
2) Append the x,y,z variables to each neutron stored by the virtual_out
(giving each line in the . Then read these as neutron states are read by
the virtual_input.
I would be inclined to say that option 1 might be the easiest, but it
requires that neutron state are store and the read sequentially. Option 2
would make the output file larger and might not be as easy to employ.
Any insight?
Aaron
On Fri, Mar 28, 2008 at 3:26 AM, Emmanuel FARHI <farhi at ill.fr> wrote:
> Hi Aaron,
>
> you are right, the intersection test is with the whole cylinder, and so
> does the SCATTERED flag. I may fix that today in the CVS
>
> E.
>
>
> > Hi Emmanuel,
> >
> > I used your suggestions; I hadn't realized that the x, y, z names
> referred
> > to local coordinates, which is exactly what I needed.
> >
> > Still, for some reason I am getting many more printf neutron x,y,z
> > parameters than are recorded in the detector. In a recent run I had 785
> > printf parameters and "monitor_N=202" output on similation end. I'm not
> > clear as to why this might be happening. It seems as though both
> > conditions
> > in the IF statement in the EXTEND of the detector should only allow
> printf
> > for neutrons that are scattered and intersect the detector. On second
> > thought, this might not be the case. I recall seeing "intersect" as a
> > flag
> > in the component definition for Monitor_nD. However, could it be
> possible
> > that SCATTERED is allowing any rays that intersect the entire
> cylindrical
> > shell of the detector (i.e. as if on theta: limits = [0, 360])? I
> changed
> > the limits to [10, 170] to see if this would change the results. This
> > worked! The number of neutrons intersected in the detector now matches
> > the
> > number give by the printf.
> >
> > So it appears that SCATTERED it TRUE when a neutron intersects any part
> of
> > the cylinder and not just the part defined by limits on theta.
> >
> > As a side note, the gauge volume that I am seeing looks strange.
> However,
> > it is arranged in such a way that might explain the problems I've been
> > having with divergences from the PowderN component. I won't be entirely
> > confident on this until we fix the above problem and see what the proper
> > gauge volume is.
> >
> > Here are the source, sample and detector components:
> >
> > COMPONENT source = Virtual_input(
> > file = file, type = "text", verbose = 0, repeat_count = repeat,
> > smooth = 1)
> > AT (0, 0, 0) RELATIVE origin
> > EXTEND
> > %{
> > flag=0;
> > %}
> >
> > COMPONENT sample = PowderN(
> > reflections = "Ni.laz", format = Lazy, d_phi = 8,
> > radius = 0.006, yheight = 0.06, pack = 1, sigma_abs = 0,
> > sigma_inc = 0, Delta_d = 0, frac = 0, tfrac = 0, DW = 0,
> > concentric = 0, barns = 1)
> > AT (0, 0, 0) RELATIVE sample_arm
> > EXTEND
> > %{
> > flag=0;
> > if(SCATTERED)
> > {
> > xp = x;
> > yp = y;
> > zp = z;
> > flag = 1;
> > }
> > %}
> >
> > COMPONENT monitor = Monitor_nD(
> > yheight = 0.133, xwidth = 2.794,
> > options = "banana, theta limits=[10, 170], bins = 32")
> > AT (0, 0, 0) RELATIVE sample_arm
> > ROTATED (0, 0, 0) RELATIVE origin
> > EXTEND
> > %{
> > if(flag==1 && SCATTERED)
> > {
> > printf("%g,%g,%g\n", xp,yp,zp);
> > }
> > %}
> >
> >
> > On Thu, Mar 27, 2008 at 5:00 PM, Emmanuel FARHI <farhi at ill.fr> wrote:
> >
> >> Hi Aaron,
> >>
> >> I can see a few comments to improve and understand the possible
> problems
> >> you face.
> >>
> >> 1- to extract the neutron stte parameters, you can not indeed refer
> >> explicitely to the 'x','y' and 'z' names as these are only defined in
> >> the
> >> TRACE of each component. However, they should also be defined in the
> >> EXTEND, and they are already in the local component coordinate frame.
> >>
> >> 2- if you want to extract coordinates from e.g. POS_A_CURRENT_COMP
> >> (which
> >> is a Coord structure), use the coords_get function (see Appendix at the
> >> end of the User Manual). the 'A' in the name indicates this is in the
> >> absolute coordinate frame. Better use the 'R' label,
> POS_R_CURRENT_COMP.
> >> The 'x' 'y' 'z' fields of the structure can not be accessed as the
> names
> >> xyz are redefined to point to the real name of the neutron coordinate
> >> which is e.g. 'mcnlx'.
> >>
> >> 3- I would rather write your code as follow.
> >> At the source level (or virtual output), make an EXTEND that sets the
> >> flag
> >> to 0. Suppose you have first a neutron that interacts with the PowderN.
> >> It
> >> sets the flag. But now, let's say a second neutron misses the sample.
> >> The
> >> extend block is NOT evaluated as the component is skipped (e.g. no
> >> intersection with volume), and the flag value is the one from the
> >> previous
> >> neutron. You use a wrong flag value if that neutron reaches the
> >> detector!
> >>
> >> Source=blah( ... )
> >> EXTEND %{
> >> flag=0;
> >> %}
> >>
> >> Then you can have you sample extension, and use directly the xyz
> values.
> >> COMPONENT sample = PowderN( ... ) AT (0, 0, 0) RELATIVE sample_arm
> >> EXTEND
> >> %{
> >> flag=0; // make sure we always define it when reaching sample
> >> if(SCATTERED) {
> >> xp = x; // local coords
> >> yp = y;
> >> zp = z;
> >> flag = 1;
> >> }
> >> %}
> >>
> >> Try these modifications, and tell me. Using global variables in EXTEND
> >> may
> >> get tricky as you are not sure to pass there. So, better make sure you
> >> control all variables, and this should be done at least at some
> position
> >> were all neutrons pass. There is a similar difficulty with the SPLIT
> >> keyword.
> >>
> >> Emmanuel.
> >>
> >>
> >> > Hi all,
> >> >
> >> > I've been working on a way to essentially visualize the gauge volume
> >> in
> >> a
> >> > sample. I'll give a brief summary of my instrument and then the
> >> problems
> >> > that I've found:
> >> >
> >> > It's a simple 2-axis instrument, with such components as: a
> >> > Source_Maxwell_3, a Monochromator_flat, a PowderN and a Monitor_nD.
> >> I've
> >> > used a virtual_input/virtual_output to save neutron histories at the
> >> > sample
> >> > incident slit. I can then continue these histories through
> >> diffraction
> >> > from
> >> > the sample and to the detector.
> >> >
> >> > In order to visualize the gauge volume, I thought I could do the
> >> > following:
> >> >
> >> > 1) Use EXTEND and if(SCATTERED) in the sample component to save the
> x,
> >> y,
> >> > z
> >> > position of the scattering event in the sample and also create a flag
> >> if
> >> > the
> >> > neutron was scattered at the sample (example flag = 1 if SCATTERED,
> >> ELSE
> >> > flag = 0)
> >> >
> >> > 2) Use EXTEND and if(flag==1 && SCATTERED) at the detector. Then
> >> printf
> >> > the
> >> > saved x, y, z positions of the scattering events in the sample from
> >> above.
> >> > (here I am using printf for debugging, eventually I would like to use
> >> the
> >> > DETECTOR OUT 3D(...) macro).
> >> >
> >> > The problems that I'm having:
> >> >
> >> > 1) I cannot seem to find a variable(s) that define the location of
> the
> >> > scattering event in the PowderN component. I have been using simple
> >> the
> >> > global variables 'x' 'y' 'z', but I don't think this is working
> >> correctly.
> >> >
> >> > 2) The printf is outputting many more neutron x,y,z than actually hit
> >> the
> >> > detector. My speculation is that the SCATTERED macro does not work
> in
> >> > detectors?
> >> >
> >> > 3) A smaller problem. What I would like is the local x-y-z of the
> >> > scattered
> >> > neutron in the sample. To do this, I've tried using the
> >> > POS_A_CURRENT_COMP,
> >> > but I can't seem to isolate the x,y,z components of this vector.
> I've
> >> > tried
> >> > using POS_A_CURRENT_COMP.x to get the x-component, but this does not
> >> seem
> >> > to
> >> > work as I get the following error:
> >> >
> >> > In function `mcraytrace':
> >> > 87: error: structure has no member named `mcnlx'
> >> >
> >> > Here is a sample of the EXTEND sections. ** indicates a comment that
> >> I've
> >> > added for clarity:
> >> >
> >> > COMPONENT sample = PowderN(
> >> > reflections = "Ni.laz", format = Lazy, d_phi = 8,
> >> > radius = 0.006, yheight = 0.06, pack = 1, sigma_abs = 0,
> >> > sigma_inc = 0, Delta_d = 0, frac = 0, tfrac = 0, DW = 0,
> >> > concentric = 0, barns = 1)
> >> > AT (0, 0, 0) RELATIVE sample_arm
> >> > EXTEND
> >> > %{
> >> > if(SCATTERED)
> >> > {
> >> > **here I'm trying to get the location of the scattering event (using
> >> the
> >> > state parameters x, y, z) and then put that into the local
> coordinates
> >> of
> >> > the sample using the POS_A_CURRENT_COMP ***
> >> > xp = x - POS_A_CURRENT_COMP.x;
> >> > yp = y - POS_A_CURRENT_COMP.y;
> >> > zp = z - POS_A_CURRENT_COMP.z;
> >> >
> >> > **the flag is later used in the detector to indicate that the neutron
> >> was
> >> > scattered from the sample**
> >> > flag = 1;
> >> > }
> >> > else
> >> > {
> >> > flag = 0;
> >> > }
> >> > %}
> >> >
> >> > COMPONENT monitor = Monitor_nD(
> >> > yheight = 0.133, xwidth = 2.794,
> >> > options = "banana, theta limits=[88.75, 91.25], bins = 32")
> >> > AT (0, 0, 0) RELATIVE sample_arm
> >> > ROTATED (0, 0, 0) RELATIVE origin
> >> > EXTEND
> >> > %{
> >> >
> >> > **Here the xp, yp, zp from above should only be printed if the
> neutron
> >> was
> >> > scattered from the sample and intersected the detector
> >> > if(flag==1 && SCATTERED)
> >> > {
> >> > printf("%g,%g,%g\n", xp,yp,zp);
> >> > }
> >> > %}
> >> > --
> >> > *************************************************
> >> > Aaron M. Percival
> >> > M.Sc. Candidate
> >> > Dept. of Physics, Engineering Physics & Astronomy
> >> > Queen's University
> >> > Kingston, Ontario, Canada, K7L 3N6
> >> > Office: 613-533-6000 ext. 74789
> >> > Fax: 613-533-6463
> >> > *************************************************
> >> > _______________________________________________
> >> > neutron-mc mailing list
> >> > neutron-mc at risoe.dk
> >> > http://mailman.risoe.dk/mailman/listinfo/neutron-mc
> >> >
> >>
> >>
> >> --
> >> FARHI Emmanuel <farhi at ill.fr>
> >> Groupe DS/CS, ILL4/156, Tel 04 76 20 71 35
> >> ILL, Grenoble
> >>
> >> _______________________________________________
> >> neutron-mc mailing list
> >> neutron-mc at risoe.dk
> >> http://mailman.risoe.dk/mailman/listinfo/neutron-mc
> >>
> >
> >
> >
> > --
> > *************************************************
> > Aaron M. Percival
> > M.Sc. Candidate
> > Dept. of Physics, Engineering Physics & Astronomy
> > Queen's University
> > Kingston, Ontario, Canada, K7L 3N6
> > Office: 613-533-6000 ext. 74789
> > Fax: 613-533-6463
> > *************************************************
> > _______________________________________________
> > neutron-mc mailing list
> > neutron-mc at risoe.dk
> > http://mailman.risoe.dk/mailman/listinfo/neutron-mc
> >
>
>
> --
> FARHI Emmanuel <farhi at ill.fr>
> Groupe DS/CS, ILL4/156, Tel 04 76 20 71 35
> ILL, Grenoble
>
> _______________________________________________
> neutron-mc mailing list
> neutron-mc at risoe.dk
> http://mailman.risoe.dk/mailman/listinfo/neutron-mc
>
--
*************************************************
Aaron M. Percival
M.Sc. Candidate
Dept. of Physics, Engineering Physics & Astronomy
Queen's University
Kingston, Ontario, Canada, K7L 3N6
Office: 613-533-6000 ext. 74789
Fax: 613-533-6463
*************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman2.mcstas.org/pipermail/mcstas-users/attachments/20080328/94d3ccd9/attachment.html>
More information about the mcstas-users
mailing list