#include #include"dictionary.h" typedef struct { char *chr; int Nsites; int *site; char *ok; int Ncol; int max; char **col; char **allele; char ***complete; int *index; char **sdp; } ALLELE_DATA; typedef struct { int chr, from, to, id; double error; } SEGMENTS; typedef struct { int id, acc, chr, frombp, tobp, fromsite, tosite, errors; } MOSAIC_SEGMENT; typedef struct { char *name; int len; int *bp; int *chr; int nchr; char **chroms; char *allele; char *ref; char **founder; int Nfounders; char **founder_name; int *chr_start; int *chr_end; SEGMENTS **mosaic; int *nseg; } SEQ_CALL; typedef struct { int nsegmax, nsegs, nseqs; MOSAIC_SEGMENT *seg; int *idx; DICTIONARY *dict_ids; DICTIONARY *dict_accs; } MOSAIC; typedef struct { int nobs; char **id; double *x; char *name; } PHENOTYPE_TABLE; typedef struct { int nseq, nsdp, nsite, chr, haplotype, uncompressed; char **mat; char **id; int *sdp; int *site; } BINARY_DATA; typedef struct { double *logP; int *chr; int *bp; int *site; int N; } SCAN_DATA; typedef struct { int nalleles; int *allele; double *estimate; int *count; double logP; double sigma; } SCAN_STATISTICS; typedef struct { int nlevels, nobs, debug; double TSS, FSS, RSS, df, rdf, F, log10pval, gm; double N[256], mean[256], SS[256]; } ANOVA_TABLE; typedef struct { int idx; char *id; } CHAR_INDEX; typedef struct { int nperm, nobs; double **y; double *maxlogP; double q50, q90, q95, pval; double mx; } PERMUTATIONS; ALLELE_DATA *ReadAlleleData( char *fileame, int format ); ALLELE_DATA **ReadGenomeAlleleData( char *dir, char *maskfile, int format, int nchr, char **chroms ); SEQ_CALL **ReadSeqCalls( char *dir, char *suffix, ALLELE_DATA **add, int nchr, char **chroms, int *nseq ); SEQ_CALL *ReadSeqCall( char *filename, ALLELE_DATA **add, int nchr, char **chroms ); void FreeSeqCall ( SEQ_CALL *sq ); SEGMENTS *ReadGFF( char *filename, int *nsegments ); int ReconstructMosaicDiploid( SEQ_CALL *sq, int penalty, int chr, char *chrom, FILE *fp ); int ReconstructMosaic( SEQ_CALL *sq, int penalty, int chr, char *chrom, FILE *fp, int backcross ); int IntersectIds ( char **id1, char **id2, int N1, int N2, int**Index1, int **Index2 ); BINARY_DATA *ReadBinaryData( char *filename ); BINARY_DATA **ReadBinaryGenome( int nchr, char *dir, int uncompressed, int haplotype ); PHENOTYPE_TABLE *ReadPhenotype( char *filename, char *phenotype ); PHENOTYPE_TABLE **ReadPhenotypes( char *filename, char **phenotypes, int nphen ); double OneWayAnovaLog10pval( int nobs, double *phenotype, char *genotype, double *residuals, int *df, ANOVA_TABLE *anova ); SCAN_STATISTICS *ChromosomeScan( PHENOTYPE_TABLE *pt, BINARY_DATA *bd, PERMUTATIONS *perm ); SCAN_STATISTICS **GenomeScan( PHENOTYPE_TABLE *pt, BINARY_DATA **genome, int nchr,PERMUTATIONS *perm ); void FreeScanStatistics( SCAN_STATISTICS *stats, int len ); char **TheChromosomes( char *species, int *nchr ); void ProcessSeqCalls( char *dir, char *suffix, ALLELE_DATA **add, int nchr, char **chroms, int *nseq, int penalty, int backcross, int diploid, FILE *outfp, double window ); double FDistribution(double f, int v1, int v2); double CompFDistribution(double f, int v1, int v2); void InitFcache( int df ); double Log10Fpval( double F, double df1, double df2 ); double OneWayAnovaLog10pvalFast( double *phenotype, char *genotype, ANOVA_TABLE *an); void WriteGenomeScan( SCAN_STATISTICS **stats, int nchr, BINARY_DATA **genome, char *filename, double threshold ); void WriteGenomeScanEstimate( SCAN_STATISTICS **stats, int nchr, BINARY_DATA **genome, ALLELE_DATA **ad, char *filename, double threshold ); void WriteHaplotypeGenomeScanEstimate( SCAN_STATISTICS **stats, int nchr, BINARY_DATA **genome, char *filename, double threshold ); static int sdpcmp( const void *a, const void *b ); char *suffix( char *s, char sep ); SCAN_DATA *ForwardSelection( PHENOTYPE_TABLE *pt, int nchr, BINARY_DATA **gd, ALLELE_DATA **ad, SCAN_STATISTICS **stats, double thresh, char *outfile ); SCAN_DATA *NewScanData(int N ); SCAN_DATA *PopulateScanData ( BINARY_DATA **gd, SCAN_STATISTICS **stats, int nchr, double thresh ); ALLELE_DATA *ReadBinaryAlleleData( char *filename, int index_all ); ALLELE_DATA **ReadAllBinaryAlleleData( char *dir, int index_all, int nchr, char **chroms ); int WriteBinaryAlleleData( ALLELE_DATA *ad, char *filename ); int scan_data_cmp( const void *A, const void *B); int scan_data_cmp2( const void *A, const void *B); void WriteAnnotatedScan( PHENOTYPE_TABLE *pt, int nchr, SCAN_STATISTICS **stats, BINARY_DATA **bd, ALLELE_DATA **ad, double thresh, int max, char *filename ); int WriteLarsData( PHENOTYPE_TABLE *pt, SCAN_STATISTICS **stats, int nchr, BINARY_DATA **genome, char *filename, double threshold ); int WriteSeqCalls ( SEQ_CALL **sq, int n, char *dir ); int WriteSeqCall( char *filename, SEQ_CALL *sq); int idx_cmp( const void *A, const void *B); void ImputeGenomes( ALLELE_DATA **add, int nchr, char **chroms, SEQ_CALL **sqq, int nseq, char *dir); double PermutationPvalue( double **logP, PHENOTYPE_TABLE *pt, BINARY_DATA **genome, int nchr, int nperm, double *q50, double *q90, double *q95, double *mx ); PHENOTYPE_TABLE *PermutePhenotypes( PHENOTYPE_TABLE *pt, int in_place ); double *PermutedGenomeScans( PHENOTYPE_TABLE *pt, BINARY_DATA **genome, int nchr, int nperm ); PERMUTATIONS *MakePermutations( PHENOTYPE_TABLE *pt, BINARY_DATA *bd, int nperm ); void FreePermutations( PERMUTATIONS *perm ); int pair_cmp( const void *A, const void *B); int double_cmp( const void *A, const void *B); void PermuteArray( int *array, int n ); double surand(); double urand(double low, double high); double genexp(double lambda); double gennor(); void ImputeFromMosaic( MOSAIC *mosaic, ALLELE_DATA **ad, int nchr, char *outdir ); MOSAIC *ReadMosaic( char *mosaicfile, char **strings, int nstrings ); int **IUBcodes();