/*******************************************************************************
* McStas instrument definition URL=http://www.mcstas.org
*
* Instrument: Histogrammer
*
* %Identification
* Written by: Peter Willendrup (peter.willendrup@risoe.dk)
* Date: 2007-03-19
* Origin: Risoe
* %INSTRUMENT_SITE: Tools
*
* Takes eventfile input (Virtual_input/Vitess/MCNP/Tripoli4/MCPL formats) and applies Monitor_nD to generate
* histograms. Histograms can be chosen freely using the options string, see mcdoc Monitor_nD.comp
*
*
* %Description
*
* Takes any possible McStas eventfile inputs (Virtual_input/Vitess/MCNP/Tripoli4 formats) and applies
* Monitor_nD to generate user-selectable neutron histograms.
*
* The 'options' parameter allows to customize the type of histogram to generate.
* We suggest:
* "sphere theta phi outgoing previous" (this is the default)
* "previous, multiple, auto, x, y, z, vx, vy, vz, hdiv, vdiv, tof, lambda"
* "previous, auto, x, y"
* "previous, auto, tof, lambda"
*
* Example: mcrun Histogrammer.instr MODE=0
* - Gives information on the input parameters
*
* Example: mcrun Histogrammer.instr filename="events.dat" MODE=1 options="sphere theta phi outgoing previous"
* - Reads a Virtual_output generated event file and applies a spherical PSD
*
* %Parameters
* MODE: [int] Input file mode/format - 0 for help on usage 1=McStas,2=Vitess,3=MCNP,4=Tripoli4,5=MCPL
* filename: [string] Specifies input event file
* options: [string] Specifies the histogramming rules used by Monitor_nD.
* It MUST contain the 'previous' word - see mcdoc Monitor_nD
* bufsize: [int] Vitess_input 'buffersize' parameter - see mcdoc Vitess_input
* xwidth: [m] Horizontal width of detector, or diameter for banana,cylinder and shpere geometry
* yheight: [m] Vertical height of detector, for plate, cylinder, banana shape
*
* %BUGS
* The options string currently does not work with commas (mcrun interprets this as scan parms)
*
* %Link
* Virtual_input component (McStas event file)
* %Link
* Vitess_input component (Vitess event file)
* %Link
* Virtual_mcnp_input component (MCNP PTRAC event file)
* %Link
* Virtual_tripoli4_input component (Tripoli4 BATCH event file)
* %Link
* Monitor_nD component (detector/histogrammer)
* %Link
* MCPL_input component (MCPL event file)
*
* %End
*******************************************************************************/
DEFINE INSTRUMENT Histogrammer(string filename=0, int MODE=0 ,
string options="sphere theta phi outgoing previous",
int bufsize=10000, xwidth=0.1, yheight=0.1)
/* The DECLARE section allows us to declare variables or small */
/* functions in C syntax. These may be used in the whole instrument. */
DECLARE
%{
int file_mode;
char *VirtualI_filename;
char *MCPL_filename;
%}
/* The INITIALIZE section is executed when the simulation starts */
/* (C code). You may use them as component parameter values. */
INITIALIZE
%{
file_mode = MODE;
/* Set all filenames empty */
VirtualI_filename = NULL;
MCPL_filename = NULL;
if (file_mode == 0) {
printf("\n%s usage:\n'filename' input event file (in Virtual_input/Vitess/MCNP/Tripoli4 formats)\n", NAME_INSTRUMENT);
printf("'MODE':\n");
printf(" 0 - Print this help and exit)\n");
printf(" 1 - Virtual_input event file\n");
printf(" 2 - MCPL event file\n");
printf("'options' - options string for Monitor_nD, see mcdoc Monitor_nD.comp\n\n");
exit(-1);
} else if (file_mode == 1) {
printf("%s: Mode is 1 (Virtual_input event file)\n", NAME_INSTRUMENT);
VirtualI_filename = filename;
} else if (file_mode == 2) {
printf("%s: Mode is 5 (MCPL event file)\n", NAME_INSTRUMENT);
MCPL_filename = filename;
}
%}
/* Here comes the TRACE section, where the actual */
/* instrument is defined as a sequence of components. */
TRACE
COMPONENT Origin = Progress_bar()
AT (0,0,0) ABSOLUTE
/* event file readers *********************************************************/
COMPONENT Virtualinput = Virtual_input(
filename=VirtualI_filename)
WHEN (file_mode ==1) AT (0, 0, 0) RELATIVE Origin
COMPONENT MCPLinput = MCPL_input(
filename=MCPL_filename, verbose=1)
WHEN (file_mode ==5) AT (0, 0, 0) RELATIVE Origin
/* end file readers *********************************************************/
/*COMPONENT Sphere = PSD_monitor_4PI(*/
/* nx = 360, ny = 360, filename = "kugle.dat", radius = 1)*/
/* AT (0, 0, 0) RELATIVE Origin */
COMPONENT Monitor = Monitor_nD(options=options,xwidth=xwidth,yheight=yheight)
AT (0, 0, 0) RELATIVE Origin
END