File: Test_Pol_Bender.instr

package info (click to toggle)
mccode 3.5.19%2Bds5-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,113,256 kB
  • sloc: ansic: 40,697; python: 25,137; yacc: 8,438; sh: 5,405; javascript: 4,596; lex: 1,632; cpp: 742; perl: 296; lisp: 273; makefile: 226; fortran: 132
file content (138 lines) | stat: -rw-r--r-- 4,749 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/******************************************************************************
*         McStas instrument definition URL=http://www.mcstas.org
*
* Instrument: Test_Pol_Bender
*
* %Identification
* Written by: Peter Christiansen
* Date: July 2006
* Origin: RISOE
* %INSTRUMENT_SITE: Tests_polarization
*
* Test Pol_bender.
*
* %Description
* Test that Pol_bender polarizes an unpolarized beam, and allows one
* to test the different options.
*
* %Example: GUIDELENGTH=1 Detector: psdBender_I=0.703658
*
* %Parameters
* GUIDELENGTH: [m] Length of bender
* GUIDERADIUS: [m] Radius of curvature of bender
* ENDOPTION:    [] Setting for parallel start/end planes of bender 
* NSLITS:       [] Number of channels in bender 
* WSPACER:     [m] Spacer dimension  
* DRAWOPTION:   [] Bender drawing option 1: fine(all slits/90 points per arc), 2: normal (max 20/40), 3: rough (max 5/10) 
*
* %Link
*
* %End
******************************************************************************/

/* Change name of instrument and input parameters with default values */
DEFINE INSTRUMENT Test_Pol_Bender(GUIDELENGTH=1.0, GUIDERADIUS=10.0,
				  int ENDOPTION=0, int NSLITS=5, WSPACER=0.005,
				  int DRAWOPTION=1)

/* The DECLARE section allows us to declare variables or  small      */
/* functions in C syntax. These may be used in the whole instrument. */
DECLARE
%{
  double calcAlpha(double length, double radius) {
    // calculate angle of arm after curved guide
    return RAD2DEG * length/radius;
  }

  double calcX(double length, double radius) {
    // calculate position and angle of arm after curved guide
    double alpha = DEG2RAD * calcAlpha(length, radius);
    return radius*(1.0-cos(alpha));
  }

  double calcZ(double length, double radius) {
    // calculate position and angle of arm after curved guide
    double alpha = DEG2RAD * calcAlpha(length, radius);
    return radius*sin(alpha);
  }
  %}

/* The INITIALIZE section is executed when the simulation starts     */
/* (C code). You may use them as component parameter values.         */
INITIALIZE
%{
%}

/* Here comes the TRACE section, where the actual      */
/* instrument is defined as a sequence of components.  */
TRACE

/* The Arm() class component defines reference points and orientations  */
/* in 3D space. Every component instance must have a unique name. Here, */
/* Origin is used. This Arm() component is set to define the origin of  */
/* our global coordinate system (AT (0,0,0) ABSOLUTE). It may be used   */
/* for further RELATIVE reference, Other useful keywords are : ROTATED  */
/* EXTEND GROUP PREVIOUS. Also think about adding a neutron source !    */
/* Progress_bar is an Arm displaying simulation progress.               */
COMPONENT Origin = Progress_bar()
     AT (0,0,0) ABSOLUTE

COMPONENT source =
Source_simple(radius = 0.02, dist = 1.2, focus_xw = 0.08, focus_yh = 0.08, lambda0 = 15,
	      dlambda = 14.5, flux = 1)
     AT (0, 0, 0) RELATIVE Origin

COMPONENT lamStart =
L_monitor(nL = 30, filename = "lambdaStart.dat",
	  xwidth = 0.10, yheight = 0.10,
	  Lmin = 0.0, Lmax = 30)
     AT (0, 0, 0.1) RELATIVE Origin

COMPONENT psdStart =
PSD_monitor(xwidth=0.10, yheight=0.10,
	    nx=40, ny=40, filename="psdStart.dat")
     AT (0, 0, 1.15) RELATIVE Origin

COMPONENT bender =
Pol_bender(xwidth = 0.08, yheight = 0.08, length = GUIDELENGTH, radius= GUIDERADIUS,
	   nslit=NSLITS, d=WSPACER,
	   endFlat=ENDOPTION, drawOption=DRAWOPTION,
	   rTopUpPar={0.99, 0.0219, 6.07, 3.0, 0.003},
	   rTopDownPar={0.99, 0.0219, 6.07, 2.0, 0.003})
     AT (0, 0, 1.2) RELATIVE Origin

COMPONENT armlambdaStop = Arm()
     AT (calcX(GUIDELENGTH, GUIDERADIUS), 0, calcZ(GUIDELENGTH, GUIDERADIUS)+1.2)
     RELATIVE Origin
ROTATED (0, calcAlpha(GUIDELENGTH, GUIDERADIUS), 0) RELATIVE Origin

COMPONENT lamStopBender =
L_monitor(nL = 30, filename = "lambdaStopBender.dat",
	  xwidth = 0.10, yheight = 0.10,
	  Lmin = 0.0, Lmax = 30)
     AT (0, 0, 0.001) RELATIVE armlambdaStop

COMPONENT psdBender =
PSD_monitor(xwidth=0.10, yheight=0.10,
	    nx=80, ny=80, filename="psdBender.dat")
     AT (0, 0, 0.001) RELATIVE armlambdaStop

COMPONENT pollambdaMonitorY =
PolLambda_monitor(xwidth=0.1, yheight=0.1,
		  nL=30, Lmin = 0, Lmax = 30, npol=41,
		  my=1, filename="pollambdaMonY.data")
     AT (0, 0, 0.05) RELATIVE armlambdaStop

COMPONENT meanpollambdaMonitorY =
MeanPolLambda_monitor(xwidth=0.1, yheight=0.1,
      nL=30, Lmin = 0, Lmax = 30,
      my=1, filename="meanpollambdaMonY.data")
     AT (0, 0, 0.05) RELATIVE armlambdaStop

/* This section is executed when the simulation ends (C code). Other    */
/* optional sections are : SAVE                                         */
FINALLY
%{
%}
/* The END token marks the instrument definition end */
END