161 lines
5.5 KiB
C++
161 lines
5.5 KiB
C++
#ifndef IAEA_HEADER
|
|
#define IAEA_HEADER
|
|
|
|
/* *********************************************************************** */
|
|
#include "iaea_record.h"
|
|
|
|
// defines
|
|
#define SEGMENT_BEG_TOKEN '$'
|
|
#define SEGMENT_END_TOKEN ':'
|
|
#ifndef MAX_STR_LEN
|
|
#define MAX_STR_LEN 512 /* maximum length of a string */
|
|
#endif
|
|
#define MAX_NUMB_LINES 30 /* maximum number of lines in a block */
|
|
|
|
#define MAX_NUMB_EXTRALONG_TYPES 7 /* maximum number of extra long allowed */
|
|
// 0: User defined generic type
|
|
// 1: Incremental history number n_hist
|
|
// n_hist = 0 if previous primary particle scored
|
|
// n_hist > 0 indicates how many primary particle read before the current one
|
|
// 2: LATCH (EGS)
|
|
// 3: ILB5 (PENELOPE)
|
|
// 4: ILB4 (PENELOPE)
|
|
// 5: ILB3 (PENELOPE)
|
|
// 6: ILB2 (PENELOPE)
|
|
// 7: ILB1 (PENELOPE)
|
|
// more to be defined
|
|
|
|
#define MAX_NUMB_EXTRAFLOAT_TYPES 3 /* maximum number of extra float allowed */
|
|
// 0: User defined generic type
|
|
// 1: XLAST (x coord. of the last interaction)
|
|
// 2: YLAST (y coord. of the last interaction)
|
|
// 3: ZLAST (z coord. of the last interaction)
|
|
// more to be defined
|
|
|
|
|
|
struct iaea_header_type
|
|
{
|
|
FILE *fheader;
|
|
// ******************************************************************************
|
|
// 1. PHSP format
|
|
|
|
int file_type; // 0 = phsp file ; 1 = phsp generator
|
|
int byte_order; // as defined by get_byte_order routine
|
|
int record_contents[9]; // record_contents[i] = 1 or 0 (variable or constant)
|
|
// correspond to the following logical variables :
|
|
// ix,iy,iz,iu.iv,iw;
|
|
// iweight,iextrafloat,iextralong;
|
|
|
|
float record_constant[7]; // if record_contents[i<7] = 0
|
|
// then record_constant[i] contents the constant value
|
|
// extra floats and longs are always variable
|
|
// so no need to store them
|
|
|
|
// contains the keyword describing each stored extrafloat
|
|
int extrafloat_contents[NUM_EXTRA_FLOAT];
|
|
|
|
// contains the keyword describing each stored extralong
|
|
int extralong_contents[NUM_EXTRA_LONG];
|
|
|
|
int record_length;
|
|
// record_length = 1 + (particle)
|
|
// 4 + (energy)
|
|
// SUM(i=0;i<3) {record_contents[i]*4} (ix,iy,iz)
|
|
// SUM(i=3;i<6) {record_contents[i]*4} (iu,iv,iw)
|
|
// record_contents[6]*4 + (iweigth)
|
|
// record_contents[7]*4 + (iextrafloat)
|
|
// record_contents[8]*4 + (iextralong)
|
|
IAEA_I64 checksum;
|
|
|
|
// ******************************************************************************
|
|
// 2. Mandatory description of the phsp
|
|
|
|
char coordinate_system_description[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// Counters for phsp file
|
|
IAEA_I64 orig_histories;
|
|
IAEA_I64 nParticles;
|
|
IAEA_I64 particle_number[MAX_NUM_PARTICLES];
|
|
|
|
// Event generator input file
|
|
char input_file_for_event_generator[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// ******************************************************************************
|
|
// 3. Mandatory additional information
|
|
|
|
unsigned int iaea_index; // Agency ID
|
|
char title[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char machine_type[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char MC_code_and_version[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
float global_photon_energy_cutoff;
|
|
|
|
float global_particle_energy_cutoff;
|
|
|
|
char transport_parameters[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// ******************************************************************************
|
|
// 4. Optional description
|
|
|
|
char beam_name[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char field_size[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char nominal_SSD[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char variance_reduction_techniques[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char initial_source_description[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// Documentation sub-section
|
|
char MC_input_filename[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// Assumed to be the preferred citation
|
|
char published_reference[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
char authors[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char institution[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char link_validation[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
char additional_notes[MAX_STR_LEN*MAX_NUMB_LINES+1];
|
|
|
|
// ******************************************************************************
|
|
// 5. Optional statistical information
|
|
double averageKineticEnergy[MAX_NUM_PARTICLES];
|
|
double sumParticleWeight[MAX_NUM_PARTICLES];
|
|
double maximumKineticEnergy[MAX_NUM_PARTICLES];
|
|
double minimumKineticEnergy[MAX_NUM_PARTICLES];
|
|
double minimumX, maximumX;
|
|
double minimumY, maximumY;
|
|
double minimumZ, maximumZ;
|
|
double minimumWeight[MAX_NUM_PARTICLES];
|
|
double maximumWeight[MAX_NUM_PARTICLES];
|
|
|
|
IAEA_I64 read_indep_histories;
|
|
|
|
// CLASS FUNCTIONS
|
|
|
|
public:
|
|
int read_header();
|
|
int write_header();
|
|
int print_header();
|
|
int set_record_contents(iaea_record_type *p_iaea_record);
|
|
int get_record_contents(iaea_record_type *p_iaea_record);
|
|
void initialize_counters();
|
|
void update_counters(iaea_record_type *p_iaea_record);
|
|
|
|
private:
|
|
int read_block(char *lineread, const char *blockname);
|
|
int get_block(char *lineread);
|
|
int get_blockname(char *line, const char *blockname);
|
|
int write_blockname(const char *blockname);
|
|
|
|
int check_byte_order();
|
|
void print_statistics();
|
|
};
|
|
|
|
#endif
|