00001
00002
00003
00004
00005 #ifndef CHAIN_H
00006 #define CHAIN_H
00007
00008 #ifndef LINEFILE_H
00009 #include "linefile.h"
00010 #endif
00011
00012
00013 #ifndef BITS_H
00014 #include "bits.h"
00015 #endif
00016
00017 struct cBlock
00018
00019 {
00020 struct cBlock *next;
00021 int tStart,tEnd;
00022 int qStart,qEnd;
00023 int score;
00024 void *data;
00025 };
00026
00027 int cBlockCmpTarget(const void *va, const void *vb);
00028
00029
00030 int cBlockCmpBoth(const void *va, const void *vb);
00031
00032
00033 int cBlockCmpDiagQuery(const void *va, const void *vb);
00034
00035
00036 void cBlocksAddOffset(struct cBlock *blockList, int qOff, int tOff);
00037
00038
00039 struct chain
00040
00041 {
00042 struct chain *next;
00043 struct cBlock *blockList;
00044 double score;
00045 char *tName;
00046 int tSize;
00047
00048 int tStart,tEnd;
00049 char *qName;
00050 int qSize;
00051 char qStrand;
00052 int qStart,qEnd;
00053 int id;
00054 };
00055
00056 void chainFree(struct chain **pChain);
00057
00058
00059 void chainFreeList(struct chain **pList);
00060
00061
00062 int chainCmpScore(const void *va, const void *vb);
00063
00064
00065 int chainCmpScoreDesc(const void *va, const void *vb);
00066
00067
00068 int chainCmpTarget(const void *va, const void *vb);
00069
00070
00071 int chainCmpQuery(const void *va, const void *vb);
00072
00073
00074 void chainWrite(struct chain *chain, FILE *f);
00075
00076
00077 void chainWriteAll(struct chain *chainList, FILE *f);
00078
00079
00080 void chainWriteLong(struct chain *chain, FILE *f);
00081
00082
00083 void chainWriteHead(struct chain *chain, FILE *f);
00084
00085
00086 struct chain *chainRead(struct lineFile *lf);
00087
00088
00089
00090
00091 struct chain *chainReadChainLine(struct lineFile *lf);
00092
00093
00094
00095 void chainReadBlocks(struct lineFile *lf, struct chain *chain);
00096
00097
00098 void chainIdReset();
00099
00100
00101 void chainIdNext(struct chain *chain);
00102
00103
00104 void chainSwap(struct chain *chain);
00105
00106
00107 struct hash *chainReadUsedSwap(char *fileName, boolean swapQ, Bits *bits);
00108
00109
00110
00111 struct hash *chainReadAllSwap(char *fileName, boolean swapQ);
00112
00113
00114
00115 struct hash *chainReadAll(char *fileName);
00116
00117
00118 struct hash *chainReadAllWithMeta(char *fileName, FILE *f);
00119
00120
00121 struct chain *chainLookup(struct hash *hash, int id);
00122
00123
00124 void chainSubsetOnT(struct chain *chain, int subStart, int subEnd,
00125 struct chain **retSubChain, struct chain **retChainToFree);
00126
00127
00128
00129
00130
00131
00132
00133 void chainFastSubsetOnT(struct chain *chain, struct cBlock *firstBlock,
00134 int subStart, int subEnd, struct chain **retSubChain, struct chain **retChainToFree);
00135
00136
00137
00138 void chainSubsetOnQ(struct chain *chain, int subStart, int subEnd,
00139 struct chain **retSubChain, struct chain **retChainToFree);
00140
00141
00142
00143
00144
00145
00146
00147 void chainRangeQPlusStrand(struct chain *chain, int *retQs, int *retQe);
00148
00149
00150
00151 #endif