#ifndef LDSTAB_H
# define LDSTAB_H 1

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

                                                       


//#define NMELEMAX 200000
#define NMELEMAX 20000
#define NNELEMAX 100  
#define NTSCANMAX 20
#define STRINGLENMAX 1000

typedef struct {
  long int nele;
  long int ntry;
  long int nmele;
  long int *mele_v;
  double *mdist_0p5sigma_v;
  double *mdist_1p0sigma_v;
  double *mdist_1p5sigma_v;
  double *mdist_2p0sigma_v;
  double *mdist_2p5sigma_v;
  double *mdist_3p0sigma_v;
  double *mdist_3p5sigma_v;
  double *mdist_4p0sigma_v;
  double *mdist_4p5sigma_v;
  double *mdist_5p0sigma_v;
}scan_table_single_def;


  
//scan_correction_table={nnele_max:nnele_max,ntscan_max:ntscan_max,nelev:lonarr(nnele_max),tscanv:fltarr(ntscan_max),pcoincv:dblarr(nnele_max,ntscan_max),nsigmav:fltarr(nnele_max,ntscan_max)};


typedef struct {
  long int nnele_max;
  long int ntscan_max;
  long int nelev[NNELEMAX];
  double tscanv[NNELEMAX];
  double pcoincv[NNELEMAX][NTSCANMAX];
  double nsigmav[NNELEMAX][NTSCANMAX];
}corr_table_def;
  

char **file_search(char *datadir,char *string_to_search_head,char *string_to_search_tail,long int *nfiles);
scan_table_single_def *load_all_scan_table(long int *ntables);
scan_table_single_def *load_all_scan_table_fromdir(long int *ntables,char *datadir);
long int find_nearest_larger_nele(scan_table_single_def *scan_table_all_poi,long int nele,long int *nmax,long int ntables);
long int find_nearest_shorter_nele(scan_table_single_def *scan_table_all_poi,long int nele,long int *nmax,long int ntables);
long int find_nearest_larger_nele_flip(scan_table_single_def *scan_table_all_poi,long int nele,long int *nmax,long int ntables,bool shorter_instead_of_larger);
long int find_nearest_larger_mele(scan_table_single_def *scan_table_this_poi,double mele,long int *mmax);
long int find_nearest_larger_mele_flip(scan_table_single_def *scan_table_this_poi,double mele,long int *mmax,bool shorter_instead_of_larger);
int interpol_mdist_scan_stat(long int nele,long int mele,scan_table_single_def *scan_table_all_poi, double *mdist_sigma_v,long int *ntables);
void load_corr_table_fromdir(corr_table_def *corr_table,char *datadir);
void load_corr_table(corr_table_def *corr_table);
double calculate_normal_quantile(double p);
double interpol_correction_table(long int nele_tot,double tscan_found,corr_table_def *corr_table);


#endif

