/*******************************************************************************
*
* McStas, neutron ray-tracing package
* Copyright 1997-2002, All rights reserved
* Risoe National Laboratory, Roskilde, Denmark
* Institut Laue Langevin, Grenoble, France
*
* Instrument: LET
*
* %Identification
* Written by: Kaspar Hewitt Klenø and Peter Willendrup
* Date: 2006.
* Origin: RISØ (Denmark)
* Release: McStas 1.6
* Version: $Revision: 1.1$
* %INSTRUMENT_SITE: ISIS
*
* Model of the planned Low Energy Transfer (LET) instrument for ISIS TS2
*
* %Description
* This instrument is model of the planned LET instrument for ISIS target
* station 2. In many aspects, this is a standard disk chopper instrument design,
* but differing in regard to a special double resolution chopper / split guide
* system (Courtesy of Rob Bewley, ISIS). Select SIMPLE=0 for the standard LET design.
* Set SIMPLE=1 to run with unsplit guides and no chopper inserts.
*
* (Caution: split AND unsplit guides are always drawn regardless of which are
* actually used.)
*
* The current instrument file does not contain a sample / detector setup.
*
* Example: mcrun let.instr g_w=0.04, g_h=0.09, jitter=0, E_min=4.9, E_max=5.1, Res=140, PR=70, E_foc=5, pha_offset=120
*
* %Parameters
* INPUT PARAMETERS:
* g_w: Guide width [m]
* g_h: Guide height [m]
* jitter: chopper-dephacing option [ms]
* E_min: Minimum source energy [meV]
* E_max: Maximum source energy [meV]
* Res: Resolution chopper frequency [Hz]
* PR: T0-chopper frequency [Hz]
* E_foc: Focusing energy [meV]
* pha_offset: chopper phase offset [ms]
* TZERO: Start all neutrons at time t=0? [boolean]
* SIMPLE: Run in 'simple' design with unsplit guides? [boolean]
*
*
* %End
*******************************************************************************/
DEFINE INSTRUMENT LET(g_w=0.04, g_h=0.09, jitter=0, E_min=4.9, E_max=5.1, Res=140, PR=70, E_foc=5, pha_offset=120,TZERO=0, SIMPLE=0)
DECLARE
%{
double v_foc, tzeroflag, simpleflag, InsertWidth;
const dz = 1e-6; // 1 \mu meter
%}
INITIALIZE
%{
tzeroflag=TZERO;
if (tzeroflag == 1) {
fprintf(stderr,"\nWarning: Starting all neutron rays at t=0\n\n");
}
simpleflag=SIMPLE;
if (!simpleflag==0) {
simpleflag=1;
fprintf(stderr,"\nINFO: Running with simple, unsplit guides and wide choppers\n\n");
InsertWidth = 0;
} else {
fprintf(stderr,"\nINFO: Running with split guides and choppers inserts (LET design)\n\n");
InsertWidth = 0.011;
}
v_foc = SE2V*sqrt(E_foc);
printf("\nFocusing velocity v_foc: %f\n\n",v_foc);
%}
TRACE
COMPONENT Origin = Progress_bar()
AT (0,0,0) ABSOLUTE
COMPONENT source = ISIS_moderator(
Face = "hydrogen", E0 = E_min, E1 = E_max, dist = 1.7, xw = g_w,
yh = g_h, modXsize = 0.1, modYsize = 0.1, CAngle = 0,SAC = 0)
AT (0, 0, 0) RELATIVE Origin
EXTEND
%{
if (tzeroflag == 1) {
t=0;
}
%}
COMPONENT TOF_after_source = TOF_monitor(
nchan = 400, filename = "TOF_after_source",xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = -200,
t1 = 1000)
AT (0, 0, 1e-6) RELATIVE Origin
// Below, monitors mostly used for debugging have been commented out
// using a //DEBUG comment, hence easy to re-insert
COMPONENT TOF_before_guide = TOF_monitor(
nchan = 400, filename = "TOF_before_guide",xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = -200,
t1 = 5000)
AT (0, 0, 1.7-2*dz) RELATIVE Origin
COMPONENT E_mon_before_guide = E_monitor(
filename = "E_mon_before_guide", xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
Emax= E_max+(E_max-E_min)/10, nchan=200)
AT (0, 0, 1.7-dz) RELATIVE Origin
COMPONENT PSD_before_Guide1 = PSD_monitor(
filename = "PSD_before_Guide1", xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55)
AT (0, 0, 1.7-0.5*dz) RELATIVE Origin
COMPONENT Guide1 = Guide_channeled(
w1 = g_w, h1 = g_h, w2 = g_w, h2 = g_h, l = 6.13-3*dz, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
AT (0, 0, 1.7) RELATIVE Origin
//DEBUG COMPONENT E_mon_before_Res1 = E_monitor(
//DEBUG filename = "E_mon_before_Res1", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 7.83-3*dz) RELATIVE Origin
//DEBUG COMPONENT TOF_before_Res1 = TOF_monitor(
//DEBUG nchan = 400, filename = "TOF_before_Res1",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 0.95*7.83/v_foc*1e6,
//DEBUG t1 = 1.1*7.83/v_foc*1e6)
//DEBUG AT (0, 0, 7.83-2*dz) RELATIVE Origin
//DEBUG COMPONENT PSD_before_Res1 = PSD_monitor(
//DEBUG filename = "PSD_before_Res1", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 7.83-dz) RELATIVE Origin
COMPONENT Res1 = DiskChopper(theta_0=0,compat=1,abs_out=0,
R = 0.305, omega = Res*2*PI, n=6, w=0.04004359436, j=jitter, t_0=7.83/v_foc+pha_offset*1*1e-6)
AT (0, 0, 7.83) RELATIVE Origin
COMPONENT Res1_counter = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.305, omega = -Res*2*PI, n=6, w=0.04004359436, j=jitter, t_0=-7.83/v_foc-pha_offset*1e-6)
AT (0, 0, 7.83+2*dz) RELATIVE Origin
//DEBUG COMPONENT E_mon_after_Res1 = E_monitor(
//DEBUG filename = "E_mon_after_Res1", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 7.83+3*dz) RELATIVE Origin
//DEBUG COMPONENT PSD_after_Res1 = PSD_monitor(
//DEBUG filename = "PSD_after_Res1", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 7.83+4*dz) RELATIVE Origin
//DEBUG COMPONENT TOF_after_Res1 = TOF_monitor(
//DEBUG nchan = 400, filename = "TOF_after_Res1",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 6000, t1 = 11000)
//DEBUG AT (0, 0, 7.83+4*dz) RELATIVE Origin
COMPONENT Guide2 = Guide_channeled(
w1 = g_w, h1 = g_h, w2 = g_w, h2 = g_h, l = 0.37-5*dz, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
AT (0, 0, 7.83+5*dz) RELATIVE Origin
COMPONENT FO = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.305, omega = 10*2*PI, n=1, w=0.044937221097, j=jitter,
t_0=8.2/v_foc+pha_offset*1e-6, IsFirst=0)
AT (0, 0, 8.2) RELATIVE Origin
//DEBUG COMPONENT E_mon_after_FO = E_monitor(
//DEBUG filename = "E_mon_after_FO", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan=200)
//DEBUG AT (0, 0, 8.2+dz) RELATIVE Origin
COMPONENT Guide3 = Guide_channeled(
w1 = g_w, h1 = g_h, w2 = g_w, h2 = g_h, l = 3.55-5*dz, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
AT (0, 0, 8.2+2*dz) RELATIVE Origin
//DEBUG COMPONENT E_mon_before_PR = E_monitor(
//DEBUG filename = "E_mon_before_PR", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 11.75-2*dz) RELATIVE Origin
//DEBUG COMPONENT TOF_before_PR = TOF_monitor(
//DEBUG nchan = 400, filename = "TOF_before_PR",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 0.95*11.75/v_foc*1e6,
//DEBUG t1 = 1.05*11.75/v_foc*1e6)
//DEBUG AT (0, 0, 11.75-dz) RELATIVE Origin
COMPONENT PR = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.35, omega = PR*2*PI, n=2, w=0.07427690045, j=jitter, t_0=11.75/v_foc+pha_offset*1e-6)
AT (0, 0, 11.75) RELATIVE Origin
//DEBUG COMPONENT E_mon_after_PR = E_monitor(
//DEBUG filename = "E_mon_after_PR", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 11.75+dz) RELATIVE Origin
COMPONENT Guide4 = Guide_channeled(
w1 = g_w, h1 = g_h, w2 = g_w, h2 = g_h, l = 3.91-5*dz, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
AT (0, 0, 11.75+2*dz) RELATIVE Origin
//DEBUG COMPONENT TOF_before_CR = TOF_monitor(
//DEBUG nchan = 400, filename = "TOF_before_CR",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 0.95*15.66/v_foc*1e6,
//DEBUG t1 = 1.05*15.66/v_foc*1e6)
//DEBUG AT (0, 0, 15.66-2*dz) RELATIVE Origin
//DEBUG COMPONENT E_mon_before_CR = E_monitor(
//DEBUG filename = "E_mon_before_CR", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 15.66-dz) RELATIVE Origin
COMPONENT CR = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.35, omega = Res*PI, n=6, w=0.05511346046, j=jitter, t_0=15.66/v_foc+pha_offset*1e-6)
AT (0, 0, 15.66) RELATIVE Origin
//DEBUG COMPONENT E_mon_after_CR = E_monitor(
//DEBUG filename = "E_mon_after_CR", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 15.66+dz) RELATIVE Origin
COMPONENT Guide5 = Guide_channeled(
w1 = g_w, h1 = g_h, w2 = g_w, h2 = 0.06, l = 6.715-4*dz, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
AT (0, 0, 15.66+2*dz) RELATIVE Origin
//DEBUG COMPONENT PSD_Guide5 = PSD_monitor(
//DEBUG nx=128, ny=128, filename="PSD_Guide5",
//DEBUG xmin = -g_w*0.55, xmax = g_w*0.55,
//DEBUG ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 22.375-dz) RELATIVE Origin*/
//DEBUG COMPONENT E_mon_before_split = E_monitor(
//DEBUG filename = "E_mon_before_split", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 22.375-dz) RELATIVE Origin
// Simple LET guide system
COMPONENT simpleguide_211 = Guide_channeled(
w1 = 0.0385, h1 = 0.06, w2 = 0.0295, h2 = 0.05512, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==1) AT (0, 0, 22.375) RELATIVE Origin
GROUP double_funnel_21
// Split LET guide system
COMPONENT splitguide_211 = Guide_channeled(
w1 = 0.019, h1 = 0.06, w2 = 0.01, h2 = 0.05512, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==0) AT (0.00975, 0, 22.375) RELATIVE Origin
GROUP double_funnel_21
COMPONENT splitguide_212 = Guide_channeled(
w1 = 0.019, h1 = 0.06, w2 = 0.01, h2 = 0.05512, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==0) AT (-0.00975, 0, 22.375) RELATIVE Origin
GROUP double_funnel_21
//DEBUG COMPONENT TOF_before_Res2 = TOF_monitor(
//DEBUG nchan = 400, filename = "TOF_before_Res2",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 0.95*23.5/v_foc*1e6,
//DEBUG t1 = 1.05*23.5/v_foc*1e6)
//DEBUG AT (0, 0, 23.5-2*dz) RELATIVE Origin
//DEBUG COMPONENT E_mon_before_Res2 = E_monitor(
//DEBUG filename = "E_mon_before_Res2", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 23.5-dz) RELATIVE Origin
//DEBUG COMPONENT PSD_split1= PSD_monitor(
//DEBUG nx=128, ny=128, filename="PSD_split1",
//DEBUG xmin = -g_w*0.55, xmax = g_w*0.55,
//DEBUG ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 23.5-0.5*dz) RELATIVE Origin
COMPONENT Res2 = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.35, omega = Res*2*PI, n=2, w=0.031, wc=InsertWidth, j=jitter, t_0=23.5/v_foc+pha_offset*1e-6)
AT (0, 0, 23.5) RELATIVE Origin
//DEBUG COMPONENT PSD_Res2_1 = PSD_monitor(
//DEBUG nx=256, ny=256, filename="PSD_res2_1",
//DEBUG xmin = -g_w*0.55, xmax = g_w*0.55,
//DEBUG ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 23.5+2e-7) RELATIVE Origin
//DEBUG COMPONENT TOF_betheen_Res2 = TOF_monitor(
//DEBUG nchan = 3200, filename = "TOF_betheen_Res2",xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, t0 = 24000, t1 = 24300)
//DEBUG AT (0, 0, 23.5+5e-7) RELATIVE Origin
COMPONENT Res2_counter = DiskChopper(theta_0=0,compat=0,abs_out=0,
R = 0.35, omega = -Res*2*PI, n=2, w=0.031, wc=InsertWidth, j=jitter, t_0=-23.5/v_foc-pha_offset*1e-6)
AT (0, 0, 23.5+dz) RELATIVE Origin
//DEBUG COMPONENT PSD_Res2 = PSD_monitor(
//DEBUG nx=256, ny=256, filename="PSD_res2",
//DEBUG xmin = -g_w*0.55, xmax = g_w*0.55,
//DEBUG ymin = -g_h*0.55, ymax = g_h*0.55)
//DEBUG AT (0, 0, 23.5+12e-7) RELATIVE Origin
//DEBUG COMPONENT x_vs_tof = Monitor_nD(
//DEBUG options = "x limits [-0.0155,0.0155], t limits [0.0241 0.0242]",
//DEBUG filename = "tof_vs_x", xwidth = 0.031, yheight = g_h,
//DEBUG bins = 256)
//DEBUG AT (0, 0, 23.5+15e-7) RELATIVE Origin
//DEBUG COMPONENT y_vs_tof = Monitor_nD(
//DEBUG options = "y limits [-0.05512/2,0.05512/2], t limits [0.0241 0.0242]",
//DEBUG filename = "tof_vs_4", xwidth = 0.031, yheight = g_h,
//DEBUG bins = 256)
//DEBUG AT (0, 0, 23.5+16e-7) RELATIVE Origin
//DEBUG COMPONENT E_mon_after_Res2 = E_monitor(
//DEBUG filename = "E_mon_after_Res2", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan = 200)
//DEBUG AT (0, 0, 23.5+2*dz) RELATIVE Origin
// Simpler design with unsplit guide:
COMPONENT simpleguide_221 = Guide_channeled(
w2 = 0.0385, h2 = 0.05, w1 = 0.0305, h1 = 0.05488, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==1) AT (0, 0, 23.525) RELATIVE Origin
GROUP double_funnel_22
// LET design with split guides:
COMPONENT splitguide_221 = Guide_channeled(
w2 = 0.019, h2 = 0.05, w1 = 0.011, h1 = 0.05488, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==0) AT (0.00975, 0, 23.525) RELATIVE Origin
GROUP double_funnel_22
COMPONENT splitguide_222 = Guide_channeled(
w2 = 0.019, h2 = 0.05, w1 = 0.011, h1 = 0.05488, l = 1.1, alphax = 4.38, alphay = 4.38 ,
W=3e-3, mx = 2, my = 3)
WHEN (simpleflag==0) AT (-0.00975, 0, 23.525) RELATIVE Origin
GROUP double_funnel_22
//DEBUG COMPONENT E_mon_after_guide = E_monitor(
//DEBUG filename = "E_mon_after_guide", xmin = -g_w*0.55,
//DEBUG xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
//DEBUG Emax= E_max+(E_max-E_min)/10, nchan=200)
//DEBUG AT (0, 0, 24.625+dz) RELATIVE Origin
COMPONENT PSD_sample = PSD_monitor(
nx=256, ny=256, filename="PSD_sample",
xmin = -g_w*0.55, xmax = g_w*0.55,
ymin = -g_h*0.55, ymax = g_h*0.55)
AT (0, 0, 25-3*dz) RELATIVE Origin
COMPONENT sample_coarse_TOF = TOF_monitor(
nchan = 200, filename = "sample_coarse_TOF", xmin = -0.1, xmax = 0.1,
ymin = -0.1, ymax = 0.1, t0 = 20000, t1 = 140000)
AT (0, 0, 25-2*dz) RELATIVE Origin
COMPONENT sample_fine_TOF = TOF_monitor(
nchan = 400, filename = "sample_fine_TOF", xmin = -0.1, xmax = 0.1,
ymin = -0.1, ymax = 0.1,
//t0 = 0.95*25/v_foc*1000000, t1 = 1.05*25/v_foc*1000000
t0 = 2.55e4, t1 = 2.58e4)
AT (0, 0, 25-dz) RELATIVE Origin
COMPONENT E_mon_sample_coarse = E_monitor(
filename = "E_mon_sample_coarse", xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_min-(E_max-E_min)/10,
Emax= E_max+(E_max-E_min)/10, nchan = 200)
AT (0, 0, 25) RELATIVE Origin
COMPONENT E_mon_sample_fine = E_monitor(
filename = "E_mon_sample_fine", xmin = -g_w*0.55,
xmax = g_w*0.55, ymin = -g_h*0.55, ymax = g_h*0.55, Emin = E_foc-0.1,
Emax= E_foc+0.1, nchan = 200)
AT (0, 0, 25+dz) RELATIVE Origin
END