00001 #include "log.h"
00002 #include "format.h"
00003 #include "fasta.h"
00004 #include "bp.h"
00005 #include <stdio.h>
00006 #include <unistd.h>
00007 #include "geneFusionsConfig.h"
00008 #include "stringUtil.h"
00009 
00010 static char* getBreakPointSequence (char *tileCoordinate1, char *tileCoordinate2)
00011 {
00012   Stringa buffer;
00013   Stringa targetsFile;
00014   FILE *fp;
00015   Array targetSeqs;
00016   int i;
00017   Seq *currSeq;
00018   static Stringa sequence = NULL;
00019 
00020   buffer = stringCreate (100);
00021   targetsFile = stringCreate (100);
00022   stringPrintf (targetsFile,"targets_%d.txt",getpid ());
00023   if (!(fp = fopen (string (targetsFile),"w")) ){
00024     die ("Unable to open target file: %s",string (targetsFile));
00025   }
00026   fprintf (fp,"%s\n%s",tileCoordinate1,tileCoordinate2);
00027   fclose (fp);
00028   stringPrintf (buffer,"%s %s/%s stdout -noMask -seqList=%s",
00029                 BLAT_TWO_BIT_TO_FA,BLAT_DATA_DIR,BLAT_TWO_BIT_DATA_FILENAME,string (targetsFile));
00030   fasta_initFromPipe (string (buffer));
00031   targetSeqs = fasta_readAllSequences (0);
00032   fasta_deInit ();
00033   if (arrayMax (targetSeqs) != 2) {
00034     die ("Expected only two target sequences");
00035   } 
00036   stringCreateClear (sequence,100);
00037   for (i = 0; i < arrayMax (targetSeqs); i++) {
00038     currSeq = arrp (targetSeqs,i,Seq);
00039     stringAppendf (sequence,"%s",currSeq->sequence);
00040     hlr_free (currSeq->name);
00041     hlr_free (currSeq->sequence);
00042   }
00043   arrayDestroy (targetSeqs);
00044   stringPrintf (buffer,"rm -rf %s",string (targetsFile));
00045   hlr_system (string (buffer),0);
00046   stringDestroy (targetsFile);
00047   stringDestroy (buffer);
00048   return string (sequence);
00049 }
00050 
00051 static int sortBreakPointsByTargetAndOffset (BreakPoint *a, BreakPoint *b) 
00052 {
00053   int diff;
00054   diff = strcmp (a->tileCoordinate1, b->tileCoordinate1) + strcmp(a->tileCoordinate2, b->tileCoordinate2);
00055   return diff;
00056 }
00057 
00058 int main (int argc, char *argv[])
00059 {
00060   Array breakPoints;
00061   BreakPoint *currBP;
00062   int i;
00063   char *breakPointSequence;
00064 
00065   bp_init ("-");
00066   breakPoints = bp_getBreakPoints ();
00067   arraySort (breakPoints,(ARRAYORDERF)sortBreakPointsByTargetAndOffset);
00068   
00069   for (i = 0; i < arrayMax (breakPoints); i++) {
00070     currBP = arrp (breakPoints,i,BreakPoint);
00071     breakPointSequence = getBreakPointSequence (currBP->tileCoordinate1,currBP->tileCoordinate2);
00072     printf( ">%s|%s\n%s\n", currBP->tileCoordinate1, currBP->tileCoordinate2, breakPointSequence);
00073     warn(">%s|%s\n%s", currBP->tileCoordinate1, currBP->tileCoordinate2, subString( breakPointSequence, 10, strlen(breakPointSequence)-10));
00074   }
00075   bp_deInit();
00076   return 0;
00077 }