[med-svn] [Git][med-team/mafft][upstream] New upstream version 7.525

Michael R. Crusoe (@crusoe) gitlab at salsa.debian.org
Fri Sep 5 09:57:07 BST 2025



Michael R. Crusoe pushed to branch upstream at Debian Med / mafft


Commits:
cf82eb12 by Michael R. Crusoe at 2025-09-05T10:32:45+02:00
New upstream version 7.525
- - - - -


25 changed files:

- + README.md
- core/Falign.c
- core/MSalignmm.c
- core/Makefile
- core/addsingle.c
- core/blosum.c
- core/constants.c
- core/defs.c
- core/disttbfast.c
- core/dndpre.c
- core/f2cl.c
- core/functions.h
- core/io.c
- core/mafft-distance.c
- core/mafft.tmpl
- core/makedirectionlist.c
- core/mltaln.h
- core/mltaln9.c
- core/pairlocalalign.c
- core/sextet5.c
- core/splittbfast.c
- core/tbfast.c
- core/tditeration.c
- readme → readme.bk
- + test/x


Changes:

=====================================
README.md
=====================================
@@ -0,0 +1,121 @@
+# MAFFT version 7.525
+Multiple sequence alignment program
+<br>
+https://mafft.cbrc.jp/alignment/software/
+
+## COMPILE
+     % cd core
+     % make clean
+     % make
+     % cd ..
+
+If you have the `./extensions` directory, which is for RNA alignments,
+
+     % cd extensions
+     % make clean
+     % make
+     % cd ..
+
+
+## INSTALL (select a or b below)
+###  a. Install to /usr/local/ using root account
+     # cd core
+     # make install
+     # cd ..
+
+If you have the `./extensions` directory,
+
+     # cd extensions 
+     # make install
+     # cd ..
+
+By this procedure (a), programs are installed into `/usr/local/bin/`. Some binaries, which are not directly used by a user, are installed into `/usr/local/libexec/mafft/`.
+
+If the MAFFT_BINARIES environment variable is set to `/somewhare/else/`, the binaries in this directory are used, instead of those in `/usr/local/libexec/mafft/`.
+
+### b. Install to non-default location (root account is not necessary)
+     % cd core/
+          Edit the first line of Makefile 
+          From:
+          PREFIX = /usr/local
+          To:
+          PREFIX = /home/your_home/somewhere
+
+          Edit the third line of Makefile 
+          From:
+          BINDIR = $(PREFIX)/bin
+          To:
+          BINDIR = /home/your_home/bin 
+                   (or elsewhere in your command-search path)
+     % make clean
+     % make
+     % make install
+
+If you have the `./extensions` directory,
+
+     % cd ../extensions/
+          Edit the first line of Makefile 
+          From:
+          PREFIX = /usr/local
+          To:
+          PREFIX = /home/your_home/somewhere
+     % make clean
+     % make
+     % make install
+
+The `MAFFT_BINARIES` environment variable *must not be* set.
+
+If the `MAFFT_BINARIES` environment variable is set to `/somewhare/else/`, it overrides the setting of `PREFIX` (`/home/your_home/somewhere/` in the above example) in Makefile.
+
+## CHECK
+     % cd test
+     % rehash                                                   # if necessary
+     % mafft sample > test.fftns2                               # FFT-NS-2
+     % mafft --maxiterate 100  sample > test.fftnsi             # FFT-NS-i
+     % mafft --globalpair sample > test.gins1                   # G-INS-1 
+     % mafft --globalpair --maxiterate 100  sample > test.ginsi # G-INS-i 
+     % mafft --localpair sample > test.lins1                    # L-INS-1 
+     % mafft --localpair --maxiterate 100  sample > test.linsi  # L-INS-i 
+     % diff test.fftns2 sample.fftns2
+     % diff test.fftnsi sample.fftnsi
+     % diff test.gins1 sample.gins1
+     % diff test.ginsi sample.ginsi
+     % diff test.lins1 sample.lins1
+
+If you have the `./extensions` directory,
+
+     % mafft-qinsi samplerna > test.qinsi                       # Q-INS-i
+     % mafft-xinsi samplerna > test.xinsi                       # X-INS-i
+     % diff test.qinsi samplerna.qinsi
+     % diff test.xinsi samplerna.xinsi
+
+If you use the multithread version, the results of iterative refinement methods (`*-*-i`) are not always identical.  So try this test in the single-thread mode (`--thread 0`).
+
+
+## INPUT FORMAT
+Fasta format.
+
+The type of input sequences (nucleotide or amino acid) is automatically recognized based on the frequency of A, T, G, C, U and N.
+
+
+##  USAGE
+     % /usr/local/bin/mafft input > output
+
+See also https://mafft.cbrc.jp/alignment/software/
+
+
+## UNINSTALL
+     # rm -r /usr/local/libexec/mafft
+     # rm /usr/local/bin/mafft
+     # rm /usr/local/bin/fftns
+     # rm /usr/local/bin/fftnsi
+     # rm /usr/local/bin/nwns
+     # rm /usr/local/bin/nwnsi
+     # rm /usr/local/bin/linsi
+     # rm /usr/local/bin/ginsi
+     # rm /usr/local/bin/mafft-*
+     # rm /usr/local/share/man/man1/mafft*
+
+
+## LICENSE
+See `./license` and `./license.extensions`.


=====================================
core/Falign.c
=====================================
@@ -1834,9 +1834,9 @@ static double estimategapfreq( int n, char **s )
 	return( fv/(double)n );
 }
 
-static int terminalmargin( int lshorter, double groupsizefac )
+static int getterminalmargin( int lshorter, double groupsizefac )
 {
-	return ( lshorter * 2.0 + 100 ) * groupsizefac;
+	return ( lshorter * 2.0 + terminalmargin ) * groupsizefac;
 //	return ( lshorter * 1.1 + 10 ) * groupsizefac;
 }
 
@@ -2061,9 +2061,9 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		sgap2 = AllocateCharVec( njob );
 		egap2 = AllocateCharVec( njob );
 		//kouho = AllocateIntVec( NKOUHO_LONG );
-		alignorcopy = AllocateIntVec( MAXSEG );
-		cut1 = AllocateIntVec( MAXSEG );
-		cut2 = AllocateIntVec( MAXSEG );
+		alignorcopy = AllocateIntVec( MAXSEG_GIVENANCHORS );
+		cut1 = AllocateIntVec( MAXSEG_GIVENANCHORS );
+		cut2 = AllocateIntVec( MAXSEG_GIVENANCHORS );
 		//tmpptr1 = AllocateCharMtx( njob, 0 );
 		//tmpptr2 = AllocateCharMtx( njob, 0 );
 		//segment = (Segment *)calloc( MAXSEG, sizeof( Segment ) );
@@ -2123,359 +2123,6 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		localalloclen = nlen;
 	}
 	
-#if 0
-	for( j=0; j<clus1; j++ ) strcpy( tmpseq1[j], seq1[j] );
-	for( j=0; j<clus2; j++ ) strcpy( tmpseq2[j], seq2[j] );
-
-	if( !kobetsubunkatsu )
-	{
-		if( fftkeika ) fprintf( stderr,  " FFT ... " );
-
-		for( j=0; j<n20or4or2; j++ ) vec_init( seqVector1[j], nlen );
-		if( scoremtx == -1 )
-		{
-			for( i=0; i<clus1; i++ )
-				seq_vec_4( seqVector1[0], eff1[i], tmpseq1[i] );
-		}
-		else if( fftscore )
-		{
-			for( i=0; i<clus1; i++ )
-			{
-#if 0
-				seq_vec_2( seqVector1[0], polarity, eff1[i], tmpseq1[i] );
-				seq_vec_2( seqVector1[1], volume,   eff1[i], tmpseq1[i] );
-#else
-				seq_vec_5( seqVector1[0], polarity, volume, eff1[i], tmpseq1[i] );
-#endif
-			}
-		}
-		else
-		{
-			for( i=0; i<clus1; i++ )
-				seq_vec_3( seqVector1, eff1[i], tmpseq1[i] );
-		}
-#if RND
-		for( i=0; i<clus1; i++ )
-		{
-			vec_init2( seqVector1, rndseq1[i], eff1[i], len1, nlen );
-		}
-#endif
-
-		for( j=0; j<n20or4or2; j++ ) vec_init( seqVector2[j], nlen );
-		if( scoremtx == -1 )
-		{
-			for( i=0; i<clus2; i++ )
-				seq_vec_4( seqVector2[0], eff2[i], tmpseq2[i] );
-		}
-		else if( fftscore )
-		{
-			for( i=0; i<clus2; i++ )
-			{
-#if 0
-				seq_vec_2( seqVector2[0], polarity, eff2[i], tmpseq2[i] );
-				seq_vec_2( seqVector2[1], volume,   eff2[i], tmpseq2[i] );
-#else
-				seq_vec_5( seqVector2[0], polarity, volume, eff2[i], tmpseq2[i] );
-#endif
-			}
-		}
-		else
-		{
-			for( i=0; i<clus2; i++ )
-				seq_vec_3( seqVector2, eff2[i], tmpseq2[i] );
-		}
-#if RND
-		for( i=0; i<clus2; i++ )
-		{
-			vec_init2( seqVector2, rndseq2[i], eff2[i], len2, nlen );
-		}
-#endif
-
-
-		for( j=0; j<n20or4or2; j++ )
-		{
-			fft( nlen, seqVector2[j], 0 );
-			fft( nlen, seqVector1[j], 0 );
-		}
-
-		for( k=0; k<n20or4or2; k++ ) 
-		{
-			for( l=0; l<nlen; l++ ) 
-				calcNaiseki( naiseki[k]+l, seqVector1[k]+l, seqVector2[k]+l );
-		}
-		for( l=0; l<nlen; l++ ) 
-		{
-			naisekiNoWa[l].R = 0.0;
-			naisekiNoWa[l].I = 0.0;
-			for( k=0; k<n20or4or2; k++ ) 
-			{
-				naisekiNoWa[l].R += naiseki[k][l].R;
-				naisekiNoWa[l].I += naiseki[k][l].I;
-			}
-		}
-	
-
-		fft( -nlen, naisekiNoWa, 0 );
-	
-		for( m=0; m<=nlen2; m++ ) 
-			soukan[m] = naisekiNoWa[nlen2-m].R;
-		for( m=nlen2+1; m<nlen; m++ ) 
-			soukan[m] = naisekiNoWa[nlen+nlen2-m].R;
-
-
-		nkouho = getKouho( kouho, NKOUHO_LONG, soukan, nlen );
-
-#if 0
-		for( i=0; i<nkouho; i++ )
-		{
-			fprintf( stderr, "kouho[%d] = %d\n", i, kouho[i] );
-		}
-#endif
-	}
-
-#if KEIKA
-	fprintf( stderr, "Searching anchors ... " );
-#endif
-	count = 0;
-
-
-
-	if( kobetsubunkatsu )
-	{
-		maxk = 1;
-		kouho[0] = 0;
-	}
-	else
-	{
-		maxk = nkouho;
-	}
-
-	for( k=0; k<maxk; k++ ) 
-	{
-		lag = kouho[k];
-		if( lag <= -len1 || len2 <= lag ) continue;
-//		fprintf( stderr, "k=%d, lag=%d\n", k, lag );
-		zurasu2( lag, clus1, clus2, seq1, seq2, tmpptr1, tmpptr2 );
-
-//		fprintf( stderr, "lag = %d\n", lag );
-		tmpint = alignableReagion( clus1, clus2, tmpptr1, tmpptr2, eff1, eff2, segment+count );
-//		fprintf( stderr, "lag = %d, %d found\n", lag, tmpint );
-
-//		if( lag == -50 ) exit( 1 );
-		
-		if( count+tmpint > MAXSEG -3 ) ErrorExit( "TOO MANY SEGMENTS.\n" );
-
-//		fprintf( stderr, "##### k=%d / %d\n", k, maxk );
-//		if( tmpint == 0 ) break; // 060430 iinoka ? // 090530 yameta
-		while( tmpint-- > 0 )
-		{
-#if 0
-			if( segment[count].end - segment[count].start < fftWinSize )
-			{
-				count++;
-				continue;
-			}
-#endif
-			if( lag > 0 )
-			{
-				segment1[count].start  = segment[count].start ;
-				segment1[count].end    = segment[count].end   ;
-				segment1[count].center = segment[count].center;
-				segment1[count].score  = segment[count].score;
-
-				segment2[count].start  = segment[count].start  + lag;
-				segment2[count].end    = segment[count].end    + lag;
-				segment2[count].center = segment[count].center + lag;
-				segment2[count].score  = segment[count].score       ;
-			}
-			else
-			{
-				segment1[count].start  = segment[count].start  - lag;
-				segment1[count].end    = segment[count].end    - lag;
-				segment1[count].center = segment[count].center - lag;
-				segment1[count].score  = segment[count].score       ;
-
-				segment2[count].start  = segment[count].start ;
-				segment2[count].end    = segment[count].end   ;
-				segment2[count].center = segment[count].center;
-				segment2[count].score  = segment[count].score ;
-			}
-#if 0
-			fprintf( stderr, "##### k=%d / %d\n", k, maxk );
-			fprintf( stderr, "anchor %d, score = %f\n", count, segment1[count].score );
-			fprintf( stderr, "in 1 %d\n", segment1[count].center );
-			fprintf( stderr, "in 2 %d\n", segment2[count].center );
-#endif
-			segment1[count].pair = &segment2[count];
-			segment2[count].pair = &segment1[count];
-			count++;
-#if 0
-			fprintf( stderr, "count=%d\n", count );
-#endif
-		}
-	}
-#if 1
-	if( !kobetsubunkatsu )
-		if( fftkeika ) fprintf( stderr, "done. (%d anchors) ", count );
-#endif
-	if( !count && fftNoAnchStop )
-		ErrorExit( "Cannot detect anchor!" );
-#if 0
-	fprintf( stderr, "RESULT before sort:\n" );
-	for( l=0; l<count+1; l++ )
-	{
-		fprintf( stderr, "cut[%d]=%d, ", l, segment1[l].center );
-		fprintf( stderr, "%d score = %f\n", segment2[l].center, segment1[l].score );
-	}
-#endif
-
-	for( i=0; i<count; i++ )
-	{
-		sortedseg1[i] = &segment1[i];
-		sortedseg2[i] = &segment2[i];
-	}
-#if 0
-	tmpsort( count, sortedseg1 ); 
-	tmpsort( count, sortedseg2 ); 
-	qsort( sortedseg1, count, sizeof( Segment * ), segcmp );
-	qsort( sortedseg2, count, sizeof( Segment * ), segcmp );
-#else
-	mymergesort( 0, count-1, sortedseg1 ); 
-	mymergesort( 0, count-1, sortedseg2 ); 
-#endif
-	for( i=0; i<count; i++ ) sortedseg1[i]->number = i;
-	for( i=0; i<count; i++ ) sortedseg2[i]->number = i;
-
-
-
-	if( kobetsubunkatsu )
-	{
-		for( i=0; i<count; i++ )
-	    {
-			cut1[i+1] = sortedseg1[i]->center;
-			cut2[i+1] = sortedseg2[i]->center;
-		}
-		cut1[0] = 0;
-		cut2[0] = 0;
-		cut1[count+1] = len1;
-		cut2[count+1] = len2;
-		count += 2;
-	}
-
-	else
-	{
-		if( count < 5000 )
-		{
-			if( crossscoresize < count+2 )
-			{
-				crossscoresize = count+2;
-#if 1
-				if( fftkeika ) fprintf( stderr, "######allocating crossscore, size = %d\n", crossscoresize );
-#endif
-				if( crossscore ) FreeDoubleMtx( crossscore );
-				crossscore = AllocateDoubleMtx( crossscoresize, crossscoresize );
-			}
-			for( i=0; i<count+2; i++ ) for( j=0; j<count+2; j++ )
-				crossscore[i][j] = 0.0;
-			for( i=0; i<count; i++ )
-			{
-				crossscore[segment1[i].number+1][segment1[i].pair->number+1] = segment1[i].score;
-				cut1[i+1] = sortedseg1[i]->center;
-				cut2[i+1] = sortedseg2[i]->center;
-			}
-	
-#if 0
-			fprintf( stderr, "AFTER SORT\n" );
-			for( i=0; i<count+1; i++ ) fprintf( stderr, "%d, %d\n", cut1[i], cut2[i] );
-			fprintf( stderr, "crossscore = \n" );
-			for( i=0; i<count+1; i++ )
-			{
-				for( j=0; j<count+1; j++ )
-					fprintf( stderr, "%.0f ", crossscore[i][j] );
-				fprintf( stderr, "\n" );
-			}
-#endif
-
-			crossscore[0][0] = 10000000.0;
-			cut1[0] = 0; 
-			cut2[0] = 0;
-			crossscore[count+1][count+1] = 10000000.0;
-			cut1[count+1] = len1;
-			cut2[count+1] = len2;
-			count += 2;
-			count0 = count;
-		
-//			fprintf( stderr, "\n\n\ncalling blockAlign2\n\n\n\n" );
-			blockAlign2( cut1, cut2, sortedseg1, sortedseg2, crossscore, &count );
-	
-//			if( count-count0 )
-//				fprintf( stderr, "%d unused anchors\n", count0-count );
-	
-			if( !kobetsubunkatsu && fftkeika )
-				fprintf( stderr, "%d anchors found\n", count );
-			if( fftkeika )
-			{
-				if( count0 > count )
-				{
-#if 0
-					fprintf( stderr, "\7 REPEAT!? \n" ); 
-#else
-					fprintf( stderr, "REPEAT!? \n" ); 
-#endif
-					if( fftRepeatStop ) exit( 1 );
-				}
-#if KEIKA
-				else fprintf( stderr, "done\n" );
-#endif
-			}
-		}
-
-
-		else
-		{
-			fprintf( stderr, "\nMany anchors were found. The upper-level DP is skipped.\n\n" );
-
-			cut1[0] = 0; 
-			cut2[0] = 0;
-			count0 = 0;
-			for( i=0; i<count; i++ )
-			{
-//				fprintf( stderr, "i=%d, %d-%d ?\n", i, sortedseg1[i]->center, sortedseg1[i]->pair->center );
-				if( sortedseg1[i]->center > cut1[count0]
-				 && sortedseg1[i]->pair->center > cut2[count0] )
-				{
-					count0++;
-					cut1[count0] = sortedseg1[i]->center;
-					cut2[count0] = sortedseg1[i]->pair->center;
-				}
-				else
-				{
-					if( i && sortedseg1[i]->score > sortedseg1[i-1]->score )
-					{
-						if( sortedseg1[i]->center > cut1[count0-1]
-						 && sortedseg1[i]->pair->center > cut2[count0-1] )
-						{
-							cut1[count0] = sortedseg1[i]->center;
-							cut2[count0] = sortedseg1[i]->pair->center;
-						}
-						else
-						{
-//							count0--;
-						}
-					}
-				}
-			}
-//			if( count-count0 )
-//				fprintf( stderr, "%d anchors unused\n", count-count0 );
-			cut1[count0+1] = len1;
-			cut2[count0+1] = len2;
-			count = count0 + 2;
-			count0 = count;
-	
-		}
-	}
-	//uwagaki!
-#endif
 
 	marginfac1 = 1.0 + estimategapfreq( clus1, seq1 );
 	marginfac2 = 1.0 + estimategapfreq( clus2, seq2 );
