File: ESRF_ID01.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 (349 lines) | stat: -rw-r--r-- 10,790 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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
/*******************************************************************************************************************
*         McXtrace instrument definition URL=http://www.mcxtrace.org
*
* Instrument: ID01
*
* %Identification
* Written by: Martin Cramer Pedersen (mcpe@nbi.dk)
*
* Date: March, 2015
* Origin: University of Copenhagen
* %INSTRUMENT_SITE: ESRF
*
* Nano-diffraction imaging beamline at ESRF, Grenoble
*
* %Description
* This model of ID01 is designed specifically to conduct virtual scanning nano-diffraction imaging 
* experiments such as the one demonstrated Chahine et al., J. Appl. Cryst 47, 762-769. The model 
* includes beam-defining slits, a double Si111-monochromator, a Fresnel Zone Plate, a polycrystalline  
* sample designed specifically for this type of virtual experiments, and a detector set up mimicking the  
* set up at the actual beam-line. The nanodiffraction experiment is performed by locating a suitable peak
* in the diffraction of the crystal (using the variables NominalEnergy, Delta, and Eta) 
* and then scan across the sample (using the variables Pix and ySamplePosition). By plotting 
* e.g. total detector intensity as a function of position, one can map out impurities in the sample by  
* their scattering properties.
*
* %Example: ESRF_ID01.instr Pix=0 Piy=0 Detector: PSDMonitor_I=3.26027e-05
* %Example: ESRF_ID01.instr Delta=65.88 Eta=32.945 Pix=50 Piy=-50 Detector: MAXIPix_I=1.77323e-06
* %Example: ESRF_ID01.instr Delta=67.44 Eta=33.22 Pix=50 Piy=-50 Detector: MAXIPix_I=2.26516e-06
*
* %Parameters
* DistanceSampleToDetector: [m]   Distance from sample to detector
* NominalEnergy:            [keV] Nominal energy of photons after monochromation
* Delta:                    [deg] Angle rotating the detector around the sample in the yz-plane
* Nu:                       [deg] Horizontal plane rotation angle of the detector (for asymmetric peaks)
* Eta:                      [deg] Angle between the incoming beam and the sample normal in the yz-plane
* Phi:                      [deg] Horizontal plane rotation angle of the sample (for asymmetric peaks)
* Pix:                      [um]  Horizontal offset of sample
* Piy:                      [um]  Vertical offset of sample
* SampleMosaicity:          [moa] Mosaicity of the sample crystal lattice
* SampleDeltadoverd:        [1]   Uncertainty in lattice parameter for the sample crystal lattice
*
* %Link
* http://www.esrf.eu/UsersAndScience/Experiments/StructMaterials/ID01
*
* %End
*******************************************************************************************************************/


DEFINE INSTRUMENT ESRF_ID01 (
    DistanceSampleToDetector = 0.5,
    NominalEnergy            = 8.0,
    Delta                    = 0.0,
    Nu                       = 0.0,
    Eta                      = 0.0,
    Phi                      = 0.0,
    Pix                      = 0.0,
    Piy                      = 0.0,
    SampleMosaicity          = 1.0,
    SampleDeltadoverd        = 0.001
)


DECLARE
%{
    // Optics
    double DistanceSourceToPrimarySlit1	= 27.00;
    double DistanceSourceToPrimarySlit2 = 27.05;

    double DistanceSourceToMonochromator = 34.0;
    double DistanceBetweenMonochromators = 0.1;

    double DistanceSourceToSecondarySlit1 = 117.70;
    double DistanceSourceToSecondarySlit2 = 117.75;

    double DistanceSourceToFZP    = 117.85;
    double DistanceOSAToSample    = 0.02;
    double DistanceSourceToSample = 118.0;

    // Slits
    double PrimarySlit1Width  = 0.0005;
    double PrimarySlit1Height = 0.0006;
    double PrimarySlit2Width  = 0.0005;
    double PrimarySlit2Height = 0.0006;

    double SecondarySlit1Width  = 0.0003;
    double SecondarySlit1Height = 0.0003;
    double SecondarySlit2Width  = 0.0003;
    double SecondarySlit2Height = 0.0003; 

    double OSARadius = 0.000025;

    // Mirrors and monochromators
    double Monochromator1Width  = 0.04;
    double Monochromator1Length = 0.08;
    double Monochromator2Width  = 0.04;
    double Monochromator2Length = 0.08;

    double dSi111 = 3.1356;

    double dE;
    double AngleMonochromator;

    // Fresnel Zone Plate
    double CentralStopRadius = 0.00002;

    double FZPRadius      = 0.00015;
    double FZPFocalLength = 0.15;	

    // Sample
    double SamplexWidth    = 200e-6;
    double SampleyHeight   = 200e-6;
    double SamplezDepth    = 50e-6;
    //double SamplezDepth    = 20e-9;
    double SubstratezDepth = 300e-6;
%}


