/******************************************************************************* * * McStas, neutron ray-tracing package * Copyright (C) 1997-2008, All rights reserved * Risoe National Laboratory, Roskilde, Denmark * Institut Laue Langevin, Grenoble, France * * Instrument: ILL_IN4 * * %Identification * Written by: Emmanuel Farhi * Date: March 5th 2015. * Origin: ILL (France) * %INSTRUMENT_SITE: ILL * * The IN4 thermal Time-of-Flight spectrometer at the ILL (H12 tube). * * %Description * IN4C is a high-flux time-of-flight spectrometer used for the study of excitations * in condensed matter. It works in the thermal neutron energy range (10-100 meV). * * Primary spectrometer * * The main components of the beam conditioning part are the two background * choppers, the double curvature mono-chromator with four faces and the Fermi * chopper. The background choppers are rapidly pulsating beam shutters which act * as a low-pass filter. Thus they eliminate from the beam most of the fast * neutrons and gamma rays that would give background noise in the spectra. The * modular shielding encloses the background choppers in separate compartments in * order to cut off these undesired neutrons as early as possible. A suitable * energy is selected from the thermal neutron spectrum with the crystal * monochromator. The monochromator, an assembly of 55 crystal pieces, * concentrates the divergent incident beam onto a small area at the sample * position. The full use of the available solid angle gives a high incident * flux. The vertical curvature is fixed, and the horizontal * variable curvature of the monochromator is essential in controlling * the time and space focussing conditions for optimal performance (see H. Mutka, * Nucl. Instr. and Meth. A 338 (1994) 144). The Fermi chopper rotates at speeds * of up to 40000 rpm. It transmits short neutron pulses (10 ... 50 µs) to the * sample. The time-of-flight of neutrons between the chopper and the sample (1 * ... 5 ms) can be measured by using precise electronic circuitry. * A sapphire (Al2O3) filter can be inserted in the beam to remove the fast neutrons * background. * * Monochromators: * PG 002 DM=3.355 AA (Highly Oriented Pyrolythic Graphite) * PG 004 DM=1.677 AA (used for lambda=1.1) * PG 006 DM=1.118 AA * Cu 220 DM=1.278 AA * Cu 111 DM=2.095 AA * Take-off: 39-65 deg * flux at sample: 5e5 n/s/cm2 (at 1.1 Angs) * * Secondary spectrometer * * The sample environment is designed to accommodate standard * cryostats and furnaces. A radial collimator around the sample position is used * to cut the scattering from the sample environment. The secondary flight-path * is in vacuum to avoid parasitic scattering of the transmitted neutrons. The * detector bank covers scattering angles of up to 120°. In addition to the 3He * detector tubes (length 300 mm, width 30 mm, elliptical section, pressure 6 * bar) a 3He filled multidetector (eight sectors with 12 radial cells each; * outer diameter Phi 60 cm) will allow us to observe forward scattering. The * time-of-flight spectra measured at various angles are further treated in order * to obtain the scattering function S(Q,w) using e.g. LAMP. * * In this model, the sample is a cylindrical liquid/powder/glass scatterer * surrounded by a container and an Al cryostat. * * %Example: lambda=1.2 DM=1.677 Detector: sample_flux_I=4.43306e+06 * * %Parameters * lambda: [Angs] wavelength * dlambda: [Angs] wavelength HALF spread at source * DM: [Angs] monochromator d-spacing * ETAM: [arcmin] monochromator mosaic FWHM * RMH: [m] Monochromator horizontal curvature. Use -1 for auto. * ratio: [1] Disk Chopper ratio (nu=nu_FC/ratio) * dE: [meV] Inelastic energy for time focusing * Sapphire_present: [1] Flag, when 1 the Al2O3 filter is active * sample_coh: [str] Sample coherent dynamic structure factor (.sqw) or NULL * sample_inc: [str] Sample incoherent dynamic structure factor (.sqw) or NULL * order: [1] The number of multiple orders at the monochromator * * %Link * H. Mutka, Nucl. Instr. and Meth. A 338 (1994) 144 * %Link * http://www.ill.eu/fr/instruments-support/instruments-groups/instruments/in4c * %End *******************************************************************************/ DEFINE INSTRUMENT ILL_IN4(lambda=2.2, dlambda=0.1, DM=3.355, ETAM=35, RMH=-1, ratio=4, dE=0, Sapphire_present=1, string sample_coh="Dirac2D.sqw", string sample_inc="NULL", order=1) DECLARE %{ double A1, RMH, RMV=-1.9; double LFS = 0.675; /* FC to Sample distance */ double LSD = 2; /* Sample to Detector distance */ double LVS = 0.583; /* BC1 to VS distance */ double flag_sample=0; /* flag set to 1 when sample scatters */ double flag_env = 0; /* flag set to 1 when sample environment scatters */ double sample_width = 0.05; double sample_thickness = 1e-3; double sample_height = 0.05; double environment_radius = 0.05; double environment_thickness = 1e-3; double container_thickness = 5e-4; char environment[] = "Al.laz"; char container[] = "V.laz"; /* the following variables are computed in the IN4 configuration */ double d0, d2; /* IN4c distances used in NoMad/IN4 doc (Ross/Rols) */ double phase1F = 0; double nu = 0; double LMS = 0; /* [m] Mono-sample distance (aka d1) */ double LRM = 0; /* [m] Distance from source to monochromator. */ double bctr = 0; /* [m] background chopper BC2 translation from BC1 */ double phase12 = 0; /* [deg] Chopper phase BC2 wrt BC1 */ char mon_sqw[1024]; char mon_qe[1024]; double Lmin, Lmax; char flag_sample_choice=0; double flag_source_order =0; double order_extend; double t1F=0; double t12=0; double Ei=0; /* Write_Sqw: writes an Sqw file for Isotropic_Sqw as a Dirac 2D array INPUT: dq: [1] momentum binning between adjacent Dirac peaks. 0 to get bins/10. dw [1] energy binning between adjacent Dirac peaks. 0 to get bins/10. max_q: [Angs] maximum momentum transfer to generate [Angs] max_w: [meV] maximum energy transfer to generate [meV] bins: [1] S(q,w) size is bins x bins. filename: [str] output filename OUTPUT: a file containing S(q,w) the return value is the number of Durac peaks generated Simple usage: Write_Sqw_Dirac(0, 0, 20, 500, 1000, "Dirac2D.sqw") */ long Write_Sqw_Dirac(long dq, long dw, double max_q, double max_w, long bins, char *filename) { double index_q, index_w; double min_q=0, min_w=0; long bin_q=0, bin_w=0; long count=0; FILE *fid = NULL; fid = fopen(filename, "w+"); if (!fid) return(0); /* check binning */ if (bins <= 0) bins=1000; /* 1000x1000 makes a 8 Mb array */ if(dq <= 0) dq=bins/10; if(dw <= 0) dw=bins/10; bin_q=bins; bin_w=bins; /* write header */ fprintf(fid, "# Sqw data file for Isotropic_Sqw\n" "# model S(q,w) as a set of Dirac peaks, to obtain the 2D resolution function\n" "# on a (q,w) grid. (q,w) grid=%g Angs, %g meV.\n" "# filename: %s\n" "#\n" "# Physical parameters:\n" "# sigma_coh 1 coherent scattering cross section in [barn]\n" "# sigma_inc 0 incoherent scattering cross section in [barn]\n" "# sigma_abs 0 absorption scattering cross section in [barn]\n" "# density 1 in [g/cm^3.5]\n" "# weight 1 in [g/mol]\n" "# nb_atoms 1 in [atoms/unit cell]\n" "#\n", (max_q-min_q)/bin_q, (max_w-min_w)/bin_w, filename); /* write q axis */ fprintf(fid, "# WAVEVECTOR vector of m=%i values %g:%g in [Angstroem-1]: q\n", bin_q, min_q, max_q); for (index_q=0; index_q < bin_q; index_q++) { double q = min_q+index_q*(max_q-min_q)/bin_q; fprintf(fid, "%g ", q); } fprintf(fid, "\n"); /* write w axis */ fprintf(fid, "# ENERGY vector of n=%i values %g:%g in [meV]: w\n", bin_w, min_w, max_w); for (index_w=0; index_w < bin_w; index_w++) { double w = min_w+index_w*(max_w-min_w)/bin_w; fprintf(fid, "%g ", w); } fprintf(fid, "\n"); /* write Sqw matrix as zero except when on grid */ fprintf(fid, "# matrix of S(q,w) values (m=%i rows x n=%i columns), one row per q value: sqw\n", bin_q, bin_w); for (index_q=0; index_q < bin_q; index_q++) { for (index_w=0; index_w < bin_w; index_w++) { double sqw = 0; if (fmod(index_q, dq) == 0 && fmod(index_w, dw) == 0) { sqw=1; count++; } fprintf(fid, "%g ", sqw); } fprintf(fid, "\n"); } fprintf(fid, "\n"); fprintf(fid, "# end of Sqw file %s\n", filename); fclose(fid); return(count); /* size of S(q,w) generated */ } /* Write_Sqw_Dirac */ %} INITIALIZE %{ double Vi, Ki; double thetaB; double dSx=5.556; /* BC1 to sample along beam tube axis */ double dSy=1.3; /* lateral position of sample */ double L1F, L1M, LMF; if (DM <= 0) { if (lambda < 1.0) DM=1.118; else if (lambda < 1.8) DM=1.677; else DM=3.355; } thetaB = -asin(lambda/DM/2); A1 = thetaB*RAD2DEG; Ki = 2*PI/lambda; Vi = K2V*fabs(Ki); Ei = VS2E*Vi*Vi; /* IN4c configuration */ /* compute distances for IN4 */ d2 = fabs(dSy/tan(2*thetaB)); LMS= fabs(dSy/sin(2*thetaB)); /* Monok to Sample = d1 */ d0 = dSx - d2 - LVS; /* VS to Monok */ /* set distances for IN4c */ LRM = 6.1 + LVS + d0; L1M= LRM - 6.1; /* BC1 to Monok */ LMF= LMS-LFS; /* Monok to Fermi */ L1F= L1M + LMF; /* BC1 to Fermi */ /* FC rotation frequency (Master) */ nu = K2V/( fabs(DM*cos(thetaB)) * (LFS+LSD*pow( 1-dE/Ei, -1.5)) *(1-LMS/d0) ); phase12 = 22.5; /* compute position of BC2 and phases */ t12 = phase12/360/(nu/ratio); /* time delay [s] */ bctr = t12*Vi; if (bctr > 2.965) { /* chopper BC2 at its maximum position, from BC1 */ bctr = 2.965; } /* compute back the phases (in case bctr has changed) */ phase12 = -bctr*360*(nu/ratio)/Vi; /* distance BC1-FC */ t1F = ((LMS-LFS)+(LRM-6.1))/Vi; phase1F = -t1F*360*nu; if (RMH < 0) { double L = 1/(1/d0+1/LMS); /* Monok optical focusing distance */ RMH= 2*L/sin(DEG2RAD*A1); /* RH = 2*L/sin(DEG2RAD*A1); */ } if (dlambda <= 0) dlambda = lambda*.95; Lmin = lambda-dlambda; Lmax = lambda+dlambda; if (Lmin < 0) Lmin = 0.1; if (Lmax > 3.5) Lmax = 3.5; MPI_MASTER( /* print some information when starting */ printf("%s: Thermal ToF spectrometer\n", NAME_CURRENT_COMP); printf(" Divergence at the lead shutter: dX =%g [deg]\n", atan2(0.2,5.2)*RAD2DEG); printf(" Take-off at monochromator: A1 =%g [deg] ; DM=%g [Angs]\n", A1, DM); printf(" Incident energy: Ei =%g [meV] ; Ki=%g [Angs-1]\n", Ei, Ki); printf(" Incident velocity: Vi =%g [m/s]\n", Vi); printf(" Source-Mono distance: LRM =%g [m]\n", LRM); printf(" Virtual Source-Mono distance: d0 =%g [m]\n", d0); printf(" Mono-Sample distance: LMS =%g [m] (d1)\n", LMS); printf(" Curvature at monochromator: RMH =%g [m] ; RMV=%g [m]\n", RMH, RMV); printf(" Fermi Chopper Frequency: nu =%g [Hz] ; rpm=%g [rpm]\n", nu, nu*60); printf(" BC2 phase wrt BC1: PhiBC2=%g [deg] L12=%g [m] delay t12=%g [s] (BCTR)\n", phase12, bctr, t12); printf(" FC phase wrt BC1: PhiFC =%g [deg] L1F=%g [m] delay t1F=%g [s]\n", phase1F, L1F, t1F); /* print a visual representation of distances */ printf("Distances: in [m]\n"); printf("[H12] %g [BC1] %g [VS] %g [BC2] %g [PG] %g [FC] %g [Spl] %g [Det]\n", 6.1, LVS, bctr - LVS, LRM - (6.1 + bctr), LMS - LFS, LFS, LSD); /* generate Sqw Dirac array */ printf("\nGenerate %li Dirac peaks on (q,w) grid.\n", Write_Sqw_Dirac(0, 0, 3*Ki, 5*Ei, 1000, "Dirac2D.sqw")); ); /* tests for consistency */ if (order <= 0 || order > 4) order = 4; order_extend = order; if (nu < 0 || nu > 700) exit(printf("ERROR: Invalid: Fermi master frequency nu=%g [Hz]. Change DM ?\n", nu)); if (fabs(A1) < 5) exit(printf("ERROR: Invalid: mono take-off angle A1=%g [deg]. Change DM ?\n", A1)); if (bctr < 0) exit(printf("Invalid: BC1-BC2 distance bctr=%g [m]. Change DM ?\n", bctr)); if (fmod(phase12, 45.0) < 22 ) printf("%s: WARNING: The choppers are NOT in closed position phase12=%g [deg].\n", NAME_CURRENT_COMP, phase12); sprintf(mon_sqw, "user1 limits=[0 %g], user2 limits=[%g %g]", 3*Ki, -Ei, 4*Ei); sprintf(mon_qe, "banana, angle limits=[-150 150], energy limits=[0 %g]", 4*Ei); %} TRACE COMPONENT Origin = Progress_bar() AT (0, 0, 0) ABSOLUTE EXTEND %{ flag_source_order = floor(rand01()*order_extend*.99); %} COMPONENT Thermal = Source_gen( radius = 0.10/2, focus_xw = 0.1, focus_yh = 0.1, dist =5.2, lambda0=lambda, dlambda=dlambda, T1=683.7,I1=0.5874e+13,T2=257.7,I2=2.5099e+13,T3=16.7 ,I3=1.0343e+12, verbose = 1) WHEN (flag_source_order == 0) AT (0, 0, 0) RELATIVE Origin COMPONENT Thermal2 = COPY(Thermal) (lambda0=lambda/2) WHEN (flag_source_order == 1) AT (0, 0, 0) RELATIVE Origin COMPONENT Thermal3 = COPY(Thermal) (lambda0=lambda/3) WHEN (flag_source_order == 2) AT (0, 0, 0) RELATIVE Origin COMPONENT Thermal4 = COPY(Thermal) (lambda0=lambda/4) WHEN (flag_source_order >= 3) AT (0, 0, 0) RELATIVE Origin /* could we put a guide in pile ? max l=2 */ /* bouchon barillet Phi=100mm, at 5.2 m */ COMPONENT Obt1 = Monitor_nD( xwidth=0.1, yheight=0.1, options="disk, slit, x y", bins=100) AT (0, 0, 5.2) RELATIVE Thermal EXTEND %{ p *= order_extend; %} COMPONENT Obt1_lambda = Monitor_nD(xwidth=0.1, yheight=0.1, options="lambda limits=[.1 3.5]", bins=100) AT (0, 0, 0.01) RELATIVE Obt1 /* sapphire filter to remove fast neutrons c along beam axis, e=90 60x110 mm */ COMPONENT SapphireFilter = Filter_gen(xwidth=0.12, yheight=0.12, filename="Al2O3_sapphire.trm") WHEN (Sapphire_present) AT (0,0,0.2) RELATIVE Obt1 COMPONENT Win1 = Monitor_nD( xwidth=0.12, yheight=0.12, options="disk, slit, x y", bins=100) AT (0,0, 0.4) RELATIVE Obt1 COMPONENT Win1_lambda = Monitor_nD(xwidth=0.06, yheight=0.1, options="lambda limits=[.1 3.5]", bins=100) AT (0, 0, 0.01) RELATIVE Win1 /* BC1 should be as early as possible. Opening of slits: 22.5 deg i.e. 6 cm */ COMPONENT BC1 = DiskChopper(radius=0.603/2, nslit=8, isfirst=1, theta_0=22.5, nu=nu/ratio, yheight=0.10, phase=0) AT (0,0, 6.1) RELATIVE Thermal /* the "Virtual Source" (which is just a slit) */ /* the monochromator makes an image of it onto the sample */ COMPONENT VS = Slit(xwidth=0.08, yheight=0.20) AT (0,0, 0.583) RELATIVE BC1 COMPONENT BC2_slit = Slit(xwidth=0.07, yheight=.12) AT (0,0, bctr-0.02) RELATIVE BC1 COMPONENT BC2_t = Monitor_nD( xwidth=0.07, yheight=0.12, options="t limits=[0.0001 0.0015]", bins=100) AT (0,0, bctr-0.01) RELATIVE BC1 COMPONENT BC2 = DiskChopper(radius=.643/2, nslit=8, theta_0=22.5, nu=nu/ratio, delay=t12, yheight=0.14) AT (0,0, bctr) RELATIVE BC1 COMPONENT BC2_t_post = COPY(BC2_t) AT (0,0, 0.01) RELATIVE BC2 COMPONENT Cradle = Monitor_nD( options="x y", bins=50, xwidth=.25, yheight=.25, restore_neutron=1) AT (0,0,LRM) RELATIVE Thermal COMPONENT Cradle_lambda = Monitor_nD( options="lambda limits=[.1 3.5]", bins=100, xwidth=.25, yheight=.25, restore_neutron=1) AT (0,0,LRM+0.01) RELATIVE Thermal COMPONENT Cradle_t = Monitor_nD( options="t limits=[0.0005 0.0019]", bins=100, xwidth=.25, yheight=.25, restore_neutron=1) AT (0,0,LRM) RELATIVE Thermal COMPONENT Mono_xy = Monitor_nD( options="x y", bins=50, xwidth=.22, yheight=.2, restore_neutron=1) AT (0,0,0) RELATIVE Cradle ROTATED (0, A1, 0) RELATIVE Cradle SPLIT COMPONENT Mono = Monochromator_curved( width=0.22, height=0.2, NH=11, NV=5, RV=RMV, RH=RMH, DM=DM, mosaic=ETAM, reflect="HOPG.rfl", transmit="HOPG.trm") AT (0,0,0) RELATIVE Cradle ROTATED (0, A1, 0) RELATIVE Cradle EXTEND %{ if (!SCATTERED) ABSORB; /* remove transmitted beam */ %} COMPONENT Mono_out = Arm() AT (0,0,0) RELATIVE Cradle ROTATED (0, 2*A1, 0) RELATIVE Cradle COMPONENT Mono_t = COPY(Cradle_t) AT (0,0,0.1*(LMS-LFS)) RELATIVE Mono_out COMPONENT FC_Pos = Monitor_nD( yheight=0.064, xwidth=0.03, options="t limits=[0.001 0.0023]", bins=100, restore_neutron=1) AT (0,0,LMS-LFS) RELATIVE Mono_out COMPONENT FC_Slit = Slit(yheight=0.064, xwidth=0.03) AT (0,0,-0.03) RELATIVE FC_Pos COMPONENT Fermi = FermiChopper(delay=t1F, radius=0.025, nu=-nu, yheight=0.064, xwidth=0.023, nslit=50, length=0.025) AT (0,0,0) RELATIVE FC_Pos EXTEND %{ if (!SCATTERED) ABSORB; %} /* sample position */ COMPONENT Sample_pos = Arm() AT (0,0,LMS) RELATIVE Mono_out COMPONENT Sample_rot = Arm() AT (0,0,0) RELATIVE Sample_pos ROTATED (0,45,0) RELATIVE Sample_pos SPLIT 100 COMPONENT sample_flux = Monitor_nD( xwidth = 0.06, yheight = 0.06, options = "x y", restore_neutron=1, bins=60) AT (0, 0, 0) RELATIVE Sample_pos EXTEND %{ flag_sample = flag_env = 0; flag_sample_choice = (rand01() > 0.5 ? 1 : 2); p *= 2; /* compensate for MC choice on 2 samples */ %} COMPONENT sample_tof = Monitor_nD( xwidth = 0.1, yheight = 0.1, options = "x, time limits=[0.0018 0.0019]", bins=100, restore_neutron=1) AT (0, 0, 0) RELATIVE Sample_pos COMPONENT sample_lambda = Monitor_nD( xwidth = 0.1, yheight = 0.1, options = "lambda limits=[.1 3.5]", bins=300, restore_neutron=1) AT (0, 0, 0) RELATIVE Sample_pos COMPONENT sample_w = Monitor_nD( xwidth = 0.1, yheight = 0.1, options = "energy", min=0, max=2*Ei, bins=100, restore_neutron=1) AT (0, 0, 0) RELATIVE Sample_pos COMPONENT sample_qxy = Monitor_nD( xwidth = 0.1, yheight = 0.1, options = "kx limits=[-0.19 0.19] ky limits=[-0.16 0.16]", bins=100, restore_neutron=1) AT (0, 0, 0) RELATIVE Sample_pos /* sample environment and cell */ /* external shield */ COMPONENT Environment_in=Isotropic_Sqw( radius = environment_radius, yheight = 0.1, thickness=environment_thickness, Sqw_coh=environment, concentric=1, verbose=0, order=1, d_phi=2*RAD2DEG*atan2(1, LSD) ) WHEN (environment_thickness > 0) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_env += SCATTERED; %} /* sample container */ COMPONENT Container_in=Isotropic_Sqw( xwidth = sample_width+1e-4+container_thickness, zdepth = sample_thickness+1e-4+container_thickness, yheight = sample_height, thickness=container_thickness, Sqw_coh=container, concentric=1, verbose=0, order=1, d_phi=2*RAD2DEG*atan2(1, LSD) ) WHEN(container_thickness > 0) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_env += SCATTERED; %} COMPONENT SampleS=Isotropic_Sqw( xwidth = sample_width, zdepth=sample_thickness, yheight = sample_height, Sqw_coh= sample_coh, Sqw_inc= sample_inc, p_interact=0.9, d_phi=2*RAD2DEG*atan2(1, LSD), order=1) WHEN (flag_sample_choice == 1) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_sample += SCATTERED; %} COMPONENT SampleV=Incoherent(xwidth = sample_width, zdepth=sample_thickness, yheight = sample_height, focus_ah = 2*RAD2DEG*atan2(1, LSD), focus_aw=150.0) WHEN (flag_sample_choice == 2) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_sample += SCATTERED; %} COMPONENT Container_out=COPY(Container_in)(concentric=0) WHEN(container_thickness > 0) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_env += SCATTERED; %} /* external shield */ COMPONENT Environment_out=COPY(Environment_in)(concentric=0) WHEN (environment_thickness > 0) AT (0, 0, 0) RELATIVE Sample_rot EXTEND %{ flag_env += SCATTERED; %} COMPONENT Detector = Monitor_nD(radius=LSD, yheight=2, restore_neutron=1, options="theta limits=[-15 135] bins=300, y bins=100, banana") AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_sample = COPY(Detector) WHEN (flag_sample) AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_env = COPY(Detector) WHEN (flag_env) AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_Sqw = Monitor_Sqw( radius=LSD, yheight=2, bins=1000, index=-9, options=mon_sqw) WHEN (flag_sample && flag_sample_choice == 1) /* "user1 limits=[0 10], user2 limits=[-50 50]" */ AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_qe = Monitor_nD( radius=LSD, yheight=2, bins=500, restore_neutron=1, options=mon_qe) WHEN (flag_sample && flag_sample_choice == 1) /* "banana, angle limits=[-150 150], energy limits=[0 50]" */ AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_SqwV = COPY(Detector_Sqw) WHEN (flag_sample && flag_sample_choice == 2) AT (0,0,0) RELATIVE Sample_pos COMPONENT Detector_qeV = COPY(Detector_qe) WHEN (flag_sample && flag_sample_choice == 2) AT (0,0,0) RELATIVE Sample_pos /* display static shapes for viz puposes only =============================== */ COMPONENT Fuel_centre = Arm() AT (0.47, 0, -0.22) RELATIVE Thermal COMPONENT H12_tube = Shape(radius=0.1/2, yheight=5) AT (0, 0, 2.5) RELATIVE Thermal ROTATED (90, 0, 0) RELATIVE Thermal COMPONENT Fuel = Shape(radius=.2, yheight=1.3) AT (0, 0, 0) RELATIVE Fuel_centre COMPONENT D2O_vessel = Shape(radius=1.3, yheight=1) AT (0, 0, 0) RELATIVE Fuel_centre COMPONENT ILL5_wall = Shape(xwidth=4, yheight=3, zdepth=.5) AT (0,0,27) RELATIVE Fuel_centre COMPONENT H2O_vessel = Shape(radius=3, yheight=1) AT (0, 0, 0) RELATIVE Fuel_centre COMPONENT Concrete_wall = Shape(radius=4.75, yheight=1) AT (0, 0, 0) RELATIVE Fuel_centre COMPONENT Barillet = Shape(radius=0.5, yheight=0.5) AT (0,0, 4.7+0.5/2) RELATIVE Thermal ROTATED (90, 0, 0) RELATIVE Thermal COMPONENT Pillar = Shape(xwidth=0.5, yheight=2, zdepth=0.5) AT (1.5, 0, 17.5) RELATIVE Thermal END