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; }
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); }