30 using namespace shogun;
44 false,
false,
false,
false,
false,
false,
false,
false} ;
49 :
CSGObject(), m_transition_matrix_a_id(1,1), m_transition_matrix_a(1,1),
50 m_transition_matrix_a_deriv(1,1), m_initial_state_distribution_p(1),
51 m_initial_state_distribution_p_deriv(1), m_end_state_distribution_q(1),
52 m_end_state_distribution_q_deriv(1),
57 m_word_degree(word_degree_default, m_num_degrees, true, true),
58 m_cum_num_words(cum_num_words_default, m_num_degrees+1, true, true),
59 m_cum_num_words_array(m_cum_num_words.get_array()),
60 m_num_words(num_words_default, m_num_degrees, true, true),
61 m_num_words_array(m_num_words.get_array()),
62 m_mod_words(mod_words_default, m_num_svms, 2, true, true),
63 m_mod_words_array(m_mod_words.get_array()),
64 m_sign_words(sign_words_default, m_num_svms, true, true),
65 m_sign_words_array(m_sign_words.get_array()),
66 m_string_words(string_words_default, m_num_svms, true, true),
67 m_string_words_array(m_string_words.get_array()),
69 m_num_unique_words(m_num_degrees),
70 m_svm_arrays_clean(true),
72 m_max_a_id(0), m_observation_matrix(1,1,1),
78 m_genestr(1), m_wordstr(NULL), m_dict_weights(1,1), m_segment_loss(1,1,2),
91 m_plif_matrices(NULL),
95 m_num_intron_plifs(0),
97 m_raw_intensities(NULL),
99 m_num_probes_cum(NULL),
100 m_num_lin_feat_plifs_cum(NULL),
103 m_long_transitions(true),
104 m_long_transition_threshold(1000)
106 trans_list_forward = NULL ;
107 trans_list_forward_cnt = NULL ;
108 trans_list_forward_val = NULL ;
109 trans_list_forward_id = NULL ;
112 mem_initialized = true ;
124 #ifdef ARRAY_STATISTICS
149 if (trans_list_forward_cnt)
150 SG_FREE(trans_list_forward_cnt);
151 if (trans_list_forward)
153 for (int32_t i=0; i<trans_list_len; i++)
155 if (trans_list_forward[i])
156 SG_FREE(trans_list_forward[i]);
160 if (trans_list_forward_val)
162 for (int32_t i=0; i<trans_list_len; i++)
164 if (trans_list_forward_val[i])
165 SG_FREE(trans_list_forward_val[i]);
167 SG_FREE(trans_list_forward_val);
169 if (trans_list_forward_id)
171 for (int32_t i=0; i<trans_list_len; i++)
173 if (trans_list_forward_id[i])
174 SG_FREE(trans_list_forward_id[i]);
176 SG_FREE(trans_list_forward_id);
208 for (int32_t i=0; i<length-2; i++)
245 int32_t* probe_pos,
float64_t* intensities,
const int32_t num_probes)
254 if (m_num_raw_data==1){
255 memcpy(tmp_probe_pos, probe_pos, num_probes*
sizeof(int32_t));
256 memcpy(tmp_raw_intensities, intensities, num_probes*
sizeof(
float64_t));
261 memcpy(tmp_probe_pos+
m_num_probes_cum[m_num_raw_data-1], probe_pos, num_probes*
sizeof(int32_t));
279 for (
int s=0; s<p_num_svms; s++)
295 memset(tmp, 0, (dim1+num_new_feat)*dim2*
sizeof(
float64_t)) ;
298 tmp[j*(dim1+num_new_feat)+k] = arr[j*dim1+k];
318 CPlif** PEN,
const int32_t* tiling_plif_ids,
const int32_t num_tiling_plifs)
325 int32_t* tiling_rows =
SG_MALLOC(int32_t, num_tiling_plifs);
326 for (int32_t i=0; i<num_tiling_plifs; i++)
329 CPlif * plif = PEN[tiling_plif_ids[i]];
341 for (int32_t pos_idx=0;pos_idx<
m_seq_len;pos_idx++)
345 for (int32_t i=0; i<num_tiling_plifs; i++)
348 CPlif * plif = PEN[tiling_plif_ids[i]];
358 for (int32_t i=0; i<num_tiling_plifs; i++)
379 for (int32_t i=0; i<genestr_len; i++)
404 int32_t from_pos =
m_pos[p];
405 int32_t to_pos =
m_pos[p+1];
413 my_svm_values_unnormalized[s]=0.0;
415 for (int32_t i=from_pos; i<to_pos; i++)
433 if (prev<-1e20 || prev>1e20)
435 SG_ERROR(
"initialization missing (%i, %i, %f)\n", s, p, prev) ;
440 SG_FREE(my_svm_values_unnormalized);
450 SG_ERROR(
"length of start prob vector p (%i) is not equal to the number of states (%i), N: %i\n",p.
vlen,
m_N);
458 SG_ERROR(
"length of end prob vector q (%i) is not equal to the number of states (%i), N: %i\n",q.
vlen,
m_N);
476 for (int32_t i=0; i<
m_N; i++)
478 for (int32_t j=0; j<
m_N; j++)
490 if (!((num_cols==3) || (num_cols==4)))
491 SG_ERROR(
"!((num_cols==3) || (num_cols==4)), num_cols: %i\n",num_cols);
494 SG_FREE(trans_list_forward_cnt);
495 SG_FREE(trans_list_forward_val);
496 SG_FREE(trans_list_forward_id);
498 trans_list_forward = NULL ;
499 trans_list_forward_cnt = NULL ;
500 trans_list_forward_val = NULL ;
506 mem_initialized = true ;
508 trans_list_forward_cnt=NULL ;
509 trans_list_len =
m_N ;
516 for (int32_t j=0; j<
m_N; j++)
518 int32_t old_start_idx=start_idx;
520 while (start_idx<num_trans && a_trans.
matrix[start_idx+num_trans]==j)
524 if (start_idx>1 && start_idx<num_trans)
528 if (start_idx>1 && start_idx<num_trans)
531 int32_t len=start_idx-old_start_idx;
534 trans_list_forward_cnt[j] = 0 ;
540 trans_list_forward_id[j] =
SG_MALLOC(int32_t, len);
544 trans_list_forward[j] = NULL;
545 trans_list_forward_val[j] = NULL;
546 trans_list_forward_id[j] = NULL;
550 for (int32_t i=0; i<num_trans; i++)
552 int32_t from_state = (int32_t)a_trans.
matrix[i] ;
553 int32_t to_state = (int32_t)a_trans.
matrix[i+num_trans] ;
557 id = (int32_t)a_trans.
matrix[i+num_trans*3] ;
560 ASSERT(to_state>=0 && to_state<m_N);
561 ASSERT(from_state>=0 && from_state<m_N);
563 trans_list_forward[to_state][trans_list_forward_cnt[to_state]]=from_state ;
564 trans_list_forward_val[to_state][trans_list_forward_cnt[to_state]]=val ;
565 trans_list_forward_id[to_state][trans_list_forward_cnt[to_state]]=id ;
566 trans_list_forward_cnt[to_state]++ ;
573 for (int32_t i=0; i<
m_N; i++)
574 for (int32_t j=0; j<
m_N; j++)
639 SG_WARNING(
"SVM array: word_degree.get_dim1()!=m_num_degrees") ;
641 SG_WARNING(
"SVM array: m_cum_num_words.get_dim1()!=m_num_degrees+1") ;
643 SG_WARNING(
"SVM array: m_num_words.get_dim1()==m_num_degrees") ;
647 SG_WARNING(
"SVM array: m_num_unique_words.get_dim1()!=m_num_degrees") ;
649 SG_WARNING(
"SVM array: m_mod_words.get_dim1()!=num_svms") ;
651 SG_WARNING(
"SVM array: m_mod_words.get_dim2()!=2") ;
653 SG_WARNING(
"SVM array: m_sign_words.get_dim1()!=num_svms") ;
655 SG_WARNING(
"SVM array: m_string_words.get_dim1()!=num_svms") ;
665 SG_ERROR(
"Expected 3-dimensional Matrix\n");
667 int32_t N=seq.
dims[0];
668 int32_t cand_pos=seq.
dims[1];
669 int32_t max_num_features=seq.
dims[2];
694 if (seg_path.
matrix!=NULL)
700 segment_ids[i] = (int32_t)seg_path.
matrix[2*i] ;
701 segment_mask[i] = seg_path.
matrix[2*i+1] ;
739 if ((!seq_sparse1 && seq_sparse2) || (seq_sparse1 && !seq_sparse2))
740 SG_ERROR(
"Sparse features must either both be NULL or both NON-NULL\n");
788 SG_ERROR(
"m_dict_weights array does not match num_svms=%i!=%i\n",
809 SG_ERROR(
"segment_loss should be 2 x quadratic matrix: %i!=%i\n", 2*m, n) ;
821 int32_t* segment_ids,
float64_t* segment_mask, int32_t m)
827 for (int32_t i=1;i<m;i++)
870 ASSERT(scores && seq_len);
874 int32_t sz =
sizeof(
float64_t)*(*seq_len);
884 ASSERT(losses && seq_len);
888 int32_t sz =
sizeof(
float64_t)*(*seq_len);
899 int32_t orf_from, int32_t orf_to, int32_t start, int32_t &last_pos,
902 #ifdef DYNPROG_TIMING_DETAIL
911 int32_t orf_target = orf_to-orf_from ;
912 if (orf_target<0) orf_target+=3 ;
922 #ifdef DYNPROG_TIMING_DETAIL
924 orf_time += MyTime.time_diff_sec() ;
929 for (; pos>=start; pos-=3)
932 #ifdef DYNPROG_TIMING_DETAIL
934 orf_time += MyTime.time_diff_sec() ;
942 #ifdef DYNPROG_TIMING_DETAIL
944 orf_time += MyTime.time_diff_sec() ;
950 int16_t nbest,
bool with_loss,
bool with_multiple_sequences)
965 for (int32_t i=0; i<nbest; i++)
983 #ifdef DYNPROG_TIMING
984 segment_init_time = 0.0 ;
985 segment_pos_time = 0.0 ;
986 segment_extend_time = 0.0 ;
987 segment_clean_time = 0.0 ;
989 svm_init_time = 0.0 ;
991 svm_clean_time = 0.0 ;
992 inner_loop_time = 0.0 ;
993 content_svm_values_time = 0.0 ;
994 content_plifs_time = 0.0 ;
995 inner_loop_max_time = 0.0 ;
996 long_transition_time = 0.0 ;
1003 SG_ERROR(
"SVM arrays not clean") ;
1007 #ifdef DYNPROG_DEBUG
1016 int32_t max_look_back = 1000 ;
1017 bool use_svm = false ;
1033 #ifdef DYNPROG_DEBUG
1037 SG_PRINT(
"m_num_lin_feat_plifs_cum: ");
1054 if (seq_array!=NULL)
1066 SG_PRINT(
"using sparse seq_array\n") ;
1070 ASSERT(max_num_signals==2) ;
1073 for (int32_t i=0; i<
m_N; i++)
1077 for (int32_t i=0; i<
m_N; i++)
1079 for (int32_t k=0; k<max_num_signals; k++)
1081 if ((PEN_state_signals.
element(i,k)==NULL) && (k==0))
1084 if (seq_input!=NULL)
1095 if (PEN_state_signals.
element(i,k)!=NULL)
1097 if (seq_input!=NULL)
1138 long_transition_content_start_position.
set_array_name(
"long_transition_content_start_position");
1139 #ifdef DYNPROG_DEBUG
1141 long_transition_content_end_position.
set_array_name(
"long_transition_content_end_position");
1144 long_transition_content_start.
set_array_name(
"long_transition_content_start");
1146 long_transition_content_scores.
set_array_name(
"long_transition_content_scores");
1147 #ifdef DYNPROG_DEBUG
1149 long_transition_content_scores_pen.
set_array_name(
"long_transition_content_scores_pen");
1151 long_transition_content_scores_prev.
set_array_name(
"long_transition_content_scores_prev");
1153 long_transition_content_scores_elem.
set_array_name(
"long_transition_content_scores_elem");
1156 long_transition_content_scores_loss.
set_array_name(
"long_transition_content_scores_loss");
1160 SG_ERROR(
"Long transitions are not supported for nbest!=1") ;
1161 long_transitions = false ;
1164 #ifdef DYNPROG_DEBUG
1165 long_transition_content_scores_pen.
set_const(0) ;
1166 long_transition_content_scores_elem.
set_const(0) ;
1167 long_transition_content_scores_prev.
set_const(0) ;
1170 long_transition_content_scores_loss.
set_const(0) ;
1171 long_transition_content_start.
zero() ;
1172 long_transition_content_start_position.
zero() ;
1173 #ifdef DYNPROG_DEBUG
1174 long_transition_content_end_position.
zero() ;
1190 for (int32_t i=0; i<
m_N; i++)
1191 for (int32_t j=0; j<
m_N; j++)
1197 for (int32_t j=0; j<
m_N; j++)
1200 const T_STATES num_elem = trans_list_forward_cnt[j] ;
1201 const T_STATES *elem_list = trans_list_forward[j] ;
1203 for (int32_t i=0; i<num_elem; i++)
1210 if (long_transitions)
1240 if (long_transitions)
1246 int32_t num_long_transitions = 0 ;
1247 for (int32_t i=0; i<
m_N; i++)
1248 for (int32_t j=0; j<
m_N; j++)
1251 num_long_transitions++ ;
1254 if (long_transitions)
1266 SG_DEBUG(
"Using %i long transitions\n", num_long_transitions) ;
1271 SG_DEBUG(
"use_svm=%i\n", use_svm) ;
1273 SG_DEBUG(
"maxlook: %d m_N: %d nbest: %d \n", max_look_back,
m_N, nbest);
1274 const int32_t look_back_buflen = (max_look_back*
m_N+1)*nbest ;
1275 SG_DEBUG(
"look_back_buflen=%i\n", look_back_buflen) ;
1324 memset(fixedtempvv, 0, look_back_buflen*
sizeof(
float64_t)) ;
1325 int32_t * fixedtempii=
SG_MALLOC(int32_t, look_back_buflen);
1326 memset(fixedtempii, 0, look_back_buflen*
sizeof(int32_t)) ;
1370 #ifdef USE_TMP_ARRAYCLASS
1371 fixedtempvv.set_array_name(
"fixedtempvv") ;
1372 fixedtempii.set_array_name(
"fixedtempvv") ;
1383 #ifdef DYNPROG_DEBUG
1410 #ifdef USE_TMP_ARRAYCLASS
1411 fixedtempvv.display_size() ;
1412 fixedtempii.display_size() ;
1423 #endif //DYNPROG_DEBUG
1448 for (int16_t k=1; k<nbest; k++)
1450 int32_t dim1, dim2, dim3 ;
1494 for (int16_t k=0; k<nbest; k++)
1496 delta.
element(delta_array, t, j, k, m_seq_len, m_N) = seq.
element(j,t) ;
1505 const T_STATES num_elem = trans_list_forward_cnt[j] ;
1506 const T_STATES *elem_list = trans_list_forward[j] ;
1507 const float64_t *elem_val = trans_list_forward_val[j] ;
1508 const int32_t *elem_id = trans_list_forward_id[j] ;
1510 int32_t fixed_list_len = 0 ;
1512 int32_t fixedtempii_ = 0 ;
1513 bool fixedtemplong = false ;
1515 for (int32_t i=0; i<num_elem; i++)
1532 int32_t look_back_ = look_back.
element(j, ii) ;
1536 if((orf_from!=-1)!=(orf_to!=-1))
1537 SG_DEBUG(
"j=%i ii=%i orf_from=%i orf_to=%i p=%1.2f\n", j, ii, orf_from, orf_to, elem_val[i]) ;
1538 ASSERT((orf_from!=-1)==(orf_to!=-1)) ;
1540 int32_t orf_target = -1 ;
1543 orf_target=orf_to-orf_from ;
1546 ASSERT(orf_target>=0 && orf_target<3) ;
1549 int32_t orf_last_pos =
m_pos[t] ;
1550 #ifdef DYNPROG_TIMING
1553 int32_t num_ok_pos = 0 ;
1555 for (int32_t ts=t-1; ts>=0 &&
m_pos[t]-
m_pos[ts]<=look_back_; ts--)
1569 else if (m_pos[ts]!=-1 && (m_pos[t]-m_pos[ts])%3==orf_target)
1570 ok=(!use_orf) ||
extend_orf(orf_from, orf_to, m_pos[ts], orf_last_pos, m_pos[t]) ;
1588 int32_t frame = orf_from;
1594 #ifdef DYNPROG_TIMING_DETAIL
1597 pen_val = penalty->
lookup_penalty(m_pos[t]-m_pos[ts], svm_value) ;
1599 #ifdef DYNPROG_TIMING_DETAIL
1601 content_plifs_time += MyTime.time_diff_sec() ;
1605 #ifdef DYNPROG_TIMING_DETAIL
1614 val += segment_loss ;
1616 float64_t mval = -(val + delta.
element(delta_array, ts, ii, 0, m_seq_len, m_N)) ;
1618 if (mval<fixedtempvv_)
1620 fixedtempvv_ = mval ;
1621 fixedtempii_ = ii + ts*
m_N;
1622 fixed_list_len = 1 ;
1623 fixedtemplong = false ;
1628 for (int16_t diff=0; diff<nbest; diff++)
1633 val += segment_loss ;
1635 float64_t mval = -(val + delta.
element(delta_array, ts, ii, diff, m_seq_len, m_N)) ;
1641 if ((fixed_list_len < nbest) || ((0==fixed_list_len) || (mval < fixedtempvv[fixed_list_len-1])))
1643 if ( (fixed_list_len<nbest) && ((0==fixed_list_len) || (mval>fixedtempvv[fixed_list_len-1])) )
1645 fixedtempvv[fixed_list_len] = mval ;
1646 fixedtempii[fixed_list_len] = ii + diff*m_N + ts*m_N*nbest;
1651 int32_t addhere = fixed_list_len;
1652 while ((addhere > 0) && (mval < fixedtempvv[addhere-1]))
1656 for (int32_t jj=fixed_list_len-1; jj>addhere; jj--)
1658 fixedtempvv[jj] = fixedtempvv[jj-1];
1659 fixedtempii[jj] = fixedtempii[jj-1];
1662 fixedtempvv[addhere] = mval;
1663 fixedtempii[addhere] = ii + diff*m_N + ts*m_N*nbest;
1665 if (fixed_list_len < nbest)
1671 #ifdef DYNPROG_TIMING_DETAIL
1673 inner_loop_max_time += MyTime.time_diff_sec() ;
1677 #ifdef DYNPROG_TIMING
1679 inner_loop_time += MyTime3.time_diff_sec() ;
1682 for (int32_t i=0; i<num_elem; i++)
1699 int32_t look_back_ = look_back.
element(j, ii) ;
1704 if((orf_from!=-1)!=(orf_to!=-1))
1705 SG_DEBUG(
"j=%i ii=%i orf_from=%i orf_to=%i p=%1.2f\n", j, ii, orf_from, orf_to, elem_val[i]) ;
1706 ASSERT((orf_from!=-1)==(orf_to!=-1)) ;
1708 int32_t orf_target = -1 ;
1711 orf_target=orf_to-orf_from ;
1714 ASSERT(orf_target>=0 && orf_target<3) ;
1720 #ifdef DYNPROG_TIMING
1731 #ifdef DYNPROG_TIMING
1740 int32_t start = long_transition_content_start.
get_element(ii, j) ;
1741 int32_t end_5p_part = start ;
1745 while (end_5p_part<=t &&
m_pos[end_5p_part+1]-
m_pos[start_5p_part]<=m_long_transition_threshold)
1748 ASSERT(
m_pos[end_5p_part+1]-
m_pos[start_5p_part] > m_long_transition_threshold || end_5p_part==t) ;
1749 ASSERT(
m_pos[end_5p_part]-
m_pos[start_5p_part] <= m_long_transition_threshold) ;
1766 float64_t mval_trans = -( elem_val[i] + pen_val*0.5 + delta.
element(delta_array, start_5p_part, ii, 0, m_seq_len, m_N) ) ;
1775 mval_trans -= segment_loss_part1 ;
1786 long_transition_content_start_position.
set_element(0, ii, j) ;
1788 long_transition_content_scores_loss.
set_element(0.0, ii, j) ;
1789 #ifdef DYNPROG_DEBUG
1790 long_transition_content_scores_pen.
set_element(0.0, ii, j) ;
1791 long_transition_content_scores_elem.
set_element(0.0, ii, j) ;
1792 long_transition_content_scores_prev.
set_element(0.0, ii, j) ;
1793 long_transition_content_end_position.
set_element(0, ii, j) ;
1801 long_transition_content_scores.
set_element(score, ii, j) ;
1802 long_transition_content_scores_loss.
set_element(new_loss, ii, j) ;
1803 #ifdef DYNPROG_DEBUG
1804 long_transition_content_end_position.
set_element(end_5p_part, ii, j) ;
1808 if (-long_transition_content_scores.
get_element(ii, j) > mval_trans )
1811 long_transition_content_scores.
set_element(-mval_trans, ii, j) ;
1812 long_transition_content_start_position.
set_element(start_5p_part, ii, j) ;
1814 long_transition_content_scores_loss.
set_element(segment_loss_part1, ii, j) ;
1815 #ifdef DYNPROG_DEBUG
1816 long_transition_content_scores_pen.
set_element(pen_val*0.5, ii, j) ;
1817 long_transition_content_scores_elem.
set_element(elem_val[i], ii, j) ;
1818 long_transition_content_scores_prev.
set_element(delta.
element(delta_array, start_5p_part, ii, 0, m_seq_len, m_N), ii, j) ;
1822 long_transition_content_end_position.
set_element(end_5p_part, ii, j) ;
1829 long_transition_content_start.
set_element(start_5p_part, ii, j) ;
1839 while (ts>0 &&
m_pos[t]-
m_pos[ts-1] <= m_long_transition_threshold)
1848 float pen_val_3p = 0.0 ;
1851 int32_t frame = orf_from ;
1859 #ifdef DYNPROG_DEBUG
1869 #ifdef DYNPROG_DEBUG
1876 mval -= (segment_loss_total-long_transition_content_scores_loss.
get_element(ii, j)) ;
1879 #ifdef DYNPROG_DEBUG
1882 SG_PRINT(
"Part2: %i,%i,%i: val=%1.6f pen_val_3p*0.5=%1.6f (t=%i, ts=%i, ts-1=%i, ts+1=%i); scores=%1.6f (pen=%1.6f,prev=%1.6f,elem=%1.6f,loss=%1.1f), positions=%i,%i,%i, loss=%1.1f/%1.1f (%i,%i)\n",
1884 long_transition_content_scores.
get_element(ii, j),
1885 long_transition_content_scores_pen.
get_element(ii, j),
1886 long_transition_content_scores_prev.
get_element(ii, j),
1887 long_transition_content_scores_elem.
get_element(ii, j),
1888 long_transition_content_scores_loss.
get_element(ii, j),
1891 m_pos[long_transition_content_start.
get_element(ii,j)], segment_loss_part2, segment_loss_total, long_transition_content_start_position.
get_element(ii,j), t) ;
1892 SG_PRINT(
"fixedtempvv_: %1.6f, from_state:%i from_pos:%i\n ",-fixedtempvv_, (fixedtempii_%m_N), m_pos[(fixedtempii_-(fixedtempii_%(m_N*nbest)))/(m_N*nbest)] );
1895 if (fabs(segment_loss_part2+long_transition_content_scores_loss.
get_element(ii, j) - segment_loss_total)>1e-3)
1897 SG_ERROR(
"LOSS: total=%1.1f (%i-%i) part1=%1.1f/%1.1f (%i-%i) part2=%1.1f (%i-%i) sum=%1.1f diff=%1.1f\n",
1899 long_transition_content_scores_loss.
get_element(ii, j), segment_loss_part1,
m_pos[long_transition_content_start_position.
get_element(ii,j)], m_pos[long_transition_content_end_position.
get_element(ii,j)],
1900 segment_loss_part2, m_pos[long_transition_content_end_position.
get_element(ii,j)], m_pos[t],
1901 segment_loss_part2+long_transition_content_scores_loss.
get_element(ii, j),
1902 segment_loss_part2+long_transition_content_scores_loss.
get_element(ii, j) - segment_loss_total) ;
1912 if (mval < fixedtempvv_)
1915 int32_t fromtjk = fixedtempii_ ;
1921 ASSERT((fromtjk-(fromtjk%(m_N*nbest)))/(m_N*nbest)==0 ||
m_pos[(fromtjk-(fromtjk%(m_N*nbest)))/(m_N*nbest)]>=
m_pos[long_transition_content_start_position.
get_element(ii, j)] || fixedtemplong) ;
1923 fixedtempvv_ = mval ;
1924 fixedtempii_ = ii + m_N*long_transition_content_start_position.
get_element(ii, j) ;
1925 fixed_list_len = 1 ;
1926 fixedtemplong = true ;
1931 #ifdef DYNPROG_TIMING
1933 long_transition_time += MyTime3.time_diff_sec() ;
1937 int32_t numEnt = fixed_list_len;
1942 for (int16_t k=0; k<nbest; k++)
1948 minusscore = fixedtempvv_ ;
1949 fromtjk = fixedtempii_ ;
1953 minusscore = fixedtempvv[k];
1954 fromtjk = fixedtempii[k];
1957 delta.
element(delta_array, t, j, k, m_seq_len, m_N) = -minusscore + seq.
element(j,t);
1960 ktable.
element(t,j,k) = (fromtjk%(m_N*nbest)-psi.
element(t,j,k))/m_N ;
1961 ptable.
element(t,j,k) = (fromtjk-(fromtjk%(m_N*nbest)))/(m_N*nbest) ;
1976 int32_t list_len = 0 ;
1977 for (int16_t diff=0; diff<nbest; diff++)
1981 oldtempvv[list_len] = -(delta.
element(delta_array, (m_seq_len-1), i, diff, m_seq_len, m_N)+
get_q(i)) ;
1982 oldtempii[list_len] = i + diff*
m_N ;
1989 for (int16_t k=0; k<nbest; k++)
1991 delta_end.
element(k) = -oldtempvv[k] ;
2001 for (int16_t k=0; k<nbest; k++)
2003 prob_nbest[k]= delta_end.
element(k) ;
2006 state_seq[i] = path_ends.
element(k) ;
2010 pos_seq[i] = m_seq_len-1 ;
2012 while (pos_seq[i]>0)
2016 state_seq[i+1] = psi.
element(pos_seq[i], state_seq[i], q);
2017 pos_seq[i+1] = ptable.
element(pos_seq[i], state_seq[i], q) ;
2019 q = ktable.
element(pos_seq[i], state_seq[i], q) ;
2023 int32_t num_states = i+1 ;
2024 for (i=0; i<num_states;i++)
2026 my_state_seq[i+k*
m_seq_len] = state_seq[num_states-i-1] ;
2027 my_pos_seq[i+k*
m_seq_len] = pos_seq[num_states-i-1] ;
2029 if (num_states<m_seq_len)
2031 my_state_seq[num_states+k*
m_seq_len]=-1 ;
2041 #ifdef DYNPROG_TIMING
2045 SG_PRINT(
"Timing: orf=%1.2f s \n Segment_init=%1.2f s Segment_pos=%1.2f s Segment_extend=%1.2f s Segment_clean=%1.2f s\nsvm_init=%1.2f s svm_pos=%1.2f svm_clean=%1.2f\n content_svm_values_time=%1.2f content_plifs_time=%1.2f\ninner_loop_max_time=%1.2f inner_loop=%1.2f long_transition_time=%1.2f\n total=%1.2f\n", orf_time, segment_init_time, segment_pos_time, segment_extend_time, segment_clean_time, svm_init_time, svm_pos_time, svm_clean_time, content_svm_values_time, content_plifs_time, inner_loop_max_time, inner_loop_time, long_transition_time, MyTime2.time_diff_sec()) ;
2054 int32_t *my_state_seq, int32_t *my_pos_seq,
2055 int32_t my_seq_len,
const float64_t *seq_array, int32_t max_num_signals)
2071 SG_ERROR(
"SVM arrays not clean") ;
2079 bool use_svm = false ;
2089 for (int32_t i=0; i<
m_N; i++)
2090 for (int32_t j=0; j<
m_N; j++)
2100 for (int32_t i=0; i<
m_N; i++)
2101 for (int32_t j=0; j<max_num_signals; j++)
2114 for (int32_t i=0; i<
m_N; i++)
2118 for (int32_t j=0; j<
m_N; j++)
2124 for (int32_t i=0; i<my_seq_len; i++)
2143 svm_value_part1[s]=0 ;
2144 svm_value_part2[s]=0 ;
2152 ASSERT(my_state_seq[0]>=0) ;
2156 ASSERT(my_state_seq[my_seq_len-1]>=0) ;
2161 total_score += my_scores[0] + my_scores[my_seq_len-1] ;
2164 SG_DEBUG(
"m_seq_len=%i\n", my_seq_len) ;
2165 for (int32_t i=0; i<my_seq_len-1; i++)
2167 if (my_state_seq[i+1]==-1)
2169 int32_t from_state = my_state_seq[i] ;
2170 int32_t to_state = my_state_seq[i+1] ;
2171 int32_t from_pos = my_pos_seq[i] ;
2172 int32_t to_pos = my_pos_seq[i+1] ;
2177 #ifdef DYNPROG_DEBUG
2185 SG_PRINT(
"loss1:%f loss2:%f loss3:%f, diff:%f\n", loss1, loss2, loss3, loss1+loss2-loss3);
2188 SG_PRINT(
"%i. segment loss %f (id=%i): from=%i(%i), to=%i(%i)\n", i, my_losses[i], elem_id, from_pos, from_state, to_pos, to_state) ;
2192 SG_DEBUG(
"%i. segment loss %f (id=%i): from=%i(%i), to=%i(%i)\n", i, my_losses[i], elem_id, from_pos, from_state, to_pos, to_state) ;
2198 #ifdef DYNPROG_DEBUG
2199 SG_DEBUG(
"%i. scores[i]=%f\n", i, my_scores[i]) ;
2206 bool is_long_transition = false ;
2210 is_long_transition = true ;
2212 is_long_transition =
false ;
2215 int32_t from_pos_thresh = from_pos ;
2216 int32_t to_pos_thresh = to_pos ;
2220 if (is_long_transition)
2225 ASSERT(from_pos_thresh<to_pos) ;
2232 #ifdef DYNPROG_DEBUG
2233 SG_PRINT(
"part1: pos1: %i pos2: %i pos3: %i \nsvm_value_part1: ",
m_pos[from_pos],
m_pos[from_pos_thresh],
m_pos[from_pos_thresh+1]) ;
2235 SG_PRINT(
"%1.4f ", svm_value_part1[s]);
2241 ASSERT(to_pos_thresh>0) ;
2247 #ifdef DYNPROG_DEBUG
2248 SG_PRINT(
"part2: pos1: %i pos2: %i pos3: %i \nsvm_value_part2: ",
m_pos[to_pos],
m_pos[to_pos_thresh],
m_pos[to_pos_thresh+1]) ;
2250 SG_PRINT(
"%1.4f ", svm_value_part2[s]);
2262 int32_t num_current_svms=0;
2263 int32_t svm_ids[] = {-8, -7, -6, -5, -4, -3, -2, -1};
2264 SG_PRINT(
"penalties(%i, %i), frame:%i ", from_state, to_state, frame);
2270 #ifdef DYNPROG_DEBUG
2271 SG_PRINT(
"part2: pos1: %i pos2: %i \nsvm_values: ",
m_pos[from_pos],
m_pos[to_pos]) ;
2279 if (PEN.
element(to_state, from_state)!=NULL)
2282 if (is_long_transition)
2286 nscore= 0.5*pen_value_part1 + 0.5*pen_value_part2 ;
2292 SG_PRINT(
"is_long_transition=%i (from_pos=%i (%i), to_pos=%i (%i)=> %1.5f\n",
2293 is_long_transition,
m_pos[from_pos], from_state,
m_pos[to_pos], to_state, nscore) ;
2295 my_scores[i] += nscore ;
2304 #ifdef DYNPROG_DEBUG
2307 if (is_long_transition)
2309 #ifdef DYNPROG_DEBUG
2312 for (
int kk=0; kk<i; kk++)
2313 sum_score += my_scores[i] ;
2315 SG_PRINT(
"is_long_transition=%i (from_pos=%i (%i), to_pos=%i (%i)=> %1.5f, %1.5f --- 1: %1.6f (%i-%i) 2: %1.6f (%i-%i) \n",
2316 is_long_transition,
m_pos[from_pos], from_state,
m_pos[to_pos], to_state,
2319 PEN.
element(to_state, from_state)->
lookup_penalty(m_pos[to_pos]-m_pos[to_pos_thresh], svm_value_part2)*0.5, m_pos[to_pos_thresh], m_pos[to_pos]) ;
2323 if (is_long_transition)
2337 if (is_long_transition)
2345 for (int32_t k=0;k<num_intensities;k++)
2347 for (int32_t j=m_num_lin_feat_plifs_cum[d-1];j<m_num_lin_feat_plifs_cum[d];j++)
2348 svm_value[j]=intensities[k];
2354 for (int32_t k=0;k<num_intensities;k++)
2356 for (int32_t j=m_num_lin_feat_plifs_cum[d-1];j<m_num_lin_feat_plifs_cum[d];j++)
2357 svm_value[j]=intensities[k];
2375 for (int32_t k=0;k<num_intensities;k++)
2377 for (int32_t j=m_num_lin_feat_plifs_cum[d-1];j<m_num_lin_feat_plifs_cum[d];j++)
2378 svm_value[j]=intensities[k];
2388 #ifdef DYNPROG_DEBUG
2389 SG_DEBUG(
"%i. scores[i]=%f\n", i, my_scores[i]) ;
2393 for (int32_t k=0; k<max_num_signals; k++)
2395 if ((PEN_state_signals.
element(to_state,k)==NULL)&&(k==0))
2397 #ifdef DYNPROG_DEBUG
2398 SG_DEBUG(
"%i. emmission penalty: to_state=%i to_pos=%i score=%1.2f (no signal plif)\n", i, to_state, to_pos, seq_input.
element(to_state, to_pos, k)) ;
2400 my_scores[i] += seq_input.
element(to_state, to_pos, k) ;
2405 if (PEN_state_signals.
element(to_state, k)!=NULL)
2408 my_scores[i] += nscore ;
2409 #ifdef DYNPROG_DEBUG
2412 SG_PRINT(
"is_long_transition=%i (from_pos=%i (%i), from_state=%i, to_pos=%i (%i) to_state=%i=> %1.5f, dim3:%i, seq_input.element(to_state, to_pos, k): %1.4f\n",
2413 is_long_transition,
m_pos[from_pos], from_pos, from_state,
m_pos[to_pos], to_pos, to_state, nscore, k, seq_input.
element(to_state, to_pos, k)) ;
2414 for (
int x=0; x<23; x++)
2416 for (
int i=-10; i<10; i++)
2431 #ifdef DYNPROG_DEBUG
2432 SG_DEBUG(
"%i. emmission penalty: to_state=%i to_pos=%i value=%1.2f score=%1.2f k=%i\n", i, to_state, to_pos, seq_input.
element(to_state, to_pos, k), nscore, k) ;
2442 total_score += my_scores[i] ;
2443 total_loss += my_losses[i] ;
2458 int32_t num_intensities = 0;
2462 int32_t num = m_num_probes_cum[type-1];
2463 while (*p_tiling_pos<to_pos)
2465 if (*p_tiling_pos>=from_pos)
2467 intensities[num_intensities] = *p_tiling_data;
2471 if (num>=m_num_probes_cum[type])
2473 last_pos = *p_tiling_pos;
2476 ASSERT(last_pos<*p_tiling_pos);
2478 return num_intensities;
2483 #ifdef DYNPROG_TIMING_DETAIL
2493 svm_values[i] = (to_val-from_val)/(to_pos-from_pos);
2499 svm_values[i] = to_val-from_val ;
2505 int32_t intron_list_start = m_num_lin_feat_plifs_cum[
m_num_raw_data];
2508 for (int32_t i=intron_list_start; i<intron_list_end;i++)
2510 svm_values[i] = (
float64_t) (support[cnt]);
2521 svm_values[frame_plifs[1]] = 1e10;
2522 svm_values[frame_plifs[2]] = 1e10;
2523 int32_t global_frame = from_pos%3;
2524 int32_t row = ((global_frame+frame)%3)+4;
2527 svm_values[frame+frame_plifs[0]] = (to_val-from_val)/(to_pos-from_pos);
2529 #ifdef DYNPROG_TIMING_DETAIL
2531 content_svm_values_time += MyTime.time_diff_sec() ;