INITIALIZE
%{
	// Instrument angles
	AngleMonochromator = RAD2DEG * asin(M_PI / (NominalEnergy * E2K * dSi111));

	// Convert energy to wavelength
	fprintf(stderr, "Target wavelength is %g AA. \n", 12.39842 / NominalEnergy);
	fprintf(stderr, "The monochromators will be rotated by %g degrees. \n", AngleMonochromator);

	// Energy bandwidth
	dE = 0.001 * NominalEnergy;
%}


TRACE
    /**********/
    /* Source */
    /**********/
COMPONENT Origin = Progress_bar(
) 
AT (0, 0, 0) ABSOLUTE


COMPONENT Source = Source_gaussian(
	sig_x    = 120.0E-6, 
	sig_y    =  16.0E-6, 
	sigPr_x  =   1.0E-6,
	sigPr_y  =   1.0E-6, 
	dist     = DistanceSourceToPrimarySlit2, 
	gauss    = 1,
	focus_xw = PrimarySlit2Width, 
	focus_yh = PrimarySlit2Height, 
	E0       = NominalEnergy, 
	dE       = dE
) 
AT (0, 0, 0) RELATIVE Origin


/*****************/
/* Primary slits */
/*****************/
COMPONENT PrimarySlit1 = Slit(
	xwidth  = PrimarySlit1Width, 
	yheight = PrimarySlit1Height
) 
AT (0, 0, DistanceSourceToPrimarySlit1) RELATIVE Source


COMPONENT PrimarySlit2 = Slit(
	xwidth  = PrimarySlit2Width, 
	yheight = PrimarySlit2Height
) 
AT (0, 0, DistanceSourceToPrimarySlit2) RELATIVE Source


/***********************/
/* First monochromator */
/***********************/
COMPONENT Monochromator1Arm1 = Arm()
AT (0, 0, DistanceSourceToMonochromator) RELATIVE Source
ROTATED (0, AngleMonochromator, 90) RELATIVE Source


COMPONENT Monochromator1 = Bragg_crystal(
	length = Monochromator1Length, 
	width  = Monochromator1Width
) 
AT (0, 0, 0) RELATIVE Monochromator1Arm1


COMPONENT Monochromator1Arm2 = Arm()
AT (0, 0, 0) RELATIVE Monochromator1Arm1
ROTATED (0, 2.0 * AngleMonochromator, 90) RELATIVE Source


/************************/
/* Second monochromator */
/************************/
COMPONENT Monochromator2Arm1 = Arm()
AT (0, 0, DistanceBetweenMonochromators) RELATIVE Monochromator1Arm2
ROTATED (0, AngleMonochromator, 90) RELATIVE Source


COMPONENT Monochromator2 = Bragg_crystal(
	length = Monochromator2Length, 
	width  = Monochromator2Width
)
AT (0, 0, 0) RELATIVE Monochromator2Arm1


COMPONENT Monochromator2Arm2 = Arm()
AT (0, 0, 0) RELATIVE Monochromator2Arm1
ROTATED (0, 0, 90) RELATIVE Source


/*******************/
/* Secondary slits */
/*******************/
COMPONENT SecondarySlit1 = Slit(
	xwidth  = SecondarySlit1Width, 
	yheight = SecondarySlit1Height
) 
AT (0, 0, DistanceSourceToSecondarySlit1 - DistanceSourceToMonochromator + DistanceBetweenMonochromators) RELATIVE Monochromator2Arm2


COMPONENT SecondarySlit2 = Slit(
	xwidth  = SecondarySlit2Width, 
	yheight = SecondarySlit2Height
) 
AT (0, 0, DistanceSourceToSecondarySlit2 - DistanceSourceToSecondarySlit1) RELATIVE SecondarySlit1


