5 static char *whereismccaskillmea;
7 void outmccaskill( FILE *fp, RNApair **pairprob, int length )
11 for( i=0; i<length; i++ ) for( pt=pairprob[i]; pt->bestpos!=-1; pt++ )
14 fprintf( fp, "%d %d %50.40f\n", i, pt->bestpos, pt->bestscore );
19 static void readrawmccaskill( FILE *fp, RNApair **pairprob, int length )
27 pairnum = (int *)calloc( length, sizeof( int ) );
28 for( i=0; i<length; i++ ) pairnum[i] = 0;
32 fgets( gett, 999, fp );
33 if( feof( fp ) ) break;
34 if( gett[0] == '>' ) continue;
35 sscanf( gett, "%d %d %f", &left, &right, &prob );
36 if( prob < 0.01 ) continue; // mxscarna to mafft ryoho ni eikyou
37 //fprintf( stderr, "gett = %s\n", gett );
39 if( left != right && prob > 0.0 )
41 pairprob[left] = (RNApair *)realloc( pairprob[left], (pairnum[left]+2) * sizeof( RNApair ) );
42 pairprob[left][pairnum[left]].bestscore = prob;
43 pairprob[left][pairnum[left]].bestpos = right;
45 pairprob[left][pairnum[left]].bestscore = -1.0;
46 pairprob[left][pairnum[left]].bestpos = -1;
47 // fprintf( stderr, "%d-%d, %f\n", left, right, prob );
49 pairprob[right] = (RNApair *)realloc( pairprob[right], (pairnum[right]+2) * sizeof( RNApair ) );
50 pairprob[right][pairnum[right]].bestscore = prob;
51 pairprob[right][pairnum[right]].bestpos = left;
53 pairprob[right][pairnum[right]].bestscore = -1.0;
54 pairprob[right][pairnum[right]].bestpos = -1;
55 // fprintf( stderr, "%d-%d, %f\n", right, left, prob );
62 void arguments( int argc, char *argv[] )
67 kimuraR = NOTSPECIFIED;
69 whereismccaskillmea = NULL;
71 while( --argc > 0 && (*++argv)[0] == '-' )
73 while ( (c = *++argv[0]) )
79 fprintf( stderr, "inputfile = %s\n", inputfile );
83 whereismccaskillmea = *++argv;
84 fprintf( stderr, "whereismccaskillmea = %s\n", whereismccaskillmea );
88 fprintf( stderr, "illegal option %c\n", c );
98 fprintf( stderr, "options: Check source file !\n" );
104 int main( int argc, char *argv[] )
106 static char com[10000];
110 static char **name, **seq, **nogap;
116 RNApair **alnpairprob;
123 arguments( argc, argv );
127 infp = fopen( inputfile, "r" );
130 fprintf( stderr, "Cannot open %s\n", inputfile );
137 if( !whereismccaskillmea )
138 whereismccaskillmea = "";
145 fprintf( stderr, "nuc only\n" );
149 seq = AllocateCharMtx( njob, nlenmax*2+1 );
150 nogap = AllocateCharMtx( njob, nlenmax*2+1 );
151 gapmap = AllocateIntMtx( njob, nlenmax*2+1 );
152 order = AllocateIntVec( njob );
153 name = AllocateCharMtx( njob, B+1 );
154 nlen = AllocateIntVec( njob );
155 pairprob = (RNApair ***)calloc( njob, sizeof( RNApair ** ) );
156 alnpairprob = (RNApair **)calloc( nlenmax, sizeof( RNApair * ) );
157 alnpairnum = AllocateIntVec( nlenmax );
159 for( i=0; i<nlenmax; i++ ) alnpairnum[i] = 0;
161 readData_pointer( infp, name, nlen, seq );
164 for( i=0; i<njob; i++ )
166 pairprob[i] = (RNApair **)calloc( nlenmax, sizeof( RNApair * ) );
167 for( j=0; j<nlenmax; j++ )
169 pairprob[i][j] = (RNApair *)calloc( 1, sizeof( RNApair ) );
170 pairprob[i][j][0].bestpos = -1;
171 pairprob[i][j][0].bestscore = -1.0;
173 strcpy( nogap[i], seq[i] );
176 for( j=0; j<nlenmax; j++ )
178 alnpairprob[j] = (RNApair *)calloc( 1, sizeof( RNApair ) );
179 alnpairprob[j][0].bestpos = -1;
180 alnpairprob[j][0].bestscore = -1.0;
184 constants( njob, seq );
186 fprintf( stderr, "Running mxscarna with the mccaskill_mea mode.\n" );
187 for( i=0; i<njob; i++ )
189 fprintf( stderr, "%d / %d\n", i+1, njob );
190 commongappick_record( 1, nogap+i, gapmap[i] );
191 infp = fopen( "_mccaskillinorg", "w" );
192 // fprintf( infp, ">in\n%s\n", nogap[i] );
193 fprintf( infp, ">in\n" );
194 write1seq( infp, nogap[i] );
197 system( "tr -d '\\r' < _mccaskillinorg > _mccaskillin" ); // for cygwin, wakaran
198 sprintf( com, "env PATH=%s mxscarnamod -m -writebpp _mccaskillin > _mccaskillout 2>_dum", whereismccaskillmea );
203 fprintf( stderr, "ERROR IN mccaskill_mea\n" );
207 infp = fopen( "_mccaskillout", "r" );
208 readrawmccaskill( infp, pairprob[i], nlenmax );
210 fprintf( stdout, ">%d\n", i );
211 outmccaskill( stdout, pairprob[i], nlenmax );
214 for( i=0; i<njob; i++ )
216 for( j=0; j<nlen[i]; j++ ) for( pairprobpt=pairprob[i][j]; pairprobpt->bestpos!=-1; pairprobpt++ )
219 right = gapmap[i][pairprobpt->bestpos];
220 prob = pairprobpt->bestscore;
222 for( pt=alnpairprob[left]; pt->bestpos!=-1; pt++ )
223 if( pt->bestpos == right ) break;
225 if( pt->bestpos == -1 )
227 alnpairprob[left] = (RNApair *)realloc( alnpairprob[left], (alnpairnum[left]+2) * sizeof( RNApair ) );
228 adpos = alnpairnum[left];
230 alnpairprob[left][adpos].bestscore = 0.0;
231 alnpairprob[left][adpos].bestpos = right;
232 alnpairprob[left][adpos+1].bestscore = -1.0;
233 alnpairprob[left][adpos+1].bestpos = -1;
234 pt = alnpairprob[left]+adpos;
237 adpos = pt-alnpairprob[left];
239 pt->bestscore += prob;
240 if( pt->bestpos != right )
242 fprintf( stderr, "okashii!\n" );
245 // fprintf( stderr, "adding %d-%d, %f\n", left, right, prob );
249 for( i=0; i<njob; i++ )
251 for( j=0; j<nlenmax; j++ ) free( pairprob[i][j] );
255 for( j=0; j<nlenmax; j++ ) free( alnpairprob[j] );
261 fprintf( stdout, "result=\n" );
263 for( i=0; i<nlenmax; i++ ) for( pairprobpt=alnpairprob[i]; pairprobpt->bestpos!=-1; pairprobpt++ )
265 pairprobpt->bestscore /= (float)njob;
267 right = pairprobpt->bestpos;
268 prob = pairprobpt->bestscore;
269 fprintf( stdout, "%d-%d, %f\n", left, right, prob );