#ifndef PMOM_DCM_H #define PMOM_DCM_H #include "pesa_cfg.h" #include "wind_pk.h" #include typedef struct distribution_def pmomdata; struct pesa_mom_def { uint4 m0; /* n * Vx */ uint4 m1; /* Vx */ int4 m2; /* Vy */ int4 m3; /* Vz */ int4 m4; /* Pxy/n */ int4 m5; /* Pyz/n */ int4 m6; /* Pxz/n */ uint4 m7; /* Pxx/n */ uint4 m8; /* Pyy/n */ uint4 m9; /* Pzz/n */ }; typedef struct pesa_mom_def pesa_mom; struct comp_pesa_mom_def { uchar c0; /* flux n*Vx */ uchar c1; /* Vx */ schar c2; /* Vy/Vx */ schar c3; /* Vz/Vx */ schar c4; /* Vxy */ schar c5; /* Vxz */ schar c6; /* Vyz */ uchar c7; /* Vxx */ uchar c8; /* Vyy */ uchar c9; /* Vzz */ }; typedef struct comp_pesa_mom_def comp_pesa_mom; struct pesa_mom_data_def { double time; uint2 spin; int2 gap; /* set to 1 if a data gap is sensed */ int2 valid; /* set to 1 if data is valid */ uchar E_s; /* starting point of pesa low sweep */ uchar ps; /* starting phi sector in moment calculation */ comp_pesa_mom cmom; /* compressed moments */ uint2 Vc; /* compressed Vx value (only useful for debugging )*/ float E_min; /* Lowest energy of sweep */ float E_max; /* Highest energy of sweep */ pmomdata dist; /* physical quantities */ }; typedef struct pesa_mom_data_def pesa_mom_data; typedef struct { int num_samples; double *time; float *dens_p; float *temp_p; float *Vpx; float *Vpy; float *Vpz; int2 *Vc; float *Pp; float *Qp; float *dens_a; float *temp_a; float *Vax; float *Vay; float *Vaz; float *Pa; float *Qa; } pmom_fill_str; /* function prototypes */ /* decomutation routines */ /* Gets next pmom structure with a time greater than BUT NOT EQUAL to time */ /* returns 0 if unsuccessful */ /* returns 1 if successful */ int get_next_pmom_struct(packet_selector *pks, pesa_mom_data Pmom[16], pesa_mom_data Amom[16]); /* Takes structure of pointers to blank memory and fills it with data*/ int fill_pmom_data(pmom_fill_str ptr); /* returns the number of ion moment samples between time t1 and t2 */ /* Note: there are 16 samples per packet */ /* If t2 is greater than the time of the last packet sample then the number */ /* is estimated. */ int number_of_pmom_struct_samples(double t1,double t2); int pmom_decom(packet *pk,pesa_mom_data Pmom[16],pesa_mom_data Amom[16]); int calc_pmom_param( pesa_mom_data *Pmom,PCFG *cfg); #define N_ENERGY_PL 14 #define OVERLAP 56 #define START_V 32760 #endif