/**********************/
/* Fresnel zone plate */
/**********************/
COMPONENT CentralStop = Beamstop (
	radius = CentralStopRadius
)
AT (0, 0, DistanceSourceToFZP - DistanceSourceToSecondarySlit2 - 0.00001) RELATIVE SecondarySlit2


COMPONENT FresnelZonePlate = ZonePlate(
	radius   = FZPRadius, 
	L        = FZPFocalLength, 
	lambda0  = 12.39842 / NominalEnergy,
	//focus_xw = 2.0 * OSARadius, 
	//focus_yh = 2.0 * OSARadius,
	focus_xw = 300e-9, 
	focus_yh = 300e-9,
	focus_x0 = 0.0,
	focus_y0 = 0.0,
        //dist     = DistanceSourceToSample - DistanceSourceToFZP - DistanceOSAToSample
        dist     = DistanceSourceToSample - DistanceSourceToFZP
)
AT (0, 0, DistanceSourceToFZP - DistanceSourceToSecondarySlit2) RELATIVE SecondarySlit2


COMPONENT OrderSortingAperture = Slit(
	radius = OSARadius
)
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2 - DistanceOSAToSample) RELATIVE SecondarySlit2


/***********************/
/* Pre-sample monitors */
/***********************/
COMPONENT DivergenceMonitor = Divergence_monitor(
        xwidth       = 4.0 * OSARadius, 
        yheight      = 4.0 * OSARadius, 
        nx           = 200, 
        ny           = 200, 
        filename     = "DivMonitor",
        rad=1,
        restore_xray = 1
)
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2 - 0.003) RELATIVE SecondarySlit2


COMPONENT EnergyMonitor = E_monitor(
        xwidth       = 4.0 * OSARadius, 
        yheight      = 4.0 * OSARadius, 
        Emin         = 0.95 * NominalEnergy, 
        Emax         = 1.05 * NominalEnergy, 
        nE           = 200, 
        filename     = "EnergyMonitor",
        restore_xray = 1
)
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2 - 0.002) RELATIVE SecondarySlit2


COMPONENT PSDMonitor = PSD_monitor(
        xwidth       = 4.0 * OSARadius, 
        yheight      = 4.0 * OSARadius, 
        nx           = 100, 
        ny           = 100, 
        filename     = "PSDMonitor",
        restore_xray = 1
)
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2 - 0.001) RELATIVE SecondarySlit2


/***********************/
/* Sample and detector */
/***********************/
COMPONENT SampleArm = Arm()
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2) RELATIVE SecondarySlit2
ROTATED (90.0 - Eta, Phi, 0) RELATIVE Source


COMPONENT Sample = Polycrystal(
	MapFile                   = "polycrystal_1layer_2orts.map",
        OrientationsFile          = "stretch_2orts.orts",
        ReflectionsDatafile       = "GeReduced.lau",
        //MaterialDatafile        = "Ge.txt",
	xwidth                    = SamplexWidth,
	yheight                   = SampleyHeight,
	zdepth                    = SamplezDepth,
	DeltadOverd               = SampleDeltadoverd,
        Mosaicity                 = SampleMosaicity,
        SigmaAbsorbtion           = 0.0,
        SigmaIncoherent           = 0.0,
	MaxNumberOfReflections    = 1,
        ProbabilityOfTransmission = 0.5,

        ax = 5.6579, ay = 0.0000, az = 0.0000,
        bx = 0.0000, by = 5.6579, bz = 0.0000,
        cx = 0.0000, cy = 0.0000, cz = 5.6579
)
AT (Pix * 1e-6, Piy * 1e-6, SamplezDepth/2.0) RELATIVE SampleArm


COMPONENT DetectorArm = Arm()
AT (0, 0, DistanceSourceToSample - DistanceSourceToSecondarySlit2) RELATIVE SecondarySlit2
ROTATED (-Delta, Nu, 0) RELATIVE Source


COMPONENT MAXIPix = PSD_monitor(
	filename     = "DetectorMaxiPix.mcp",
	xwidth       = 0.0284,
	yheight      = 0.0284,
	nx           = 516,
	ny           = 516
)
AT (0, 0, DistanceSampleToDetector) RELATIVE DetectorArm


FINALLY
%{
%}


END