/******************************************************************************* * * McStas, neutron ray-tracing package * Copyright (C) 1997-2008, All rights reserved * Risoe National Laboratory, Roskilde, Denmark * Institut Laue Langevin, Grenoble, France * * Instrument: WOFSANS * * %Identification * Written by: Stavros Samothrakis, PSI * Date: 2021-2023 * Origin: PSI * %INSTRUMENT_SITE: HighNESS * * Instrument developed for the HighNESS EU project, describing a Wolter Optics * Focusing SANS (WOFSANS), applied for the study of moderator parameters. * * %Description * Instrument developed for the HighNESS EU project, describing a Wolter Optics * Focusing SANS (WOFSANS_v2), applied for the study of moderator parameters. * * %Example: WOFSANS width=0.15 Detector: PSD_10_I=4e+09 * * %Parameters * focusing_rectangle: [m] Dimensions, both width and height of the source focusing area * width: [m] Width-dimension of the source * height: [m] Height-dimension of the source * Emin: [meV] Minimum energy of neutron beam simulated from source * Emax: [meV] Maximum energy of neutron beam simulated from source * l_min: [AA] Minimum wavelength allowed through emulated chopper system * pulseskip: [1] Flag to skip one or more pulse frames in bandwidth calculation * npulses: [1] Number of pulses to simulate * chopper1_flag [1] Switch emulated chopper on/off * det: [m] Detector position for bandwidth calculation * R0: [1] R0 low-angle reflectivity of optical coating * m: [1] m-value of optical coating * alpha: [AA] alpha parmeter of optical coating * W: [AA-1] Supermirror cut-off, optical coating * nshells_ph: [1] Number of conical shells simulated in PH-Wolter optic * fi_ph: [m] Focal length for PH-Wolter optic * PH_beamstop: [1] Flag to (de)activate Beamstop post PH-Wolter optic * nshells_eh: [1] Number of conical shells simulated in EH-Wolter optic * fs_eh: [m] Upstream focal length for EH-Wolter optic * fi_eh: [m] Downstream focal length for EH-Wolter optic * EH_beamstop: [1] Flag to (de)activate Beamstop post EH-Wolter optic * * %Link * V. Santoro et. al. Nuc. Sci. Eng. 2023 https://doi.org/10.1080/00295639.2023.2204184 * https://highnessproject.eu * This work was supported by the HighNESS project and is funded by European Commission (H2020-951782). * * %End *******************************************************************************/ DEFINE INSTRUMENT WOFSANS(double focusing_rectangle = 0.15,double width=0.15, double Emin=0.2, double Emax=100000.0, double l_min=7.2, int pulseskip=0, int npulses=1, int chopper1_flag = 0, double det = 41.5, R0=0.99, m=3, W=0.003, alpha=6.07,nshells_ph = 28, fi_ph=5.5, PH_beamstop = 1, nshells_eh = 25, fs_eh=8, fi_eh=6, EH_beamstop = 1) DECLARE %{ /* #include "WOFSANS_functions.c" */ /* Actual file embedded here: */ //functions // calculate chopper open time double calcopentime(double pos, double minl, double maxl){ // base calculation on minl from start of pulse, // maxl from end of pulse. // it is assumed that maxl-minl is not greater than frame width double opentime; //printf("pos=%g; minl=%g; maxl=%g;\n",pos,minl,maxl); opentime = ((maxl-minl)*(pos)/3.96)+2.86; return opentime; } double calcOT(double opening, double freq){ //opentime in ms return 1000*opening/(360*freq); } // calculate chopper disk 1 delay double calcdisk1delay(double pos, double opening, double minl, double freq){ // base calculation on leading edge at guide centre // delay is tof for leading edge + rotation of half opening double delay; delay = (minl*(pos)/3.96)+((opening/2)*1000/(freq*360)); delay = delay/1000; return delay; } // calculate chopper disk 2 delay double calcdisk2delay(double pos, double opening, double maxl, double freq){ // base calculation on trailing edge at guide centre // delay is tof for trailing edge - rotation of half opening double delay; delay = (maxl*(pos)/3.96)+2.86-((opening/2)*1000/(freq*360)); delay = delay/1000; return delay; } //calculate lambda double calclambda(double starttime,double tof,double dist){ return (tof-starttime)*3.96/dist; } // calculate angle of arm after vertically curved guide //double calcAlpha(double length, double radius) { // return RAD2DEG * length/radius; //} // calculate position and angle of arm after vertically curved guide/ //double calcY(double length, double radius) { // double alpha = DEG2RAD * calcAlpha(length, radius); // return radius*(1.0-cos(alpha)); //} // calculate position and angle of arm after vertically curved guide //double calcZ(double length, double radius) { // double alpha = DEG2RAD * calcAlpha(length, radius); // return radius*sin(alpha); //} /* end of WOFSANS_functions.c */ double round_par=10.0; double u=0.0001; //gap between components double coeff1, coeff2; #pragma acc declare create(coeff1,coeff2) char BrillianceFile[256]; double bandwidth; double l_max; //Optics Variables double optics_start_pos; double focus_pos; // Variables for time generation double npulses_declare; double t_between_pulses; double pulse_n; double pulse_delay; double Lmin_source; double Lmax_source; %} USERVARS %{ int was_scattered; int was_scattered2; %} INITIALIZE %{ bandwidth = (71.4*(1.0+(double)pulseskip)*3.96/det); printf("bandwidth = %g\n",bandwidth); l_max=l_min+round(bandwidth*round_par)/round_par; printf("l_min = %g\n",l_min); printf("l_max = %g\n",l_max); optics_start_pos =2.0; npulses_declare = npulses; if (width==0.15) { sprintf(BrillianceFile,"HighNESS_Mean_Brilliance_15x15.dat"); } else if (width==0.10) { sprintf(BrillianceFile,"HighNESS_Mean_Brilliance_10x10.dat"); } else if (width==0.05) { sprintf(BrillianceFile,"HighNESS_Mean_Brilliance_5x5.dat"); } else if (width==0.03) { sprintf(BrillianceFile,"HighNESS_Mean_Brilliance_3x3.dat"); } if (width==0.15) { coeff1 = 1.0824, coeff2 = 1.8; } else if (width==0.10) { coeff1 = 1.0716, coeff2 = 1.8; } else if (width==0.05) { coeff1 = 1.0575, coeff2 = 1.8; } else if (width==0.03) { coeff1 = 1.0494, coeff2 = 1.9; } #pragma acc update device(coeff1,coeff2) /* Calculate wavelengths via sqrt(E) -> v and v->k */ Lmin_source = 2*PI/(V2K*(SE2V*sqrt(Emax))); Lmax_source = 2*PI/(V2K*(SE2V*sqrt(Emin))); printf("Source Wavelength band: %g %g\n",Lmin_source,Lmax_source); %} //-------------------------------------------------------------------------------------------// //----------------------------COMPONENTS START--------------------------------// //-----------------------------------------------------------------------------------------// //----------------------------------------------------------------------------------------// TRACE //-------------------------------------------------------------------------------------------// //--------------------------------------SOURCE-----------------------------------------// //-----------------------------------------------------------------------------------------// COMPONENT origin = Progress_bar() AT (0, 0, 0) RELATIVE ABSOLUTE /*********************************************************************************************/ COMPONENT Source = Source_gen( flux_file=BrillianceFile, dist=optics_start_pos, focus_xw=focusing_rectangle, focus_yh=focusing_rectangle, yheight=width, xwidth=width, flux_file_perAA=1) AT (0, 0, 0) RELATIVE PREVIOUS EXTEND %{ p *= coeff1 + coeff2*y; %} COMPONENT psd_Source = PSD_monitor( nx=100, ny=100, filename="PSD_0001", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT l_Source = L_monitor( nL=100, filename="L_0001", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD1 = Monitor_nD( xwidth = width, yheight = width, options="intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0001.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_Source = Divergence_monitor( nh=100, nv=100, filename="DivMon_0001", xwidth=0.2, yheight=0.2, maxdiv_h=5, maxdiv_v=5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_Source = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0001", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_Source = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0001", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS /*Focusing Position = Optics Start Position*/ COMPONENT psd_FocusingPosition = PSD_monitor( nx=100, ny=100, filename="PSD_0002", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, optics_start_pos) RELATIVE Source COMPONENT l_FocusingPosition = L_monitor( nL=100, filename="L_0002", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD2 = Monitor_nD( xwidth = focusing_rectangle, yheight = focusing_rectangle, options="intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0002.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_FocusingPosition = Divergence_monitor( nh=100, nv=100, filename="DivMon_0002", xwidth=0.2, yheight=0.2, maxdiv_h=5, maxdiv_v=5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_FocusingPosition = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0002", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_FocusingPosition = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0002", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS /* Measures brilliance of the "full" cold source */ COMPONENT BrillmonLD2 = Brilliance_monitor( nlam = 101, nt = 101, filename = "Bril_0001", t_0 = 0, t_1 =1e6, lambda_0 = Lmin_source, lambda_1 = Lmax_source, Freq =14, toflambda=1 ,tofcuts=0, source_dist=optics_start_pos, srcarea=(width*width*100*100), xwidth=focusing_rectangle, yheight=focusing_rectangle, restore_neutron=1) AT (0, 0, optics_start_pos) RELATIVE Source //-------------------------------------------------------------------------------------------// //--------------------------------Guides and monitors-------------------------------// //-----------------------------------------------------------------------------------------// //----------------------------------------------------------------------------------------// //-----------------------------------Monolith/Slits-----------------------------------// COMPONENT monolith_slit1 = Slit( xwidth=0.15, yheight=0.15) AT (0, 0, 2) RELATIVE ABSOLUTE COMPONENT monolith_slit2 = Slit( xwidth=0.15, yheight=0.15) AT (0, 0, 3.5) RELATIVE monolith_slit1 COMPONENT psd_monolith = PSD_monitor( nx=100, ny=100, filename="PSD_0003", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, 0) RELATIVE monolith_slit2 COMPONENT l_monolith = L_monitor( nL=100, filename="L_0003", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD3 = Monitor_nD( xwidth = 0.15, yheight = 0.15, options="intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0003.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_monolith = Divergence_monitor( nh=100, nv=100, filename="DivMon_0003", xwidth=0.2, yheight=0.2, maxdiv_h=5, maxdiv_v=5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_monolith = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0003", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_monolith = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0003", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS //------------------------------------------------------------------------------------------// //--------------------------PH Wolter Optic - Condenser-------------------------// COMPONENT PSD_before_slit_cPH = PSD_monitor( nx=100, ny=100, filename="PSD_before_slit_cPH", xwidth=1.2, yheight=1.2, restore_neutron=1) AT (0, 0, 10.0-1.3-u-u) ABSOLUTE COMPONENT slit_cPH = Slit( radius=0.075) AT (0, 0, 10.0-1.3-u) ABSOLUTE COMPONENT PSD_slit_cPH = PSD_monitor( nx=100, ny=100, filename="PSD_0004", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, 0) RELATIVE slit_cPH COMPONENT l_slit_cPH = L_monitor( nL=100, filename="L_0004", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD4 = Monitor_nD( xwidth = 0.075*2, options="disk, intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0004.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_slit_cPH = Divergence_monitor( nh=100, nv=100, filename="DivMon_0004", xwidth=0.2, yheight=0.2, maxdiv_h=5, maxdiv_v=5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_slit_cPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0004", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_slit_cPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0004", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS /*Condenser Lens*/ COMPONENT cPH = Conics_PH(R0=R0,alpha=alpha,W=W,m=m, nshells=nshells_ph, focal_length=fi_ph, rmin=0.010, rmax=0.075, lp=1.3, lh=1.0, disk=1 ) AT(0,0,10.0) RELATIVE ABSOLUTE COMPONENT beamstop_cPH = Beamstop( radius=0.010) WHEN(PH_beamstop == 1) AT (0, 0, 1.0+u) RELATIVE PREVIOUS COMPONENT psd_cPH = PSD_monitor( nx=1000, ny=1000, filename="PSD_0005", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, 1.0+u+u) RELATIVE cPH COMPONENT l_cPH = L_monitor( nL=100, filename="L_0005", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD5 = Monitor_nD( xwidth = 0.075*2, options="disk, intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0005.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_cPH = Divergence_monitor( nh=100, nv=100, filename="DivMon_0005", xwidth=0.2, yheight=0.2, maxdiv_h=5, maxdiv_v=5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_cPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0005", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_cPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0005", xwidth=0.2, yheight=0.2, maxdiv_h=5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS //----------------------------------------------------------------------------------------// //-----------------------------------Bunker/Slits-----------------------------------// //COMPONENT bunker_slit1 = Slit( // xwidth=0.15, // yheight=0.15) //AT (0, 0, 11.5) ABSOLUTE //COMPONENT bunker_slit2 = Slit( // xwidth=0.15, // yheight=0.15) //AT (0, 0, 3.5) RELATIVE bunker_slit1 COMPONENT psd_bunker = PSD_monitor( nx=100, ny=100, filename="PSD_0006", xwidth=1.2, yheight=1.2, restore_neutron=1) AT (0, 0, 15) ABSOLUTE COMPONENT l_bunker = L_monitor( nL=100, filename="L_0006", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD6 = Monitor_nD( xwidth = 0.07, yheight = 0.07, options="intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0006.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_bunker = Divergence_monitor( nh=100, nv=100, filename="DivMon_0006", xwidth=0.2, yheight=0.2, maxdiv_h=1, maxdiv_v=1, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_bunker = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0006", xwidth=0.2, yheight=0.2, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_bunker = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0006", xwidth=0.2, yheight=0.2, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS //------------------------------------------------------------------------------------------// //----------------------PH Wolter Optic Focusing Position----------------------// COMPONENT psd_PHfocus1 = PSD_monitor( nx=100, ny=100, filename="PSD_0007", xwidth=1.5, yheight=1.5, restore_neutron=1) AT (0, 0, fi_ph-u) RELATIVE cPH COMPONENT l_PHfocus1 = L_monitor( nL=100, filename="L_0007", xwidth=0.5, yheight=0.5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD7 = Monitor_nD( xwidth = 0.07, yheight = 0.07, options="intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0007.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_PHfocus1 = Divergence_monitor( nh=100, nv=100, filename="DivMon_0007", xwidth=0.5, yheight=0.5, maxdiv_h=1, maxdiv_v=1, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_PHfocus1 = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0007", xwidth=0.5, yheight=0.5, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_PHfocus1 = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0007", xwidth=0.5, yheight=0.5, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS COMPONENT slit_focusPH = Slit( radius=0.002*2) AT (0, 0, fi_ph) RELATIVE cPH COMPONENT psd_slit_focusPH = PSD_monitor( nx=100, ny=100, filename="PSD_0008", xwidth=0.02, yheight=0.02, restore_neutron=1) AT (0, 0, u) RELATIVE slit_focusPH COMPONENT l_slit_focusPH = L_monitor( nL=100, filename="L_0008", xwidth=0.02, yheight=0.02, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD8 = Monitor_nD( xwidth =0.002*2, options="disk, intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0008.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_slit_focusPH = Divergence_monitor( nh=100, nv=100, filename="DivMon_0008", xwidth=0.02, yheight=0.02, maxdiv_h=0.5, maxdiv_v=0.5, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_slit_focusPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0008", xwidth=0.02, yheight=0.02, maxdiv_h=0.5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_slit_focusPH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0008", xwidth=0.02, yheight=0.02, maxdiv_h=0.5, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS //------------------------------------------------------------------------------------------// //---------------------------EH Wolter Optic - Objective--------------------------// COMPONENT slit_EH = Slit( radius=0.1) AT (0, 0, fs_eh-0.9-u) RELATIVE slit_focusPH COMPONENT cEH = Conics_EH(R0=R0,alpha=alpha,W=W,m=m, nshells=nshells_eh, focal_length_u=fs_eh, focal_length_d=fi_eh, rmin=0.01, rmax=0.1, le=0.9, lh=0.82, disk=1) AT(0,0,fs_eh) RELATIVE slit_focusPH EXTEND %{ was_scattered2=SCATTERED; %} COMPONENT beamstop_cEH = Beamstop( radius=0.01) WHEN(EH_beamstop == 1) AT (0, 0, 0.82+u) RELATIVE PREVIOUS COMPONENT psd_cEH = PSD_monitor( nx=100, ny=100, filename="PSD_0009", xwidth=0.2, yheight=0.2, restore_neutron=1) AT (0, 0, 0.82+u) RELATIVE cEH COMPONENT l_cEH = L_monitor( nL=100, filename="L_0009", xwidth=0.2, yheight=0.2, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT nD9 = Monitor_nD( xwidth =0.10*2, options="disk, intenisity per cm2, lambda bins=100 limits=[0.0286014 20.2243], file=nD_0009.dat", restore_neutron = 1 ) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_cEH = Divergence_monitor( nh=100, nv=100, filename="DivMon_0009", xwidth=0.2, yheight=0.2, maxdiv_h=1, maxdiv_v=1, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT h_divlambda_cEH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_h_0009", xwidth=0.2, yheight=0.2, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT v_divlambda_cEH = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_v_0009", xwidth=0.2, yheight=0.2, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS ROTATED (0, 0, 90) RELATIVE PREVIOUS //-----------------------------------------------------------------------------------------------// //---------------------------Monitors Along Sample Positions--------------------------// COMPONENT PSD_10 = COPY(psd_cEH)(filename="PSD_0010") AT (0, 0, 0.82+2) RELATIVE cEH COMPONENT PSD_11 = COPY(psd_cEH)(filename="PSD_0011") AT (0, 0, 0.82+4) RELATIVE cEH COMPONENT PSD_12 = COPY(psd_cEH)(filename="PSD_0012") AT (0, 0, 0.82+6) RELATIVE cEH COMPONENT PSD_13 = COPY(psd_cEH)(filename="PSD_0013") AT (0, 0, 0.82+8) RELATIVE cEH COMPONENT l_10 = COPY(l_cEH)(filename="L_0010") AT (0, 0, 0.82+2) RELATIVE cEH COMPONENT l_11 = COPY(l_cEH)(filename="L_0011") AT (0, 0, 0.82+4) RELATIVE cEH COMPONENT l_12 = COPY(l_cEH)(filename="L_0012") AT (0, 0, 0.82+6) RELATIVE cEH COMPONENT l_13 = COPY(l_cEH)(filename="L_0013") AT (0, 0, 0.82+8) RELATIVE cEH COMPONENT divergence_monitor_10 = COPY(divergence_monitor_cEH)(filename="DivMon_0010") AT (0, 0, 0.82+2) RELATIVE cEH COMPONENT divergence_monitor_11 = COPY(divergence_monitor_cEH)(filename="DivMon_0011") AT (0, 0, 0.82+4) RELATIVE cEH COMPONENT divergence_monitor_12 = COPY(divergence_monitor_cEH)(filename="DivMon_0012") AT (0, 0, 0.82+6) RELATIVE cEH COMPONENT divergence_monitor_13 = COPY(divergence_monitor_cEH)(filename="DivMon_0013") AT (0, 0, 0.82+8) RELATIVE cEH COMPONENT divlambda_10 = COPY(h_divlambda_cEH)(filename="DivLambdaMon_h_0010") AT (0, 0, 0.82+2) RELATIVE cEH COMPONENT h_divlambda_11 = COPY(h_divlambda_cEH)(filename="DivLambdaMon_h_0011") AT (0, 0, 0.82+4) RELATIVE cEH COMPONENT h_divlambda_12 = COPY(h_divlambda_cEH)(filename="DivLambdaMon_h_0012") AT (0, 0, 0.82+6) RELATIVE cEH COMPONENT h_divlambda_13 = COPY(h_divlambda_cEH)(filename="DivLambdaMon_h_0013") AT (0, 0, 0.82+8) RELATIVE cEH COMPONENT v_divlambda_10 = COPY(v_divlambda_cEH)(filename="DivLambdaMon_v_0010") AT (0, 0, 0.82+2) RELATIVE cEH COMPONENT v_divlambda_11 = COPY(v_divlambda_cEH)(filename="DivLambdaMon_v_0011") AT (0, 0, 0.82+4) RELATIVE cEH COMPONENT v_divlambda_12 = COPY(v_divlambda_cEH)(filename="DivLambdaMon_v_0012") AT (0, 0, 0.82+6) RELATIVE cEH COMPONENT v_divlambda_13 = COPY(v_divlambda_cEH)(filename="DivLambdaMon_v_0013") AT (0, 0, 0.82+8) RELATIVE cEH //-----------------------------------------------------------------------------------------------// //-----------------------------------Detector Position-------------------------------------// COMPONENT psd_monitor_detector = PSD_monitor( nx=1000, ny=1000, filename="PSD_0014", xwidth=0.02, yheight=0.02, restore_neutron=1) AT (0, 0, fi_eh) RELATIVE cEH COMPONENT l_detector = L_monitor( nL=100, filename="L_0014", xwidth=0.02, yheight=0.02, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divergence_monitor_detector = Divergence_monitor( nh=100, nv=100, filename="DivMon_0014", xwidth=0.02, yheight=0.02, maxdiv_h=1, maxdiv_v=1, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT divlambda_detector = DivLambda_monitor( nL=100, nh=100, filename="DivLambdaMon_0014", xwidth=0.02, yheight=0.02, maxdiv_h=1, Lmin=Lmin_source, Lmax=Lmax_source, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT psd_monitor_detector_big = PSD_monitor( nx=750, ny=750, filename="PSD_0015", xwidth=3, yheight=3, restore_neutron=1) AT (0, 0, 0) RELATIVE PREVIOUS FINALLY %{ %} END