The general GRETINA data format, apart from numbers that specifies coincidences (see below), is +------------------------+ | struct gebData { | | int type; | <---- the type of the payload | int length; | <---- length in bytes of the payload | long long timestamp; | <---- timestamp associated with payload | }; | +------------------------+ +------------------------+ | | | | | | | | | | | payload | | | | | | | | | | | | | +------------------------+ At present the following datatypes are defined: #define GEB_TYPE_DECOMP 1 #define GEB_TYPE_RAW 2 #define GEB_TYPE_TRACK 3 #define GEB_TYPE_BGS 4 #define GEB_TYPE_S800_RAW 5 #define GEB_TYPE_NSCLnonevent 6 #define GEB_TYPE_GT_SCALER 7 #define GEB_TYPE_GT_MOD29 8 #define GEB_TYPE_S800PHYSDATA 9 ================================================================================ The data from the combdata3 code simply bunches (and optionally filters) the geB header/payloads into a number of geB-header/payloads that are in coincidence, given the time windows specified in the chat file for combdata3 (e.g., dtEXT 300 and dtGT 300) n <------ number of coincidences following (int) geB-header/payload geB-header/payload geB-header/payload ... ... n geB-header/payload geB-header/payload geB-header/payload ... ... n geB-header/payload geB-header/payload geB-header/payload ... ... etc ================================================================================ The GRETINA mode 1 data now follows the standard GRETINA structure +------------------------+ | struct gebData { | | int type; | <---- the type of the payload | int length; | <---- length in bytes of the payload | long long timestamp; | <---- timestamp associated with payload | }; | +------------------------+ +------------------------+ | | | | | | | | | | | payload | | | | | | | | | | | | | +------------------------+ Where in this case the type is '3==GEB_TYPE_TRACK). The timestamp in this case is the average of the time stamps for the first hits of the gammarays that were that are presented in the payload. The format of the payload is +------------------------+ | ngam (int) | <--- number of gamma rays that follow | pad (int) | <--- pad/serial # to keep 64 bit machines happy +------------------------+ +------------------------------------------------------------------------+ | typedef struct TRACKED_GAMMA_RAY { | | float esum; /* gamma ray energy */ | | int ndet; /* number of interactions */ | | float fom; /* figure of merit */ | | int tracked; /* 1==if tracked */ | | long long int timestamp; /* timestap of first interaction point */ | | float x0, y0, z0, e0; /* first interaction point */ | | float x1, y1, z1, e1; /* second interaction point */ | | } TRACKED_GAMMA_RAY; | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | typedef struct TRACKED_GAMMA_RAY { | | float esum; /* gamma ray energy */ | | int ndet; /* number of interactions */ | | float fom; /* figure of merit */ | | int tracked; /* 1==if tracked */ | | long long int timestamp; /* timestap of first interaction point */ | | float x0, y0, z0, e0; /* first interaction point */ | | float x1, y1, z1, e1; /* second interaction point */ | | } TRACKED_GAMMA_RAY; | +------------------------------------------------------------------------+ . . (repeated ngam times, one for each gamma ray)