@@ -2499,20 +2146,20 @@ double Falign_givenanchors( ExtAnch *pairanch,
 			count0++;
 			continue;
 		}
-		if( count+2 > MAXSEG -3 ) ErrorExit( "TOO MANY SEGMENTS.\n" );
+		if( count+2 > MAXSEG_GIVENANCHORS -3 ) ErrorExit( "TOO MANY SEGMENTS.\n" );
 #if 1 // mattan no tansaku hann'i wo seigen
 		if( count == 0 ) 	
 		{
 //			if( pairanch[count0].starti - pairanch[count0].startj > TERMINALSEGMENTLENGTH ) // you kentou
 //			nogaplen1 = estimatenogaplen( clus1, seq1, pairanch[count0].starti, 0 );
 //			nogaplen2 = estimatenogaplen( clus2, seq2, pairanch[count0].startj, 0 );
-			if( pairanch[count0].starti > terminalmargin(pairanch[count0].startj,marginfac1) )
+			if( pairanch[count0].starti > getterminalmargin(pairanch[count0].startj,marginfac1) )
 			{
 //				alignorcopy[1] = 'A';
-//				reporterr( "check 1, because starti=%d > startj=%d -> %d (clus1=%d)\n", pairanch[count0].starti, pairanch[count0].startj, terminalmargin(pairanch[count0].startj,marginfac1), clus1 );
-				cutadd = pairanch[count0].starti - terminalmargin(pairanch[count0].startj,marginfac1);
-//				reporterr( "cutadd(1)=%d\n", cutadd );
-//				if( 1 || cutadd > TERMINALMARGIN(0) ) // iranai
+				reporterr( "check 1, because starti=%d > startj=%d -> %d (clus1=%d)\n", pairanch[count0].starti, pairanch[count0].startj, getterminalmargin(pairanch[count0].startj,marginfac1), clus1 );
+				cutadd = pairanch[count0].starti - getterminalmargin(pairanch[count0].startj,marginfac1);
+				reporterr( "cutadd(1)=%d\n", cutadd );
+//				if( 0 || cutadd > TERMINALMARGIN(0) ) // iranai
 				{
 					cut1[1] = cutadd;
 					cut2[1] = 0;
@@ -2521,12 +2168,12 @@ double Falign_givenanchors( ExtAnch *pairanch,
 					starttermcut1 = 1;
 				}
 			}
-			else if( pairanch[count0].startj > terminalmargin(pairanch[count0].starti, marginfac2) )
+			else if( pairanch[count0].startj > getterminalmargin(pairanch[count0].starti, marginfac2) )
 			{
 //				alignorcopy[1] = 'A';
-//				reporterr( "check 2, because startj=%d > starti=%d -> %d (clus2=%d)\n", pairanch[count0].startj, pairanch[count0].starti, terminalmargin(pairanch[count0].starti,marginfac2), clus2 );
-				cutadd = pairanch[count0].startj - terminalmargin( pairanch[count0].starti, marginfac2 );
-//				reporterr( "cutadd(2)=%d\n", cutadd );
+				reporterr( "check 2, because startj=%d > starti=%d -> %d (clus2=%d)\n", pairanch[count0].startj, pairanch[count0].starti, getterminalmargin(pairanch[count0].starti,marginfac2), clus2 );
+				cutadd = pairanch[count0].startj - getterminalmargin( pairanch[count0].starti, marginfac2 );
+				reporterr( "cutadd(2)=%d\n", cutadd );
 				{
 					cut1[1] = 0;
 					cut2[1] = cutadd;
@@ -2545,12 +2192,13 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		count += 1;
 
 #if 1
+#define DIVIDEANCHOR 100
 		if( pairanch[count0].endi - cut1[count] == pairanch[count0].endj - cut2[count] )
-		while( pairanch[count0].endi+1 - cut1[count] > 100 && pairanch[count0].endj+1 - cut2[count] > 100 )
+		while( pairanch[count0].endi+1 - cut1[count] > DIVIDEANCHOR && pairanch[count0].endj+1 - cut2[count] > DIVIDEANCHOR )
 		{
-			reporterr( "added an anchor, because the length is %d,%d > 100\n", pairanch[count0].endi+1 - cut1[count], pairanch[count0].endj+1 - cut2[count] );
-			cut1[count+1] = cut1[count] + 100;
-			cut2[count+1] = cut2[count] + 100;
+			reporterr( "added an anchor, because the length is %d,%d > DIVIDEANCHOR.    \r", pairanch[count0].endi+1 - cut1[count], pairanch[count0].endj+1 - cut2[count] );
+			cut1[count+1] = cut1[count] + DIVIDEANCHOR;
+			cut2[count+1] = cut2[count] + DIVIDEANCHOR;
 			alignorcopy[count+1] = 'c';
 			count += 1;
 		}
@@ -2565,11 +2213,12 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		count += 1;
 		count0++;
 	}
+	reporterr( "\n" );
 
 #if 1 // mattan no tansaku hanni wo seigen
 	alignorcopy[count] = 'a';
 //	if( count > 1 && (len1-cut1[count]) > (len2-cut2[count]) + 2*TERMINALSEGMENTLENGTH ) // 2 ha tekitou
-	if( count > 1 && (len1-cut1[count]) > terminalmargin(len2-cut2[count],marginfac1) )
+	if( count > 1 && (len1-cut1[count]) > getterminalmargin(len2-cut2[count],marginfac1) )
 	{
 //		reporterr( "last\n" );
 //		alignorcopy[count] = 'A'; // mae no wo uwagaki
@@ -2578,7 +2227,7 @@ double Falign_givenanchors( ExtAnch *pairanch,
 //		cut1[count+1] = cut1[count] + TERMINALSEGMENTLENGTH;
 //		cut1[count+1] = cut1[count] + (len2-cut2[count]) + TERMINALSEGMENTLENGTH;
 
-		cutadd = len1 - 1 - ( (len1-cut1[count]) - terminalmargin(len2-cut2[count], marginfac1) ); // wakarinikuikedo
+		cutadd = len1 - 1 - ( (len1-cut1[count]) - getterminalmargin(len2-cut2[count], marginfac1) ); // wakarinikuikedo
 
 //		if( 1 || len1-1 - cutadd > TERMINALMARGIN(0) )
 		{
@@ -2594,13 +2243,13 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		}
 	}
 //	else if( count > 1 && (len2-cut2[count]) > (len1-cut1[count])  + 2*TERMINALSEGMENTLENGTH ) // 2 ha tekitou
-	else if( count > 1 && (len2-cut2[count]) > terminalmargin(len1-cut1[count],marginfac2) )
+	else if( count > 1 && (len2-cut2[count]) > getterminalmargin(len1-cut1[count],marginfac2) )
 	{
 //		reporterr( "last\n" );
 //		alignorcopy[count] = 'A'; // mae no wo uwagaki
 		//reporterr( "insert one anchor to restrict terminal gap length, 2, cut1[count]=%d, cut2[count]=%d\n", cut1[count], cut2[count] );
 		//alignorcopy[count] = 'A'; // mae no wo uwagaki
-		cutadd = len2 - 1 - ( (len2-cut2[count]) - terminalmargin(len1-cut1[count], marginfac2) );
+		cutadd = len2 - 1 - ( (len2-cut2[count]) - getterminalmargin(len1-cut1[count], marginfac2) );
 
 //		if( 1 || len2-1 - cutadd > TERMINALMARGIN(0) ) // iranai
 		{
@@ -2659,7 +2308,7 @@ double Falign_givenanchors( ExtAnch *pairanch,
 //exit( 1 );
 	for( i=0; i<count-1; i++ )
 	{
-		//reporterr( "\ni=%d / %d \n\n", i, count );
+//		reporterr( "\ni=%d / %d \n\n", i, count );
 		*fftlog += 1;
 		if( i == 0 || ( i == 1 && alignorcopy[1] == 'A' ) ) headgp = outgap; else headgp = 1;
 		if( i == count-2 || ( i == count-3 && alignorcopy[count-3] == 'A' ) ) tailgp = outgap; else tailgp = 1;
@@ -2715,7 +2364,7 @@ double Falign_givenanchors( ExtAnch *pairanch,
 		fprintf( stderr, "DP %03d / %03d %4d to ", i+1, count-1, totallen );
 #else
 #if 1
-		if( 1 || fftkeika ) fprintf( stderr, "DP %05d / %05d \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i+1, count-1 );
+		if( 1 || fftkeika ) fprintf( stderr, "DP %05d / %05d \r", i+1, count-1 );
 #endif
 #endif
 		for( j=0; j<clus1; j++ )
@@ -2843,12 +2492,12 @@ double Falign_givenanchors( ExtAnch *pairanch,
 			if( starttermcut1 )
 			{
 				for( j=0; j<clus2; j++ ) if( tmpres2[j][0] != '-' ) break;
-				if( j<clus2 ) reporterr( "There may be a problem in a hard-coded parameter (1).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
+				if( j<clus2 ) reporterr( "There may be a problem at the 5' end (1). Please contact katoh at ifrec.osaka-u.ac.jp\n", tmpres2[j] );
 			}
 			else if( starttermcut2 )
 			{
 				for( j=0; j<clus1; j++ ) if( tmpres1[j][0] != '-' ) break;
-				if( j<clus1 ) reporterr( "There may be a problem in a hard-coded parameter (2).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
+				if( j<clus1 ) reporterr( "There may be a problem at the 5' end (2).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
 			}
 			else
 				break;
@@ -2860,13 +2509,13 @@ double Falign_givenanchors( ExtAnch *pairanch,
 			{
 				tmplen = strlen( tmpres2[0] );
 				for( j=0; j<clus2; j++ ) if( tmpres2[j][tmplen-1] != '-' ) break;
-				if( j<clus2 ) reporterr( "There may be a problem in a hard-coded parameter (3).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
+				if( j<clus2 ) reporterr( "There may be a problem at the 3' end (3).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
 			}
 			else if( endtermcut2 )
 			{
 				tmplen = strlen( tmpres1[0] );
 				for( j=0; j<clus1; j++ ) if( tmpres1[j][tmplen-1] != '-' ) break;
-				if( j<clus1 ) reporterr( "There may be a problem in a hard-coded parameter (4).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
+				if( j<clus1 ) reporterr( "There may be a problem at the 3' end (4).  Please contact katoh at ifrec.osaka-u.ac.jp\n" );
 			}
 			else
 				break;
@@ -2879,8 +2528,13 @@ double Falign_givenanchors( ExtAnch *pairanch,
 			fprintf( stderr, "totallen=%d +  nlen=%d > alloclen = %d\n", totallen, nlen, alloclen );
 			ErrorExit( "LENGTH OVER in Falign\n " );
 		}
+#if 0
 		for( j=0; j<clus1; j++ ) strcat( result1[j], tmpres1[j] );
 		for( j=0; j<clus2; j++ ) strcat( result2[j], tmpres2[j] );
+#else
+		for( j=0; j<clus1; j++ ) strcat( result1[j]+totallen, tmpres1[j] );
+		for( j=0; j<clus2; j++ ) strcat( result2[j]+totallen, tmpres2[j] );
+#endif
 		totallen += nlen;
 #if 0
 		fprintf( stderr, "i=%d", i );


=====================================
core/MSalignmm.c
=====================================
@@ -1920,7 +1920,7 @@ static double MSalignmm_rec( double **n_dynamicmtx, int icyc, int jcyc, double *
 			mseq2[j][len+l] = 0;
 		}
 		for( i=0,j=len; i<l; i++,j++ ) mgt1[j] = '-'; mgt1[j] = 0;
-		for( i=0,j=len; i<l; i++,j++ ) mgt2[j] = 'o'; mgt1[j] = 0;
+		for( i=0,j=len; i<l; i++,j++ ) mgt2[j] = 'o'; mgt2[j] = 0;
 //		fprintf( stderr, "penalizing (2) .. %f(%d), %f(%d)\n", ogcp2[jumpj+1], jumpj+1, fgcp2[jmid-1], jmid-1 );
 		value +=  ( ogcp2[jumpj+1] + fgcp2[jmid-1] );
 //		value += fpenalty;
@@ -1943,7 +1943,7 @@ static double MSalignmm_rec( double **n_dynamicmtx, int icyc, int jcyc, double *
 			mseq2[j][len+l] = 0;
 		}
 		for( i=0,j=len; i<l; i++,j++ ) mgt1[j] = 'o'; mgt1[j] = 0;
-		for( i=0,j=len; i<l; i++,j++ ) mgt2[j] = '-'; mgt1[j] = 0;
+		for( i=0,j=len; i<l; i++,j++ ) mgt2[j] = '-'; mgt2[j] = 0;
 
 //		for( i=0; i<lgth1; i++ ) fprintf( stderr, "ogcp1[%d] = %f\n", i, ogcp1[i] );
 //		for( i=0; i<lgth1; i++ ) fprintf( stderr, "fgcp1[%d] = %f\n", i, fgcp1[i] );


=====================================
core/Makefile
=====================================
@@ -125,12 +125,8 @@ OBJGETLAG = mtxutl.o io.o mltaln9.o tddis.o constants.o partSalignmm.o Lalignmm.
 		    Falign.o Falign_localhom.o Galign11.o Lalign11.o genalign11.o SAalignmm.o MSalignmm.o Dalignmm.o \
 			getlag.o defs.o fft.o fftFunctions.o
 OBJGAPFILL = mtxutl.o io.o constants.o gapfill.o defs.o
-OBJDNDFAST5 = dndfast5.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o
-OBJDNDBLAST = dndblast.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o Galign11.o Lalign11.o genalign11.o
 OBJDNDFAST7 = dndfast7.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o Galign11.o Lalign11.o genalign11.o
-OBJDNDFAST6 = dndfast6.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o
-OBJDNDFAST4 = dndfast4.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o
-OBJDNDFAST6 = dndfast6.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o
+OBJDNDBLAST = dndblast.o io.o constants.o mtxutl.o mltaln9.o tddis.o defs.o Galign11.o Lalign11.o genalign11.o
 OBJSEXTET5 = io.o constants.o mtxutl.o mltaln9.o tddis.o sextet5.o defs.o Galign11.o Lalign11.o genalign11.o
 OBJDISTANCE = io.o constants.o mtxutl.o mltaln9.o tddis.o mafft-distance.o defs.o Galign11.o Lalign11.o genalign11.o
 OBJTRIPLET6 = io.o constants.o mtxutl.o mltaln9.o tddis.o triplet6.o defs.o
@@ -154,7 +150,7 @@ all : $(PERLPROGS) $(PROGS) $(SCRIPTS)
 	chmod 755 ../scripts/*
 	cp $(PERLPROGS) $(PROGS) ../binaries
 	chmod 755 ../binaries/*
-	cp $(MANPAGES) ../binaries
+#	cp $(MANPAGES) ../binaries
 	@echo done.
 
 sos : $(SOS)
@@ -282,24 +278,12 @@ mafft-profile : $(OBJGALN)
 gapfill : $(OBJGAPFILL)
 	$(CC) -o $@ $(OBJGAPFILL) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
 
-dndfast4 : $(OBJDNDFAST4)
-	$(CC) -o $@ $(OBJDNDFAST4) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
-
-dndfast5 : $(OBJDNDFAST5)
-	$(CC) -o $@ $(OBJDNDFAST5) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
-
-dndfast6 : $(OBJDNDFAST6)
-	$(CC) -o $@ $(OBJDNDFAST6) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
-
 dndfast7 : $(OBJDNDFAST7)
 	$(CC) -o $@ $(OBJDNDFAST7) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
 
 dndblast : $(OBJDNDBLAST)
 	$(CC) -o $@ $(OBJDNDBLAST) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
 
-dndfast3 : $(OBJDNDFAST3)
-	$(CC) -o $@ $(OBJDNDFAST3) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
-
 triplet : $(OBJTRIPLET)
 	$(CC) -o $@ $(OBJTRIPLET) $(MYCFLAGS) $(LDFLAGS) $(LIBS)
 
@@ -448,24 +432,9 @@ tditeration.o : tditeration.c $(HEADER)
 mafft-profile.o : mafft-profile.c $(HEADER) $(MTXHEADER)
 	$(CC) $(MYCFLAGS) -c mafft-profile.c
 
-dndfast4.o : dndfast4.c $(HEADER) $(MTXHEADER)
-	$(CC) $(MYCFLAGS) -c dndfast4.c
-
-dndfast5.o : dndfast5.c $(HEADER) $(MTXHEADER)
-	$(CC) $(MYCFLAGS) -c dndfast5.c
-
-dndfast6.o : dndfast6.c $(HEADER) $(MTXHEADER)
-	$(CC) $(MYCFLAGS) -c dndfast6.c
-
 dndfast7.o : dndfast7.c $(HEADER) $(MTXHEADER)
 	$(CC) $(MYCFLAGS) -c dndfast7.c
 
-dndblast.o : dndblast.c $(HEADER) $(MTXHEADER)
-	$(CC) $(MYCFLAGS) -c dndblast.c
-
-dndfast3.o : dndfast3.c $(HEADER) $(MTXHEADER)
-	$(CC) $(MYCFLAGS) -c dndfast3.c
-
 dndpre.o : dndpre.c $(HEADER)
 	$(CC) $(MYCFLAGS) -c dndpre.c
 
@@ -569,7 +538,7 @@ install : all
 	$(STRIP) $(PROGS) ||: # may fail for dash_client on mac.
 	$(INSTALL) $(PROGS) $(DESTDIR)$(LIBDIR)
 	$(INSTALL) $(PERLPROGS) $(DESTDIR)$(LIBDIR)
-	$(INSTALL) -m 644 $(MANPAGES) $(DESTDIR)$(LIBDIR)
+#	$(INSTALL) -m 644 $(MANPAGES) $(DESTDIR)$(LIBDIR)
 
 	( cd $(DESTDIR)$(BINDIR); \
 rm -f linsi ginsi einsi fftns fftnsi nwns nwnsi xinsi qinsi; \


=====================================
core/addsingle.c
=====================================
@@ -9,7 +9,6 @@
 static int treein;
 static int topin;
 static int treeout;
-static int distout;
 static int noalign;
 static int multidist;
 static int maxdist = 2; // scale -> 2bai
@@ -979,8 +978,15 @@ void arguments( int argc, char *argv[] )
 					addprofile = 0;
 					break;
 				case 'y':
-					distout = 1;
-					break;
+                                        distout = *(*++argv);
+					reporterr(       "distout=%c\n", distout );
+                                        if( distout != 'c' && distout != 'h' )
+                                        {
+                                            reporterr(       "Set -y c or -y h in v>=7.521.\n" );
+                                            exit( 1 );
+                                        }
+					--argc; 
+					goto nextoption;
 				case '^':
 					hitout = atof( *++argv );
 					--argc;
@@ -1070,6 +1076,9 @@ void arguments( int argc, char *argv[] )
 				case 'U':
 					treein = 1;
 					break;
+				case 's':
+					addtotop = 2;
+					break;
 				case 'x':
 					addtotop = 1;
 					break;
@@ -1838,8 +1847,10 @@ static void	*addsinglethread( void *arg )
 //			}
 //			fixed_musclesupg_double_realloc_nobk_halfmtx( njobc, iscorec, topolc, lenc, depc, 0, 1 );
 
-			if( addtotop )
-				neighbor = addonetip2top( njobc, topolc, lenc, iscorec, topol, len, dep, treeout, addtree, iadd, name, alnleninnode, nogaplenjusttodecideaddhereornot, noalign );
+			if( addtotop == 2 ) // root
+				neighbor = addonetip2fixedpos( njobc, topolc, lenc, iscorec, topol, len, dep, treeout, addtree, iadd, name, alnleninnode, nogaplenjusttodecideaddhereornot, noalign, 'r' );
+			else if( addtotop == 1 ) // top
+				neighbor = addonetip2fixedpos( njobc, topolc, lenc, iscorec, topol, len, dep, treeout, addtree, iadd, name, alnleninnode, nogaplenjusttodecideaddhereornot, noalign, 't' );
 			else
 				neighbor = addonetip( njobc, topolc, lenc, iscorec, topol, len, dep, treeout, addtree, iadd, name, alnleninnode, nogaplenjusttodecideaddhereornot, noalign );
 
@@ -2107,7 +2118,16 @@ void makecompositiontable_p( int *table, int *pointt )
 	int point;
 
 	while( ( point = *pointt++ ) != END_OF_VEC )
+	{
 		table[point]++;
+#if 0 // kakunin shinai
+		if( (unsigned int)table[point]++ >= INT_MAX )
+		{
+			reporterr( "Overflow. table[point]=%d>INT_MAX(%d).\n", table[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
+	}
 }
 
 


=====================================
core/blosum.c
=====================================
@@ -347,7 +347,7 @@ static int checkchar( int i )
 	return( 0 );
 }
 
-static void overridematrix( double **matrix )
+static int overridematrix( double **matrix )
 {
 	char buf[500];
 	FILE *fp;
@@ -355,6 +355,7 @@ static void overridematrix( double **matrix )
 	double v;
 	char *bpt;
 	int nread;
+	int userdefined;
 
 	fp = fopen( "_aamtx", "r" );
 	if( fp == NULL )
@@ -362,9 +363,10 @@ static void overridematrix( double **matrix )
 		fprintf( stderr, "warning: cannot open scorematrix. Use the default one.\n" );
 //		f2cl.c de tomaranai youni
 //		exit( 1 );
-		return;
+		return 0;
 	}
 
+	userdefined = 0;
 	while( 1 )
 	{
 		fgets( buf, 499, fp );
@@ -393,17 +395,20 @@ static void overridematrix( double **matrix )
 			reporterr( "%c=0x%x cannot be used (2)\n", i2, i2 );
 			exit( 1 );
 		}
-		reporterr( "Score(%c=0x%x,%c=0x%x)=%f\n", i1, i1, i2, i2, v );
+//		reporterr( "Score(%c=0x%x,%c=0x%x)=%f\n", i1, i1, i2, i2, v );
 		matrix[i1][i2] = v;
 		matrix[i2][i1] = v; // 2018/May/11
+		userdefined = 1;
 	}
 	fclose( fp );
+	return userdefined;
 }
 
-void extendedmtx( double **matrix, double *freq, unsigned char *amino, char *amino_grp )
+int extendedmtx( double **matrix, double *freq, unsigned char *amino, char *amino_grp )
 {
 	int i;
 	int j;
+	int userdefined;
 
 	for( i=0; i<nalphabets; i++ ) 
 	{
@@ -423,7 +428,8 @@ void extendedmtx( double **matrix, double *freq, unsigned char *amino, char *ami
 	for( i=0; i<nalphabets; i++ )
 		matrix[i][i] = matrix[i][i] = (double)1.0;
 
-	overridematrix( matrix );
+	userdefined = overridematrix( matrix );
+
 #if 0 // user-defined matrix + user-defined freqency ga aru toki fukkatsu saseru.
 	if( tmpmtx[400] != -1.0 ) 
 	{
@@ -441,4 +447,5 @@ void extendedmtx( double **matrix, double *freq, unsigned char *amino, char *ami
 		fprintf( stderr, "%d: %c, %d, %f\n", i, amino[i], amino_grp[amino[i]], freq[i] );
 	}
 #endif
+	return userdefined;
 }


=====================================
core/constants.c
=====================================
@@ -161,6 +161,47 @@ static void calcfreq( int nseq, char **seq, double *datafreq )
 	for( i=0; i<nscoredalphabets; i++ ) datafreq[i] /= (double)total;
 }
 
+
+void calcfreq_from_scoremtx( double **n_distmp, double *datafreq )
+{
+	int i, j;
+	int nused = 0;
+	for( i=0; i<nalphabets; i++ ) datafreq[i] = 0.0;
+	for( i=0; i<nalphabets; i++ ) for( j=0; j<i; j++ )
+	{
+		if( n_distmp[i][j] != -1 )
+		{
+			if( datafreq[i] == 0.0 ) nused += 1;
+			if( datafreq[j] == 0.0 ) nused += 1;
+			datafreq[i] = datafreq[j] = 1.0;
+		}
+	}
+        for( i=0; i<nalphabets; i++ ) datafreq[i] /= (double)nused;
+	reporterr( "nused=\n", nused );
+//	for( i=0; i<nalphabets; i++ ) reporterr( "%f\n", datafreq[i] );
+}
+
+static int checkscoremtx( double **n_distmp, int nseq, char **seq )
+{
+	int i, j, l, k;
+	int aan;
+	for( i=0; i<nseq; i++ )
+	{
+		l = strlen( seq[i] );
+		for( j=0; j<l; j++ )
+		{
+			aan = amino_n[(unsigned char)seq[i][j]];
+			for( k=0; k<nalphabets; k++ )
+			{
+//				if( n_distmp[k][aan] != -1.0 && k != aan ) break;
+				if( n_distmp[k][aan] != -1.0 ) break;
+			}
+			if( k == nalphabets ) return aan;
+		}
+	}
+	return 0;
+}
+
 static void calcfreq_extended( int nseq, char **seq, double *datafreq )
 {
 	int i, j, l;
@@ -606,6 +647,7 @@ void constants( int nseq, char **seq )
 		double average;
 //		double tmp;
 		double **n_distmp;
+		int userdefined;
 
 		nalphabets = 0x100;
 		nscoredalphabets = 0x100;
@@ -639,7 +681,7 @@ void constants( int nseq, char **seq )
 		penaltyLN = (int)( 600.0 / 1000.0 * -2000 + 0.5);
 		penalty_exLN = (int)( 600.0 / 1000.0 * -100 + 0.5);
 
-		extendedmtx( n_distmp, freq, amino, amino_grp );
+		userdefined = extendedmtx( n_distmp, freq, amino, amino_grp );
 
 		if( trywarp ) sprintf( shiftmodel, "%4.2f", -(double)penalty_shift/600 );
 		else sprintf( shiftmodel, "noshift" );
@@ -663,7 +705,18 @@ void constants( int nseq, char **seq )
 			freq1 = datafreq;
 		}
 		else
-			freq1 = freq;
+		{
+			calcfreq_from_scoremtx( n_distmp, datafreq );
+			freq1 = datafreq;
+		}
+#if 1
+		if( userdefined ) if( i=checkscoremtx( n_distmp, nseq, seq ) )
+		{
+			reporterr( "\n\nAlphabet %c (0x%x) is used in the sequence file but no score involving this alphabet is given in the matrix file.\n", i, i  );
+			reporterr( "Check if the data is as intended.\n\n\n" );
+			exit( 1 );
+		}
+#endif
 
 #if TEST
 		reporterr(       "raw scoreing matrix : \n" );
@@ -680,37 +733,43 @@ void constants( int nseq, char **seq )
 			average = 0.0;
 		else
 		{
-			for( i=0; i<nalphabets; i++ )
 #if TEST 
+			for( i=0; i<nalphabets; i++ )
 				fprintf( stdout, "freq[%c] = %f, datafreq[%c] = %f, freq1[] = %f\n", amino[i], freq[i], amino[i], datafreq[i], freq1[i] );
 #endif
 			average = 0.0;
 			for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
 				average += n_distmp[i][j] * freq1[i] * freq1[j];
 		}
-#if 1
+#if 0
 		if( disp ) fprintf( stdout, "####### average2  = %f\n", average );
 #endif
 
 		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) 
-			n_distmp[i][j] -= average;
-#if TEST
-		fprintf( stdout, "average2 = %f\n", average );
-		fprintf( stdout, "after average substruction : \n" );
+		{
+			if( n_distmp[i][j] == -1.0 ) 
+				n_distmp[i][j] = -average;
+			else
+				n_distmp[i][j] -= average;
+		}
+#if 0
+		fprintf( stderr, "average2 = %f\n", average );
+		fprintf( stderr, "after average subtruction : \n" );
 		for( i=0; i<nalphabets; i++ )
 		{
+			fprintf( stderr, "i=%d, %x\n", i, i );
 			for( j=0; j<nalphabets; j++ ) 
 			{
-				fprintf( stdout, "%6.2f", n_distmp[i][j] );
+				fprintf( stderr, "%6.2f", n_distmp[i][j] );
 			}
-			fprintf( stdout, "\n" );
+			fprintf( stderr, "\n" );
 		}
 #endif
 		
 		average = 0.0;
 		for( i=0; i<nalphabets; i++ ) 
 			average += n_distmp[i][i] * freq1[i];
-#if 1
+#if 0
 		if( disp ) fprintf( stdout, "####### average1  = %f\n", average );
 #endif
 
@@ -723,28 +782,30 @@ void constants( int nseq, char **seq )
 		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) 
 			n_distmp[i][j] *= 600.0 / average;
 #if TEST
-        fprintf( stdout, "after average division : \n" );
+        fprintf( stderr, "after average division : \n" );
         for( i=0; i<nalphabets; i++ )
         {
+            fprintf( stderr, "i=%d, %x\n", i, i );
             for( j=0; j<=i; j++ )
             {
-                fprintf( stdout, "%7.1f", n_distmp[i][j] );
+                fprintf( stderr, "%7.1f", n_distmp[i][j] );
             }
-            fprintf( stdout, "\n" );
+            fprintf( stderr, "\n" );
         }
 #endif
 
 		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) 
 			n_distmp[i][j] -= offset;  
 #if TEST
-		fprintf( stdout, "after offset substruction (offset = %d): \n", offset );
+		fprintf( stderr, "after offset subtruction (offset = %d): \n", offset );
 		for( i=0; i<nalphabets; i++ )
 		{
+			fprintf( stderr, "i=%d, %x\n", i, i );
 			for( j=0; j<=i; j++ ) 
 			{
-				fprintf( stdout, "%7.1f", n_distmp[i][j] );
+				fprintf( stderr, "%30.10f", n_distmp[i][j] );
 			}
-			fprintf( stdout, "\n" );
+			fprintf( stderr, "\n" );
 		}
 #endif
 #if 0
@@ -789,7 +850,7 @@ void constants( int nseq, char **seq )
 
 		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][j] = 0;
 		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][j] = (int)n_distmp[i][j];
-		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][amino_n['-']] = n_dis[amino_n['-']][i] = 0.0;
+		for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][amino_n['-']] = n_dis[amino_n['-']][i] = 0;
 
 		FreeDoubleMtx( n_distmp );
 		FreeDoubleVec( datafreq );
@@ -900,7 +961,7 @@ void constants( int nseq, char **seq )
 			for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
 				average += n_distmp[i][j] * freq1[i] * freq1[j];
 		}
-#if 1
+#if TEST
 		if( disp ) fprintf( stdout, "####### average2  = %f\n", average );
 #endif
 
@@ -925,7 +986,7 @@ void constants( int nseq, char **seq )
 		average = 0.0;
 		for( i=0; i<20; i++ ) 
 			average += n_distmp[i][i] * freq1[i];
-#if 1
+#if TEST
 		if( disp ) fprintf( stdout, "####### average1  = %f\n", average );
 #endif
 


=====================================
core/defs.c
=====================================
@@ -134,6 +134,10 @@ int maxl, tsize;
 char codonpos = 0;
 char codonscore = 0;
 
+char distout = 0;
+
+int terminalmargin = 100;
+
 
 void initglobalvariables()
 {
@@ -175,3 +179,4 @@ int specifictarget = 0;
 int nadd = 0; // <- static in tbfast.c, pairlocalalign.c
 int usenaivescoreinsteadofalignmentscore = 0;
 int nthreadreadlh = 1;
+int LineLengthInFASTA = -1;


=====================================
core/disttbfast.c
=====================================
@@ -16,7 +16,6 @@ static int treein;
 static int topin;
 static int treeout;
 static int noalign;
-static int distout;
 static int tuplesize;
 static int subalignment;
 static int subalignmentoffset;
@@ -30,7 +29,6 @@ static double maxdistmtxsize;
 static int nthreadtb;
 static int useexternalanchors;
 static int oneiteration;
-static double maxanchorseparation;
 
 #if 0
 #define PLENFACA 0.0123
@@ -222,7 +220,6 @@ void arguments( int argc, char *argv[] )
 	mapout = 0;
 	smoothing = 0;
 	nwildcard = 0;
-	maxanchorseparation = 1000.0;
 
     while( --argc > 0 && (*++argv)[0] == '-' )
 	{
@@ -314,8 +311,15 @@ void arguments( int argc, char *argv[] )
 					addprofile = 0;
 					break;
 				case 'y':
-					distout = 1;
-					break;
+                                        distout = *(*++argv);
+					reporterr(       "distout=%c\n", distout );
+                                        if( distout != 'c' && distout != 'h' )
+                                        {
+                                            reporterr(       "Set -y c or -y h in v>=7.521.\n" );
+                                            exit( 1 );
+                                        }
+					--argc; 
+					goto nextoption;
 				case 't':
 					treeout = 1;
 					break;
@@ -341,7 +345,7 @@ void arguments( int argc, char *argv[] )
 					fftscore = 0;
 					break;
 				case 'x':
-					maxanchorseparation = myatof( *++argv );
+					terminalmargin = myatoi( *++argv );
 					--argc; 
 					goto nextoption;
 				case 'H':
@@ -719,7 +723,17 @@ void makecompositiontable_p( int *table, int *pointt )
 	int point;
 
 	while( ( point = *pointt++ ) != END_OF_VEC )
+	{
+#if 1
 		table[point]++;
+#else // kakunin shinai
+		if( (unsigned int)table[point]++ >= INT_MAX )
+		{
+			reporterr( "Overflow. table[point]=%d>INT_MAX(%d).\n", table[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
+	}
 }
 
 
@@ -1354,6 +1368,7 @@ static void *distancematrixthread( void *arg )
 		free( table1 );
 	}
 }
+#endif // enablemultithread
 
 static void recountpositions( ExtAnch *pairanch, int n1, int n2, char **seq1, char **seq2 ) // loop no junban kentou
 {
@@ -1457,191 +1472,15 @@ static void indexanchors( ExtAnch *a, int **idx )
 #endif
 }
 
-
-#if 0
-static void checkanchors_internal( ExtAnch *a )
-{
-	int p, q, r, s;
-	int i, j;
-	int consistent;
-	int m;
-#if 0
-	reporterr( "before sortscore\n" );
-	for( p=0; a[p].i>-1; p++ )
-	{
-		reporterr( "a[%d].starti,j=%d,%d, score=%d\n", p, a[p].starti, a[p].startj, a[p].score );
-	}
-#endif
-
-
-	for( r=0; a[r].i>-1; )
-	{
-		i = a[r].i;
-		j = a[r].j;
-		s = r;
-		for( ; i==a[r].i && j==a[r].j; r++ )
-			;
-//		reporterr( "s=%d, r=%d\n", s, r );
-
-		qsort( a+s, r-s, sizeof( ExtAnch ), anchscorecomp );
-#if 0
-		reporterr( "after sortscore, r=%d\n", r );
-		for( p=s; p<r; p++ )
-		{
-			reporterr( "a[%d].starti,j=%d,%d, score=%d\n", p, a[p].starti, a[p].startj, a[p].score );
-		}
-		exit( 1 );
-#endif
-
-		for( p=s; p<r; p++ ) 
-		{
-			if( a[p].starti == -1 ) continue;
-			consistent = 1;
-			m = 0;
-			for( q=p+1; q<r; q++ )
-			{
-				if( a[q].starti == -1 ) continue;
-#if 0
-				reporterr( "p=%d, q=%d\n", p, q );
-				reporterr( "p: a[%d].starti,j=%d,%d, score=%d\n", p, a[p].starti, a[p].startj, a[p].score );
-				reporterr( "q: a[%d].starti,j=%d,%d, score=%d\n", q, a[q].starti, a[q].startj, a[q].score );
-#endif
-	
-				if( a[p].endi == a[q].endi && a[p].starti == a[q].starti && a[p].endj == a[q].endj && a[p].startj == a[q].startj ) 
-				{
-//					reporterr( "identical\n" );
-//					reporterr( "p: a[%d].regi,regj=%d-%d,%d-%d, score=%d\n", p, a[p].starti, a[p].endi, a[p].startj, a[p].endj, a[p].score );
-//					reporterr( "q: a[%d].regi,regj=%d-%d,%d-%d, score=%d\n", q, a[q].starti, a[q].endi, a[q].startj, a[q].endj, a[q].score );
-					;
-				}
-				else if( a[p].endi < a[q].starti && a[p].endj < a[q].startj ) 
-				{
-//					reporterr( "consistent\n" );
-					;
-				}
-//				else if( a[p].endi == a[q].starti && a[p].endj < a[q].startj && a[q].starti<a[q].endi ) 
-//				{
-//					a[q].starti += 1; // 1 zai overlap
-//				}
-//				else if( a[p].endi < a[q].starti && a[p].endj == a[q].startj && a[q].startj<a[q].endj ) 
-//				{
-//					a[q].startj += 1; // 1 zai overlap
-//				}
-				else if( a[q].endi < a[p].starti && a[q].endj < a[p].startj )
-				{
-//					reporterr( "consistent\n" );
-					;
-				}
-//				else if( a[q].endi == a[p].starti && a[q].endj < a[p].startj && a[q].starti<a[q].endi ) // bug in v7.442
-//				{
-//					a[q].endi -= 1; // 1 zai overlap
-//				}
-//				else if( a[q].endi < a[p].starti && a[q].endj == a[p].startj && a[q].startj<a[q].endj )
-//				{
-//					a[q].endj -= 1; // 1 zai overlap
-//				}
-				else 
-				{
-					consistent = 0;
-					if( a[q].score > m ) m = a[q].score;
-//					reporterr( "INconsistent\n" );
-//					reporterr( "p=%d, q=%d\n", p, q );
-//					reporterr( "p: a[%d].regi,regj=%d-%d,%d-%d, score=%d\n", p, a[p].starti, a[p].endi, a[p].startj, a[p].endj, a[p].score );
-//					reporterr( "q: a[%d].regi,regj=%d-%d,%d-%d, score=%d\n", q, a[q].starti, a[q].endi, a[q].startj, a[q].endj, a[q].score );
-//					a[q].starti = a[q].startj = a[q].startj = a[q].endj = -1;
-//					a[q].score = a[p].score - a[q].score; // ??
-//					a[q].score = ( a[p].score + a[q].score ) / 2; // ??
-					a[q].score = 0;
-				}
-			}
-			if( !consistent )
-//				a[p].score = ( a[p].score + m ) / 2; // >= 0
-				a[p].score -= m; // >= 0
-//				a[p].score = 0;
-		}
-	}
-
-#if 0
-	reporterr( "after filtering\n" );
-	for( p=0; a[p].i>-1; p++ )
-	{
-		reporterr( "a[%d].starti,j=%d,%d, score=%d\n", p, a[p].starti, a[p].startj, a[p].score );
-	}
-	exit( 1 );
-#endif
-}
-#endif
-
-static void checkanchors_strongestfirst( ExtAnch *a, int s, double gapratio1, double gapratio2 )
+static void checkanchors_strongestfirst( ExtAnch *a, int s )
 {
 	int p, q;
-	double zureij;
-	double nogaplenestimation1;
-	double nogaplenestimation2;
-#if 0
-	reporterr( "before sortscore\n" );
-	for( p=0; a[p].i>-1; p++ )
-	{
-		reporterr( "a[%d].starti,j=%d,%d, score=%d\n", p, a[p].starti, a[p].startj, a[p].score );
-	}
-#endif
 	qsort( a, s, sizeof( ExtAnch ), anchscorecomp );
 
-	nogaplenestimation1 = (double)a[0].starti / (1.0+gapratio1);
-	nogaplenestimation2 = (double)a[0].startj / (1.0+gapratio2);
-	zureij = nogaplenestimation1 - nogaplenestimation2;
-
 	for( p=0; a[p].i>-1; p++ )
 	{
 		if( a[p].starti == -1 ) continue;
 
-#if 0
-		nogaplenestimation1 = (double)a[p].starti / (1.0+gapratio1);
-		nogaplenestimation2 = (double)a[p].startj / (1.0+gapratio2);
-		if( fabs( zureij - ( nogaplenestimation1 - nogaplenestimation2 ) ) > maxanchorseparation )
-		{
-//			reporterr( "warning: long internal gaps in %d-%d, |%5.2f-%5.2f - %5.2f| = %5.2f > %5.2f\n", a[p].i, a[p].j, nogaplenestimation1, nogaplenestimation2, zureij, fabs( zureij - ( nogaplenestimation1, nogaplenestimation2 ) ), maxanchorseparation );
-			a[p].starti = a[p].startj = a[p].startj = a[p].endj = -1;
-			continue;
-		}
-#else
-		int nearest, mindist;
-		double zurei, zurej;
-		if( p )
-		{
-			mindist = 999999999;
-			for( q=0; q<p; q++ )
-			{
-				if( a[q].starti == -1 ) continue;
-				if( abs( a[p].starti - a[q].starti ) < mindist )
-				{
-					nearest = q;
-					mindist = abs( a[p].starti - a[q].starti );
-				}
-			}
-			//reporterr( "nearest=%d\n", nearest );
-			if( a[nearest].starti < a[p].starti )
-			{
-				zurei = (double)( a[p].starti - a[nearest].endi )/(1.0+gapratio1);
-				zurej = (double)( a[p].startj - a[nearest].endj )/(1.0+gapratio2);
-			}
-			else
-			{
-				zurei = (double)( a[nearest].starti - a[p].endi )/(1.0+gapratio1);
-				zurej = (double)( a[nearest].startj - a[p].endj )/(1.0+gapratio2);
-			}
-		}
-		else
-			zurei = zurej = 0.0;
-		if( fabs( zurei - zurej ) > maxanchorseparation )
-//		if( fabs( zurei - zurej ) > maxanchorseparation || zurei > maxanchorseparation || zurej > maxanchorseparation ) // test
-		{
-//			reporterr( "warning: long internal gaps in %d-%d, |%5.2f-%5.2f - %5.2f| = %5.2f > %5.2f\n", a[p].i, a[p].j, nogaplenestimation1, nogaplenestimation2, zureij, fabs( zureij - ( nogaplenestimation1, nogaplenestimation2 ) ), maxanchorseparation );
-			a[p].starti = a[p].startj = a[p].startj = a[p].endj = -1;
-			continue;
-		}
-#endif
-
 //		reporterr( "P score=%d, %d-%d, %d-%d\n", a[p].score, a[p].starti, a[p].endi, a[p].startj, a[p].endj );
 		for( q=p+1; a[q].i>-1; q++ )
 		{
@@ -1681,6 +1520,7 @@ static void checkanchors_strongestfirst( ExtAnch *a, int s, double gapratio1, do
 				a[q].starti = a[q].startj = a[q].startj = a[q].endj = -1;
 			}
 		}
+		if( p % 1000 == 0 ) reporterr( "%d/%d\r", p, s );
 	}
 
 	qsort( a, s, sizeof( ExtAnch ), anchcomp );
@@ -1693,41 +1533,6 @@ static void checkanchors_strongestfirst( ExtAnch *a, int s, double gapratio1, do
 #endif
 }
 
-
-static double gapnongapratio( int n, char **s )
-{
-	int i, j, len;
-	char *seq, *pt1, *pt2;
-	double fv, ng;
-
-	len = strlen( s[0] );
-	seq = calloc( len+1, sizeof( char ) );
-
-	fv = 0.0;
-	ng = 0.0;
-	for( i=0; i<n; i++  )
-	{
-		pt1 = s[i];
-		while( *pt1 == '-' ) pt1++;
-		pt2 = seq;
-		while( *pt1 != 0 ) *pt2++ = *pt1++;
-		*pt2 = *pt1; // 0
-		pt1 = pt2-1;
-		while( *pt1 == '-' ) pt1--;
-		*(pt1+1) = 0;	
-//		reporterr( "seq[i]=%s\n", s[i] );
-//		reporterr( "seq=%s\n", seq );
-		len = pt1-seq+1;
-		for( j=0; j<len; j++ )
-			if( seq[j] == '-' ) 
-				fv+=1.0;
-			else
-				ng+=1.0;
-	}
-	free( seq );
-	return( fv/ng );
-}
-
 static void	pickpairanch( ExtAnch **pairanch, ExtAnch *extanch, int **anchindex, int n1, int n2, int *m1, int *m2, char **seq1, char **seq2 ) // loop no junban wo kaeta hou ga iikamo
 {
 	int i, j, k, s;
@@ -1876,12 +1681,10 @@ static void	pickpairanch( ExtAnch **pairanch, ExtAnch *extanch, int **anchindex,
 	reporterr( "\n" );
 #endif
 
-	checkanchors_strongestfirst( *pairanch, s, gapnongapratio( n1, seq1 ), gapnongapratio( n2, seq2 ) );
+	reporterr( "Checking external anchors\n" );
+	checkanchors_strongestfirst( *pairanch, s );
 
 
-//	qsort( *pairanch, s, sizeof( ExtAnch ), anchcomp );
-//	checkanchors_new( *pairanch );
-
 #if 0
 	reporterr( "After check\n" );
 	for( k=0; (*pairanch)[k].i>-1; k++ )
@@ -1892,6 +1695,7 @@ static void	pickpairanch( ExtAnch **pairanch, ExtAnch *extanch, int **anchindex,
 #endif
 }
 
+#ifdef enablemultithread
 static void *treebasethread( void *arg )
 {
 	treebasethread_arg_t *targ = (treebasethread_arg_t *)arg;
@@ -2407,7 +2211,7 @@ static void *treebasethread( void *arg )
 	reporterr(       "totalscore = %10.2f\n\n", tscore );
 #endif
 }
-#endif
+#endif // enablemultithread
 
 static int dooneiteration( int *nlen, char **aseq, int nadd, char *mergeoralign, char **mseq1, char **mseq2, int ***topol, Treedep *dep, int **memhist, double ***cpmxhist, double *effarr, double **newdistmtx, int *selfscore, ExtAnch *extanch, int **anchindex, int *alloclen, int (*callback)(int, int, char*) )
 {
@@ -3538,10 +3342,10 @@ int disttbfast( int ngui, int lgui, char **namegui, char **seqgui, int argc, cha
 		rewind( infp );
 	}
 	
-	if( njob > 1000000 )
+	if( njob > 10000000 )
 	{
-		reporterr(       "The number of sequences must be < %d\n", 1000000 );
-		reporterr(       "Please try the --parttree option for such large data.\n" );
+		reporterr(       "The number of sequences must be < %d\n", 10000000 );
+//		reporterr(       "Please try the --parttree option for such large data.\n" );
 		exit( 1 );
 	}
 


=====================================
core/dndpre.c
=====================================
@@ -215,6 +215,16 @@ void arguments( int argc, char *argv[] )
 		{
             switch( c )
             {
+				case 'y':
+                                        distout = *(*++argv);
+					reporterr(       "distout=%c\n", distout );
+                                        if( distout != 'c' && distout != 'h' )
+                                        {
+                                            reporterr(       "Set -y c or -y h in v>=7.521.\n" );
+                                            exit( 1 );
+                                        }
+					--argc; 
+					goto nextoption;
 				case 'Z':
 					usenaivescoreinsteadofalignmentscore = 1;
 					break;


=====================================
core/f2cl.c
=====================================
@@ -171,6 +171,7 @@ void arguments( int argc, char *argv[] )
 	namelen = -1;
 	scoremtx = 1;
 	nblosum = 62;
+	LineLengthInFASTA = -1;
 	dorp = NOTSPECIFIED;
 	kimuraR = NOTSPECIFIED;
 	pamN = NOTSPECIFIED;
@@ -206,6 +207,15 @@ void arguments( int argc, char *argv[] )
 					fprintf( stderr, "namelen = %d\n", namelen );
 					--argc;
 					goto nextoption;
+				case 'l':
+					LineLengthInFASTA = myatoi( *++argv );
+					if( LineLengthInFASTA == 0 )
+					{
+						reporterr( "LineLengthInFASTA = 0 ??\n" );
+						exit( 1 );
+					}
+					--argc;
+					goto nextoption;
 				case 'f':
 					format = 'f';
 					break;


=====================================
core/functions.h
=====================================
@@ -180,7 +180,7 @@ extern void reduc( double **mtx, int nseq, int im, int jm );
 extern void  nj( int nseq, double **omtx, int ***topol, double **dis );
 extern void JTTmtx( double **rsr, double *freq, unsigned char locamino[0x80], char locgrp[0x80], int isTM );
 extern void BLOSUMmtx( int n, double **matrix, double *freq, unsigned char *amino, char *amino_grp, int *rescale );
-extern void extendedmtx( double **matrix, double *freq, unsigned char *amino, char *amino_grp );
+extern int extendedmtx( double **matrix, double *freq, unsigned char *amino, char *amino_grp );
 extern void putlocalhom2( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa, char korh );
 extern void putlocalhom_str( char *al1, char *al2, double *equiv, double scale, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa, char korh );
 extern void putlocalhom_ext( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa, char korh );
@@ -362,7 +362,7 @@ extern int overlapmember( int *mem1, int *mem2 );
 extern void profilealignment2( int n0, int n2, char **aln0, char **aln2, int alloclen, char alg );
 extern void sreverse( char *r, char *s );
 extern int addonetip( int njobc, int ***topolc, double **lenc, double **iscorec, int ***topol, double **len, Treedep *dep, int treeout, Addtree *addtree, int iadd, char **name, int *alnleninnode, int *nogaplen, int noalign );
-extern int addonetip2top( int njobc, int ***topolc, double **lenc, double **iscorec, int ***topol, double **len, Treedep *dep, int treeout, Addtree *addtree, int iadd, char **name, int *alnleninnode, int *nogaplen, int noalign );
+extern int addonetip2fixedpos( int njobc, int ***topolc, double **lenc, double **iscorec, int ***topol, double **len, Treedep *dep, int treeout, Addtree *addtree, int iadd, char **name, int *alnleninnode, int *nogaplen, int noalign, int toporroot );
 extern void intcpy( int *s1, int *s2 );
 extern void intncpy( int *s1, int *s2, int n );
 extern void fltncpy( double *s1, double *s2, int n );


=====================================
core/io.c
=====================================
@@ -2650,17 +2650,18 @@ void writeData_pointer( FILE *fp, int locnjob, char **name, int *nlen, char **as
 #if DEBUG
 		fprintf( stderr, "i = %d in writeData\n", i );
 #endif
-		nalen = strlen( aseq[i] );
 		fprintf( fp, ">%s\n", name[i]+1 );
-		for( j=0; j<nalen; j=j+C )
+#if 1
+		if( LineLengthInFASTA < 0 )
+			fprintf( fp, "%s\n", aseq[i] );
+		else // V7.510 deha tsukawanai
 		{
-#if 0
-			strncpy( b, aseq[i]+j, C ); b[C] = 0;
-			fprintf( fp, "%s\n",b );
+			nalen = strlen( aseq[i] );
+			for( j=0; j<nalen; j=j+LineLengthInFASTA ) fprintf( fp, "%.*s\n", LineLengthInFASTA, aseq[i]+j );
+		}
 #else
-			fprintf( fp, "%.*s\n", C, aseq[i]+j );
+		fprintf( fp, "%s\n", aseq[i] );
 #endif
-		}
 	}
 }
 
@@ -2923,6 +2924,53 @@ void readhat2( FILE *fp, int nseq, char name[M][B], double **mtx )
     }
 }
 
+static void WriteHat2_pointer_clustaloformat( int locnjob, char **name, double **mtx )
+{
+	int i, j;
+        FILE *fp = fopen( "clodist", "w" );
+	fprintf( fp, "%d\n", locnjob );
+
+	for( i=0; i<locnjob; i++ )
+	{
+                fprintf( fp, "%-5.5s ", name[i]+1 );
+		for( j=0; j<i; j++ )
+		{
+			fprintf( fp, "%10.8f ", mtx[j][i] );
+		}
+		fprintf( fp, "%10.8f ", 0.0 );
+		for( j=i+1; j<locnjob; j++ )
+		{
+			fprintf( fp, "%10.8f ", mtx[i][j] );
+		}
+		fprintf( fp, "\n" );
+
+	}
+        fclose( fp );
+}
+static void WriteFloatHat2_pointer_halfmtx_clustaloformat( int locnjob, char **name, double **mtx )
+{
+	int i, j;
+        FILE *fp = fopen( "clodist", "w" );
+	fprintf( fp, "%d\n", locnjob );
+
+	for( i=0; i<locnjob; i++ )
+	{
+                fprintf( fp, "%-5.5s ", name[i]+1 );
+		for( j=0; j<i; j++ )
+		{
+			fprintf( fp, "%10.8f ", mtx[j][i-j] );
+		}
+		fprintf( fp, "%10.8f ", 0.0 );
+		for( j=i+1; j<locnjob; j++ )
+		{
+			fprintf( fp, "%10.8f ", mtx[i][j-i] );
+		}
+		fprintf( fp, "\n" );
+
+	}
+        fclose( fp );
+}
+
 void WriteFloatHat2_pointer_halfmtx( FILE *hat2p, int locnjob, char **name, double **mtx )
 {
 	int i, j, ijsa;
@@ -2936,15 +2984,18 @@ void WriteFloatHat2_pointer_halfmtx( FILE *hat2p, int locnjob, char **name, doub
 	for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
 	for( i=0; i<locnjob; i++ )
 	{
-		for( j=i+1; j<njob; j++ )
+		for( j=i+1; j<locnjob; j++ )
 		{
 			fprintf( hat2p, DFORMAT, mtx[i][j-i] );
 			ijsa = j-i;
 			if( ijsa % 12 == 0 || ijsa == locnjob-i-1 ) fprintf( hat2p, "\n" );
 		}
 	}
+        if( distout == 'c' )
+            WriteFloatHat2_pointer_halfmtx_clustaloformat( locnjob, name, mtx );
 }
 
+#if 0
 void WriteFloatHat2_pointer( FILE *hat2p, int locnjob, char **name, double **mtx )
 {
 	int i, j;
@@ -3008,6 +3059,7 @@ void WriteHat2_int( FILE *hat2p, int locnjob, char name[M][B], int **mtx )
 		}
 	}
 }
+#endif
 
 void WriteHat2_part_pointer( FILE *hat2p, int locnjob, int nadd, char **name, double **mtx )
 {
@@ -3029,6 +3081,8 @@ void WriteHat2_part_pointer( FILE *hat2p, int locnjob, int nadd, char **name, do
 			if( (j+1) % 12 == 0 || j == nadd-1 ) fprintf( hat2p, "\n" );
 		}
 	}
+        if( distout == 'c' )
+            WriteHat2_pointer_clustaloformat( locnjob, name, mtx );
 }
 
 void WriteHat2_pointer( FILE *hat2p, int locnjob, char **name, double **mtx )
@@ -3050,6 +3104,8 @@ void WriteHat2_pointer( FILE *hat2p, int locnjob, char **name, double **mtx )
 			if( (j-i) % 12 == 0 || j == locnjob-1 ) fprintf( hat2p, "\n" );
 		}
 	}
+        if( distout == 'c' )
+            WriteHat2_pointer_clustaloformat( locnjob, name, mtx );
 }
 
 void WriteHat2( FILE *hat2p, int locnjob, char name[M][B], double **mtx )
@@ -5411,17 +5467,18 @@ void writeData_reorder_pointer( FILE *fp, int locnjob, char **name, int *nlen, c
 #if DEBUG
 		fprintf( stderr, "i = %d in writeData\n", i );
 #endif
-		nalen = strlen( aseq[k] );
 		fprintf( fp, ">%s\n", name[k]+1 );
-		for( j=0; j<nalen; j=j+C )
+#if 1
+		if( LineLengthInFASTA < 0 )
+			fprintf( fp, "%s\n", aseq[k] );
+		else
 		{
-#if 0
-			strncpy( b, aseq[k]+j, C ); b[C] = 0;
-			fprintf( fp, "%s\n",b );
+			nalen = strlen( aseq[k] );
+			for( j=0; j<nalen; j=j+LineLengthInFASTA ) fprintf( fp, "%.*s\n", LineLengthInFASTA, aseq[k]+j );
+		}
 #else
-			fprintf( fp, "%.*s\n", C, aseq[k]+j );
+		fprintf( fp, "%s\n", aseq[k] );
 #endif
-		}
 	}
 }
 void writeData_reorder( FILE *fp, int locnjob, char name[][B], int nlen[], char **aseq, int *order )


=====================================
core/mafft-distance.c
=====================================
@@ -121,20 +121,30 @@ void seq_grp( int *grp, char *seq )
 	}
 }
 
-void makecompositiontable_p( short *table, int *pointt )
+void makecompositiontable_p( int *table, int *pointt )
 {
 	int point;
 
 	while( ( point = *pointt++ ) != END_OF_VEC )
+	{
+#if 1
 		table[point]++;
+#else
+		if( (unsigned int)table[point]++ >= INT_MAX )
+		{
+			reporterr( "Overflow. table[point]=%d>INT_MAX(%d).\n", table[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
+	}
 }
 
-static int localcommonsextet_p( short *table, int *pointt )
+static int localcommonsextet_p( int *table, int *pointt )
 {
 	int value = 0;
-	short tmp;
+	unsigned int tmp;
 	int point;
-	static short *memo = NULL;
+	static int *memo = NULL;
 	static int *ct = NULL;
 	static int *cp;
 
@@ -143,7 +153,7 @@ static int localcommonsextet_p( short *table, int *pointt )
 
 	if( !memo )
 	{
-		memo = (short *)calloc( tsize, sizeof( short ) );
+		memo = (int *)calloc( tsize, sizeof( int ) );
 		if( !memo ) ErrorExit( "Cannot allocate memo\n" );
 		ct = (int *)calloc( MIN( maxl, tsize)+1, sizeof( int ) );
 		if( !ct ) ErrorExit( "Cannot allocate memo\n" );
@@ -157,6 +167,14 @@ static int localcommonsextet_p( short *table, int *pointt )
 			value++;
 		if( tmp == 0 ) *cp++ = point;
 //		fprintf( stderr, "cp - ct = %d (tsize = %d)\n", cp - ct, tsize );
+		#if 0
+		if( tmp >= INT_MAX )
+		{
+			reporterr( "overflow\n" );
+			reporterr( "cp-ct=%d, point=%d, tmp=%d, memo[point]=%d>INT_MAX(%d)\n", cp-ct, point, tmp, memo[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
 	}
 	*cp = END_OF_VEC;
 	
@@ -239,7 +257,7 @@ int main( int argc, char **argv )
 	static int *nlen;
 	double *mtxself;
 	double score;
-	static short *table1;
+	static int *table1;
 	double longer, shorter;
 	double lenfac;
 	double bunbo;
@@ -339,7 +357,7 @@ int main( int argc, char **argv )
 	fprintf( stderr, "\nCalculating i-i scores ... " );
 	for( i=0; i<njob; i++ )
 	{
-		table1 = (short *)calloc( tsize, sizeof( short ) );
+		table1 = (int *)calloc( tsize, sizeof( int ) );
 		if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 		makecompositiontable_p( table1, pointt[i] );
 
@@ -354,7 +372,7 @@ int main( int argc, char **argv )
 	for( i=0; i<norg; i++ )
 	{
 		if( outputformat == 'p' ) fprintf( stdout, "\n%-9d ", i+1 );
-		table1 = (short *)calloc( tsize, sizeof( short ) );
+		table1 = (int *)calloc( tsize, sizeof( int ) );
 		if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 		if( i % 10 == 0 )
 		{


=====================================
core/mafft.tmpl
=====================================
@@ -1,7 +1,7 @@
 #! /bin/bash 
 er=0;
 myself=`dirname "$0"`/`basename "$0"`; export myself
-version="v7.505 (2022/Apr/10)"; export version
+version="v7.525 (2024/Mar/13)"; export version
 LANG=C; export LANG
 os=`uname`
 progname=`basename "$0"`
@@ -175,6 +175,7 @@ elif [ $progname = "nwnsi" -o $progname = "mafft-nwnsi" ]; then
 fi
 outputfile=""
 namelength=-1
+linelength=60 # Will change to -1 in the future
 anysymbol=0
 parallelizationstrategy="BAATARI2"
 kappa=$defaultkappa
@@ -216,7 +217,9 @@ contrafold=$defaultcontrafold
 progressfile="/dev/stderr"
 anchorfile="/dev/null"
 anchoropt=""
-maxanchorseparation=1000
+#maxanchorseparation=1000
+#maxanchorseparation=-1 # 2023/Jan/11
+terminalmargin=100 # 2024/Mar
 debug=0
 sw=0
 algopt=$defaultalgopt
@@ -241,6 +244,7 @@ partorderopt=" -x "
 treeout=0
 nodeout=0
 distout=0
+distformat="hat2"
 treein=0
 topin=0
 treeinopt="  "
@@ -355,6 +359,13 @@ if [ $# -gt 0 ]; then
 			echo "" 1>&2
 			exit 1;
 #			algspecified=1
+		elif [ "$1" = "--linelength" ]; then 
+			shift   
+			linelength=`expr "$1" - 0`
+			if [ $linelength -eq 0 ]; then
+				echo "Line length = 0 ?" 1>&2
+				exit
+			fi
 		elif [ "$1" = "--namelength" ]; then 
 			shift   
 			namelength=`expr "$1" - 0`
@@ -392,6 +403,10 @@ if [ $# -gt 0 ]; then
 			treeout=1
 		elif [ "$1" = "--distout" ]; then 
 			distout=1
+			distformat="hat2"
+		elif [ "$1" = "--distoutclustalo" ]; then 
+			distout=1
+			distformat="clodist"
 		elif [ "$1" = "--fastswpair" ]; then
 			distance="fasta"
 			pairspecified=1
@@ -566,13 +581,13 @@ if [ $# -gt 0 ]; then
 		elif [ "$1" = "--out" ]; then 
 			shift   
 			outputfile="$1"
-		elif [ "$1" = "--skipanchorsremoterthan" ]; then 
+		elif [ "$1" = "--terminalmargin" ]; then 
 			shift   
 			if ! expr "$1" : "[0-9]" > /dev/null ; then
-				echo "Specify maximum gap length between anchors." 1>&2
+				echo "set --terminalmargin (int)." 1>&2
 				exit
 			fi
-			maxanchorseparation=`expr "$1" - 0` 
+			terminalmargin=`expr "$1" - 0` 
 		elif [ "$1" = "--anchors" ]; then 
 			shift
 			anchorfile="$1"
@@ -672,6 +687,11 @@ if [ $# -gt 0 ]; then
 			addarg0="-K -I"
 			addfile="$1"
 			fragment=-3
+		elif [ "$1" = "--addtoroot" ]; then 
+			shift   
+			addarg0="-K -I"
+			addfile="$1"
+			fragment=-4
 		elif [ "$1" = "--smoothing" ]; then 
 			add2ndhalfarg=$add2ndhalfarg" -p "
 		elif [ "$1" = "--keeplength" ]; then 
@@ -717,7 +737,8 @@ if [ $# -gt 0 ]; then
 			f2clext="-E"
 			seqtype="-P"
 			fft=0
-			sbstmodel=" -b -2 -a "
+#			sbstmodel=" -b -2 -a "
+			sbstmodel=" -b -2 " # 2022/Jul, hauretsu no kawari ni scoremtx wo miru
 			scorematrix="$1"
 			if [ ! -e "$scorematrix" ]; then
 				echo "Cannot open $scorematrix" 1>&2
@@ -1777,7 +1798,7 @@ $ownlist"
 			parttreeoutopt=" "
 		fi
 		if [ $distout -eq 1 ]; then
-			distoutopt="-y -T"
+			distoutopt="-y ${distformat} -T"
 			if [ $treeout -eq 0 ]; then
 				treeoutopt=""
 			fi
@@ -1798,7 +1819,7 @@ $ownlist"
 			treeoutopt=" "
 		fi
 		if [ $distout -eq 1 ]; then
-			distoutopt="-y"
+			distoutopt="-y ${distformat}"
 		fi
 	fi
 #
@@ -2043,6 +2064,11 @@ $ownlist"
 			addsinglearg="-x"       # add to top, 2021/12/31
 			cycle=1 # chuui 2014Aug25
 			iterate=0
+		elif [ $fragment -eq "-4" ]; then
+			addarg="$addarg0 $nadd"
+			addsinglearg="-s"       # add to root, 2023/2/11
+			cycle=1 # chuui 2014Aug25
+			iterate=0
 		else
 			addarg="$addarg0 $nadd"
 			addsinglearg=""
@@ -2254,9 +2280,9 @@ $ownlist"
 	elif [ $outputformat = "phylip" -a $outorder = "input" ]; then
 		outputopt=" -y "
 	elif [ $outputformat = "pir" -a $outorder = "aligned" ]; then
-		outputopt=" -f -r $TMPFILE/order "
+		outputopt=" -f -l $linelength -r $TMPFILE/order "
 	else
-		outputopt="-f"
+		outputopt="-f -l $linelength"
 	fi
 
 	if [ $newdash_originalsequenceonly -eq 1 ]; then
@@ -2587,7 +2613,7 @@ $ownlist"
 				"$prefix/tbfast" -W $minimumweight -V "-"$gopdist -s $unalignlevel $legacygapopt $mergearg $termgapopt $outnum $addarg $add2ndhalfarg -C $numthreadstb $rnaopt $weightopt $treeinopt $treeoutopt $distoutopt $seqtype $model -f "-"$gop -Q $spfactor -h $aof  $param_fft $localparam   $algopt $treealg $scoreoutarg < infile   > /dev/null 2>>"$progressfile" || exit 1
 			fi
 		elif [ $distance = "lastmulti" ]; then
-			"$prefix/dndpre" $model -M 2 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -Q $spfactor -h $laof < infile > /dev/null 2>>"$progressfile"      || exit 1
+			"$prefix/dndpre" -y $distformat $model -M 2 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -Q $spfactor -h $laof < infile > /dev/null 2>>"$progressfile"      || exit 1
 			mv hat2 hat2i
 			"$prefix/pairlocalalign" $addarg   -C $numthreads $seqtype $model -e $last_e -w $last_m -g $lexp -f $lgop -Q $spfactor -h $laof -r $last_subopt $last_once -d "$prefix" < infile > /dev/null  2>>"$progressfile"      || exit 1
 			cat hat3.seed hat3 > hatx
@@ -2600,7 +2626,7 @@ $ownlist"
 				exit 1
 			fi
 		elif [ $distance = "multi" ]; then
-			"$prefix/dndpre" $model -M 2 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -h $laof  $usenaivepairscore < infile > /dev/null 2>>"$progressfile"      || exit 1
+			"$prefix/dndpre" -y $distformat $model -M 2 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -h $laof  $usenaivepairscore < infile > /dev/null 2>>"$progressfile"      || exit 1
 			mv hat2 hat2i
 			"$prefix/pairlocalalign" $localparam $addarg   -C $numthreads $seqtype $model  -g $lexp -f $lgop -Q $spfactor -h $laof -Y $usenaivepairscore < infile > /dev/null  2>>"$progressfile"      || exit 1
 			cat hat3.seed hat3 > hatx
@@ -2629,7 +2655,7 @@ $ownlist"
 			"$prefix/splittbfast" $legacygapopt $algopt $splitopt $partorderopt $parttreeoutopt $memopt $seqtype $model -f "-"$gop -Q $spfactor -h $aof -p $partsize -s $groupsize $treealg $outnum -i infile   > pre 2>>"$progressfile" || exit 1
 			mv hat3.seed hat3
 		elif [ $distance = "ktuplesmulti" ]; then
-#			"$prefix/dndpre" $model -M 1 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -h $laof < infile > /dev/null 2>>"$progressfile"      || exit 1
+#			"$prefix/dndpre" -y $distformat $model -M 1 $addarg -C $numthreads $seqtype $model -g $lexp -f $lgop -h $laof < infile > /dev/null 2>>"$progressfile"      || exit 1
 #			mv hat2 hat2i
 #			"$prefix/disttbfast" -E 1 -s $unalignlevel $legacygapopt -W $tuplesize $termgapopt $outnum $addarg $add2ndhalfarg -C $numthreads-$numthreadstb $memopt $weightopt $treeinopt $treeoutopt -T -y $seqtype $model -f "-"$gop -Q $spfactor -h $aof  $param_fft $algopt $treealg $scoreoutarg < infile   > /dev/null 2>>"$progressfile" || exit 1
 #			mv hat2 hat2n
@@ -2644,7 +2670,7 @@ $ownlist"
 			if [ $fragment -ne 0 ]; then 
 				"$prefix/addsingle" $codonposopt $codonscoreopt -Q 100 $legacygapopt -W $tuplesize -O $outnum $addsinglearg $addarg $add2ndhalfarg -C $numthreads $memopt $weightopt $treeinopt $treeoutopt $distoutopt $seqtype $model -f "-"$gop  -h $aof  $param_fft $localparam   $algopt $treealg < infile   > /dev/null 2>>"$progressfile" || exit 1
 			else
-				"$prefix/disttbfast" -q $npickup -E $cycledisttbfast -V "-"$gopdist  -s $unalignlevel $legacygapopt $mergearg -W $tuplesize $termgapopt $outnum $addarg $add2ndhalfarg -C $numthreads-$numthreadstb $memopt $weightopt $treeinopt $treeoutopt $distoutopt $seqtype $model -g $gexp -f "-"$gop -Q $spfactor -h $aof  $param_fft $algopt $treealg $scoreoutarg $anchoropt -x $maxanchorseparation $oneiterationopt < infile   > pre 2>>"$progressfile" || exit 1
+				"$prefix/disttbfast" -q $npickup -E $cycledisttbfast -V "-"$gopdist  -s $unalignlevel $legacygapopt $mergearg -W $tuplesize $termgapopt $outnum $addarg $add2ndhalfarg -C $numthreads-$numthreadstb $memopt $weightopt $treeinopt $treeoutopt $distoutopt $seqtype $model -g $gexp -f "-"$gop -Q $spfactor -h $aof  $param_fft $algopt $treealg $scoreoutarg $anchoropt -x $terminalmargin $oneiterationopt < infile   > pre 2>>"$progressfile" || exit 1
 				mv hat3.seed hat3
 			fi
 		fi
@@ -2662,7 +2688,7 @@ $ownlist"
 		done
 		if [ $iterate -gt 0 ]; then
 			if [ $distance = "ktuples" ]; then
-			    "$prefix/dndpre" $seqtype $model -M 2 -C $numthreads < pre     > /dev/null 2>>"$progressfile" || exit 1
+			    "$prefix/dndpre" -y $distformat $seqtype $model -M 2 -C $numthreads < pre     > /dev/null 2>>"$progressfile" || exit 1
 			fi
 			"$prefix/dvtditr" -W $minimumweight $bunkatsuopt -E $fixthreshold -s $unalignlevel  $legacygapopt $mergearg $outnum -C $numthreadsit -t $randomseed $rnaoptit $memopt $scorecalcopt $localparam -z 50 $seqtype $model -f "-"$gop -Q $spfactor -h $aof  -I $iterate $weightopt $treeinopt $algoptit $treealg -p $parallelizationstrategy  $scoreoutarg  -K $nadd < pre     > /dev/null 2>>"$progressfile" || exit 1
 		fi
@@ -2771,7 +2797,7 @@ $ownlist"
 
 	popd > /dev/null
 
-	if [ "$outputopt" != "-f" -o "$windows" = "yes" ]; then # Windows deha kaigyo code wo f2cl de modosu.
+	if [ "$outputopt" != "-f -l -1" -o "$windows" = "yes" ]; then # Windows deha kaigyo code wo f2cl de modosu.
 #		ln -s "$TMPFILE/order" _order$$ # f2cl ga space ari filename ni taiou shiteinainode
 #		cp "$TMPFILE/order" _order$$ # ln -s no error wo sakeru
 		if [ "$outputfile" = "" ]; then
@@ -2797,7 +2823,7 @@ $ownlist"
 	fi
 
 	if [ $distout -eq 1 ]; then
-		cp "$TMPFILE/hat2" "$infilename.hat2"
+		cp "$TMPFILE/${distformat}" "$infilename.${distformat}"
 	fi
 
 	if [ $npickup -ne 0 ]; then


=====================================
core/makedirectionlist.c
=====================================
@@ -24,7 +24,7 @@ typedef struct _thread_arg
 	char *tmpseq;
 	int *res;
 	int **spointt;
-	short *table1;
+	int *table1;
 	int iq;
 #ifdef enablemultithread
 	int *jshare;
@@ -332,12 +332,22 @@ void seq_grp( int *grp, char *seq )
 	}
 }
 
-void makecompositiontable_p( short *table, int *pointt )
+void makecompositiontable_p( int *table, int *pointt )
 {
 	int point;
 
 	while( ( point = *pointt++ ) != END_OF_VEC )
+	{
+#if 1
 		table[point]++;
+#else
+		if( (unsigned int)table[point]++ >= INT_MAX )
+		{
+			reporterr( "Overflow. table[point]=%d>INT_MAX(%d).\n", table[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
+	}
 }
 
 
@@ -401,21 +411,21 @@ void makepointtable( int *pointt, int *n )
 	*pointt = END_OF_VEC;
 }
 
-static int localcommonsextet_p2( short *table, int *pointt )
+static int localcommonsextet_p2( int *table, int *pointt )
 {
 	int value = 0;
-	short tmp;
+	unsigned int tmp;
 	int point;
-	short *memo;
+	int *memo;
 	int *ct;
 	int *cp;
 
 	if( *pointt == -1 )
 		return( 0 );
 
-	memo = (short *)calloc( tsize, sizeof( short ) );
+	memo = (int *)calloc( tsize, sizeof( int ) );
 	if( !memo ) ErrorExit( "Cannot allocate memo\n" );
-	ct = (int *)calloc( MIN( maxl, tsize )+1, sizeof( int ) ); // chuui!!
+	ct = (int *)calloc( MIN( maxl, tsize )+1, sizeof( int ) );
 	if( !ct ) ErrorExit( "Cannot allocate memo\n" );
 
 	cp = ct;
@@ -425,6 +435,14 @@ static int localcommonsextet_p2( short *table, int *pointt )
 		if( tmp < table[point] )
 			value++;
 		if( tmp == 0 ) *cp++ = point;
+#if 0 // kakunin shinai
+		if( tmp >= INT_MAX )
+		{
+			reporterr( "Overflow.\n" );
+			reporterr( "cp-ct=%d, point=%d, tmp=%d, memo[point]=%d>INT_MAX(%d)\n", cp-ct, point, tmp, memo[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
 	}
 	*cp = END_OF_VEC;
 	
@@ -448,7 +466,7 @@ static void makecontrastorder6mer( int *order, int **pointt, int **pointt_rev, c
 	int i;
 	double *res;
 	contrastarr *arr;
-	short *table1, *table1_rev;
+	int *table1, *table1_rev;
 
 
 	arr = calloc( iend, sizeof( contrastarr ) );
@@ -457,13 +475,13 @@ static void makecontrastorder6mer( int *order, int **pointt, int **pointt_rev, c
 	for( i=0; i<iend; i++ )
 	{
 		if( i % 100 == 1 ) reporterr( "%d   \r", i );
-		table1 = (short *)calloc( tsize, sizeof( short ) );
+		table1 = (int *)calloc( tsize, sizeof( int ) );
 		if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 		makecompositiontable_p( table1, pointt[i] );
 		res[i] = localcommonsextet_p2( table1, pointt[i] );
 		free( table1 );
 
-		table1_rev = (short *)calloc( tsize, sizeof( short ) );
+		table1_rev = (int *)calloc( tsize, sizeof( int ) );
 		if( !table1_rev ) ErrorExit( "Cannot allocate table1\n" );
 		makecompositiontable_p( table1_rev, pointt_rev[i] );
 		res[i] -= localcommonsextet_p2( table1_rev, pointt[i] );
@@ -572,7 +590,7 @@ static void	*directionthread( void *arg )
 	char *tmpseq = targ->tmpseq;
 	int *res = targ->res;
 	int **spointt = targ->spointt;
-	short *table1 = targ->table1;
+	int *table1 = targ->table1;
 //	int iq = targ->iq;
 #ifdef enablemultithread
 //	int thread_no = targ->thread_no;
@@ -667,7 +685,7 @@ int main( int argc, char *argv[] )
 	int ires, mres, mres2;
 	int *res, *resr, *resf;
 	int *map;
-	static short *table1, *table1_rev;
+	static int *table1, *table1_rev;
 	static char **mseq1f, **mseq1r, **mseq2;
 	int *contrastorder;
 
@@ -993,9 +1011,9 @@ int main( int argc, char *argv[] )
 #else
 			if( !dodp )
 			{
-				table1 = (short *)calloc( tsize, sizeof( short ) );
+				table1 = (int *)calloc( tsize, sizeof( int ) );
 				if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
-				table1_rev = (short *)calloc( tsize, sizeof( short ) );
+				table1_rev = (int *)calloc( tsize, sizeof( int ) );
 				if( !table1_rev ) ErrorExit( "Cannot allocate table1_rev\n" );
 				makecompositiontable_p( table1, pointt[ic] );
 				makecompositiontable_p( table1_rev, pointt_rev[ic] );


=====================================
core/mltaln.h
=====================================
@@ -36,7 +36,7 @@
 
 
 
-#define VERSION "7.505"
+#define VERSION "7.525"
 #define SHOWVERSION reporterr( "%s (%s) Version " VERSION "\nalg=%c, model=%s, amax=%3.1f\n%d thread(s)\n\n", progName( argv[0] ), (dorp=='d')?"nuc":((nblosum==-2)?"text":"aa"), alg, modelname, specificityconsideration, nthread )
 
 #define FFT_THRESHOLD  80
@@ -48,6 +48,7 @@
 #define M  500000       /* njob no saidaiti */
 #define N 5000000       /* nlen no saidaiti */
 #define MAXSEG 100000
+#define MAXSEG_GIVENANCHORS 10000000
 #define B     256
 #define C     60       /*  1 gyou no mojisuu */
 #define D      6
@@ -386,6 +387,10 @@ extern int maxl, tsize;
 extern char codonpos;
 extern char codonscore;
 
+extern char distout;
+
+extern int terminalmargin;
+
 
 /* for --large  */
 extern int compacttree;
@@ -395,3 +400,4 @@ extern int specifictarget;
 extern int nadd;
 extern int usenaivescoreinsteadofalignmentscore;
 #define MYBUFSIZE 1000 * 1000 * 100 // 100MB
+extern int LineLengthInFASTA;


=====================================
core/mltaln9.c
=====================================
@@ -2059,7 +2059,7 @@ void createchain( int nseq, int ***topol, double **len, char **name, int *nlen,
 	FILE *fp;
 	int i, j;
 	double l, ll;
-	int treelen;
+	size_t treelen;
 	char **tree;
 	char *instanttree;
 	int posinit;
@@ -2301,7 +2301,7 @@ void createchain( int nseq, int ***topol, double **len, char **name, int *nlen,
 	FILE *fp;
 	int i, j;
 	double l, ll;
-	int treelen;
+	size_t treelen;
 	char **tree;
 	char *instanttree;
 	int posinit;
@@ -2831,7 +2831,7 @@ void loadtree( int nseq, int ***topol, double **len, char **name, int *nlen, Tre
 
 int check_guidetreefile( int *seed, int *npick, double *limitram )
 {
-	char string[100];
+	char string[1000];
 	char *sizestring;
 	FILE *fp;
 	double tanni;
@@ -2847,7 +2847,7 @@ int check_guidetreefile( int *seed, int *npick, double *limitram )
 		exit( 1 );
 	}
 
-	fgets( string, 999, fp );
+	fgets( string, sizeof(string) / sizeof(char), fp );
 	fclose( fp );
 
 	if( !strncmp( string, "shuffle", 7 ) )
@@ -13930,7 +13930,8 @@ double plainscore( int nseq, char **s )
 	return( v );
 }
 
-int addonetip2top( int njobc, int ***topolc, double **lenc, double **iscorec, int ***topol, double **len, Treedep *dep, int treeout, Addtree *addtree, int iadd, char **name, int *alnleninnode, int *nogaplen, int noalign )
+
+int addonetip2fixedpos( int njobc, int ***topolc, double **lenc, double **iscorec, int ***topol, double **len, Treedep *dep, int treeout, Addtree *addtree, int iadd, char **name, int *alnleninnode, int *nogaplen, int noalign, int torr )
 {
 	int i, j, mem0, mem1, posinnew, m;
 	int nstep;
@@ -14036,14 +14037,15 @@ int addonetip2top( int njobc, int ***topolc, double **lenc, double **iscorec, in
 	}
 #else
 	nearest = 0;
-	minscore = 0.0;
+	if( torr == 't' )
+		minscore = 0.0; // add2top
+	else
+		minscore = 999999.9; // add2root
 #endif
 
 	nearesto = nearest;
 	minscoreo = minscore;
 
-
-
 //	for( i=0; i<njobc-1; i++ ) for( j=i+1; j<njobc; j++ )
 //		reporterr(       "iscorec[%d][%d] = %f\n", i, j, iscorec[i][j-i] );
 //	reporterr( "nearest = %d\n", nearest+1 );
@@ -14104,7 +14106,7 @@ int addonetip2top( int njobc, int ***topolc, double **lenc, double **iscorec, in
 //seqlengthcondition = ( nogaplentoadd <= reflen ); // CHUUI
 
 //		if( repnorg == -1 && dep[i].distfromtip * 2 > minscore && seqlengthcondition )  // Keitouteki ichi ha fuseikaku.
-		if( repnorg == -1 && dep[i].distfromtip * 2 >= minscore ) // Keitouteki ichi dake ga hitsuyouna baaiha kore wo tsukau.
+		if( torr == 't' && repnorg == -1 && dep[i].distfromtip * 2 >= minscore ) // Keitouteki ichi dake ga hitsuyouna baaiha kore wo tsukau.
 		{
 //			reporterr(       "INSERT HERE, %d-%d\n", nearest, norg );
 //			reporterr(       "nearest = %d\n", nearest );
@@ -15374,7 +15376,7 @@ double sumofpairsscore( int nseq, char **seq )
 int commonsextet_p( int *table, int *pointt )
 {
 	int value = 0;
-	int tmp;
+	unsigned int tmp;
 	int point;
 	static TLS int *memo = NULL;
 	static TLS int *ct = NULL;
@@ -15407,6 +15409,7 @@ int commonsextet_p( int *table, int *pointt )
 		if( tmp < table[point] )
 			value++;
 		if( tmp == 0 ) *cp++ = point;
+// overflow kakunin shinai
 	}
 	*cp = END_OF_VEC;
 	


=====================================
core/pairlocalalign.c
=====================================
@@ -1634,6 +1634,7 @@ static void arguments( int argc, char *argv[] )
 	usenaivescoreinsteadofalignmentscore = 0;
 	specifictarget = 0;
 	nwildcard = 0;
+        distout = 'c'; // 2023/Jun; kyori gyouretsu wo tsuneni shutsuryoku.
 
 //	reporterr( "argc=%d\n", argc );
 //	reporterr( "*argv=%s\n", *argv );


=====================================
core/sextet5.c
=====================================
@@ -81,7 +81,7 @@ void seq_grp( int *grp, char *seq )
 	*grp = END_OF_VEC;
 }
 
-void makecompositiontable_p( short *table, int *pointt )
+void makecompositiontable_p( int *table, int *pointt )
 {
 	int point;
 
@@ -89,18 +89,18 @@ void makecompositiontable_p( short *table, int *pointt )
 		table[point]++;
 }
 
-static int localcommonsextet_p( short *table, int *pointt )
+static int localcommonsextet_p( int *table, int *pointt )
 {
 	int value = 0;
-	short tmp;
+	int tmp;
 	int point;
-	static short *memo = NULL;
+	static int *memo = NULL;
 	static int *ct = NULL;
 	static int *cp;
 
 	if( !memo )
 	{
-		memo = (short *)calloc( tsize, sizeof( short ) );
+		memo = (int *)calloc( tsize, sizeof( int ) );
 		if( !memo ) ErrorExit( "Cannot allocate memo\n" );
 		ct = (int *)calloc( MIN( maxl, tsize)+1, sizeof( int ) );
 		if( !ct ) ErrorExit( "Cannot allocate memo\n" );
@@ -185,7 +185,7 @@ int main( int argc, char **argv )
 	double **mtx;
 	double **mtx2;
 	double score, score0;
-	static short *table1;
+	static int *table1;
 	char b[B];
 
 	arguments( argc, argv );
@@ -261,7 +261,7 @@ int main( int argc, char **argv )
 	}
 	for( i=0; i<njob; i++ )
 	{
-		table1 = (short *)calloc( tsize, sizeof( short ) );
+		table1 = (int *)calloc( tsize, sizeof( int ) );
 		if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 		if( i % 10 == 0 )
 		{


=====================================
core/splittbfast.c
=====================================
@@ -837,26 +837,36 @@ int seq_grp( int *grp, char *seq )
 	return( grp-grpbk );
 }
 
-void makecompositiontable_p( short *table, int *pointt )
+void makecompositiontable_p( int *table, int *pointt )
 {
 	int point;
 
 	while( ( point = *pointt++ ) != END_OF_VEC )
+	{
+#if 0
 		table[point]++;
+#else
+		if( (unsigned int)table[point]++ >= INT_MAX )
+		{
+			reporterr( "Overflow. table[point]=%d>INT_MAX(%d).\n", table[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
+	}
 }
 
-static int localcommonsextet_p( short *table, int *pointt )
+static int localcommonsextet_p( int *table, int *pointt )
 {
 	int value = 0;
-	short tmp;
+	unsigned int tmp;
 	int point;
-	static short *memo = NULL;
+	static int *memo = NULL;
 	static int *ct = NULL;
 	static int *cp;
 
 	if( !memo )
 	{
-		memo = (short *)calloc( tsize, sizeof( short ) );
+		memo = (int *)calloc( tsize, sizeof( int ) );
 		if( !memo ) ErrorExit( "Cannot allocate memo\n" );
 		ct = (int *)calloc( MIN( maxl, tsize )+1, sizeof( int ) );
 		if( !ct ) ErrorExit( "Cannot allocate memo\n" );
@@ -869,6 +879,14 @@ static int localcommonsextet_p( short *table, int *pointt )
 		if( tmp < table[point] )
 			value++;
 		if( tmp == 0 ) *cp++ = point;
+#if 0
+		if( tmp >= INT_MAX )
+		{
+			reporterr( "Overflow.\n" );
+			reporterr( "cp-ct=%d, point=%d, tmp=%d, memo[point]=%d>INT_MAX(%d)\n", cp-ct, point, tmp, memo[point], INT_MAX );
+			exit( 1 );
+		}
+#endif
 	}
 	*cp = END_OF_VEC;
 	
@@ -1167,7 +1185,7 @@ static int splitseq_mq( Scores *scores, int nin, int *nlen, char **seq, char **o
 	double **dfromcp;
 	double **pickmtx;
 	double **yukomtx;
-	static short *table1;
+	static int *table1;
 	Scores **outs, *ptr;
 	int *numin;
 	int *tsukau;
@@ -1368,7 +1386,7 @@ static int splitseq_mq( Scores *scores, int nin, int *nlen, char **seq, char **o
 		}
 		else
 		{
-			table1 = (short *)calloc( tsize, sizeof( short ) );
+			table1 = (int *)calloc( tsize, sizeof( int ) );
 			if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 			makecompositiontable_p( table1, scores[0].pointt );
 		}
@@ -1632,7 +1650,7 @@ exit( 1 );
 		}
 		else
 		{
-			table1 = (short *)calloc( tsize, sizeof( short ) );
+			table1 = (int *)calloc( tsize, sizeof( int ) );
 			if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 			makecompositiontable_p( table1, scores[picks[j]].pointt );
 		}
@@ -2128,7 +2146,7 @@ exit( 1 );
 			}
 			else
 			{
-				table1 = (short *)calloc( tsize, sizeof( short ) );
+				table1 = (int *)calloc( tsize, sizeof( int ) );
 				if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 				makecompositiontable_p( table1, scores[yukos[i]].pointt );
 			}
@@ -2685,7 +2703,7 @@ int main( int argc, char *argv[] )
 	int aan;
 
 	static Scores *scores;
-	static short *table1;
+	static int *table1;
 	static char **tree;
 
 
@@ -2991,7 +3009,7 @@ int main( int argc, char *argv[] )
 		}
 		else
 		{
-			table1 = (short *)calloc( tsize, sizeof( short ) );
+			table1 = (int *)calloc( tsize, sizeof( int ) );
 			if( !table1 ) ErrorExit( "Cannot allocate table1\n" );
 			makecompositiontable_p( table1, pointt[i] );
 			scores[i].selfscore = localcommonsextet_p( table1, pointt[i] );


=====================================
core/tbfast.c
=====================================
@@ -10,7 +10,6 @@
 static int treein;
 static int topin;
 static int treeout;
-static int distout;
 static int noalign;
 static int multidist;
 static int subalignment;
@@ -343,8 +342,15 @@ static void arguments( int argc, char *argv[], int *pac, char **pav, int *tac, c
 					addprofile = 0;
 					break;
 				case 'y':
-					distout = 1;
-					break;
+                                        distout = *(*++argv);
+					reporterr(       "distout=%c\n", distout );
+                                        if( distout != 'c' && distout != 'h' )
+                                        {
+                                            reporterr(       "Set -y c or -y h in v>=7.521.\n" );
+                                            exit( 1 );
+                                        }
+					--argc; 
+					goto nextoption;
 				case 't':
 					treeout = 1;
 					break;


=====================================
core/tditeration.c
=====================================
@@ -246,7 +246,6 @@ static void Writeoptions( FILE *fp )
 	}
 }
 
-#ifdef enablemultithread
 
 static void freelocalarrays( 
 	double *tscorehistory,
@@ -327,6 +326,7 @@ static void freelocalarrays(
 	}
 }
 
+#ifdef enablemultithread
 
 static void *athread( void *arg )
 {


=====================================
readme → readme.bk
=====================================
@@ -1,6 +1,6 @@
 -----------------------------------------------------------------------
   MAFFT: a multiple sequence alignment program
-  version 7.505, 2022/Apr/10
+  version 7.507, 2022/Aug/8
 
   http://mafft.cbrc.jp/alignment/software/
   katoh at ifrec.osaka-u.ac.jp


=====================================
test/x
=====================================
@@ -0,0 +1,504 @@
+>     1== M63632   1 Lampetra japonica rhodopsin <>[BBRC174,1125-1132'91]
+----------------------------------------MNG-----------------
+TE--GDNFYVP-----FSNKTGLARSPYEYPQY---------------YLAEPWK-----
+----YSALAAYMFFLILVGFPVNFLTLFVTVQHKKLRTPLNYILLNLAMANLFMVLFG-F
+TVTMYTSMN-GYFV--FGPTMCSIEGFFATLGGEVALWSLVVLAIERYIVICKPMGN-FR
+FGNTHAIMGVAFTWIMALAC-AAPPLVG-W-----SRYIPEGMQCSCGPDYYTLNPNFNN
+ESYVVYMFVVHFLVPFVIIFFCYGRLLCTV----KEAAAAQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESASTQK------AEKEVTRMVVLMVIGFLVCWVPYASVAFYI
+FTHQGS---DFGATFMTLPAFFAKSSALYNPVIYILMNKQFRNCMITTLCC--------G
+KNPLGDDE--SGASTSKTEVSSVS-TSPVSPA----------------------------
+------------------------------------------------------------
+-
+>     2== U22180   1 rat opsin <rod>[J.Mol.Neurosci.5(3),207-209'94]
+----------------------------------------MNG-----------------
+TE--GPNFYVP-----FSNITGVVRSPFEQPQY---------------YLAEPWQ-----
+----FSMLAAYMFLLIVLGFPINFLTLYVTVQHKKLRTPLNYILLNLAVADLFMVFGG-F
+TTTLYTSLH-GYFV--FGPTGCNLEGFFATLGGEIGLWSLVVLAIERYVVVCKPMSN-FR
+FGENHAIMGVAFTWVMALAC-AAPPLVG-W-----SRYIPEGMQCSCGIDYYTLKPEVNN
+ESFVIYMFVVHFTIPMIVIFFCYGQLVFTV----KEAAAQQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESATTQK------AEKEVTRMVIIMVIFFLICWLPYASVAMYI
+FTHQGS---NFGPIFMTLPAFFAKTASIYNPIIYIMMNKQFRNCMLTSLCC--------G
+KNPLGDDE--ASATASKTE------TSQVAPA----------------------------
+------------------------------------------------------------
+-
+>     3== M92038   1 chicken green sensitive cone opsin <retina>[PNAS89,5932-5936'9
+----------------------------------------MNG-----------------
+TE--GINFYVP-----MSNKTGVVRSPFEYPQY---------------YLAEPWK-----
+----YRLVCCYIFFLISTGLPINLLTLLVTFKHKKLRQPLNYILVNLAVADLFMACFG-F
+TVTFYTAWN-GYFV--FGPVGCAVEGFFATLGGQVALWSLVVLAIERYIVVCKPMGN-FR
+FSATHAMMGIAFTWVMAFSC-AAPPLFG-W-----SRYMPEGMQCSCGPDYYTHNPDYHN
+ESYVLYMFVIHFIIPVVVIFFSYGRLICKV----REAAAQQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESATTQK------AEKEVTRMVILMVLGFMLAWTPYAVVAFWI
+FTNKGA---DFTATLMAVPAFFSKSSSLYNPIIYVLMNKQFRNCMITTICC--------G
+KNPFGDEDVSSTVSQSKTEVSSVS-SSQVSPA----------------------------
+------------------------------------------------------------
+-
+>     4=p A45229 opsin, green-sensitive (clone GFgr-1) - goldfish
+----------------------------------------MNG-----------------
+TE--GKNFYVP-----MSNRTGLVRSPFEYPQY---------------YLAEPWQ-----
+----FKILALYLFFLMSMGLPINGLTLVVTAQHKKLRQPLNFILVNLAVAGTIMVCFG-F
+TVTFYTAIN-GYFV--LGPTGCAVEGFMATLGGEVALWSLVVLAIERYIVVCKPMGS-FK
+FSSSHAFAGIAFTWVMALAC-AAPPLFG-W-----SRYIPEGMQCSCGPDYYTLNPDYNN
+ESYVIYMFVCHFILPVAVIFFTYGRLVCTV----KAAAAQQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------DSASTQK------AEREVTKMVILMVFGFLIAWTPYATVAAWI
+FFNKGA---DFSAKFMAIPAFFSKSSALYNPVIYVLLNKQFRNCMLTTIFC--------G
+KNPLGDDE-SSTVSTSKTEVSS------VSPA----------------------------
+------------------------------------------------------------
+-
+>     5=p B45229 opsin, green-sensitive (clone GFgr-2) - goldfish
+----------------------------------------MNG-----------------
+TE--GNNFYVP-----LSNRTGLVRSPFEYPQY---------------YLAEPWQ-----
+----FKLLAVYMFFLICLGLPINGLTLICTAQHKKLRQPLNFILVNLAVAGAIMVCFG-F
+TVTFYTAIN-GYFA--LGPTGCAVEGFMATLGGEVALWSLVVLAIERYIVVCKPMGS-FK
+FSSTHASAGIAFTWVMAMAC-AAPPLVG-W-----SRYIPEGIQCSCGPDYYTLNPEYNN
+ESYVLYMFICHFILPVTIIFFTYGRLVCTV----KAAAAQQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------DSASTQK------AEREVTKMVILMVLGFLVAWTPYATVAAWI
+FFNKGA---AFSAQFMAIPAFFSKTSALYNPVIYVLLNKQFRSCMLTTLFC--------G
+KNPLGDEE-SSTVSTSKTEVSS------VSPA----------------------------
+------------------------------------------------------------
+-
+>     6== L11864   1 Carassius auratus blue cone opsin <retina>[Biochemistry32,208-
+----------------------------------------MKQ-----------------
+VPEFHEDFYIPI-PLDINNLS--AYSPFLVPQD---------------HLGNQGI-----
+----FMAMSVFMFFIFIGGASINILTILCTIQFKKLRSHLNYILVNLSIANLFVAIFG-S
+PLSFYSFFN-RYFI--FGATACKIEGFLATLGGMVGLWSLAVVAFERWLVICKPLGN-FT
+FKTPHAIAGCILPWISALAA-SLPPLFG-W-----SRYIPEGLQCSCGPDWYTTNNKYNN
+ESYVMFLFCFCFAVPFGTIVFCYGQLLITL----KLAAKAQA------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------DSASTQK------AEREVTKMVVVMVLGFLVCWAPYASFSLWI
+VSHRGE---EFDLRMATIPSCLSKASTVYNPVIYVLMNKQFRSCMM-KMVC--------G
+KN-IEEDE--ASTSSQVTQVSS------VAPEK---------------------------
+------------------------------------------------------------
+-
+>     7== M13299   1 human BCP <>[Science232(4747),193-202'86]
+----------------------------------------MRK-----------------
+MS--EEEFYL------FKNIS--SVGPWDGPQY---------------HIAPVWA-----
+----FYLQAAFMGTVFLIGFPLNAMVLVATLRYKKLRQPLNYILVNVSFGGFLLCIFS-V
+FPVFVASCN-GYFV--FGRHVCALEGFLGTVAGLVTGWSLAFLAFERYIVICKPFGN-FR
+FSSKHALTVVLATWTIGIGV-SIPPFFG-W-----SRFIPEGLQCSCGPDWYTVGTKYRS
+ESYTWFLFIFCFIVPLSLICFSYTQLLRAL----KAVAAQQQ------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESATTQK------AEREVSRMVVVMVGSFCVCYVPYAAFAMYM
+VNNRNH---GLDLRLVTIPSFFSKSACIYNPIIYCFMNKQFQACIM-KMVC--------G
+KA-MTDES--DTCSSQKTEVSTVS-STQVGPN----------------------------
+------------------------------------------------------------
+-
+>     8=opsin, greensensitive  human (fragment) S07060
+------------------------------------------------------------
+------------------------------------------------------------
+--------------------------------------------------DLAETVIA-S
+TISIVNQVS-GYFV--LGHPMCVLEGYTVSLCGITGLWSLAIISWERWLVVCKPFGN-VR
+FDAKLAIVGIAFSWIWAAVW-TAPPIFG-W-----SRYWPHGLKTSCGPDVFSGSSYPGV
+QSYMIVLMVTCCITPLSIIVLCYLQVWLAI----RAVAKQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESESTQK------AEKEVTRMVVVMVLAFC-------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-
+>     9== K03494   1 human GCP <>[Science232(4747),193-202'86]
+----------------------------------------MAQQWSLQRLAGRHPQDSYE
+DSTQSSIFTYTN--------SNSTRGPFEGPNY---------------HIAPRWV-----
+----YHLTSVWMIFVVIASVFTNGLVLAATMKFKKLRHPLNWILVNLAVADLAETVIA-S
+TISVVNQVY-GYFV--LGHPMCVLEGYTVSLCGITGLWSLAIISWERWMVVCKPFGN-VR
+FDAKLAIVGIAFSWIWAAVW-TAPPIFG-W-----SRYWPHGLKTSCGPDVFSGSSYPGV
+QSYMIVLMVTCCITPLSIIVLCYLQVWLAI----RAVAKQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESESTQK------AEKEVTRMVVVMVLAFCFCWGPYAFFACFA
+AANPGY---PFHPLMAALPAFFAKSATIYNPVIYVFMNRQFRNCILQLF----------G
+KK-VDDGS--ELSSASKTEVSSV---SSVSPA----------------------------
+------------------------------------------------------------
+-
+>    10== Z68193   1 human Red Opsin <>[]
+----------------------------------------MAQQWSLQRLAGRHPQDSYE
+DSTQSSIFTYTN--------SNSTRGPFEGPNY---------------HIAPRWV-----
+----YHLTSVWMIFVVTASVFTNGLVLAATMKFKKLRHPLNWILVNLAVADLAETVIA-S
+TISIVNQVS-GYFV--LGHPMCVLEGYTVSLCGITGLWSLAIISWERWLVVCKPFGN-VR
+FDAKLAIVGIAFSWIWSAVW-TAPPIFG-W-----SRYWPHGLKTSCGPDVFSGSSYPGV
+QSYMIVLMVTCCIIPLAIIMLCYLQVWLAI----RAVAKQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESESTQK------AEKEVTRMVVVMIFAYCVCWGPYTFFACFA
+AANPGY---AFHPLMAALPAYFAKSATIYNPVIYVFMNRQFRNCILQLF----------G
+KK-VDDGS--ELSSASKTEVSSV---SSVSPA----------------------------
+------------------------------------------------------------
+-
+>    11== M92036   1 Gecko gecko P521 <retina>[PNAS89,6841-6845'92]
+----------------------------------------MTEAWNVAVFAARRSRDD-D
+DTTRGSVFTYTN--------TNNTRGPFEGPNY---------------HIAPRWV-----
+----YNLVSFFMIIVVIASCFTNGLVLVATAKFKKLRHPLNWILVNLAFVDLVETLVA-S
+TISVFNQIF-GYFI--LGHPLCVIEGYVVSSCGITGLWSLAIISWERWFVVCKPFGN-IK
+FDSKLAIIGIVFSWVWAWGW-SAPPIFG-W-----SRYWPHGLKTSCGPDVFSGSVELGC
+QSFMLTLMITCCFLPLFIIIVCYLQVWMAI----RAVAAQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESESTQK------AEREVSRMVVVMIVAFCICWGPYASFVSFA
+AANPGY---AFHPLAAALPAYFAKSATIYNPVIYVFMNRQFRNCIMQLF----------G
+KK-VDDGS--EASTTSRTEVSSVS-NSSVAPA----------------------------
+------------------------------------------------------------
+-
+>    12== M62903   1 chicken visual pigment <>[BBRC173,1212-1217'90]
+----------------------------------------MAA-WEAA-FAARRRHEE-E
+DTTRDSVFTYTN--------SNNTRGPFEGPNY---------------HIAPRWV-----
+----YNLTSVWMIFVVAASVFTNGLVLVATWKFKKLRHPLNWILVNLAVADLGETVIA-S
+TISVINQIS-GYFI--LGHPMCVVEGYTVSACGITALWSLAIISWERWFVVCKPFGN-IK
+FDGKLAVAGILFSWLWSCAW-TAPPIFG-W-----SRYWPHGLKTSCGPDVFSGSSDPGV
+QSYMVVLMVTCCFFPLAIIILCYLQVWLAI----RAVAAQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------ESESTQK------AEKEVSRMVVVMIVAYCFCWGPYTFFACFA
+AANPGY---AFHPLAAALPAYFAKSATIYNPIIYVFMNRQFRNCILQLF----------G
+KK-VDDGS--EVST-SRTEVSSVS-NSSVSPA----------------------------
+------------------------------------------------------------
+-
+>    13== S75720   1 chicken P-opsin <>[Science267(5203),1502-1506'95]
+----------------------------------------MSS-----------------
+----NSSQAPPN-G---------TPGPFDGPQWP--------------YQAPQST-----
+----YVGVAVLMGTVVACASVVNGLVIVVSICYKKLRSPLNYILVNLAVADLLVTLCG-S
+SVSLSNNIN-GFFV--FGRRMCELEGFMVSLTGIVGLWSLAILALERYVVVCKPLGD-FQ
+FQRRHAVSGCAFTWGWALLW-SAPPLLG-W-----SSYVPEGLRTSCGPNWYTGGS--NN
+NSYILSLFVTCFVLPLSLILFSYTNLLLTL----RAAAAQQK------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-----------------EADTTQR------AEREVTRMVIVMVMAFLLCWLPYSTFALVV
+ATHKGI---IIQPVLASLPSYFSKTATVYNPIIYVFMNKQFQSCLLEMLCC--------G
+YQPQRTGKASPGTPGPHADVTAAGLRNKVMPAH---------------------------
+----------------------------------------PV------------------
+-
+>    14== M17718   1 D.melanogaster Rh3 <>[J.Neurosci.7,1550-1557'87]
+----------MESGN-----VS--------SSLFGNVSTALRP-----------------
+EARLSAE-----------TRLLGWNVPPEELR----------------HIPEHWLTYPEP
+PESMNYLLGTLYIFFTLMSMLGNGLVIWVFSAAKSLRTPSNILVINLAFCDFMMMVK--T
+PIFIYNSFH-QGYA--LGHLGCQIFGIIGSYTGIAAGATNAFIAYDRFNVITRPMEG--K
+MTHGKAIAMIIFIYMYATPW-VVACYTETW-----GRFVPEGYLTSCTFDYLT--DNFDT
+RLFVACIFFFSFVCPTTMITYYYSQIVGHVFSHEKALRDQAKK-----------------
+----------------------------------------------------------MN
+-----------VESL---------------------------------------------
+--------------RSNVDKNKET------AEIRIAKAAITICFLFFCSWTPYGVMSLIG
+AFGDKT---LLTPGATMIPACACKMVACIDPFVYAISHPRYRMELQKRCPWLAL------
+---NEKAP--ESSAVASTSTTQEP--QQTTAA----------------------------
+------------------------------------------------------------
+-
+>    15== X65879   1 Drosophila pseudoobscura Dpse\Rh3 <>[Genetics132(1),193-204'92
+----------MEYHN-----VS---------SVLGNVSSVLRP-----------------
+DARLSAE-----------SRLLGWNVPPDELR----------------HIPEHWLIYPEP
+PESMNYLLGTLYIFFTVISMIGNGLVMWVFSAAKSLRTPSNILVINLAFCDFMMMIK--T
+PIFIYNSFH-QGYA--LGHLGCQIFGVIGSYTGIAAGATNAFIAYDRYNVITRPMEG--K
+MTHGKAIAMIIFIYLYATPW-VVACYTESW-----GRFVPEGYLTSCTFDYLT--DNFDT
+RLFVACIFFFSFVCPTTMITYYYSQIVGHVFSHEKALRDQAKK-----------------
+----------------------------------------------------------MN
+-----------VDSL---------------------------------------------
+--------------RSNVDKSKEA------AEIRIAKAAITICFLFFASWTPYGVMSLIG
+AFGDKT---LLTPGATMIPACTCKMVACIDPFVYAISHPRYRMELQKRCPWLAI------
+---SEKAP--ESRAAISTSTTQEQ--QQTTAA----------------------------
+------------------------------------------------------------
+-
+>    16== M17730   1 D.melanogaster Rh4 opsin <>[J.Neurosci.7,1558-1566'87]
+----------ME-------------------PLCNASEPPLRP-----------------
+EARSSGN---------GDLQFLGWNVPPDQIQ----------------YIPEHWLTQLEP
+PASMHYMLGVFYIFLFCASTVGNGMVIWIFSTSKSLRTPSNMFVLNLAVFDLIMCLK--A
+PIF--NSFH-RGFAIYLGNTWCQIFASIGSYSGIGAGMTNAAIGYDRYNVITKPMNR--N
+MTFTKAVIMNIIIWLYCTPW-VVLPLTQFW-----DRFVPEGYLTSCSFDYLS--DNFDT
+RLFVGTIFFFSFVCPTLMILYYYSQIVGHVFSHEKALREQAKK-----------------
+----------------------------------------------------------MN
+-----------VESL---------------------------------------------
+--------------RSNVDKSKET------AEIRIAKAAITICFLFFVSWTPYGVMSLIG
+AFGDKS---LLTQGATMIPACTCKLVACIDPFVYAISHPRYRLELQKRCPWLGV------
+---NEKSG--EISSAQSTTTQEQ---QQTTAA----------------------------
+------------------------------------------------------------
+-
+>    17== X65880   1 Drosophila pseudoobscura Dpse\Rh4 <>[Genetics132(1),193-204'92
+----------MD-------------------ALCNASEPPLRP-----------------
+EARMSSG--------SDELQFLGWNVPPDQIQ----------------YIPEHWLTQLEP
+PASMHYMLGVFYIFLFFASTLGNGMVIWIFSTSKSLRTPSNMFVLNLAVFDLIMCLK--A
+PIFIYNSFH-RGFA--LGNTWCQIFASIGSYSGIGAGMTNAAIGYDRYNVITKPMNR--N
+MTFTKAVIMNIIIWLYCTPW-VVLPLTQFW-----DRFVPEGYLTSCSFDYLS--DNFDT
+RLFVGTIFLFSFVVPTLMILYYYSQIVGHVFNHEKALREQAKK-----------------
+----------------------------------------------------------MN
+-----------VESL---------------------------------------------
+--------------RSNVDKSKET------AEIRIAKAAITICFLFFVSWTPYGVMSLIG
+AFGDKS---LLTPGATMIPACTCKLVACIEPFVYAISHPRYRMELQKRCPWLGV------
+---NEKSG--EASSAQSTTTQEQT--QQTSAA----------------------------
+------------------------------------------------------------
+-
+>    18== D50584   1 Hemigrapsus sanguineus opsin BcRh2 <compound eye>[J.Exp.Biol.1
+--------------------------------MTNATGPQMAY-----------------
+YGAASMDFGYP------EGVSIVDFVRPEIKP----------------YVHQHWYNYPPV
+NPMWHYLLGVIYLFLGTVSIFGNGLVIYLFNKSAALRTPANILVVNLALSDLIMLTTN-V
+PFFTYNCFSGGVWM--FSPQYCEIYACLGAITGVCSIWLLCMISFDRYNIICNGFNG-PK
+LTTGKAVVFALISWVIAIGC-ALPPFFG-W-----GNYILEGILDSCSYDYLT--QDFNT
+FSYNIFIFVFDYFLPAAIIVFSYVFIVKAIFAHEAAMRAQAKK-----------------
+----------------------------------------------------------MN
+-----------VSTL---------------------------------------------
+--------------RS-NEADAQR------AEIRIAKTALVNVSLWFICWTPYALISLKG
+VMGDTS---GITPLVSTLPALLAKSCSCYNPFVYAISHPKYRLAITQHLPWFCV------
+HE-TETKS--NDDSQSNSTVAQDK-A----------------------------------
+------------------------------------------------------------
+-
+>    19== D50583   1 Hemigrapsus sanguineus opsin BcRh1 <compound eye>[J.Exp.Biol.1
+--------------------------------MANVTGPQMAF-----------------
+YGSGAATFGYP------EGMTVADFVPDRVKH----------------MVLDHWYNYPPV
+NPMWHYLLGVVYLFLGVISIAGNGLVIYLYMKSQALKTPANMLIVNLALSDLIMLTTN-F
+PPFCYNCFSGGRWM--FSGTYCEIYAALGAITGVCSIWTLCMISFDRYNIICNGFNG-PK
+LTQGKATFMCGLAWVISVGW-SLPPFFG-W-----GSYTLEGILDSCSYDYFT--RDMNT
+ITYNICIFIFDFFLPASVIVFSYVFIVKAIFAHEAAMRAQAKK-----------------
+----------------------------------------------------------MN
+-----------VTNL---------------------------------------------
+--------------RS-NEAETQR------AEIRIAKTALVNVSLWFICWTPYAAITIQG
+LLGNAE---GITPLLTTLPALLAKSCSCYNPFVYAISHPKFRLAITQHLPWFCV------
+HE-KDPND--VEENQSSNTQTQEK-S----------------------------------
+------------------------------------------------------------
+-
+>    20== K02320   1 D.melanogaster opsin <>[Cell40,851-858'85]
+----------MESF----------------AVAAAQLGPHFAP-----------------
+LS----------------NGSVVDKVTPDMAH----------------LISPYWNQFPAM
+DPIWAKILTAYMIMIGMISWCGNGVVIYIFATTKSLRTPANLLVINLAISDFGIMITN-T
+PMMGINLYF-ETWV--LGPMMCDIYAGLGSAFGCSSIWSMCMISLDRYQVIVKGMAG-RP
+MTIPLALGKM---------------------------YVPEGNLTSCGIDYLE--RDWNP
+RSYLIFYSIFVYYIPLFLICYSYWFIIAAVSAHEKAMREQAKK-----------------
+----------------------------------------------------------MN
+-----------VKSL---------------------------------------------
+--------------RS-SEDAEKS------AEGKLAKVALVTITLWFMAWTPYLVINCMG
+LFKF-E---GLTPLNTIWGACFAKSAACYNPIVYGISHPKYRLALKEKCPCCVF------
+GK-VDDGK--SSDAQSQA-TASEA-ESKA-------------------------------
+------------------------------------------------------------
+-
+>    21== K02315   1 D.melanogaster ninaE <>[Cell40,839-850'85]
+----------MESF----------------AVAAAQLGPHFAP-----------------
+LS----------------NGSVVDKVTPDMAH----------------LISPYWNQFPAM
+DPIWAKILTAYMIMIGMISWCGNGVVIYIFATTKSLRTPANLLVINLAISDFGIMITN-T
+PMMGINLYF-ETWV--LGPMMCDIYAGLGSAFGCSSIWSMCMISLDRYQVIVKGMAG-RP
+MTIPLALGKIAYIWFMSSIW-CLAPAFG-W-----SRYVPEGNLTSCGIDYLE--RDWNP
+RSYLIFYSIFVYYIPLFLICYSYWFIIAAVSAHEKAMREQAKK-----------------
+----------------------------------------------------------MN
+-----------VKSL---------------------------------------------
+--------------RS-SEDAEKS------AEGKLAKVALVTITLWFMAWTPYLVINCMG
+LFKF-E---GLTPLNTIWGACFAKSAACYNPIVYGISHPKYRLALKEKCPCCVF------
+GK-VDDGK--SSDAQSQA-TASEA-ESKA-------------------------------
+------------------------------------------------------------
+-
+>    22== X65877   1 Drosophila pseudoobscura Dpse\ninaE <>[Genetics132(1),193-204'
+----------MDSF----------------AAVATQLGPQFAA-----------------
+PS----------------NGSVVDKVTPDMAH----------------LISPYWDQFPAM
+DPIWAKILTAYMIIIGMISWCGNGVVIYIFATTKSLRTPANLLVINLAISDFGIMITN-T
+PMMGINLYF-ETWV--LGPMMCDIYAGLGSAFGCSSIWSMCMISLDRYQVIVKGMAG-RP
+MTIPLALGKIAYIWFMSTIWCCLAPVFG-W-----SRYVPEGNLTSCGIDYLE--RDWNP
+RSYLIFYSIFVYYIPLFLICYSYWFIIAAVSAHEKAMREQAKK-----------------
+----------------------------------------------------------MN
+-----------VKSL---------------------------------------------
+--------------RS-SEDADKS------AEGKLAKVALVTISLWFMAWTPYLVINCMG
+LFKF-E---GLTPLNTIWGACFAKSAACYNPIVYGISHPKYRLALKEKCPCCVF------
+GK-VDDGK--SSEAQSQA-TTSEA-ESKA-------------------------------
+------------------------------------------------------------
+-
+>    23== M12896   1 D.melanogaster Rh2 <>[Cell44,705-710'86]
+MER-----SHLPET----------------PFDLAHSGPRFQA-----------------
+QSSG--------------NGSVLDNVLPDMAH----------------LVNPYWSRFAPM
+DPMMSKILGLFTLAIMIISCCGNGVVVYIFGGTKSLRTPANLLVLNLAFSDFCMMASQ-S
+PVMIINFYY-ETWV--LGPLWCDIYAGCGSLFGCVSIWSMCMIAFDRYNVIVKGING-TP
+MTIKTSIMKILFIWMMAVFW-TVMPLIG-W-----SAYVPEGNLTACSIDYMT--RMWNP
+RSYLITYSLFVYYTPLFLICYSYWFIIAAVAAHEKAMREQAKK-----------------
+----------------------------------------------------------MN
+-----------VKSL---------------------------------------------
+--------------RS-SEDCDKS------AEGKLAKVALTTISLWFMAWTPYLVICYFG
+LFKI-D---GLTPLTTIWGATFAKTSAVYNPIVYGISHPKYRIVLKEKCPMCVF------
+GN-TDEPK--PDAPASDTETTSEA-DSKA-------------------------------
+------------------------------------------------------------
+-
+>    24== X65878   1 Drosophila pseudoobscura Dpse\Rh2 <>[Genetics132(1),193-204'92
+MER-----SLLPEP----------------PLAMALLGPRFEA-----------------
+QTGG--------------NRSVLDNVLPDMAP----------------LVNPHWSRFAPM
+DPTMSKILGLFTLVILIISCCGNGVVVYIFGGTKSLRTPANLLVLNLAFSDFCMMASQ-S
+PVMIINFYY-ETWV--LGPLWCDIYAACGSLFGCVSIWSMCMIAFDRYNVIVKGING-TP
+MTIKTSIMKIAFIWMMAVFW-TIMPLIG-W-----SSYVPEGNLTACSIDYMT--RQWNP
+RSYLITYSLFVYYTPLFMICYSYWFIIATVAAHEKAMRDQAKK-----------------
+----------------------------------------------------------MN
+-----------VKSL---------------------------------------------
+--------------RS-SEDCDKS------AENKLAKVALTTISLWFMAWTPYLIICYFG
+LFKI-D---GLTPLTTIWGATFAKTSAVYNPIVYGISHPNDRLVLKEKCPMCVC------
+GT-TDEPK--PDAPPSDTETTSEA-ESKD-------------------------------
+------------------------------------------------------------
+-
+>    25== U26026   1 Apis mellifera long-wavelength rhodopsin <>[]
+--------------------------------MIAVSGPSYEA-----------------
+FSYGGQA--------RFNNQTVVDKVPPDMLH----------------LIDANWYQYPPL
+NPMWHGILGFVIGMLGFVSAMGNGMVVYIFLSTKSLRTPSNLFVINLAISNFLMMFCM-S
+PPMVINCYY-ETWV--LGPLFCQIYAMLGSLFGCGSIWTMTMIAFDRYNVIVKGLSG-KP
+LSINGALIRIIAIWLFSLGW-TIAPMFG-W-----NRYVPEGNMTACGTDYFN--RGLLS
+ASYLVCYGIWVYFVPLFLIIYSYWFIIQAVAAHEKNMREQAKK-----------------
+----------------------------------------------------------MN
+-----------VASL---------------------------------------------
+--------------RS-SENQNTS------AECKLAKVALMTISLWFMAWTPYLVINFSG
+IFNL-V---KISPLFTIWGSLFAKANAVYNPIVYGISHPKYRAALFAKFPSLAC------
+-A-AEPSS--DAVSTTSGTTTVTD-NEKSNA-----------------------------
+------------------------------------------------------------
+-
+>    26== L03781   1 Limulus polyphemus opsin <>[PNAS90,6150-6154'93]
+MAN---------------------------QLSYSSLGWPYQP-----------------
+------------------NASVVDTMPKEMLY----------------MIHEHWYAFPPM
+NPLWYSILGVAMIILGIICVLGNGMVIYLMMTTKSLRTPTNLLVVNLAFSDFCMMAFM-M
+PTMTSNCFA-ETWI--LGPFMCEVYGMAGSLFGCASIWSMVMITLDRYNVIVRGMAA-AP
+LTHKKATLLLLFVWIWSGGW-TILPFFG-W-----SRYVPEGNLTSCTVDYLT--KDWSS
+ASYVVIYGLAVYFLPLITMIYCYFFIVHAVAEHEKQLREQAKK-----------------
+----------------------------------------------------------MN
+-----------VASL---------------------------------------------
+--------------RANADQQKQS------AECRLAKVAMMTVGLWFMAWTPYLIISWAG
+VFSSGT---RLTPLATIWGSVFAKANSCYNPIVYGISHPRYKAALYQRFPSLAC------
+GS-GESGS--DVKSEASATTTMEE-KPKIPEA----------------------------
+------------------------------------------------------------
+-
+>    27== X07797   1 Octopus dofleini rhodopsin <>[FEBS232(1),69-72'88]
+---------------------------------------MVES-----------------
+TTLVNQTWWY--------NPTVD--------------------------IHPHWAKFDPI
+PDAVYYSVGIFIGVVGIIGILGNGVVIYLFSKTKSLQTPANMFIINLAMSDLSFSAINGF
+PLKTISAFM-KKWI--FGKVACQLYGLLGGIFGFMSINTMAMISIDRYNVIGRPMAASKK
+MSHRRAFLMIIFVWMWSIVW-SVGPVFN-W-----GAYVPEGILTSCSFDYLS--TDPST
+RSFILCMYFCGFMLPIIIIAFCYFNIVMSVSNHEKEMAAMAKR-----------------
+----------------------------------------------------------LN
+-----------AKEL---------------------------------------------
+--------------R--KAQAGAS------AEMKLAKISMVIITQFMLSWSPYAIIALLA
+QFGPAE---WVTPYAAELPVLFAKASAIHNPIVYSVSHPKFREAIQTTFPWLLTCCQFDE
+KE-CEDAN--DAEEEVVASER--G-GESRDAAQMKEMMAMMQKMQAQQAAYQPPPPPQGY
+--PPQGYPPQGAYPPPQGYPPQGYPPQGYPPQGYPPQGAPPQVEAPQGAPPQGVDNQAYQ
+A
+>    28== X70498   1 Todarodes pacificus rhodopsin <retina>[FEBS317(1-2),5-11'93]
+----------------------------------------MGR-----------------
+DLRDNETWWY--------NPSIV--------------------------VHPHWREFDQV
+PDAVYYSLGIFIGICGIIGCGGNGIVIYLFTKTKSLQTPANMFIINLAFSDFTFSLVNGF
+PLMTISCFL-KKWI--FGFAACKVYGFIGGIFGFMSIMTMAMISIDRYNVIGRPMAASKK
+MSHRRAFIMIIFVWLWSVLW-AIGPIFG-W-----GAYTLEGVLCNCSFDYIS--RDSTT
+RSNILCMFILGFFGPILIIFFCYFNIVMSVSNHEKEMAAMAKR-----------------
+----------------------------------------------------------LN
+-----------AKEL---------------------------------------------
+--------------R--KAQAGAN------AEMRLAKISIVIVSQFLLSWSPYAVVALLA
+QFGPLE---WVTPYAAQLPVMFAKASAIHNPMIYSVSHPKFREAISQTFPWVLTCCQFDD
+KE-TEDDK--DAETEIPAGESSDA-APSADAAQMKEMMAMMQKMQQQQAAY----PPQGY
+APPPQGYPPQGY--PPQGYPPQGYPPQGYPP---PPQGAPPQ-GAPPAAPPQGVDNQAYQ
+A
+>    29== L21195   1 human serotonin 5-HT7 receptor protein <placenta and fetal bra
+M---------MDVNSSGRPDLYGHLRSFL-LPEVGRGLPDLSPDG---------------
+GADPVAGSWAPHLLS---EVTASPAPTWDAPPDNASGCGEQINYGRVE------------
+----KVVIGSILTLITLLTIAGNCLVVISVCFVKKLRQPSNYLIVSLALADLSVAVAV-M
+PFVSVTDLIGGKWI--FGHFFCNVFIAMDVMCCTASIMTLCVISIDRYLGITRPLTYPVR
+QNGKCMAKMILSVWLLSASI-TLPPLFG-W-----AQNVNDDKVCLISQDF---------
+-GYTIYSTAVAFYIPMSVMLFMYYQIY-------KAARKSAAKHKF--------------
+-------------------PGF-----------------PRVE---------PDSVIALN
+G----------IVKLQK--------------------------EVEECAN----------
+--------LSRLLKHERKNISIFK------REQKAATTLGIIVGAFTVCWLPFFLLSTAR
+PFICGTSCSCIPLWVERTFLWLGYANSLINPFIYAFFNRDLRTTYRSLLQCQYR---NIN
+RK-LSAAGMHEALKLAERPERPEFVLQNADYCRKK-------------------------
+----------------------------------------------------GHDS----
+-
+>    30== L15228   1 rat 5HT-7 serotonin receptor <>[JBC268,18200-18204'93]
+M-----------------------------------------------------------
+----------PHLLSGFLEVTASPAPTWDAPPDNVSGCGEQINYGRVE------------
+----KVVIGSILTLITLLTIAGNCLVVISVSFVKKLRQPSNYLIVSLALADLSVAVAV-M
+PFVSVTDLIGGKWI--FGHFFCNVFIAMDVMCCTASIMTLCVISIDRYLGITRPLTYPVR
+QNGKCMAKMILSVWLLSASI-TLPPLFG-W-----AQNVNDDKVCLISQDF---------
+-GYTIYSTAVAFYIPMSVMLFMYYQIY-------KAARKSAAKHKF--------------
+-------------------PGF-----------------PRVQ---------PESVISLN
+G----------VVKLQK--------------------------EVEECAN----------
+--------LSRLLKHERKNISIFK------REQKAATTLGIIVGAFTVCWLPFFLLSTAR
+PFICGTSCSCIPLWVERTCLWLGYANSLINPFIYAFFNRDLRPTSRSLLQCQYR---NIN
+RK-LSAAGMHEALKLAERPERSEFVLQNSDHCGKK-------------------------
+----------------------------------------------------GHDT----
+-
+>    31=p A47425 serotonin receptor 5HT-7 - rat
+M-----------------------------------------------------------
+----------PHLLSGFLEVTASPAPTWDAPPDNVSGCGEQINYGRVE------------
+----KVVIGSILTLITLLTIAGNCLVVISVSFVKKLRQPSNYLIVSLALADLSVAVAV-M
+PFVSVTDLIGGKWI--FGHFFCNVFIAMDVMCCTASIMTLCVISIDRYLGITRPLTYPVR
+QNGKCMAKMILSVWLLSASI-TLPPLFG-W-----AQNVNDDKVCLISQDF---------
+-GYTIYSTAVAFYIPMSVMLFMYYQIY-------KAARKSAAKHKF--------------
+-------------------PGF-----------------PRVQ---------PESVISLN
+G----------VVKLQK--------------------------EVEECAN----------
+--------LSRLLKHERKNISIFK------REQKAATTLGIIVGAFTVCWLPFFLLSTAR
+PFICGTSCSCIPLWVERTCLWLGYANSLINPFIYAFFNRDLRTTYRSLLQCQYR---NIN
+RK-LSAAGMHEALKLAERPERSEFVLQNSDHCGKK-------------------------
+----------------------------------------------------GHDT----
+-
+>    32== M83181   1 human serotonin receptor <>[JBC267(11),7553-7562'92]
+MDVLSPGQ--------------G-------------------------------------
+------------------NNTTSPPAPFETGGNTT-------------GISDVTVSY---
+----QVITSLLLGTLIFCAVLGNACVVAAIALERSLQNVANYLIGSLAVTDLMVSVLV-L
+PMAALYQVL-NKWT--LGQVTCDLFIALDVLCCTSSILHLCAIALDRYWAITDPIDYVNK
+RTPRRAAALISLTWLIGFLI-SIPPMLG-WRTPE-DRSDPDA--CTISKDH---------
+-GYTIYSTFGAFYIPLLLMLVLYGRIF-------RAARFRIRK-----------------
+----------------------TVKKVEKTGADTRHGASPAPQ---------PKKS--VN
+GESGSRNWRLGVESK-----AGGALCANGAVRQGDDGAALEVIEVHRVGNSKEHLPLPSE
+AG--PTPCAPASFERKNERNAEAKRKMALARERKTVKTLGIIMGTFILCWLPFFIVALVL
+PFCESSC--HMPTLLGAIINWLGYSNSLLNPVIYAYFNKDFQNAFKKIIKCKFC------
+RQ----------------------------------------------------------
+------------------------------------------------------------
+-
+>    33=p A35181 serotonin receptor class 1A - rat
+MDVFSFGQ--------------G-------------------------------------
+------------------NNTTASQEPFGTGGNVT-------------SISDVTFSY---
+----QVITSLLLGTLIFCAVLGNACVVAAIALERSLQNVANYLIGSLAVTDLMVSVLV-L
+PMAALYQVL-NKWT--LGQVTCDLFIALDVLCCTSSILHLCAIALDRYWAITDPIDYVNK
+RTPRRAAALISLTWLIGFLI-SIPPMLG-WRTPE-DRSDPDA--CTISKDH---------
+-GYTIYSTFGAFYIPLLLMLVLYGRIF-------RAARFRIRK-----------------
+----------------------TVRKVEKKGAGTSLGTSSAPP---------PKKS--LN
+GQPGSGDWRRCAENR-----AVGTPCTNGAVRQGDDEATLEVIEVHRVGNSKEHLPLPSE
+SG--SNSYAPACLERKNERNAEAKRKMALARERKTVKTLGIIMGTFILCWLPFFIVALVL
+PFCESSC--HMPALLGAIINWLGYSNSLLNPVIYAYFNKDFQNAFKKIIKCKFC------
+RR----------------------------------------------------------
+------------------------------------------------------------
+-
+>    34== L06803   1 Lymnaea stagnalis serotonin receptor <>[PNAS90,11-15'93]
+MANFTFGDLALDVAR-----MGGLASTPSGLRSTGLTTPGLSPTGL-------------V
+TSDFNDSYGLTG---QFINGSHSSRSRDNASANDTSATN---------MTDDRYWSLTVY
+SHEHLVLTSVILGLFVLCCIIGNCFVIAAVMLERSLHNVANYLILSLAVADLMVAVLV-M
+PLSVVSEIS-KVWF--LHSEVCDMWISVDVLCCTASILHLVAIAMDRYWAVTS-IDYIRR
+RSARRILLMIMVVWIVALFI-SIPPLFG-WRDP--NNDPDKTGTCIISQDK---------
+-GYTIFSTVGAFYLPMLVMMIIYIRIW-------LVARSRIRKDKFQMTKARLKTEETTL
+VASPKTEYSVVSDCNGCNSPDSTTEKKKRRAPFKSYGCSPRPERKKNRAKKLPENANGVN
+SNSSS------SERL----KQIQIETAEAFANGCAEEASIAMLERQ-CNNGKKISSNDTP
+YS------------RT-REKLELK------RERKAARTLAIITGAFLICWLPFFIIALIG
+PFVDPE---GIPPFARSFVLWLGYFNSLLNPIIYTIFSPEFRSAFQKILFGKYR----RG
+HR----------------------------------------------------------
+------------------------------------------------------------
+-
+>    35=p A47174 serotonin receptor, 5HTlym receptor - great pond snail
+MANFTFGDLALDVAR-----MGGLASTPSGLRSTGLTTPGLSPTGL-------------V
+TSDFNDSYGLTG---QFINGSHSSRSRDNASANDTSATN---------MTDDRYWSLTVY
+SHEHLVLTSVILGLFVLCCIIGNCFVIAAVMLERSLHNVANYLILSLAVADLMVAVLV-M
+PLSVVSEIS-KVWF--LHSEVCDMWISVDVLCCTASILHLVAIAMDRYWAVTS-IDYIRR
+RSARRILLMIMVVWIVALFI-SIPPLFG-WRDP--NNDPDKTGTCIISQDK---------
+-GYTIFSTVGAFYLPMLVMMIIYIRIW-------LVARSRIRKDKFQMTKARLKTEETTL
+VASPKTEYSVVSDCNGCNSPDSTTEKKKRRAPFKSYGCSPRPERKKNRAKKLPENANGVN
+SNSSS------SERL----KQIQIETAEAFANGCAEEASIAMLERQ-CNNGKKISSNDTP
+YS------------RT-REKLELK------RERKAARTLAIITGAFLICWLPFFIIALIG
+PFVDPE---GIPPFARSFVLWLGYFNSLLNPIIYTIFSPEFRSAFQKILFGKYR----RG
+HR----------------------------------------------------------
+------------------------------------------------------------
+-
+>    36== X95604   1 Bombyx mori serotonin receptor <antennae>[InsectBiochem.Mol.Bi
+MEGAE-GQEELDWEA-----LY--LRLP--LQNCSWNSTGWEPNWN-------------V
+TVVPNTTWWQ-------------ASAPFDTPAALVR------------------------
+----AAAKAVVLGLLILATVVGNVFVIAAILLERHLRSAANNLILSLAVADLLVACLV-M
+PLGAVYEVV-QRWT--LGPELCDMWTSGDVLCCTASILHLVAIALDRYWAVTN-IDYIHA
+STAKRVGMMIACVWTVSFFV-CIAQLLG-WKDPDWNQRVSEDLRCVVSQDV---------
+-GYQIFATASSFYVPVLIILILYWRIY-------QTARKRIRR-----------------
+----------------------------RRGATARGGVGPPPV---------PAGGALVA
+GGGSGGIAAAVVAVIGRPLPTISETTTTGFTNVSSNNTSP---EKQSCANGLEADPPTTG
+YGAVAAAYYPSLVRRKPKEAADSK------RERKAAKTLAIITGAFVACWLPFFVLAILV
+PTCDCE----VSPVLTSLSLWLGYFNSTLNPVIYTVFSPEFRHAFQRLLCGRRV----RR
+RR----------------------------------------------------------
+---------------------------------------APQ------------------
+-



View it on GitLab: https://salsa.debian.org/med-team/mafft/-/commit/cf82eb12fe88945f44cfa22b7713e831299c54a7

-- 
View it on GitLab: https://salsa.debian.org/med-team/mafft/-/commit/cf82eb12fe88945f44cfa22b7713e831299c54a7
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20250905/a71c6bc6/attachment-0001.htm>


More information about the debian-med-commit mailing list