File: PSI_DMC_simple.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 (261 lines) | stat: -rw-r--r-- 8,566 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
/************************************************
*
* McStas model of the DMC powder diffractometer at PSI, CH.
*
* %Identification
* Written by: Peter Willendrup (Risoe), Uwe Filges (PSI), Lukas Keller (PSI)
* 
* Date: May 7th, 2008
* Origin:PSI
* %INSTRUMENT_SITE: PSI
*
* McStas model of the DMC powder diffractometer at PSI, CH.
*
* %Description
* McStas model of the DMC powder diffractometer at PSI, CH.
*
* Please note that this instrument file does not include the radial collimator of DMC. 
* To generate the full 800-bin angle coverage at DMC, you should combine two simulations
* using this instrumentfile, with SHIFT=0 and 0.1. This will displace the detector by half
* a bin-width, which is a standard procedure at the DMC diffractometer
*
* %Example: lambda=2.5666 Detector: Detector_I=7.5965E+02
*
* %Parameters
* lambda: [AA]     Choice of wavelength, affects both monochromator and source component
* R: [1]           Reflectivity of non-curved guides
* R_curve: [1]     Reflectivity of curved guides
* filename: [str]  Choice of reflection list file, e.g. from McStas data dir
* D_PHI: [deg]     Focusing 'd_phi' for PowderN, see mcdoc page
* SHIFT: [deg]     Rotation of detector, set to 0.1 to displace by half a bin
* PACK: [1]        Powder packing factor
* Dw: [1]          Powder Debye-Waller factor
* BARNS: [1]       Flag to define if powder reflection file |F2| is in Barns or fm
*
* %Link
* The <a href="http://lns00.psi.ch/montecarlo/">PSI Monte-Carlo</a> website.
* %Link
* P Willendrup, U Filges, L Keller, E Farhi, K Lefmann: Validation of a realistic powder sample using data from DMC at PSI, ICNS 2005 (Physica B, 386, (2006), 1032.)
*
* %End
***************************************************/
DEFINE INSTRUMENT PSI_DMC_simple(lambda=2.5666, R=0.87, R_curve=0.87, string filename="Na2Ca3Al2F14.laz",D_PHI=6, SHIFT=0, PACK=0.7, Dw=0.8, BARNS=1)

DECLARE
%{
  double mono_q = 1.8734;
  double OMA;  
  double RV;
  double y_mono = 0.025;
  double NV = 5;
  double d_phi_0;
  double TTM;
  double sample_radius = 0.008/2;
  double sample_height = 0.03;
  double can_radius = 0.0083/2;
  double can_height = 0.0303;
  double can_thick = 0.00015;
  
  /******Mirrorvalues*****/
  
  double alpha;
  double Qc=0.0217;
  double R0=0.995;
  double Mvalue=1.9;
  double W=1.0/250.0;
  
  double alpha_curve;
  double Qc_curve=0.0217;
  double R0_curve= 0.995;
  double Mvalue_curve=2.1;
  double W_curve=1.0/250.0;
  
  double ldiff=0.05;
  /* Curved guide element angle*/
  double angleGuideCurved;

%}

INITIALIZE
%{
  TTM = 2*asin(mono_q*lambda/(4*PI))*RAD2DEG;
  OMA = TTM/2;
  RV = fabs(2*2.82*sin(DEG2RAD*OMA));
  
  angleGuideCurved=-2.0*asin(0.4995 /2.0/3612)/PI*180;
  alpha=(R0-R)/Qc/(Mvalue-1);
  alpha_curve=(R0_curve-R_curve)/Qc_curve/(Mvalue_curve-1);
  
%}

TRACE

COMPONENT source_arm = Progress_bar()
AT (0, 0, 0) ABSOLUTE

COMPONENT source = Source_Maxwell_3(
        yheight=0.156, xwidth=0.126,
	      Lmin=lambda-ldiff/2,Lmax=lambda+ldiff/2,
        dist=1.5, focus_xw = 0.02, focus_yh = 0.12,
        T1=296.16, I1=8.5E11,
        T2=40.68, I2=5.2E11)    
AT (0,0,0) RELATIVE source_arm  ROTATED (0,0,0) RELATIVE source_arm

