/*************************************************************************** * McStas instrument definition URL=http://www.mcstas.org * * Instrument: Test_Magnetic_Constant * * %Identification * Written by: Peter Christiansen and Peter Willendrup * Date: August 2006 * Origin: RISOE * Release: McStas CVS_080624 * Version: $Revision: 1.6 $ * %INSTRUMENT_SITE: Tests_polarization * * This instrument demonstrates how to use the Pol_simpleBfield * component with a constant field. * * %Description * This instrument demonstrates how to use the component * Pol_simpleBfield with a constant field to make a Mezei Spin flipper. * * This instrument matches the example: Test_Pol_MSF (under tests) * made with the old component: Pol_constBfield * * %Example: ROT_ANGLE=180 Detector: pollambdaMonitor2z_I=0.0768972 * * %Parameters * * ROT_ANGLE Angle that the spin of a 5AA neutron rotates in the 0.2 m magnet [deg] * * %Link * * %End ****************************************************************************/ /* Change name of instrument and input parameters with default values */ DEFINE INSTRUMENT Test_Magnetic_Constant(ROT_ANGLE=180) /* The DECLARE section allows us to declare variables or small */ /* functions in C syntax. These may be used in the whole instrument. */ DECLARE %{ const double LAMBDA = 5.0; // AA const double DLAMBDA = 4.9; // AA const double MAGNETLENGTH = 0.2; // m double BVALUE; %} /* The INITIALIZE section is executed when the simulation starts */ /* (C code). You may use them as component parameter values. */ INITIALIZE %{ BVALUE = GetConstantField(MAGNETLENGTH, LAMBDA, ROT_ANGLE); printf("By should be %f T, to be able to rotate a %f AA neutron\n" " %f degrees over a length of %f m\n", BVALUE, LAMBDA, ROT_ANGLE, MAGNETLENGTH); %} /* Here comes the TRACE section, where the actual */ /* instrument is defined as a sequence of components. */ TRACE /* The Arm() class component defines reference points and orientations */ /* in 3D space. Every component instance must have a unique name. Here, */ /* Origin is used. This Arm() component is set to define the origin of */ /* our global coordinate system (AT (0,0,0) ABSOLUTE). It may be used */ /* for further RELATIVE reference, Other useful keywords are : ROTATED */ /* EXTEND GROUP PREVIOUS. Also think about adding a neutron source ! */ /* Progress_bar is an Arm displaying simulation progress. */ COMPONENT Origin = Progress_bar() AT (0,0,0) ABSOLUTE COMPONENT source = Source_simple(radius = 0.01, dist = 1.0, focus_xw = 0.05, focus_yh = 0.05, lambda0 = LAMBDA, dlambda = DLAMBDA, flux = 1) AT (0, 0, 0) RELATIVE Origin COMPONENT polSetter = Set_pol(px=1) AT (0, 0, 0.5) RELATIVE Origin COMPONENT pollambdaMonitor1x = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=1, my=0, mz=0, filename="pollambdaMon1x.data") AT (0, 0, 0.7) RELATIVE Origin COMPONENT pollambdaMonitor1y = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=0, my=1, mz=0, filename="pollambdaMon1y.data") AT (0, 0, 0.75) RELATIVE Origin COMPONENT pollambdaMonitor1z = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=0, my=0, mz=1, filename="pollambdaMon1z.data") AT (0, 0, 0.8) RELATIVE Origin COMPONENT armMSF = Arm() AT (0,0,1) RELATIVE Origin // The By field is set to rotate the spin 180 degrees for neutrons of wavelenth // 5 AA COMPONENT msf = Pol_simpleBfield(xwidth=0.08, yheight=0.08, zdepth=MAGNETLENGTH, Bx=0, By=BVALUE, Bz=0) AT (0, 0, 0) RELATIVE armMSF COMPONENT msfCp = Pol_simpleBfield_stop(magnet_comp_stop=msf) AT (0, 0, MAGNETLENGTH) RELATIVE armMSF COMPONENT pollambdaMonitor2x = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=1, my=0, mz=0, filename="pollambdaMon2x.data") AT (0, 0, 0.3) RELATIVE armMSF COMPONENT pollambdaMonitor2y = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=0, my=1, mz=0, filename="pollambdaMon2y.data") AT (0, 0, 0.3) RELATIVE armMSF COMPONENT pollambdaMonitor2z = PolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, npol=21, mx=0, my=0, mz=1, filename="pollambdaMon2z.data") AT (0, 0, 0.3) RELATIVE armMSF COMPONENT mpollambdaMonitor2x = MeanPolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, mx=1, my=0, mz=0, filename="mpollambdaMon2x.data") AT (0, 0, 0.3) RELATIVE armMSF COMPONENT mpollambdaMonitor2y = MeanPolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, mx=0, my=1, mz=0, filename="mpollambdaMon2y.data") AT (0, 0, 0.3) RELATIVE armMSF COMPONENT mpollambdaMonitor2z = MeanPolLambda_monitor(xwidth=0.1, yheight=0.1, nL=100, Lmin = 0.0, Lmax = 10.0, mx=0, my=0, mz=1, filename="mpollambdaMon2z.data") AT (0, 0, 0.3) RELATIVE armMSF /* This section is executed when the simulation ends (C code). Other */ /* optional sections are : SAVE */ FINALLY %{ %} /* The END token marks the instrument definition end */ END