void scan_libInfo ( char * libfile ) { FILE * fp; char line[1024], ch; int i, j, index; int libCounter; boolean flag; boolean * pe; fp = ckopen ( libfile, "r" ); num_libs = 0; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { num_libs++; } if ( !num_libs ) { line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "max_rd_len" ) == 0 ) { maxReadLen = atoi ( tabs[1] ); } } } if ( num_libs == 0 ) { fprintf ( stderr, "Config file error: no [LIB] in file\n" ); exit ( -1 ); } //count file numbers of each type lib_array = ( LIB_INFO * ) ckalloc ( num_libs * sizeof ( LIB_INFO ) ); pe = ( boolean * ) ckalloc ( num_libs * sizeof ( boolean ) ); for ( i = 0; i < num_libs; i++ ) { lib_array[i].asm_flag = 3; lib_array[i].rank = 0; lib_array[i].pair_num_cut = 0; lib_array[i].rd_len_cutoff = 0; lib_array[i].map_len = 0; lib_array[i].num_s_a_file = 0; lib_array[i].num_s_q_file = 0; lib_array[i].num_p_file = 0; lib_array[i].num_a1_file = 0; lib_array[i].num_a2_file = 0; lib_array[i].num_q1_file = 0; lib_array[i].num_q2_file = 0; lib_array[i].num_b_file = 0; //init pe[i] = false; } libCounter = -1; rewind ( fp ); i = -1; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { i++; continue; } line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "f1" ) == 0 ) { lib_array[i].num_a1_file++; pe[i] = true; } else if ( strcmp ( tabs[0], "q1" ) == 0 ) { lib_array[i].num_q1_file++; pe[i] = true; } else if ( strcmp ( tabs[0], "f2" ) == 0 ) { lib_array[i].num_a2_file++; pe[i] = true; } else if ( strcmp ( tabs[0], "q2" ) == 0 ) { lib_array[i].num_q2_file++; pe[i] = true; } else if ( strcmp ( tabs[0], "f" ) == 0 ) { lib_array[i].num_s_a_file++; } else if ( strcmp ( tabs[0], "q" ) == 0 ) { lib_array[i].num_s_q_file++; } else if ( strcmp ( tabs[0], "p" ) == 0 ) { lib_array[i].num_p_file++; pe[i] = true; } else if ( strcmp ( tabs[0], "b" ) == 0 ) // the bam file { lib_array[i].num_b_file++; pe[i] = true; } } //allocate memory for filenames for ( i = 0; i < num_libs; i++ ) { if ( lib_array[i].num_a2_file != lib_array[i].num_a1_file ) { fprintf ( stderr, "Config file error: the number of mark \"f1\" is not the same as \"f2\"!\n" ); exit ( -1 ); } if ( lib_array[i].num_q2_file != lib_array[i].num_q1_file ) { fprintf ( stderr, "Config file error: the number of mark \"q1\" is not the same as \"q2\"!\n" ); exit ( -1 ); } if ( lib_array[i].num_s_a_file ) { lib_array[i].s_a_fname = ( char ** ) ckalloc ( lib_array[i].num_s_a_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_s_a_file; j++ ) { lib_array[i].s_a_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_s_q_file ) { lib_array[i].s_q_fname = ( char ** ) ckalloc ( lib_array[i].num_s_q_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_s_q_file; j++ ) { lib_array[i].s_q_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_p_file ) { lib_array[i].p_fname = ( char ** ) ckalloc ( lib_array[i].num_p_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_p_file; j++ ) { lib_array[i].p_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_a1_file ) { lib_array[i].a1_fname = ( char ** ) ckalloc ( lib_array[i].num_a1_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_a1_file; j++ ) { lib_array[i].a1_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_a2_file ) { lib_array[i].a2_fname = ( char ** ) ckalloc ( lib_array[i].num_a2_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_a2_file; j++ ) { lib_array[i].a2_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_q1_file ) { lib_array[i].q1_fname = ( char ** ) ckalloc ( lib_array[i].num_q1_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_q1_file; j++ ) { lib_array[i].q1_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_q2_file ) { lib_array[i].q2_fname = ( char ** ) ckalloc ( lib_array[i].num_q2_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_q2_file; j++ ) { lib_array[i].q2_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_b_file ) //allot memory for bam file name { lib_array[i].b_fname = ( char ** ) ckalloc ( lib_array[i].num_b_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_b_file; j++ ) { lib_array[i].b_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } } // get file names for ( i = 0; i < num_libs; i++ ) { lib_array[i].curr_type = 1; lib_array[i].curr_index = 0; lib_array[i].fp1 = NULL; lib_array[i].fp2 = NULL; lib_array[i].num_s_a_file = 0; lib_array[i].num_s_q_file = 0; lib_array[i].num_p_file = 0; lib_array[i].num_a1_file = 0; lib_array[i].num_a2_file = 0; lib_array[i].num_q1_file = 0; lib_array[i].num_q2_file = 0; lib_array[i].num_b_file = 0; //init lib_array[i].fp3 = NULL; } libCounter = -1; rewind ( fp ); i = -1; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { i++; continue; } line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "f1" ) == 0 ) { index = lib_array[i].num_a1_file++; strcpy ( lib_array[i].a1_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "q1" ) == 0 ) { index = lib_array[i].num_q1_file++; strcpy ( lib_array[i].q1_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "f2" ) == 0 ) { index = lib_array[i].num_a2_file++; strcpy ( lib_array[i].a2_fname[index], tabs[1] ); if ( strcmp ( lib_array[i].a2_fname[index], lib_array[i].a1_fname[index] ) == 0 ) { fprintf ( stderr, "Config file error: f2 file is the same as f1 file\n" ); fprintf ( stderr, "f1=%s\n", lib_array[i].a1_fname[index] ); fprintf ( stderr, "f2=%s\n", lib_array[i].a2_fname[index] ); exit ( -1 ); } } else if ( strcmp ( tabs[0], "q2" ) == 0 ) { index = lib_array[i].num_q2_file++; strcpy ( lib_array[i].q2_fname[index], tabs[1] ); if ( strcmp ( lib_array[i].q2_fname[index], lib_array[i].q1_fname[index] ) == 0 ) { fprintf ( stderr, "Config file error: q2 file is the same as q1 file\n" ); fprintf ( stderr, "q1=%s\n", lib_array[i].q1_fname[index] ); fprintf ( stderr, "q2=%s\n", lib_array[i].q2_fname[index] ); exit ( -1 ); } } else if ( strcmp ( tabs[0], "f" ) == 0 ) { index = lib_array[i].num_s_a_file++; strcpy ( lib_array[i].s_a_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "q" ) == 0 ) { index = lib_array[i].num_s_q_file++; strcpy ( lib_array[i].s_q_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "p" ) == 0 ) { index = lib_array[i].num_p_file++; strcpy ( lib_array[i].p_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "b" ) == 0 ) { //bam file index = lib_array[i].num_b_file++; strcpy ( lib_array[i].b_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "min_ins" ) == 0 ) { lib_array[i].min_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "max_ins" ) == 0 ) { lib_array[i].max_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "avg_ins" ) == 0 ) { lib_array[i].avg_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rd_len_cutoff" ) == 0 ) { lib_array[i].rd_len_cutoff = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "reverse_seq" ) == 0 ) { lib_array[i].reverse = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "asm_flags" ) == 0 ) { lib_array[i].asm_flag = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rank" ) == 0 ) { lib_array[i].rank = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "pair_num_cutoff" ) == 0 ) { lib_array[i].pair_num_cut = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rd_len_cutoff" ) == 0 ) { lib_array[i].rd_len_cutoff = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "map_len" ) == 0 ) { lib_array[i].map_len = atoi ( tabs[1] ); } } for ( i = 0; i < num_libs; i++ ) { if ( pe[i] && lib_array[i].avg_ins == 0 ) { fprintf ( stderr, "Config file error: PE reads need avg_ins in [LIB] %d\n", i + 1 ); exit ( -1 ); } } fclose ( fp ); qsort ( &lib_array[0], num_libs, sizeof ( LIB_INFO ), cmp_lib ); }
// Inserts column(s) such that a note can start at ts and end at te // Sets current position to starting column // Returns note duration in columns // Ignores bar structure, therefore use only in last bar int TabTrack::insertColumn(int ts, int te) { // cout << "TabTrack::insertColumn(" // << ts << ", " << te << ")" << endl; int cstart; int cend; int dur; int res = 0; if ((ts<0) || (te<=ts)) { // LVIFIX: report error ? // cout << "TabTrack::insertColumn() -> input error" << endl; return -1; } int td = trackDuration(); // cout << "td=" << td << endl; if (ts > td) { // cout << "TabTrack::insertColumn() ->" // << " ts > td, append rest: " << ts - td // << endl; x = c.size(); insertColumn(1); c[x].flags = 0; c[x].setFullDuration(ts - td); // cout << "stop ringing:"; for (int j = 0; j < MAX_STRINGS; j++) { if (isRingingAt(j, x)) { // cout << " " << j; c[x].e[j] = EFFECT_STOPRING; } } // cout << endl; // cout << "after append: "; // dumpCols(this); td = ts; } if (te > td) { // cout << "TabTrack::insertColumn() ->" // << " te > td, append column: " << te - td // << endl; x = c.size(); insertColumn(1); c[x].flags = 0; c[x].setFullDuration(te - td); // cout << "stop ringing:"; for (int j = 0; j < MAX_STRINGS; j++) { if (isRingingAt(j, x)) { // cout << " " << j; c[x].e[j] = EFFECT_STOPRING; } } // cout << endl; // cout << "after append: "; // dumpCols(this); td = te; } // find starting column // cout << "TabTrack::insertColumn() ->" // << " find starting column"; cstart = findCStart(ts, dur); // cout // << " cstart=" << cstart // << " dur=" << dur // << endl; if (dur > 0) { splitColumn(cstart, dur); cstart++; // cout << "after split start: "; // dumpCols(this); } // find ending column // cout << "TabTrack::insertColumn() ->" // << " find ending column"; cend = findCEnd(te, dur); // cout // << " cend=" << cend // << " dur=" << dur // << endl; if (dur < c[cend].fullDuration()) { splitColumn(cend, dur); // cout << "after split end: "; // dumpCols(this); } x = cstart; res = cend - cstart + 1; // cout << "TabTrack::insertColumn() ->" // << " x=" << x // << " res=" << res // << endl; return res; }
void scan_libInfo ( char * libfile ) { FILE * fp; char line[1024], ch; int i, j, index; int libCounter; boolean flag; fp = ckopen ( libfile, "r" ); num_libs = 0; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { num_libs++; } if ( !num_libs ) { line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "max_rd_len" ) == 0 ) { maxReadLen = atoi ( tabs[1] ); } } } //count file numbers of each type lib_array = ( LIB_INFO * ) ckalloc ( num_libs * sizeof ( LIB_INFO ) ); for ( i = 0; i < num_libs; i++ ) { lib_array[i].asm_flag = 3; lib_array[i].rd_len_cutoff = 0; lib_array[i].rank = 0; lib_array[i].pair_num_cut = 0; lib_array[i].map_len = 0; lib_array[i].num_s_a_file = 0; lib_array[i].num_s_q_file = 0; lib_array[i].num_p_file = 0; lib_array[i].num_a1_file = 0; lib_array[i].num_a2_file = 0; lib_array[i].num_q1_file = 0; lib_array[i].num_q2_file = 0; } libCounter = -1; rewind ( fp ); i = -1; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { i++; continue; } line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "f1" ) == 0 ) { lib_array[i].num_a1_file++; } else if ( strcmp ( tabs[0], "q1" ) == 0 ) { lib_array[i].num_q1_file++; } else if ( strcmp ( tabs[0], "f2" ) == 0 ) { lib_array[i].num_a2_file++; } else if ( strcmp ( tabs[0], "q2" ) == 0 ) { lib_array[i].num_q2_file++; } else if ( strcmp ( tabs[0], "f" ) == 0 ) { lib_array[i].num_s_a_file++; } else if ( strcmp ( tabs[0], "q" ) == 0 ) { lib_array[i].num_s_q_file++; } else if ( strcmp ( tabs[0], "p" ) == 0 ) { lib_array[i].num_p_file++; } } //allocate memory for filenames for ( i = 0; i < num_libs; i++ ) { if ( lib_array[i].num_s_a_file ) { lib_array[i].s_a_fname = ( char ** ) ckalloc ( lib_array[i].num_s_a_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_s_a_file; j++ ) { lib_array[i].s_a_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_s_q_file ) { lib_array[i].s_q_fname = ( char ** ) ckalloc ( lib_array[i].num_s_q_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_s_q_file; j++ ) { lib_array[i].s_q_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_p_file ) { lib_array[i].p_fname = ( char ** ) ckalloc ( lib_array[i].num_p_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_p_file; j++ ) { lib_array[i].p_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_a1_file ) { lib_array[i].a1_fname = ( char ** ) ckalloc ( lib_array[i].num_a1_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_a1_file; j++ ) { lib_array[i].a1_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_a2_file ) { lib_array[i].a2_fname = ( char ** ) ckalloc ( lib_array[i].num_a2_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_a2_file; j++ ) { lib_array[i].a2_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_q1_file ) { lib_array[i].q1_fname = ( char ** ) ckalloc ( lib_array[i].num_q1_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_q1_file; j++ ) { lib_array[i].q1_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } if ( lib_array[i].num_q2_file ) { lib_array[i].q2_fname = ( char ** ) ckalloc ( lib_array[i].num_q2_file * sizeof ( char * ) ); for ( j = 0; j < lib_array[i].num_q2_file; j++ ) { lib_array[i].q2_fname[j] = ( char * ) ckalloc ( 1024 * sizeof ( char ) ); } } } // get file names for ( i = 0; i < num_libs; i++ ) { lib_array[i].curr_type = 1; lib_array[i].curr_index = 0; lib_array[i].fp1 = NULL; lib_array[i].fp2 = NULL; lib_array[i].num_s_a_file = 0; lib_array[i].num_s_q_file = 0; lib_array[i].num_p_file = 0; lib_array[i].num_a1_file = 0; lib_array[i].num_a2_file = 0; lib_array[i].num_q1_file = 0; lib_array[i].num_q2_file = 0; } libCounter = -1; rewind ( fp ); i = -1; while ( fgets ( line, 1024, fp ) ) { ch = line[5]; line[5] = '\0'; if ( strcmp ( line, "[LIB]" ) == 0 ) { i++; continue; } line[5] = ch; flag = splitColumn ( line ); if ( !flag ) { continue; } if ( strcmp ( tabs[0], "f1" ) == 0 ) { index = lib_array[i].num_a1_file++; strcpy ( lib_array[i].a1_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "q1" ) == 0 ) { index = lib_array[i].num_q1_file++; strcpy ( lib_array[i].q1_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "f2" ) == 0 ) { index = lib_array[i].num_a2_file++; strcpy ( lib_array[i].a2_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "q2" ) == 0 ) { index = lib_array[i].num_q2_file++; strcpy ( lib_array[i].q2_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "f" ) == 0 ) { index = lib_array[i].num_s_a_file++; strcpy ( lib_array[i].s_a_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "q" ) == 0 ) { index = lib_array[i].num_s_q_file++; strcpy ( lib_array[i].s_q_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "p" ) == 0 ) { index = lib_array[i].num_p_file++; strcpy ( lib_array[i].p_fname[index], tabs[1] ); } else if ( strcmp ( tabs[0], "min_ins" ) == 0 ) { lib_array[i].min_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "max_ins" ) == 0 ) { lib_array[i].max_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "avg_ins" ) == 0 ) { lib_array[i].avg_ins = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rd_len_cutoff" ) == 0 ) { lib_array[i].rd_len_cutoff = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "reverse_seq" ) == 0 ) { lib_array[i].reverse = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "asm_flags" ) == 0 ) { lib_array[i].asm_flag = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rank" ) == 0 ) { lib_array[i].rank = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "pair_num_cutoff" ) == 0 ) { lib_array[i].pair_num_cut = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "rd_len_cutoff" ) == 0 ) { lib_array[i].rd_len_cutoff = atoi ( tabs[1] ); } else if ( strcmp ( tabs[0], "map_len" ) == 0 ) { lib_array[i].map_len = atoi ( tabs[1] ); } } fclose ( fp ); qsort ( &lib_array[0], num_libs, sizeof ( LIB_INFO ), cmp_lib ); }