COMPONENT PSDbefore_guides = PSD_monitor(
    nx = 128, ny = 128, filename = "PSDbefore_guides",
    xwidth = 0.02, yheight = 0.12)
AT (0, 0, 1.49999) RELATIVE source_arm

COMPONENT l_mon_source = L_monitor(
    nL = 101, filename = "lmonsource.dat", xwidth = 0.02,
    yheight = 0.12, Lmin = 0, Lmax = 20)
AT (0, 0, 1e-9) RELATIVE PREVIOUS


/* guide segment 1, m=2, 4.66 m */
COMPONENT guide1 = Guide_simple(w1= 0.02, h1=0.12, w2=0.02, h2=0.12,
                         l=4.66, R0=R0, Qc=Qc, alpha = alpha,
                         m = 1.8, W = W)
AT (0,0,1.50) RELATIVE source_arm ROTATED (0,0,0) RELATIVE source_arm

COMPONENT PSDbefore_curve = PSD_monitor(
    nx = 128, ny = 128, filename = "PSDbefore_curve",
    xwidth = 0.02, yheight = 0.12)
AT (0, 0, 4.664) RELATIVE guide1

COMPONENT guide2 = Bender(
    w = 0.02, h = 0.12, r = 3612, R0a = R0_curve, Qca = Qc_curve,
    alphaa = alpha_curve, ma = Mvalue_curve, Wa = W_curve, R0i = R0_curve, Qci = Qc_curve,
    alphai = alpha_curve, mi = 1, Wi = W_curve, R0s = R0_curve, Qcs = Qc_curve,
    alphas = alpha_curve, ms = Mvalue_curve, Ws = W_curve, l = 20)
AT (0, 0, 4.69) RELATIVE guide1

COMPONENT PSDafter_curve = PSD_monitor(
    nx = 128, ny = 128, filename = "PSDafter_curve",
    xwidth = 0.02, yheight = 0.12)
  AT (0, 0, 20.0001) RELATIVE guide2

/* bunker wall, m=2, 3.0 m */
COMPONENT bunker = Guide_simple(
        w1=0.02, h1=.12, w2=0.02, h2=.12,
        l=3.43, R0=R0,Qc=Qc, alpha = alpha,
        m = 1.6, W = W)
AT (0,0,20.1502) RELATIVE guide2 ROTATED (0,0,0) RELATIVE guide2

/* guide segment 3, m=2, 8.84 m */

COMPONENT guide3 = Guide_simple(
        w1=0.02, h1=.12, w2=0.02, h2=.12,
        l=12.275, R0=R0,Qc=Qc, alpha = alpha,
        m = 1.6, W = W)
AT (0,0,3.56) RELATIVE bunker ROTATED (0,0,0) RELATIVE bunker

COMPONENT guide4 = Guide_simple(
        w1=0.02, h1=.12, w2=0.02, h2=.12,
        l=5.66, R0=R0,Qc=Qc, alpha = alpha,
        m = 1.6, W = W)
AT (0,0,15.8555) RELATIVE bunker ROTATED (0,0,0) RELATIVE guide3

COMPONENT window1 = Al_window(
    thickness = 0.002)
AT (0, 0, 5.66+1e-9) RELATIVE PREVIOUS

/* guide exit at 42.5 m - measured flux 2.46 10e8 cm-2 s-1 mA-1 */

COMPONENT ydist_fluxpos = PSDlin_monitor(
    nbins = 11, filename = "ydist_fluxpos.dat", xwidth = 0.120,
    yheight = 0.02)
AT (0, 0, 5.66+1e-8+0.01) RELATIVE guide4 ROTATED (0,0,90) RELATIVE PREVIOUS

COMPONENT PSD_fluxpos = PSD_monitor(
    nx = 100, ny = 100, filename = "xdist_fluxposy.dat",
    xwidth = 0.02, yheight = 0.12)
AT (0, 0, 5.66+1e-7+0.01) RELATIVE guide4

COMPONENT xdist_flux_pos =  PSDlin_monitor(
    nbins = 11, filename = "xdist_fluxpos.dat", xwidth = 0.020,
    yheight = 0.12)
AT (0, 0, 1e-9) RELATIVE PREVIOUS

