예제 #1
0
rc_t CC KMain(int argc, char* argv[]) {
    rc_t rc = 0;
    Args* args = NULL;

    Params prm;
    memset(&prm, 0, sizeof prm);

    do {
        uint32_t pcount = 0;

        rc = ArgsMakeAndHandle(&args, argc, argv, 1,
            Options, sizeof Options / sizeof (OptDef));
        if (rc) {
            LOGERR(klogErr, rc, "While calling ArgsMakeAndHandle");
            break;
        }
        rc = ArgsParamCount(args, &pcount);
        if (rc) {
            LOGERR(klogErr, rc, "While calling ArgsParamCount");
            break;
        }
        if (pcount < 1) {
            MiniUsage(args);
            DESTRUCT(Args, args);
            exit(1);
            break;
        }
        if (pcount > 1) {
            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcAmbiguous);
            LOGERR(klogErr, rc, "Too many database parameters");
            break;
        }
        rc = ArgsParamValue(args, 0, &prm.dbPath);
        if (rc) {
            LOGERR(klogErr, rc, "Failure retrieving database name");
            break;
        }

        rc = ArgsOptionCount (args, OPTION_ALL, &pcount);
        if (rc) {
            LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument");
            break;
        }
        if (pcount)
        {   prm.paramBamHeader = prm.paramQuality = prm.paramRef = true; }

        rc = ArgsOptionCount (args, OPTION_BAM, &pcount);
        if (rc) {
            LOGERR(klogErr, rc, "Failure to get '" OPTION_BAM "' argument");
            break;
        }
        if (pcount)
        {   prm.paramBamHeader = true; }

        rc = ArgsOptionCount (args, OPTION_QUA, &pcount);
        if (rc) {
            LOGERR(klogErr, rc, "Failure to get '" OPTION_QUA "' argument");
            break;
        }
        if (pcount)
        {   prm.paramQuality = true; }

        rc = ArgsOptionCount (args, OPTION_REF, &pcount);
        if (rc) {
            LOGERR(klogErr, rc, "Failure to get '" OPTION_REF "' argument");
            break;
        }
        if (pcount)
        {   prm.paramRef = true; }

        if (!prm.paramBamHeader && !prm.paramQuality && !prm.paramRef)
        {   prm.paramRef = true; }
    } while (false);

    if (rc == 0)
    {   rc = align_info(&prm); }

    DESTRUCT(Args, args);
    return rc;
}
예제 #2
0
double lex_score(char *src,char * tr,char * al,align_info * al_info,LexMap * lmap)
{
    double score=-1;
    str_vec src_vec,
    tr_vec;
    aligns alignments;

// 	cout<<"Lexical score for ('"<<src<<"','"<<tr<<"')"<<endl;

    tokenize_in_vec(src,&src_vec);

    tokenize_in_vec(tr,&tr_vec);

//     cout<<"Alignment: "<<al<<endl;
    get_alignments(al,&alignments);
//     cout<<"Extracted alignments:\n";
    /*for(aligns::iterator i=alignments.begin();i!=alignments.end();++i)
        cout<<i->first<<":"<<i->second	<<endl;
   */
    if (al_info)
        *al_info= align_info(src_vec.size() ,tr_vec.size() ,&alignments);

    ostringstream key;
    short i=0;
    for(str_vec::iterator src_itr=src_vec.begin();
        src_itr !=src_vec.end();
        ++src_itr,++i){


            if(alignments.count(i)==0){
// 				cout<<"the word '"<<*src_itr<<"' was unaligned"<<endl;
				//cout<<(*lmap)[*src_itr]<<"<---from lex map"<<endl;
                key.str(std::string());
                key<<*src_itr<<STR_SEP<<UNALIGNED;
//                 cout<<"Looking for: "<<key.str()<<endl;
                LexMap::iterator found=lmap->find(key.str());//src_itr->append(STR_SEP).append(UNALIGNED));
												  //lex_trans_type(*src_itr,UNALIGNED));
                if(found!=lmap->end()){
//                     cout<<"Map('"<<*src_itr<<"','"<<UNALIGNED<<"')="<<found->second<<endl; 
					if(score<0)
                        score =found->second;
                    else
						score *=found->second;//(*lmap)[lex_trans_type(*src_itr,UNALIGNED)];
                }
					/*
                else
                cout<<"the couple ('"<<*src_itr<<"',NULL) was not found in the lexical map"<<endl;
                                        */
            }
            else{
                double sum=0;
				unsigned npalign=0;
				//cout<<"the word('"<<*src_itr<<"') was aligned at least once\n";
                for(aligns::iterator al_itr=alignments.equal_range(i).first;
                    al_itr!=alignments.equal_range(i).second;
                    ++al_itr){
                        key.str(std::string());
                        key<<*src_itr<<STR_SEP<<tr_vec[al_itr->second];
//                         cout<<"Looking for: "<<key.str()<<endl;
                        LexMap::iterator found=lmap->find(key.str());

                        if(found!=lmap->end()){
//                             cout<<"Map('"<<*src_itr<<"','"<<tr_vec[al_itr->second]<<"')="<<found->second<<endl;
                            sum+=found->second;//(*lmap)[lex_trans_type(*src_itr,tr_vec[(*al_itr).second])];
							npalign++;
                        }else{
//                             cout<<"Couldn't find: '"<<*src_itr<<"','"<<tr_vec[al_itr->second]<<"' in the map\n";
                        }
                    } 
                    if(npalign>0){
						if(score<0)
                            score = sum/npalign;
                        else
                        	score *= sum/npalign;
//                     score *= sum/alignments.count(i);
					}
            }
        }
//         cout<<"Score= "<<score<<endl;
        return MAX(score,ZERO_PROB);
}