1 /* -*- mode: c; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
3 /*********************************************************************
4 * Clustal Omega - Multiple sequence alignment
6 * Copyright (C) 2010 University College Dublin
8 * Clustal-Omega is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
13 * This file is part of Clustal-Omega.
15 ********************************************************************/
18 * RCS $Id: hhutil-C.h 315 2016-12-15 17:18:30Z fabian $
21 #define PARAMETERSFROMFILE 0
23 extern bool nucleomode;
25 //////////////////////////////////////////////////////////////////////////////
26 // Transform a character to lower case and '.' to '-' and vice versa
27 //////////////////////////////////////////////////////////////////////////////
30 MatchChr(char c) {return ((c>='a' && c<='z')? c-'a'+'A' : (c=='.'? '-':c) );}
33 InsertChr(char c) {return ((c>='A' && c<='Z')? c+'a'-'A' : ((c>='0' && c<='9') || c=='-')? '.':c );}
36 WordChr(char c) {return (int)((c>='A' && c<='Z') || (c>='a' && c<='z'));}
39 //////////////////////////////////////////////////////////////////////////////
41 * @brief Transforms the one-letter amino acid code into an integer between 0 and 22
46 if (c>='a' && c<='z') c+='A'-'a';
50 // A R N D C Q E G H I L K M F P S T W Y V
76 case 'U': return 4; //Selenocystein -> Cystein
77 case 'B': return 3; //D (or N)
78 case 'Z': return 6; //E (or Q)
101 if (c>=0 && c<=32) return -1; // white space and control characters
105 ///////////////////////////////////////////////////////////////////////////////
107 * @brief Transforms integers between 0 and 22 into the one-letter amino acid code
112 //A R N D C Q E G H I L K M F P S T W Y V
137 case ANY: return 'X';
138 case GAP: return '-';
139 case ENDGAP: return '-';
152 case ANY: return 'N';
153 case GAP: return '-';
154 case ENDGAP: return '-';
160 //////////////////////////////////////////////////////////////////////////////
162 * @brief Transforms the dssp/psipred secondary structure code into an integer number
168 if (c>='a' && c<='z') c+='A'-'a';
184 case '\t': return -1;
185 case '\n': return -1;
190 //////////////////////////////////////////////////////////////////////////////
192 * @brief Transforms integers between 0 and 8 into the dssp/psipred secondary structure code
214 //////////////////////////////////////////////////////////////////////////////
216 * @brief Transforms the solvend accessiblity code into an integer number
222 if (c>='a' && c<='z') c+='A'-'a';
234 case '\t': return -1;
235 case '\n': return -1;
240 //////////////////////////////////////////////////////////////////////////////
242 * @brief Transforms integers between 0 and 5 into the solvent accessibility code
244 inline char i2sa(int c)
261 //////////////////////////////////////////////////////////////////////////////
263 * @brief Transforms alternative secondary structure symbols into symbols
271 case '~': return 'C';
272 case 'I': return 'C';
273 case 'i': return 'c';
294 //////////////////////////////////////////////////////////////////////////////
296 * @brief Transforms confidence values of psipred into internal code
319 //////////////////////////////////////////////////////////////////////////////
321 * @brief Transforms internal representation of psipred confidence values into printable chars
344 //////////////////////////////////////////////////////////////////////////////
346 * @brief Fast lookup of log2(1+2^(-x)) for x>=0 (precision < 0.35%)
349 fast_addscore(float x)
351 static float val[2001]; // val[i]=log2(1+2^(-x))
352 static char initialized;
353 if (x>20) return 0.0;
356 fprintf(stderr,"Error in function fast_addscore: argument %g is negative\n",x);
359 if (!initialized) //First fill in the log2-vector
361 for (int i=0; i<=2000; i++) val[i]=log2(1.0+pow(2,-0.01*(i+0.5)));
364 return val[(int)(100.0*x)];
369 //////////////////////////////////////////////////////////////////////////////
371 * @brief Little utilities for output
374 fout(FILE* outf, int d)
376 if (d>=99999) fprintf(outf,"*\t"); else fprintf(outf,"%i\t",d);
380 //////////////////////////////////////////////////////////////////////////////
385 FormatError(const char infile[], const char details[]="")
387 cerr<<"Error in "<</*par.argv[0],FS*/__FILE__<<": wrong format while reading file \'"<<infile<<". "<<details<<"\n";
392 OpenFileError(const char outfile[])
394 cerr<<endl<<"Error in "<</*par.argv[0],FS*/__FILE__<<": could not open file \'"<<outfile<<"\'\n";
399 MemoryError(const char arrayname[])
401 cerr<<"Error in "<</*par.argv[0],FS*/__FILE__<<": Memory overflow while creating \'"<<arrayname<<"\'. Please report this bug to developers\n";
406 InternalError(const char errstr[])
408 cerr<<"Error in "<</*par.argv[0],FS*/__FILE__<<": "<<errstr<<". Please report this bug to developers\n";
413 //////////////////////////////////////////////////////////////////////////////
415 * @brief Takes family code (eg. a.1.2.3) and returns strings 'a', 'a.1', and 'a.1.2'
418 ScopID(char cl[], char fold[], char sfam[], const char fam[])
424 ptr = strchr(cl,'.'); //return adress of next '.' in name
429 ptr = strchr(fold,'.'); //return adress of next '.' in name
430 if(ptr) ptr = strchr(ptr+1,'.'); //return adress of next '.' in name
433 //get scop superfamily ID
435 ptr = strchr(sfam,'.'); //return adress of next '.' in name
436 if(ptr) ptr = strchr(ptr+1,'.'); //return adress of next '.' in name
437 if(ptr) ptr = strchr(ptr+1,'.'); //return adress of next '.' in name
442 //////////////////////////////////////////////////////////////////////////////
444 * @brief Read up to n lines of outfile and write to screen (STDERR)
447 WriteToScreen(char* outfile, int n)
449 char line[LINELEN]="";
451 outf.open(outfile, ios::in);
452 if (!outf) {OpenFileError(outfile);}
454 for(; n>0 && outf.getline(line,LINELEN); n--) cout<<line<<"\n";
460 WriteToScreen(char* outfile) {WriteToScreen(outfile,INT_MAX);}
464 /////////////////////////////////////////////////////////////////////////////////////
466 * @brief Read .hhdefaults file into array argv_conf (beginning at argv_conf[1])
469 ReadDefaultsFile(int& argc_conf, char** argv_conf)
471 char line[LINELEN]="";
472 char filename[NAMELEN];
473 char* c_first; //pointer to first character of argument string
474 char* c; //pointer to scan line read in for end of argument
477 argc_conf=1; //counts number of arguments read in
480 strcpy(filename,"./.hhdefaults");
481 configf = fopen(filename,"r");
482 if (!configf && getenv("HOME"))
484 strcpy(filename,getenv("HOME"));
485 strcat(filename,"/.hhdefaults");
486 configf = fopen(filename,"r");
489 if (v>=3) cerr<<"Warning: could not find ./.hhdefaults or "<<filename<<"\n";
493 else if (!configf) return; // only webserver has no home directory => need no warning
495 // Scan file until line 'program_nameANYTHING'
496 while (fgets(line,LINELEN,configf))
497 if (!strncmp(line,program_name,6)) break;
498 // Found line 'program_nameANYTHING'?
499 if (!strncmp(line,program_name,6))
501 // Read in options until end-of-file or empty line
502 while (fgets(line,LINELEN,configf) && strcmp(line,"\n"))
509 while (*c==' ' || *c=='\t') c++; //Advance until next non-white space
510 if (*c=='\0' || *c=='\n' || *c=='#') break; //Is next word empty string?
512 while (*c!=' ' && *c!='\t' && *c!='#' && *c!='\0' && *c!='\n' ) c++; //Advance until next white space or '#'
513 if (*c=='\0' || *c=='\n' || *c=='#') //Is end of line reached?
516 argv_conf[argc_conf]=new char[strlen(c_first)+1];
517 strcpy(argv_conf[argc_conf++],c_first);
521 argv_conf[argc_conf]=new char[strlen(c_first)+1];
522 strcpy(argv_conf[argc_conf++],c_first);
523 printf("Argument: %s\n",c_first);
529 cout<<"Arguments read in from .hhdefaults:";
530 for (int argc=1; argc<argc_conf; argc++) cout<<(argv_conf[argc][0]=='-'? " ":"")<<argv_conf[argc]<<" ";
533 else if (v>=3) cout<<"Read in "<<argc_conf<<" default arguments for "<<program_name<<" from "<<filename<<"\n";
535 else //found no line 'program_name anything"
537 if (v>=3) cerr<<endl<<"Warning: no default options for \'"<<program_name<<"\' found in "<<filename<<"\n";
538 return; //no line 'program_name anything' found
545 /////////////////////////////////////////////////////////////////////////////////////
547 * @brief Set default parameter values
550 SetDefaults(hhalign_para rHhalignPara)
553 par.append=0; // overwrite output file
554 par.outformat=0; // 0: hhr 1: FASTA 2:A2M 3:A3M
555 par.p=20.0f; // minimum threshold for inclusion in hit list and alignment listing
556 par.E=1e6f; // maximum threshold for inclusion in hit list and alignment listing
557 par.b=10; // min number of alignments
558 par.B=500; // max number of alignments
559 par.z=10; // min number of lines in hit list
560 par.Z=500; // max number of lines in hit list
561 par.e=1e-3f; // maximum E-value for inclusion in output alignment, output HMM, and PSI-BLAST checkpoint model
562 par.showcons=1; // show consensus sequence
563 par.showdssp=1; // show predicted secondary structure
564 par.showpred=1; // show dssp secondary structure
565 par.cons=0; // show first non-SS sequence as main representative sequence (not consensus)
566 par.nseqdis=1; // maximum number of query sequences for output alignment
567 par.mark=0; // 1: only marked sequences (or first) get displayed; 0: most divergent ones get displayed
568 par.aliwidth=80; // number of characters per line in output alignments for HMM search
569 par.max_seqid=90; // default for maximum sequence identity threshold
570 par.qid=0; // default for minimum sequence identity with query
571 par.qsc=-20.0f; // default for minimum score per column with query
572 par.coverage=0; // default for minimum coverage threshold
573 par.Ndiff=100; // pick Ndiff most different sequences from alignment
574 par.coverage_core=80; // Minimum coverage for sequences in core alignment
575 par.qsc_core=0.3f; // Minimum score per column of core sequence with query
576 par.coresc=-20.0f; // Minimum score per column with core alignment (HMM)
578 par.M=1; // match state assignment is by A2M/A3M
579 par.Mgaps=50; // Above this percentage of gaps, columns are assigned to insert states (for par.M=2)
580 par.calibrate=0; // default: no calibration
581 par.calm=0; // derive P-values from: 0:query calibration 1:template calibration 2:both
584 par.wg=0; // 0: use local sequence weights 1: use local ones
586 par.matrix=0; // Subst.matrix 0: Gonnet, 1: HSDM, 2: BLOSUM50 3: BLOSUM62
587 par.pcm=2; // pseudocount mode: default=divergence-dependent (but not column-specific)
588 #if 1 /* Nelder-Meade on Baliscore*/
589 par.pca=1.712190f; // default values for substitution matrix pseudocounts
590 par.pcb=1.039640f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
591 par.pcc=0.878067f; // pcs are reduced prop. to 1/Neff^pcc
592 par.pcw=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
594 par.gapb=1.405220; // default values for transition pseudocounts
595 par.gapd=1.316760; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
596 par.gape=1.793780; // gap extension penalty pseudocount
597 par.gapf=1.034710; // factor for increasing gap open penalty for deletes
598 par.gapg=0.894772; // factor for increasing gap open penalty for inserts
599 par.gaph=0.544072; // factor for increasing gap extension penalty for deletes
600 par.gapi=0.862559; // factor for increasing gap extension penalty for inserts
601 #else /* Soeding's default*/
602 par.pca=1.0f; // default values for substitution matrix pseudocounts
603 par.pcb=1.5f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
604 par.pcc=1.0f; // pcs are reduced prop. to 1/Neff^pcc
605 par.pcw=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
607 par.gapb=1.0; // default values for transition pseudocounts
608 par.gapd=0.15; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
609 par.gape=1.0; // gap extension penalty pseudocount
610 par.gapf=0.6; // factor for increasing gap open penalty for deletes
611 par.gapg=0.6; // factor for increasing gap open penalty for inserts
612 par.gaph=0.6; // factor for increasing gap extension penalty for deletes
613 par.gapi=0.6; // factor for increasing gap extension penalty for inserts
617 /* Viterbi parameters optimised on Sabre (R228), FS, r228 -> r229 */
618 par.pcaV=1.245150f; // default values for substitution matrix pseudocounts
619 par.pcbV=1.682110f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
620 par.pccV=1.483840f; // pcs are reduced prop. to 1/Neff^pcc
621 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
623 par.gapbV=0.818625; // default values for transition pseudocounts
624 par.gapdV=0.666110; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
625 par.gapeV=1.028050; // gap extension penalty pseudocount
626 par.gapfV=0.710760; // factor for increasing gap open penalty for deletes
627 par.gapgV=1.649800; // factor for increasing gap open penalty for inserts
628 par.gaphV=0.470604; // factor for increasing gap extension penalty for deletes
629 par.gapiV=0.829479; // factor for increasing gap extension penalty for inserts
631 /* Viterbi parameters optimised on Balibase, r244 -> r245 */
632 par.pcaV=1.333860f; // default values for substitution matrix pseudocounts
633 par.pcbV=1.934480f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
634 par.pccV=1.655610f; // pcs are reduced prop. to 1/Neff^pcc
635 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
637 par.gapbV=0.334525; // default values for transition pseudocounts
638 par.gapdV=0.074534; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
639 par.gapeV=0.320336; // gap extension penalty pseudocount
640 par.gapfV=0.151634; // factor for increasing gap open penalty for deletes
641 par.gapgV=0.641516; // factor for increasing gap open penalty for inserts
642 par.gaphV=0.266434; // factor for increasing gap extension penalty for deletes
643 par.gapiV=0.598414; // factor for increasing gap extension penalty for inserts
644 #else /* Soeding default*/
645 par.pcaV=1.0f; // default values for substitution matrix pseudocounts
646 par.pcbV=1.5f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
647 par.pccV=1.0f; // pcs are reduced prop. to 1/Neff^pcc
648 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
650 par.gapbV=1.0; // default values for transition pseudocounts
651 par.gapdV=0.15; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
652 par.gapeV=1.0; // gap extension penalty pseudocount
653 par.gapfV=0.6; // factor for increasing gap open penalty for deletes
654 par.gapgV=0.6; // factor for increasing gap open penalty for inserts
655 par.gaphV=0.6; // factor for increasing gap extension penalty for deletes
656 par.gapiV=0.6; // factor for increasing gap extension penalty for inserts
659 par.ssm=2; // ss scoring mode: 0:no ss score 1:score after alignment 2:score during alignment
660 par.ssw=0.11f; // weight of ss scoring
661 par.ssa=1.0f; // weight of ss evolution matrix
662 par.shift=-0.01f; // Shift match score up
663 par.mact=0.3001f; // Score threshold for MAC alignment in local mode (set to 0.5001 to track user modification)
664 par.corr=0.1f; // Weight of correlations of scores for |i-j|<=4
665 par.wstruc=1.0f; // Weight of structure scores
667 par.egq=0.0f; // no charge for end gaps as default
668 par.egt=0.0f; // no charge for end gaps as default
670 par.trans=0; // no transitive scoring as default
671 par.Emax_trans=100.0f; // use intermediate HMMs with E-values up to 100 between query and database HMM
672 par.Emax_trans=100.0f; // use intermediate HMMs with E-values up to 100 between query and database HMM
673 par.wtrans=1.0f; // Ztot[k] = Zq[k] + wtrans * (Zforward[k]+Zreverse[k])
674 par.ssgap=0; // 1: add secondary structure-dependent gap penalties 0:off
675 par.ssgapd=1.0f; // secondary structure-dependent gap-opening penalty (per residue)
676 par.ssgape=0.0f; // secondary structure-dependent gap-extension penalty (per residue)
677 par.ssgapi=4; // max. number of inside-integer(ii); gap-open-penalty= -ii*ssgapd
679 par.loc=1; // local vs. global alignment as default
680 par.altali=2; // find up to two (possibly overlapping) subalignments
681 par.forward=0; // 0: Viterbi algorithm; 1: Viterbi+stochastic sampling; 3:Maximum Accuracy (MAC) algorithm
682 par.realign=1; // realign with MAC algorithm
684 par.repmode=0; // repeats score independently of one another
685 par.columnscore=1; // Default column score is 1: null model pnul = 1/2 * (q_av(a)+p_av(a))
686 par.min_overlap=0; // automatic minimum overlap used
687 par.opt=0; // Default = optimization mode off
688 par.readdefaultsfile=0; // Default = do not read a defaults file ./.hhdefaults or HOME/.hhdefaults
689 par.maxdbstrlen=200; // maximum length of database string to be printed in 'Command' line of hhr file
691 par.idummy=par.jdummy=0; //
693 par.notags=1; // neutralize His-tags, FLAG-tags, C-myc-tags
695 // Initialize strings
696 strcpy(par.infile,"stdin");
697 strcpy(par.outfile,"");
698 strcpy(par. pairwisealisfile,"");
699 strcpy(par.buffer,"buffer.txt");
700 strcpy(par.scorefile,"");
701 strcpy(par.wfile,"");
702 strcpy(par.alnfile,"");
703 strcpy(par.hhmfile,"");
704 strcpy(par.psifile,"");
708 //#if PARAMETERSFROMFILE /* read parameter file from home-dir */
709 //#include "hhutil-C-help.h"
710 //#endif /* read parameter file from home-dir */
711 if (rHhalignPara.pca >= 0.00){ par.pca = rHhalignPara.pca; }
712 if (rHhalignPara.pcb >= 0.00){ par.pcb = rHhalignPara.pcb; }
713 if (rHhalignPara.pcc >= 0.00){ par.pcc = rHhalignPara.pcc; }
714 if (rHhalignPara.pcw >= 0.00){ par.pcw = rHhalignPara.pcw; }
715 if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
716 if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
717 if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
718 if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
719 if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
720 if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
721 if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
722 if (rHhalignPara.pcaV >= 0.00){ par.pcaV = rHhalignPara.pcaV; }
723 if (rHhalignPara.pcbV >= 0.00){ par.pcbV = rHhalignPara.pcbV; }
724 if (rHhalignPara.pccV >= 0.00){ par.pccV = rHhalignPara.pccV; }
725 if (rHhalignPara.pcwV >= 0.00){ par.pcwV = rHhalignPara.pcwV; }
726 if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
727 if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
728 if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
729 if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
730 if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
731 if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
732 if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
735 } /** this is the end of SetDefaults() **/
737 void SetRnaDefaults(hhalign_para rHhalignPara)
739 par.pca=1.28f; // default values for substitution matrix pseudocounts
740 par.pcb=1.75f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
741 par.pcc=0.87f; // pcs are reduced prop. to 1/Neff^pcc
742 par.pcw=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
744 par.gapb=0.80; // default values for transition pseudocounts
745 par.gapd=0.34; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
746 par.gape=2.25; // gap extension penalty pseudocount
747 par.gapf=0.51; // factor for increasing gap open penalty for deletes
748 par.gapg=1.01; // factor for increasing gap open penalty for inserts
749 par.gaph=1.24; // factor for increasing gap extension penalty for deletes
750 par.gapi=0.45; // factor for increasing gap extension penalty for inserts
752 #if 0 /* these are the parameters determined by Dave (pre r274) */
753 par.pcaV=2.57f; // default values for substitution matrix pseudocounts
754 par.pcbV=2.34f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
755 par.pccV=0.88f; // pcs are reduced prop. to 1/Neff^pcc
756 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
758 par.gapbV=1.41; // default values for transition pseudocounts
759 par.gapdV=1.8; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
760 par.gapeV=1.5; // gap extension penalty pseudocount
761 par.gapfV=1.03; // factor for increasing gap open penalty for deletes
762 par.gapgV=0.89; // factor for increasing gap open penalty for inserts
763 par.gaphV=0.54; // factor for increasing gap extension penalty for deletes
764 par.gapiV=0.86; // factor for increasing gap extension penalty for inserts
765 #else /* parameters determined for r274, using Bralibase, FS */
766 par.pcaV=1.655620f; // default values for substitution matrix pseudocounts
767 par.pcbV=0.438399f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
768 par.pccV=0.371491f; // pcs are reduced prop. to 1/Neff^pcc
769 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
771 par.gapbV=1.914490; // default values for transition pseudocounts
772 par.gapdV=0.104278; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
773 par.gapeV=1.100210; // gap extension penalty pseudocount
774 par.gapfV=0.335152; // factor for increasing gap open penalty for deletes
775 par.gapgV=0.786688; // factor for increasing gap open penalty for inserts
776 par.gaphV=0.667143; // factor for increasing gap extension penalty for deletes
777 par.gapiV=0.711993; // factor for increasing gap extension penalty for inserts
780 //#if PARAMETERSFROMFILE /* read parameter file from home-dir */
781 //#include "hhutil-C-help.h"
782 //#endif /* read parameter file from home-dir */
783 if (rHhalignPara.pca >= 0.00){ par.pca = rHhalignPara.pca; }
784 if (rHhalignPara.pcb >= 0.00){ par.pcb = rHhalignPara.pcb; }
785 if (rHhalignPara.pcc >= 0.00){ par.pcc = rHhalignPara.pcc; }
786 if (rHhalignPara.pcw >= 0.00){ par.pcw = rHhalignPara.pcw; }
787 if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
788 if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
789 if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
790 if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
791 if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
792 if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
793 if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
794 if (rHhalignPara.pcaV >= 0.00){ par.pcaV = rHhalignPara.pcaV; }
795 if (rHhalignPara.pcbV >= 0.00){ par.pcbV = rHhalignPara.pcbV; }
796 if (rHhalignPara.pccV >= 0.00){ par.pccV = rHhalignPara.pccV; }
797 if (rHhalignPara.pcwV >= 0.00){ par.pcwV = rHhalignPara.pcwV; }
798 if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
799 if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
800 if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
801 if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
802 if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
803 if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
804 if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
806 } /* this is the end of SetRnaDefaults() */
808 void SetDnaDefaults(hhalign_para rHhalignPara)
810 par.pca=2.89f; // default values for substitution matrix pseudocounts
811 par.pcb=1.17f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
812 par.pcc=0.88f; // pcs are reduced prop. to 1/Neff^pcc
813 par.pcw=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
815 par.gapb=0.80; // default values for transition pseudocounts
816 par.gapd=0.34; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
817 par.gape=2.25; // gap extension penalty pseudocount
818 par.gapf=0.78; // factor for increasing gap open penalty for deletes
819 par.gapg=1.01; // factor for increasing gap open penalty for inserts
820 par.gaph=1.24; // factor for increasing gap extension penalty for deletes
821 par.gapi=0.45; // factor for increasing gap extension penalty for inserts
823 #if 0 /* these are the parameters determined by Dave (pre r274) */
824 par.pcaV=1.712f; // default values for substitution matrix pseudocounts
825 par.pcbV=1.039f; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
826 par.pccV=0.266f; // pcs are reduced prop. to 1/Neff^pcc
827 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
829 par.gapbV=1.405; // default values for transition pseudocounts
830 par.gapdV=1.8; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
831 par.gapeV=2.25; // gap extension penalty pseudocount
832 par.gapfV=1.034; // factor for increasing gap open penalty for deletes
833 par.gapgV=2.025; // factor for increasing gap open penalty for inserts
834 par.gaphV=0.544; // factor for increasing gap extension penalty for deletes
835 par.gapiV=1.35; // factor for increasing gap extension penalty for inserts }
836 #else /* parameters determined for r274, using mdsa, FS */
837 par.pcaV=2.196; // default values for substitution matrix pseudocounts
838 par.pcbV=0.329; // significant reduction of pcs by Neff_M starts around Neff_M-1=pcb
839 par.pccV=0.393; // pcs are reduced prop. to 1/Neff^pcc
840 par.pcwV=0.0f; // wc>0 weighs columns according to their intra-clomun similarity
842 par.gapbV=0.570; // default values for transition pseudocounts
843 par.gapdV=0.048; // gap open penalty pseudocount; 0.25 corresponds to 7.1*gapf bits
844 par.gapeV=1.692; // gap extension penalty pseudocount
845 par.gapfV=0.398; // factor for increasing gap open penalty for deletes
846 par.gapgV=0.121; // factor for increasing gap open penalty for inserts
847 par.gaphV=0.012; // factor for increasing gap extension penalty for deletes
848 par.gapiV=0.645; // factor for increasing gap extension penalty for inserts }
851 //#if PARAMETERSFROMFILE /* read parameter file from home-dir */
852 //#include "hhutil-C-help.h"
853 //#endif /* read parameter file from home-dir */
854 if (rHhalignPara.pca >= 0.00){ par.pca = rHhalignPara.pca; }
855 if (rHhalignPara.pcb >= 0.00){ par.pcb = rHhalignPara.pcb; }
856 if (rHhalignPara.pcc >= 0.00){ par.pcc = rHhalignPara.pcc; }
857 if (rHhalignPara.pcw >= 0.00){ par.pcw = rHhalignPara.pcw; }
858 if (rHhalignPara.gapb >= 0.00){ par.gapb = rHhalignPara.gapb; }
859 if (rHhalignPara.gapd >= 0.00){ par.gapd = rHhalignPara.gapd; }
860 if (rHhalignPara.gape >= 0.00){ par.gape = rHhalignPara.gape; }
861 if (rHhalignPara.gapf >= 0.00){ par.gapf = rHhalignPara.gapf; }
862 if (rHhalignPara.gapg >= 0.00){ par.gapg = rHhalignPara.gapg; }
863 if (rHhalignPara.gaph >= 0.00){ par.gaph = rHhalignPara.gaph; }
864 if (rHhalignPara.gapi >= 0.00){ par.gapi = rHhalignPara.gapi; }
865 if (rHhalignPara.pcaV >= 0.00){ par.pcaV = rHhalignPara.pcaV; }
866 if (rHhalignPara.pcbV >= 0.00){ par.pcbV = rHhalignPara.pcbV; }
867 if (rHhalignPara.pccV >= 0.00){ par.pccV = rHhalignPara.pccV; }
868 if (rHhalignPara.pcwV >= 0.00){ par.pcwV = rHhalignPara.pcwV; }
869 if (rHhalignPara.gapbV >= 0.00){ par.gapbV = rHhalignPara.gapbV; }
870 if (rHhalignPara.gapdV >= 0.00){ par.gapdV = rHhalignPara.gapdV; }
871 if (rHhalignPara.gapeV >= 0.00){ par.gapeV = rHhalignPara.gapeV; }
872 if (rHhalignPara.gapfV >= 0.00){ par.gapfV = rHhalignPara.gapfV; }
873 if (rHhalignPara.gapgV >= 0.00){ par.gapgV = rHhalignPara.gapgV; }
874 if (rHhalignPara.gaphV >= 0.00){ par.gaphV = rHhalignPara.gaphV; }
875 if (rHhalignPara.gapiV >= 0.00){ par.gapiV = rHhalignPara.gapiV; }
878 } /* this is the end of SetDnaDefaults() */