COMPONENT PSD_fluxposB = PSD_monitor(
    nx = 100, ny = 100, filename = "PSD_fluxposB.dat",
    xwidth = 0.02, yheight = 0.12)
AT (0, 0, 6.24-1e-7-0.01) RELATIVE guide4

COMPONENT window2 = Al_window(
    thickness = 0.002)
    AT (0, 0, 1e-9) RELATIVE PREVIOUS

/*0.580 m gap for DMC monochromator*/

COMPONENT in_slit = Slit(
        xmin = -0.01, xmax=0.01 , ymin = -0.06, ymax = 0.06)
  AT (0,0,0.0021) RELATIVE  PREVIOUS

COMPONENT lambda_in =  L_monitor(
    xmin=-0.011, xmax=0.011, ymin=-0.061, ymax=0.061, Lmin=0, Lmax=2*lambda, nL=128, filename="L_in.dat")
  AT ( 0, 0, 0.001) RELATIVE in_slit

/* Monochromator description */ 

COMPONENT sma = Arm() /* source - monochromator arm */ 
AT (0, 0, 0.65) RELATIVE in_slit ROTATED (0,OMA,0) RELATIVE in_slit

COMPONENT foc_mono = Monochromator_2foc(
    zwidth = 0.05, yheight = 0.025, gap = 0.0005, NH = 1, NV = 5,
    mosaich = 38, mosaicv = 38, r0 = 0.7, Q = mono_q, RV = RV,
    RH = 0)
AT (0, 0, 0) RELATIVE sma

COMPONENT msa = Arm() /* monochromator - sample arm */
   AT (0, 0, 0) RELATIVE sma ROTATED (0, TTM, 0) RELATIVE in_slit

COMPONENT out1_slit = Slit(
        xmin=-0.01, xmax=0.01, ymin=-0.06, ymax=0.06)
  AT (0,0,0.2) RELATIVE msa ROTATED (0,0,0) RELATIVE msa  

COMPONENT Amoin_slit = Slit(
        xmin=-0.01, xmax=0.01, ymin=-0.06, ymax=0.06)
  AT (0,0,0.325) RELATIVE  msa ROTATED (0,0,0) RELATIVE msa

COMPONENT Bmoin_slit = Slit(
        xmin=-0.01, xmax=0.01, ymin=-0.06, ymax=0.06) 
  AT (0,0,0.525) RELATIVE  msa ROTATED (0,0,0) RELATIVE msa

COMPONENT out2_slit = Slit(
        xmin=-0.01, xmax=0.01, ymin=-0.06, ymax=0.06)
  AT (0,0,0.65) RELATIVE msa ROTATED (0,0,0) RELATIVE msa  

COMPONENT PSD_sample =  PSD_monitor(
    xmin=-0.05, xmax=0.05, ymin=-0.07, ymax=0.07,
    nx=80, ny=80, filename="PSD_sample.dat")
  AT ( 0, 0, 2.77) RELATIVE msa

COMPONENT lambda_sample =  L_monitor(
    xmin=-sample_radius, xmax=sample_radius, ymin=-sample_height/2, ymax=sample_height/2, Lmin=lambda-0.2, Lmax=lambda+0.2, nL=128, filename="L_sample.dat")
  AT ( 0, 0, 2.81) RELATIVE msa

COMPONENT sa_arm = Arm()
   AT (0, 0, 2.82) RELATIVE msa 
   ROTATED (0, 0, 0) RELATIVE msa 

COMPONENT sample = PowderN (
	d_phi=D_PHI,radius=sample_radius, yheight=sample_height, DW=Dw,
  pack=PACK, reflections = filename, barns=BARNS, p_transmit=0, p_inc=0)
AT ( 0, 0, 0) RELATIVE sa_arm

COMPONENT STOP = Beamstop(radius=0.3)
AT (0,0,1.4) RELATIVE sa_arm
ROTATED (0,0,0) RELATIVE sa_arm


COMPONENT Detector = Monitor_nD(
  xwidth=3.0, yheight=0.09, filename="detector.dat", min=19.9+SHIFT, max=99.9+SHIFT, bins=400,
  options="banana, theta")
AT (0,0,0) RELATIVE sa_arm
ROTATED (0, 0, 180) RELATIVE sa_arm


END