int main(int argc, char* argv[]) { directory_structure_t ds; vector<object_trj_t> good_trlet_list; { std::string name = ds.workspace+"good_trlet_list.xml"; std::ifstream fin(name.c_str()); boost::archive::xml_iarchive ia(fin); ia >> BOOST_SERIALIZATION_NVP(good_trlet_list); } matrix<int> Tff; { std::string name = ds.workspace+"Tff.txt"; std::ifstream fin(name.c_str()); fin>>Tff; fin.close(); } matrix<float> Aff; { std::string name = ds.workspace+"Aff.txt"; std::ifstream fin(name.c_str()); fin>>Aff; fin.close(); } matrix<float> Ocff; { std::string name = ds.workspace+"Ocff.txt"; std::ifstream fin(name.c_str()); fin>>Ocff; fin.close(); } matrix<object_trj_t> gap_trlet_list; { std::string name = ds.workspace+"gap_trlet_list.xml"; std::ifstream fin(name.c_str()); boost::archive::xml_iarchive ia(fin); ia >> BOOST_SERIALIZATION_NVP(gap_trlet_list); } ////////////////////////////////////////////////////////////////////////// vector<std::vector<std::string> > seq(2); read_sequence_list(ds.prefix, seq); int T = seq[0].size(); int Ncam = 2; array<std::size_t, 2> img_size = {768, 1024}; geometric_info_t gi; gi.load(ds, img_size); parameter_t P; //load_part_model(model, P.head_wid_ratio, P.head_hi_ratio, P.torso_hi_ratio); real_timer_t timer2; matrix<int> LMat; matrix<int> links; matrix<float> Aff2(Aff+Ocff*0.2); solve_linprog(Tff, Aff2, LMat, links); std::cout<<"LP time: "<<timer2.elapsed()/1000.0f<<std::endl; std::cout<<"Lv="<<links<<std::endl; vector<object_trj_t> final_trj_list; vector<vector<int> > final_trj_index; matrix<int> final_state_list; finalize_trajectory(Ncam, T, links, good_trlet_list, gap_trlet_list, final_trj_list, final_trj_index, final_state_list); { std::string name = ds.workspace+"final_trj_list.xml"; std::ofstream fout(name.c_str()); boost::archive::xml_oarchive oa(fout); oa << BOOST_SERIALIZATION_NVP(final_trj_list); } { std::string name = ds.workspace+"final_state_list.txt"; std::ofstream fout(name.c_str()); fout<<final_state_list; fout.close(); } { std::string name = ds.workspace+"final_trj_index.txt"; std::ofstream fout(name.c_str()); fout << final_trj_index; fout.close(); } return 0; }
int main(int argc, char *argv[]) { int n,i,j,l; int intty; int outtty; char *mask, junk[20]; char **s; char **ss[4]; float *B; float **dm; Split *S; Union *U; char DistAlgorithm='H'; int nn[4]; short Do_Split=0, Do_Wards=0, Do_Stg=1, Do_4_Stg=0, Do_Nj=0, Do_Mat=0; float per_digit, per_gap; mask = vrna_alloc(sizeof(char)*54); strcpy (mask,"%ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); for (i=1; i<argc; i++) { if (argv[i][0]=='-') { switch ( argv[i][1] ) { case 'X': if (argv[i][2]=='\0') { Do_Stg = 1 ; break; } Do_Split = 0; Do_Wards = 0; Do_Stg = 0; Do_Nj = 0; for(j=2;j<strlen(argv[i]);j++) { switch(argv[i][j]) { case 's' : Do_Split = 1; break; case 'w' : Do_Wards = 1; break; case 'b' : Do_Stg = 1; break; case 'n' : Do_Nj = 1; break; case 'm' : Do_Mat = 1; break; default : usage(); } } break; case 'Q': Do_4_Stg = 1; break; case 'M': if(mask) { free(mask); mask = NULL; } switch (argv[i][2] ) { case '\0' : usage(); break; case 'a' : mask = vrna_alloc(sizeof(char)*54); strcpy(mask, "%ABCDEFGHIJKLMNOPQRSTUVWabcdefghijklmnopqrstuvwxyz"); if(argv[i][3]=='+') mask[0] = '~'; /* make case sensitive */ break; case 'u' : mask = vrna_alloc(sizeof(char)*28); strcpy(mask,"~ABCDEFGHIJKLMNOPQRSTUVW"); break; case 'l' : mask = vrna_alloc(sizeof(char)*28); strcpy(mask,"~abcdefghijklmnopqrstuvwxyz"); break; case 'c' : mask = vrna_alloc(sizeof(char)*12); strcpy(mask,"~1234567890"); break; case 'n' : mask = vrna_alloc(sizeof(char)*64); strcpy (mask, "%ABCDEFGHIJKLMNOPQRSTUVWabcdefghijklmnopqrstuvwxyz1234567890"); if(argv[i][3]=='+') mask[0] = '~'; /* make case sensitive */ break; case 'R' : /* RNA */ mask = vrna_alloc(sizeof(char)*10); strcpy(mask,"%GCAUgcau"); if(argv[i][3]=='+') mask[0] = '~'; /* make case sensitive */ break; case 'D' : /* DNA */ mask = vrna_alloc(sizeof(char)*10); strcpy (mask,"%GCATgcat"); if(argv[i][3]=='+') mask[0] = '~'; /* make case sensitive */ break; case 'A' : /* AMINOACIDS */ mask = vrna_alloc(sizeof(char)*42); strcpy(mask,"%ACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwy"); if(argv[i][3]=='+') mask[0] = '~'; /* make case sensitive */ break; case 'S' : /* SECONDARY STRUCTURES */ mask = vrna_alloc(sizeof(char)*6); strcpy(mask,"~().^"); break; case '%' : /* ARBITRARY ALPHABETS */ l = strlen(argv[i]); if(argv[i][l] == '+'){ mask = vrna_alloc(sizeof(char)*(l-2)); mask[0] = '~'; for(j=1;j<=l-4;j++) mask[j] = argv[i][j+2]; mask[l-3]='\0'; } if(argv[i][l] == '!'){ mask = vrna_alloc(sizeof(char)*(l-2)); mask[0] = '!'; for(j=1;j<=l-4;j++) mask[j] = argv[i][j+2]; mask[l-3]='\0'; } else { mask = vrna_alloc(sizeof(char)*(l-1)); mask[0] = '%'; for(j=1;j<=l-3;j++) mask[j] = argv[i][j+2]; mask[l-2]='\0'; } break; default : usage(); } break; case 'D' : /* choose algorithm */ switch(argv[i][2]) { case '\0' : usage(); break; case 'H' : DistAlgorithm = 'H'; break; case 'A' : DistAlgorithm = 'A'; if(argv[i][3]==',') { per_digit=-1.; sscanf(argv[i],"%[^,],%g",junk,&per_digit); if(per_digit<0.) usage(); per_gap = per_digit; Set_StrEdit_GapCosts(per_digit,per_gap); } break; case 'G' : DistAlgorithm = 'G'; if(argv[i][3]==',') { per_digit=-1.; per_gap =-1.; sscanf(argv[i]+4,"%f,%f",&per_digit,&per_gap); if((per_digit<0.)||(per_gap<0)) usage(); Set_StrEdit_GapCosts(per_digit,per_gap); } break; default: usage(); } break; case 'd' : /* choose distance matrix */ switch(argv[i][2]) { case 'D' : /* Dayhoff Distances */ case 'A' : /* Aminoacid Distance (Hofacker & Borstnik) */ case 'B' : /* RY distances for nucleotides */ case 'H' : /* Hogeweg's Distance for Secondary Structures */ case 'S' : /* Simple Distance (superfluous option) */ Set_StrEdit_CostMatrix(argv[i][2]); break; default : usage(); } break; default : usage(); } } } /* END PARSING OF COMMAND LINE */ intty = isatty(fileno(stdin)); outtty= isatty(fileno(stdout)); if(intty){ if(outtty) { printf("Input sequences; @ to mark end of input\n"); printf("%s%s\n", scale1, scale2); } else { fprintf(stderr,"Input sequences; @ to mark end of input\n"); fprintf(stderr,"%s%s\n", scale1, scale2); } } while ((s=read_sequence_list(&n,mask))!=NULL) { dm = NULL; if(Do_4_Stg) { ss[0] = s; nn[0] = n; for(i=1;i<4;i++) { ss[i] = read_sequence_list(&n,mask); if(ss[i]==NULL) vrna_message_error("read_sequences: wrong or insufficient data."); nn[i] = n; } printf_taxa_list(); B = statgeom4(ss,nn); printf_stg(B); SimplifiedBox(B,"box.ps"); /* This is preliminary !!! */ free(B); for(i=0;i<4;i++){ for(j=0;j<nn[i];j++) free(ss[i][j]); free(ss[i]); } /* free(ss); */ /* attempt to free a non-heap object */ } else { printf_taxa_list(); if(Do_Stg) { B = statgeom(s,n); if (B) { printf_stg(B); SimplifiedBox(B,"box.ps"); free(B); } } if((Do_Split)||(Do_Wards)||(Do_Nj)||(Do_Mat)) { switch(DistAlgorithm) { case 'H' : dm = Hamming_Distance_Matrix(s,n); printf("> %s\n","H (Hamming Distance)"); break; case 'A' : dm = StrEdit_SimpleDistMatrix(s,n); printf("> %s\n","A (Needleman-Wunsch Distance)"); break; case 'G' : dm = StrEdit_GotohDistMatrix(s,n); printf("> %s\n","G (Gotoh Distance)"); break; default: vrna_message_error("This can't happen."); } } if(Do_Split) { S = split_decomposition(dm); sort_Split(S); print_Split(S); free_Split(S); } if(Do_Wards) { U = wards_cluster(dm); printf_phylogeny(U,"W"); PSplot_phylogeny(U,"wards.ps","Ward's Method"); free(U); } if(Do_Nj) { U = neighbour_joining(dm); printf_phylogeny(U,"Nj"); PSplot_phylogeny(U,"nj.ps","Neighbor Joining"); free(U); } if(Do_Mat) printf_distance_matrix(dm); } if (dm!=NULL) free_distance_matrix(dm); for(i=0;i<n;i++) free(s[i]); free(s); } return 0; }