/******************************************************************************* * * McStas, neutron ray-tracing package * Copyright 1997-2002, All rights reserved * Risoe National Laboratory, Roskilde, Denmark * Institut Laue Langevin, Grenoble, France * * Library: share/monitor_nd-lib.h * * %Identification * Written by: EF * Date: Aug 28, 2002 * Origin: ILL * Release: McStas 1.6 * Version: $Revision: 1.14 $ * * This file is to be imported by the monitor_nd related components * It handles some shared functions. * * Usage: within SHARE * %include "monitor_nd-lib" * * $Id: monitor_nd-lib.h,v 1.14 2005/08/24 13:14:40 lieutenant Exp $ * * $Log: monitor_nd-lib.h,v $ * Revision 1.14 2005/08/24 13:14:40 lieutenant * new option 'exclusive' * * Revision 1.13 2005/07/25 14:55:08 farhi * DOC update: * checked all parameter [unit] + text to be OK * set all versions to CVS Revision * * Revision 1.12 2005/07/04 08:20:16 farhi * added support for radial distributions vxy kxy and xy=radius * * Revision 1.11 2005/02/22 16:11:03 farhi * Now saving absolute position of monitors as "position" field in header * Useful for plotting e.g. flux vs distance * * Revision 1.10 2005/01/18 10:35:56 farhi * Intall new MACROs for easy User Variable usage in Monitor_nD * MONND_DECLARE(comp) * MONND_USER_TITLE(comp, num, title) * MONND_USER_VALUE(comp, num, value) * comp is the name of a Monitor_nD component; num is 1 or 2 for UserVariable * * Revision 1.9 2004/11/30 16:11:37 farhi * defined some macros for an easier User variable handling. Should be updated in the header and Comp doc * * Revision 1.8 2003/02/11 12:28:46 farhi * Variouxs bug fixes after tests in the lib directory * mcstas_r : disable output with --no-out.. flag. Fix 1D McStas output * read_table:corrected MC_SYS_DIR -> MCSTAS define * monitor_nd-lib: fix Log(signal) log(coord) * HOPG.trm: reduce 4000 points -> 400 which is enough and faster to resample * Progress_bar: precent -> percent parameter * CS: ---------------------------------------------------------------------- * * Revision 1.1 2002/08/28 11:39:00 ef * Initial revision extracted from lib/monitors/Monitor_nD.comp *******************************************************************************/ #ifndef MONITOR_ND_LIB_H #define MONITOR_ND_LIB_H "1.1.1" #define MONnD_COORD_NMAX 30 /* max number of variables to record */ typedef struct MonitornD_Defines { char COORD_NONE ; char COORD_X ; char COORD_Y ; char COORD_Z ; char COORD_VX ; char COORD_VY ; char COORD_VZ ; char COORD_T ; char COORD_P ; char COORD_SX ; char COORD_SY ; char COORD_SZ ; char COORD_KX ; char COORD_KY ; char COORD_KZ ; char COORD_K ; char COORD_V ; char COORD_ENERGY; char COORD_LAMBDA; char COORD_RADIUS; char COORD_KXY ; char COORD_VXY ; char COORD_HDIV ; char COORD_VDIV ; char COORD_ANGLE ; char COORD_NCOUNT; char COORD_THETA ; char COORD_PHI ; char COORD_USER1 ; char COORD_USER2 ; /* token modifiers */ char COORD_VAR ; /* next token should be a variable or normal option */ char COORD_MIN ; /* next token is a min value */ char COORD_MAX ; /* next token is a max value */ char COORD_DIM ; /* next token is a bin value */ char COORD_FIL ; /* next token is a filename */ char COORD_EVNT ; /* next token is a buffer size value */ char COORD_3HE ; /* next token is a 3He pressure value */ char COORD_INTERM; /* next token is an intermediate save value (percent) */ char COORD_LOG ; /* next variable will be in log scale */ char COORD_ABS ; /* next variable will be in abs scale */ char COORD_SIGNAL; /* next variable will be the signal var */ int COORD_AUTO ; /* set auto limits */ char TOKEN_DEL[32]; /* token separators */ char SHAPE_SQUARE; /* shape of the monitor */ char SHAPE_DISK ; char SHAPE_SPHERE; char SHAPE_CYLIND; char SHAPE_BANANA; /* cylinder without top/bottom, on restricted angular area */ char SHAPE_BOX ; } MonitornD_Defines_type; typedef struct MonitornD_Variables { double area; double Sphere_Radius ; double Cylinder_Height ; char Flag_With_Borders ; /* 2 means xy borders too */ char Flag_List ; /* 1 store 1 buffer, 2 is list all, 3 list all+append */ char Flag_Multiple ; /* 1 when n1D, 0 for 2D */ char Flag_Verbose ; int Flag_Shape ; char Flag_Auto_Limits ; /* get limits from first Buffer */ char Flag_Absorb ; /* monitor is also a slit */ char Flag_Exclusive ; /* absorb neutrons out of monitor limits */ char Flag_per_cm2 ; /* flux is per cm2 */ char Flag_log ; /* log10 of the flux */ char Flag_parallel ; /* set neutron state back after detection (parallel components) */ char Flag_Binary_List ; char Flag_capture ; /* lambda monitor with lambda/lambda(2200m/s = 1.7985 Angs) weightening */ int Flag_signal ; /* 0:monitor p, else monitor a mean value */ long Coord_Number ; /* total number of variables to monitor, plus intensity (0) */ long Buffer_Block ; /* Buffer size for list or auto limits */ long Neutron_Counter ; /* event counter, simulation total counts is mcget_ncount() */ long Buffer_Counter ; /* index in Buffer size (for realloc) */ long Buffer_Size ; int Coord_Type[MONnD_COORD_NMAX]; /* type of variable */ char Coord_Label[MONnD_COORD_NMAX][30]; /* label of variable */ char Coord_Var[MONnD_COORD_NMAX][30]; /* short id of variable */ long Coord_Bin[MONnD_COORD_NMAX]; /* bins of variable array */ double Coord_Min[MONnD_COORD_NMAX]; double Coord_Max[MONnD_COORD_NMAX]; char Monitor_Label[MONnD_COORD_NMAX*30]; /* Label for monitor */ char Mon_File[128]; /* output file name */ double cx,cy,cz; double cvx, cvy, cvz; double csx, csy, csz; double cs1, cs2, ct, cp; double He3_pressure; char Flag_UsePreMonitor ; /* use a previously stored neutron parameter set */ char UserName1[128]; char UserName2[128]; double UserVariable1; double UserVariable2; double Intermediate; double IntermediateCnts; char option[1024]; double Nsum; double psum, p2sum; double **Mon2D_N; double **Mon2D_p; double **Mon2D_p2; double *Mon2D_Buffer; double mxmin,mxmax,mymin,mymax,mzmin,mzmax; char compcurname[128]; Coords compcurpos; } MonitornD_Variables_type; /* monitor_nd-lib function prototypes */ /* ========================================================================= */ void Monitor_nD_Init(MonitornD_Defines_type *, MonitornD_Variables_type *, MCNUM, MCNUM, MCNUM, MCNUM, MCNUM, MCNUM, MCNUM, MCNUM, MCNUM); double Monitor_nD_Trace(MonitornD_Defines_type *, MonitornD_Variables_type *); void Monitor_nD_Save(MonitornD_Defines_type *, MonitornD_Variables_type *); void Monitor_nD_Finally(MonitornD_Defines_type *, MonitornD_Variables_type *); void Monitor_nD_McDisplay(MonitornD_Defines_type *, MonitornD_Variables_type *); #define MONND_DECLARE(monname) \ struct MonitornD_Variables *mcmonnd ## monname; #define MONND_USER_TITLE(monname, num, title) \ { mcmonnd ## monname = &(MC_GETPAR(monname, Vars)); \ strcpy(mcmonnd ## monname->UserName ## num, title); } #define MONND_USER_VALUE(monname, num, value) \ { mcmonnd ## monname = &(MC_GETPAR(monname, Vars)); \ mcmonnd ## monname->UserVariable ## num = (value); } #endif /* end of monitor_nd-lib.h */