Beispiel #1
0
void fileCallback(LPCWSTR a){
	LPCWSTR name = wcsrchr(a, '/') + 1;;
	UINT lines = countFileLines(a);
	gLines += lines;
	UINT depth = pathDepth(a);
	for (UINT i = depth; i > gBegPathDepth; --i) putchar(' ');
	wprintf(L"%s [%d]\n", name, lines);
}
Beispiel #2
0
int main(int argc, char *argv[]) {
	switch (argc) {
		case 4:
			if (!strncmp(argv[2], "white", 5)) { background = 1; }
			if (!strncmp(argv[3], "mono", 4)) { mono = 1; }
			alpha = 1.0f;
			pSize = 1.0f;
			sampleSize = countFileLines(argv[1]);
			playFile(argc, argv);
			break;
		default:
			usage();
			exit(EXIT_FAILURE);
			break;
	}
	exit(EXIT_SUCCESS);
}
Beispiel #3
0
void collapseDuplexGroup(string sorted_duplex_group_file, string collapsed_dg_file, string logFile, string errorFile, int maxGap, int maxTotal)
{
    ofstream LOG(logFile, ios_base::app);
    ofstream ERR(errorFile, ios_base::app);
    
    LOG << "Start to collapseDuplexGroup " << sorted_duplex_group_file << "  ===>  " << collapsed_dg_file << endl;
    
    int merged_dgCount = 0;
    int firstPossible=0;
    
    PointerArray<DuplexGroup *> dgArray;
    long long fileLines = countFileLines(sorted_duplex_group_file);
    ProcessAlert alert(fileLines, 100000, 10);
    
    ifstream DUPLEXGROUP(sorted_duplex_group_file);
    char strand1, strand2;
    string chr1, chr2, supportReads;
    int start1, end1, start2, end2, support;
    
    while(DUPLEXGROUP>>chr1>>start1>>end1>>strand1>>chr2>>start2>>end2>>strand2>>supportReads>>support)
    {
        char buffer[200];
        sprintf(buffer, "firstPossible: %d, merged_dgCount: %d", firstPossible, merged_dgCount);
        LOG << alert.alert(string(buffer));
        
        DuplexGroup *dg = new DuplexGroup(chr1, start1, end1, strand1, chr2, start2,end2, strand2, support, supportReads);
        //dgArray.append(dg);
        
        //if(supportReads == "23198;10015265;10015267;10015268")
        //  cout << dgArray[dgArray.arrayLen()-1]->supportRead << endl;
        
        int lastDGovarlapped = 0; bool merged = false;
        for(int idx=firstPossible; idx<dgArray.arrayLen();idx++)
        {
            
            int overlapped = dgArray[idx]->overlapDG(dg, maxGap, maxTotal);
            /*
             if(supportReads == "23198;10015265;10015267;10015268" and idx==dgArray.arrayLen()-1)
             {
             cout << dgArray[dgArray.arrayLen()-1]->supportRead << endl;
             cout <<overlapped << endl;
             }
             */
            if (overlapped == -1){
                if(not lastDGovarlapped)
                    firstPossible = idx + 1;
            }
            else if(overlapped > 0){
                lastDGovarlapped = 1;
                dgArray[idx]->mergeDuplexGroup(dg);
                //dgArray.del(dgArray.arrayLen()-1);
                merged = true;
                delete dg;
                merged_dgCount++;
                break;
            }
            else{
                lastDGovarlapped = 1;
            }
        }
        if(not merged)
            dgArray.append(dg);
        //cout << merged_dgCount << endl;
    }
    LOG << alert.finish();
    DUPLEXGROUP.close();
    
    ofstream COLLAPSE(collapsed_dg_file);
    for(int i=0; i<dgArray.arrayLen(); i++)
        COLLAPSE << dgArray[i]->chr1 << "\t" << dgArray[i]->start1 << "\t" << dgArray[i]->end1 << "\t" << dgArray[i]->strand1 << "\t" << dgArray[i]->chr2 << "\t" << dgArray[i]->start2 << "\t" << dgArray[i]->end2 << "\t" << dgArray[i]->strand2 << "\t" << dgArray[i]->supportRead << "\t" << dgArray[i]->support << "\n";
    COLLAPSE.close();
    
    LOG.close();
    ERR.close();
}
Beispiel #4
0
int readCSVAsciiAndSaveBin(char *_asciiFileName,char *_binFileName) 
{
    //打开输入Ascii文件
    FILE *fpAscii=fopen(_asciiFileName,"r");
    if(fpAscii==NULL){
        printf("open .csv ascii file failed!\n");
        return -1;
    }

    //创建输出Bin文件
    FILE *fpBin=fopen(_binFileName,"w");
    if(fpBin==NULL){
        printf("create .csv.bin file failed!\n");
        return -1;
    }

    int linesCount=countFileLines(fpAscii);

    //设置fp回到stream头位置
    fseek(fpAscii,0,SEEK_SET);
    char buffer[MAX_LINE_SIZE];
    memset(buffer,'\0',MAX_LINE_SIZE);

    //读取第一行的表头并写入到Bin文件
    if(fgets(buffer,MAX_LINE_SIZE,fpAscii)!=NULL){
        //统计每行的字符个数
        int n=0;
        while(1){
            if(buffer[n++]=='\n')
                break;
        }
        fwrite(buffer,1,n,fpBin);
    }
    else{
        printf("get table name failed!\n");
        return -1;
    }
    printf("%s",buffer);


    //将每一行的数据读到buffer里去
    struct stuInfoLE stuInfoLETmp;
    struct stuInfoBE stuInfoBETmp;

    for(int l=2;l<=linesCount;++l){
        memset(buffer,'\0',MAX_LINE_SIZE);
        if(fgets(buffer,MAX_LINE_SIZE,fpAscii)!=NULL){
            //解析每一行的字符数据到自定义的结构体(小端)
            convAsciiLineBufferToStuInfoLE(buffer,&stuInfoLETmp);
            printf("%u,%s,%s,%u\n",stuInfoLETmp.Id,stuInfoLETmp.Name,stuInfoLETmp.Department,stuInfoLETmp.Age);    
        
            //转换小端结构体到大端结构体
            convStuInfoFromLEToBE(&stuInfoLETmp,&stuInfoBETmp); 
//            printf("%u,%s,%s,%u\n\n",stuInfoBETmp.Id,stuInfoBETmp.Name,stuInfoBETmp.Department,stuInfoBETmp.Age);    
          
            //将大端结构体以二进制写到输出文件流
            fwrite((char *)&stuInfoBETmp,sizeof(stuInfoBETmp),1,fpBin);
//            fwrite("\n",1,1,fpBin);
        } 
        else{
            printf("get %d line failed\n",l);
            return -1;
        }
    }
    
    printf("read ascii file and convert to bin file success!\n\n");

    fclose(fpAscii);
    fclose(fpBin);
    return 0;
}
Beispiel #5
0
void genDuplexGroup(string read_pair_file, string duplex_group_file, string logFile, string errorFile, int OVERLAP, bool multiDG)
{
    ofstream LOG(logFile, ios_base::app);
    ofstream ERR(errorFile, ios_base::app);
    
    LOG << "Start to genDuplexGroup " << read_pair_file << "  ===>  " << duplex_group_file << endl;
    
    long long fileLines = countFileLines(read_pair_file);
    ProcessAlert alert(fileLines, 100000, 10);
    
    ifstream READPAIR(read_pair_file);
    char strand1, strand2;
    string chr1, chr2;
    int start1, end1, id1, score1, start2, end2, id2, score2;
    
    int counter = 0;
    int firstPossible = 0;
    int dgCount = 0;
    PointerArray<DuplexGroup *> dgArray;
    while(READPAIR>>chr1>>start1>>end1>>id1>>score1>>strand1>>chr2>>start2>>end2>>id2>>score2>>strand2)
    {
        char buffer[200];
        sprintf(buffer, "firstPossible: %d, duplexCount: %d", firstPossible, dgCount);
        LOG << alert.alert(string(buffer));
        
        Read read(chr1, start1, end1, strand1, chr2, start2, end2, strand2, id1);
        
        int nonOverlapped = 1;
        int lastDGoverlapped = 0;
        for(int i=firstPossible;i<dgCount;i++)
        {
            int overlap = dgArray[i]->overlapRead(read);
            //cout << overlap << endl;
            if(overlap >= OVERLAP)
            {
                lastDGoverlapped = 1;
                nonOverlapped = 0;
                dgArray[i]->addRead(read);
                //cout << "find one" << endl;
                if (! multiDG) break;
            }else if (overlap == -1){
                if(not lastDGoverlapped)
                    firstPossible = i + 1;
            }else
            {
                lastDGoverlapped = 1;
            }
        }
        if (nonOverlapped)
        {
            DuplexGroup *dg = new DuplexGroup(read);
            dgArray.append( dg );
            dgCount++;
        }
        counter++;
    }
    LOG << alert.finish();
    READPAIR.close();
    
    ofstream DUPLEXGROUP(duplex_group_file);
    for(int i=0; i<dgArray.arrayLen(); i++)
        DUPLEXGROUP << dgArray[i]->chr1 << "\t" << dgArray[i]->start1 << "\t" << dgArray[i]->end1 << "\t" << dgArray[i]->strand1 << "\t" << dgArray[i]->chr2 << "\t" << dgArray[i]->start2 << "\t" << dgArray[i]->end2 << "\t" << dgArray[i]->strand2 << "\t" << dgArray[i]->supportRead << "\t" << dgArray[i]->support << endl;
    DUPLEXGROUP.close();
    
    LOG.close();
    ERR.close();
}