/* pseudoGeneLink.h was originally generated by the autoSql program, which also 
 * generated pseudoGeneLink.c and pseudoGeneLink.sql.  This header links the database and
 * the RAM representation of objects. */

/* Copyright (C) 2007 The Regents of the University of California 
 * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */

#ifndef PSEUDOGENELINK_H
#define PSEUDOGENELINK_H

#define PSEUDOGENELINK_NUM_COLS 56

struct pseudoGeneLink
/* links a gene/pseudogene prediction to an ortholog or paralog. */
    {
    struct pseudoGeneLink *next;  /* Next in singly linked list. */
    char *chrom;	/* Reference sequence chromosome or scaffold */
    unsigned chromStart;	/* pseudogene alignment start position */
    unsigned chromEnd;	/* pseudogene alignment end position */
    char *name;	/* Name of pseudogene */
    unsigned score;	/* score of pseudogene with gene */
    char strand[3];	/* + or - */
    unsigned thickStart;	/* Start of where display should be thick (start codon) */
    unsigned thickEnd;	/* End of where display should be thick (stop codon) */
    unsigned reserved;	/* Always zero for now */
    int blockCount;	/* Number of blocks */
    int *blockSizes;	/* Comma separated list of block sizes */
    int *chromStarts;	/* Start positions relative to chromStart */
    float trfRatio;	/* ratio of tandem repeats */
    char *type;	/* type of evidence */
    int axtScore;	/* blastz score, gene mrna aligned to pseudogene */
    char *gChrom;	/* Chromosome name */
    int gStart;	/* gene alignment start position */
    int gEnd;	/* gene alignment end position */
    char gStrand[3];	/* strand of gene */
    unsigned exonCount;	/* # of exons in gene  */
    unsigned geneOverlap;	/* bases overlapping */
    unsigned polyA;	/* count of As in polyA */
    int polyAstart;	/* start of polyA, relative to end of pseudogene */
    int exonCover;	/* number of exons in Gene covered */
    unsigned intronCount;	/* number of introns in pseudogene */
    unsigned bestAliCount;	/* number of good mrnas aligning */
    unsigned matches;	/* matches + repMatches */
    unsigned qSize;	/* aligning bases in pseudogene */
    unsigned qEnd;	/* end of cdna alignment */
    unsigned tReps;	/* repeats in gene */
    int overlapRhesus;	/* percent of retro that breaks net relative to Rhesus */
    int overlapMouse;	/* percent of retro that breaks net relative to Mouse */
    unsigned coverage;	/* % of bases that align to gene */
    int label;	/* 1=pseudogene,-1 not pseudogene -2 expressed retroGene */
    unsigned milliBad;	/* milliBad score, pseudogene aligned to genome */
    unsigned oldScore;	/* another heuristic */
    int oldIntronCount;	/* old simple intron count */
    int processedIntrons;	/* intron prcessed out of retrogene */
    int conservedSpliceSites;	/* conserved splice site count */
    int maxOverlap;	/* largest overlap with another mrna */
    char *refSeq;	/* Name of closest regSeq to gene */
    int rStart;	/* refSeq alignment start position */
    int rEnd;	/* refSeq alignment end position */
    char *mgc;	/* Name of closest mgc to gene */
    int mStart;	/* mgc alignment start position */
    int mEnd;	/* mgc alignment end position */
    char *kgName;	/* Name of closest knownGene to gene */
    int kStart;	/* kg alignment start position */
    int kEnd;	/* kg alignment end position */
    char *overName;	/* name of overlapping mrna */
    int overStart;	/* overlapping mrna start position */
    int overEnd;	/* overlapping mrna end position */
    char overStrand[3];	/* strand of overlapping mrna */
    int overlapDog;	/* percent of retro that breaks net relative to dog */
    float posConf;	/* pvalue for positive */
    unsigned polyAlen;	/* length of polyA */
    };

struct pseudoGeneLink *pseudoGeneLinkLoad(char **row);
/* Load a pseudoGeneLink from row fetched with select * from pseudoGeneLink
 * from database.  Dispose of this with pseudoGeneLinkFree(). */

struct pseudoGeneLink *pseudoGeneLinkLoadAll(char *fileName);
/* Load all pseudoGeneLink from whitespace-separated file.
 * Dispose of this with pseudoGeneLinkFreeList(). */

struct pseudoGeneLink *pseudoGeneLinkLoadAllByChar(char *fileName, char chopper);
/* Load all pseudoGeneLink from chopper separated file.
 * Dispose of this with pseudoGeneLinkFreeList(). */

#define pseudoGeneLinkLoadAllByTab(a) pseudoGeneLinkLoadAllByChar(a, '\t');
/* Load all pseudoGeneLink from tab separated file.
 * Dispose of this with pseudoGeneLinkFreeList(). */

struct pseudoGeneLink *pseudoGeneLinkCommaIn(char **pS, struct pseudoGeneLink *ret);
/* Create a pseudoGeneLink out of a comma separated string. 
 * This will fill in ret if non-null, otherwise will
 * return a new pseudoGeneLink */

void pseudoGeneLinkFree(struct pseudoGeneLink **pEl);
/* Free a single dynamically allocated pseudoGeneLink such as created
 * with pseudoGeneLinkLoad(). */

void pseudoGeneLinkFreeList(struct pseudoGeneLink **pList);
/* Free a list of dynamically allocated pseudoGeneLink's */

void pseudoGeneLinkOutput(struct pseudoGeneLink *el, FILE *f, char sep, char lastSep);
/* Print out pseudoGeneLink.  Separate fields with sep. Follow last field with lastSep. */

#define pseudoGeneLinkTabOut(el,f) pseudoGeneLinkOutput(el,f,'\t','\n');
/* Print out pseudoGeneLink as a line in a tab-separated file. */

#define pseudoGeneLinkCommaOut(el,f) pseudoGeneLinkOutput(el,f,',',',');
/* Print out pseudoGeneLink as a comma separated list including final comma. */

/* -------------------------------- End autoSql Generated Code -------------------------------- */

#endif /* PSEUDOGENELINK_H */

