1
*----------------------------------------------------------------------*
2
* $Id: schmm.f 92 2003-03-24 14:47:54Z vflegel $
3
*----------------------------------------------------------------------*
4
* Version: File under developpment for release 2.3
5
*----------------------------------------------------------------------*
7
* (NOUT,IDMP,RIHM,RMHM,LHMM,NABC,FLOW,FSCA,OPTF,OPFF,RD,RI)
19
* rescale emission probabilities
25
Call GetNP(FNOR,NABC,RNOR,FLOW)
28
If(RIHM(I2,I1).GT.FLOW) RIHM(I2,I1)=RIHM(I2,I1)+RNOR
30
If(RIHM(IM,I1).GT.FLOW) RIHM(IM,I1)=RIHM(IM,I1)-RNOR
31
If(RIHM(II,I1).GT.FLOW) RIHM(II,I1)=RIHM(II,I1)-RNOR
32
If(RIHM(ID,I1).GT.FLOW) RIHM(ID,I1)=RIHM(ID,I1)-RNOR
35
If(RIHM(II,I1).GE.0) then
36
Write(NOUT,'(''# Insert position '',I4,
37
* '': Log Prob(I->I)='',F8.4,'' reset to -0.01'')')
52
Call GetNP(FNOR,NABC,RNOR,FLOW)
55
If(RMHM(I2,I1).GT.FLOW) RMHM(I2,I1)=RMHM(I2,I1)+RNOR
57
If(RIHM(MM,I1).GT.FLOW) RIHM(MM,I1)=RIHM(MM,I1)-RNOR
58
If(RIHM(MI,I1).GT.FLOW) RIHM(MI,I1)=RIHM(MI,I1)-RNOR
59
If(RIHM(MD,I1).GT.FLOW) RIHM(MD,I1)=RIHM(MD,I1)-RNOR
62
If(RMHM( D,I1).GT.FLOW) then
65
RIHM(DM,I1)=RIHM(DM,I1)-RNOR
66
RIHM(DI,I1)=RIHM(DI,I1)-RNOR
67
RIHM(DD,I1)=RIHM(DD,I1)-RNOR
80
Call GetNP(FNOR, 2,RNOR,FLOW)
81
If(RIHM(II, I1).GT.FLOW)
82
* RNOR=RNOR+LOG(1.0-EXP(RIHM(II,I1)))
83
If(RIHM(IM,I1).GT.FLOW) RIHM(IM,I1)=RIHM(IM,I1)+RNOR
84
If(RIHM(ID,I1).GT.FLOW) RIHM(ID,I1)=RIHM(ID,I1)+RNOR
85
If(RIHM(MI,I1).GT.FLOW) RIHM(MI,I1)=RIHM(MI,I1)-RNOR
86
If(RIHM(DI,I1).GT.FLOW) RIHM(DI,I1)=RIHM(DI,I1)-RNOR
95
Call GetNP(FNOR, 3,RNOR,FLOW)
96
If(RIHM(MM,I1).GT.FLOW) RIHM(MM,I1)=RIHM(MM,I1)+RNOR
97
If(RIHM(MI,I1).GT.FLOW) RIHM(MI,I1)=RIHM(MI,I1)+RNOR
98
If(RIHM(MD,I1).GT.FLOW) RIHM(MD,I1)=RIHM(MD,I1)+RNOR
100
If(RIHM(MM,J1).GT.FLOW) RIHM(MM,J1)=RIHM(MM,J1)-RNOR
101
If(RIHM(IM,J1).GT.FLOW) RIHM(IM,J1)=RIHM(IM,J1)-RNOR
102
If(RIHM(DM,J1).GT.FLOW) RIHM(DM,J1)=RIHM(DM,J1)-RNOR
109
Call GetNP(FNOR, 3,RNOR,FLOW)
110
If(RIHM(DM,I1).GT.FLOW) RIHM(DM,I1)=RIHM(DM,I1)+RNOR
111
If(RIHM(DI,I1).GT.FLOW) RIHM(DI,I1)=RIHM(DI,I1)+RNOR
112
If(RIHM(DD,I1).GT.FLOW) RIHM(DD,I1)=RIHM(DD,I1)+RNOR
114
If(RIHM(MD,J1).GT.FLOW) RIHM(MD,J1)=RIHM(MD,J1)-RNOR
115
If(RIHM(ID,J1).GT.FLOW) RIHM(ID,J1)=RIHM(ID,J1)-RNOR
116
If(RIHM(DD,J1).GT.FLOW) RIHM(DD,J1)=RIHM(DD,J1)-RNOR
123
Call GetNP(FNOR, 3,RNOR,FLOW)
124
If(RIHM(MM, 0).GT.FLOW) RIHM(MM, 0)=RIHM(MM, 0)+RNOR
125
If(RIHM(MI, 0).GT.FLOW) RIHM(MI, 0)=RIHM(MI, 0)+RNOR
126
If(RIHM(MD, 0).GT.FLOW) RIHM(MD, 0)=RIHM(MD, 0)+RNOR
132
If(OPTF.OR.OPFF) then
134
If(RD.GT.0.99999) RD=0.99999
135
If(RI.GT.0.99999) RI=0.99999
153
Call GetNP(FNOR, 2,RNOR,FLOW)
154
If(RIHM(MD, 0).GT.FLOW)
155
* RNOR=RNOR+LOG(1.0-EXP(RIHM(MD, 0)))
156
RIHM(MI, 0)=RIHM(MI, 0)+RNOR
157
RIHM(MM, 0)=RIHM(MM, 0)+RNOR
162
Call GetNP(FNOR, 2,RNOR,FLOW)
163
If(RIHM(MI, 0).GT.FLOW)
164
* RNOR=RNOR+LOG(1.0-EXP(RIHM(MI, 0)))
165
RIHM(MD, 0)=RIHM(MD, 0)+RNOR
166
RIHM(MM, 0)=RIHM(MM, 0)+RNOR
173
Call GetNP(FNOR, 2,RNOR,FLOW)
174
If(RIHM(ID, 0).GT.FLOW)
175
* RNOR=RNOR+LOG(1.0-EXP(RIHM(ID, 0)))
176
RIHM(II, 0)=RIHM(II, 0)+RNOR
177
RIHM(IM, 0)=RIHM(IM, 0)+RNOR
182
Call GetNP(FNOR, 2,RNOR,FLOW)
183
If(RIHM(II, 0).GT.FLOW)
184
* RNOR=RNOR+LOG(1.0-EXP(RIHM(II, 0)))
185
RIHM(ID, 0)=RIHM(ID, 0)+RNOR
186
RIHM(IM, 0)=RIHM(IM, 0)+RNOR
191
FNOR( 1)=RIHM(II,LHMM)
192
FNOR( 2)=RIHM(IM,LHMM)
193
Call GetNP(FNOR, 2,RNOR,FLOW)
194
If(RIHM(ID,LHMM).GT.FLOW)
195
* RNOR=RNOR+LOG(1.0-EXP(RIHM(ID,LHMM)))
196
RIHM(II,LHMM)=RIHM(II,LHMM)+RNOR
197
RIHM(IM,LHMM)=RIHM(IM,LHMM)+RNOR
200
FNOR( 1)=RIHM(ID,LHMM)
201
FNOR( 2)=RIHM(IM,LHMM)
202
Call GetNP(FNOR, 2,RNOR,FLOW)
203
If(RIHM(II,LHMM).GT.FLOW)
204
* RNOR=RNOR+LOG(1.0-EXP(RIHM(II,LHMM)))
205
RIHM(ID,LHMM)=RIHM(ID,LHMM)+RNOR
206
RIHM(IM,LHMM)=RIHM(IM,LHMM)+RNOR
212
RIHM(DM,LHMM)=1-EXP(RI)
222
RIHM(IM,LHMM)=1-EXP(RI)
229
* - internal delete states
231
If(OPFF.AND.RD.GT.FLOW) then
232
RD=LOG(EXP(RD)/(1-EXP(RD)))
238
Call GetNP(FNOR, 3,RNOR,FLOW)
239
RIHM(DD,I1)=RIHM(DD,I1)+RNOR
240
RIHM(DI,I1)=RIHM(DI,I1)+RNOR
241
RIHM(DM,I1)=RIHM(DM,I1)+RNOR
247
*----------------------------------------------------------------------*
248
Subroutine GetNP(FNOR,INOR,RNOR,FLOW)
256
RMAX=MAX(RMAX,FNOR(I1))
259
If(RMAX.LE.FLOW) go to 100
262
RCUT=MAX(FLOW,RMAX-20.0)
264
If(FNOR(I1).GT.RCUT) RSUM=RSUM+EXP(FNOR(I1)-RMAX)
270
*----------------------------------------------------------------------*