/*******************************************************************************
*
* McStas, neutron ray-tracing package
*         Copyright 1997-2002, All rights reserved
*         Risoe National Laboratory, Roskilde, Denmark
*         Institut Laue Langevin, Grenoble, France
*
* Library: share/vitess-lib.h
*
* %Identification
* Written by: KN, EF
* Date:   Aug 28, 2002
* Origin: Risoe
* Release: McStas 1.6
* Version: 1.2
*
* This file is to be imported by the mcstas2vitess perl script 
* It handles the way Vitess parses parameters.
* Functions are used by the Virtual_input and Virtual_output
* components.
*
* Usage: within SHARE
* %include "vitess-lib"
*
* $Id: vitess-lib.h,v 1.11 2003/02/11 12:28:46 farhi Exp $
*
*	$Log: vitess-lib.h,v $
*	Revision 1.11  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.2 2002/08/28 11:39:00 ef
*	Changed to lib/share/c code. Updated to Vitess 2.3 Neutron structure.
*
* Revision 1.1 2000/08/28 11:39:00 kn
*	Initial revision
*******************************************************************************/

#ifndef VITESS_LIB_H
#define VITESS_LIB_H "$Revision: 1.11 $"

#include <math.h>
#include <stdlib.h>
#include <stdio.h>

/* The Neutron structure, taken from VITESS 2.3 source code "general.h" */
typedef double VectorType[3];
typedef struct
{
	char           IDGrp[2];
	unsigned long  IDNo;
}
TotalID;
typedef struct 
{
	TotalID        ID;
	char           Debug;
	short          Color;
	double         Time;
	double         Wavelength;
	double         Probability;
	VectorType     Position;
	VectorType     Vector;
	VectorType     Spin;
}
Neutron;

extern char *vitess_infile;	/* Neutron input file name, or NULL. */
extern char *vitess_outfile;	/* Neutron output file name, or NULL. */
extern int vitess_tracepoints;	/* If true, use dots as progress-indicator */
extern int vitess_repcnt;	/* Number of times to repeat this neutron */
extern int vitess_bufsize;	/* The buffer size for neutron read/write */

/* vitess-lib function prototypes */
/* ========================================================================= */
Neutron mcstas2vitess(double x, double y, double z,
                      double vx, double vy, double vz,
                      double t, 
                      double sx, double sy, double sz,
                      double p);
void vitess2mcstas(Neutron neu,
                   double *x, double *y, double *z,
                   double *vx, double *vy, double *vz,
                   double *sx, double *sy, double *sz,
                   double *t, double *p);
void vitess_option_error(char *opt);
void vitess_parseopt(int argc, char *argv[],
		     double *dptr[], char dchr[], char **sptr[], char schr[]);
int vitess_main(int argc, char *argv[], int **check_finished,
		double *dptr[], char dchr[], char **sptr[], char schr[]);

#endif

/* end of vitess-lib.h */
