6 /*[splice_align, est_align, weightMatch, alignmentscores, dnaest] = ...
7 myalign([nr_paths], dna, est, {h}, matchmatrix, donor, acceptor, remove_duplicate_scores, ...
10 Alignment::Alignment(int numQPlifs
, int numq
, bool use_qscores
) {
17 enum ETransformType transform
= T_LINEAR
;
22 // set ptrs to zero first
27 qualityScoresAllPaths
= 0;
28 mlen
= 6; // score matrix: length of 6 for "- A C G T N"
30 numQualSuppPoints
= numq
;
32 use_quality_scores
= use_qscores
;
34 //printf("number of support points: %d\n",numQualSuppPoints);
35 //printf("number of plifs: %d\n",numPlifs );
36 FA( numQualSuppPoints
>= 0 );
40 void Alignment::getDNAEST(){}
42 void Alignment::myalign(int nr_paths_p
, char* dna
, int dna_len_p
, char* est
,
43 int est_len_p
, double* prb
, double* chastity
, struct penalty_struct h
, double* matchmatrix
, int mm_len
,
44 double* donor
, int d_len
, double* acceptor
, int a_len
, struct penalty_struct
* qualityScores
,
45 bool remove_duplicate_scores
, bool print_matrix
) {
47 // printf("Entering myalign...\n");
48 dna_len
= dna_len_p
+ 1 ;
49 est_len
= est_len_p
+ 1 ;
50 nr_paths
= nr_paths_p
;
52 /***************************************************************************/
53 // initialize alignment matrices and call fill_matrix()
54 /***************************************************************************/
57 if (use_quality_scores
)
58 currentMode
= USE_QUALITY_SCORES
;
66 //possible donor positions
67 int nr_donor_sites
= 0 ;
68 for (int ii
=0; ii
<d_len
; ii
++) {
69 if(isfinite(donor
[ii
])) {
74 int* donor_sites
= new int[nr_donor_sites
];
76 for (int ii
=0; ii
<d_len
; ii
++) {
77 if(isfinite(donor
[ii
])) {
78 donor_sites
[donor_idx
] = ii
+1 ;
83 int* max_score_positions
= new int[nr_paths
*2];
85 Pre_score
** matrices
= new Pre_score
*[nr_paths
];
86 for (int z
=0; z
<nr_paths
; z
++) {
87 matrices
[z
] = new Pre_score
[dna_len
* est_len
];
90 //printf("qualityScores\n");
91 //for(int qidx=0;qidx<numPlifs;qidx++) {
93 // p = qualityScores[qidx];
94 // printf("%d ",qidx);
95 // for(int pidx=0;pidx<p.len;pidx++)
96 // printf("%f ",pidx,p.penalties[pidx]);
102 //for(h_idx=0;h_idx<h.len;h_idx++)
103 // printf("%d %f %f\n",h_idx,h.limits[h_idx],h.penalties[h_idx]);
105 //printf("calling fill_matrix...\n");
106 fill_matrix(nr_paths
, matrices
, est_len
, dna_len
, est
, dna
, prb
, &h
, matchmatrix
, qualityScores
, donor
, acceptor
, remove_duplicate_scores
, nr_donor_sites
, donor_sites
, max_score_positions
,currentMode
);
107 //printf("after call to fill_matrix...\n");
109 /***************************************************************************/
110 // return arguments etc.
111 /***************************************************************************/
112 int result_length
; //Eine Variable fuer alle Matrizen
114 splice_align_size
= (dna_len
-1)*nr_paths
;
115 est_align_size
= (est_len
-1)*nr_paths
;
119 if (currentMode
== USE_QUALITY_SCORES
) {
120 mmatrix_param_size
= mlen
*nr_paths
;
124 if (currentMode
== NORMAL
) {
125 mmatrix_param_size
= (mlen
*mlen
)*nr_paths
;
126 mmatrix_size
= mlen
*mlen
;
129 alignmentscores_size
= nr_paths
; //alignment score for each path/matrix
130 numPathsPlifs
= numPlifs
*nr_paths
; //alignment score for each path/matrix
132 splice_align
= new int[splice_align_size
];
133 est_align
= new int[est_align_size
];
134 mmatrix_param
= new int[mmatrix_param_size
];
135 alignmentscores
= new double[nr_paths
]; //alignment score for each path/matrix
138 // printf("before memset...\n");
139 memset((char*)splice_align
, -1, (dna_len
-1)*nr_paths
*sizeof(int)); // fills splice_align with zeros
140 memset((char*)est_align
, -1, (est_len
-1)*nr_paths
*sizeof(int)); // fills est_align with zeros
141 memset((char*)mmatrix_param
, 0, mmatrix_size
*nr_paths
*sizeof(int)); //fills mmatrix_param with zeros
142 memset(alignmentscores
, -1, nr_paths
*sizeof(double)); //fills alignmentscores with zeros
143 //printf("after memset...\n");
145 qualityScoresAllPaths
= new penalty_struct
*[nr_paths
];
147 for (int z
=0; z
<nr_paths
; z
++) {
150 int* s_align
= splice_align
+ (dna_len
-1)*z
; //pointer
151 int* e_align
= est_align
+ (est_len
-1)*z
; //pointer
152 int* mparam
= mmatrix_param
+ mmatrix_size
*z
; //pointer
154 qualityScoresAllPaths
[z
] = new penalty_struct
[numPlifs
];
157 for(qidx
=0;qidx
<numPlifs
;qidx
++) {
159 p
.len
= numQualSuppPoints
;
160 p
.limits
= (REAL
*) calloc(p
.len
,sizeof(REAL
));
162 for(pidx
=0;pidx
<p
.len
;pidx
++)
163 p
.limits
[pidx
] = qualityScores
[qidx
%numPlifs
].limits
[pidx
];
165 p
.penalties
= (REAL
*) calloc(p
.len
,sizeof(REAL
));
166 qualityScoresAllPaths
[z
][qidx
] = p
;
169 //penalty_struct* qparam = qualityScoresAllPaths + (numPlifs*z);
171 //printf("before call to result_align...\n");
172 bool no_more_path
= result_align(matrices
, z
, est_len
, dna_len
, &result_length
, est
, dna
, prb
, chastity
, s_align
, e_align
, mparam
, alignmentscores
, max_score_positions
, qualityScoresAllPaths
[z
] , currentMode
);
173 //printf("after call to result_align...\n");
175 //printf("z is %d\n",z);
176 //for(qidx=0;qidx<numPlifs;qidx++) {
178 // p = qualityScoresAllPaths[qidx+numPlifs*z];
179 // printf("%d ",qidx);
180 // for(pidx=0;pidx<p.len;pidx++)
181 // printf("%f ",pidx,p.penalties[pidx]);
192 result_len
= result_length
;
194 DNA_ARRAY
= new int[result_length
];
195 EST_ARRAY
= new int[result_length
];
198 int i
= max_score_positions
[2*z
] ; //i (est)
199 int j
= max_score_positions
[2*z
+1] ; //j (dna)
200 int prev_i
= ((Pre_score
*)matrices
[z
] + i
*dna_len
+j
)->prev_i
;
201 int prev_j
= ((Pre_score
*)matrices
[z
] + i
*dna_len
+j
)->prev_j
;
202 int prev_m_no
= ((Pre_score
*)matrices
[z
] + i
*dna_len
+j
)->prev_matrix_no
;
204 for (int ii
=result_length
; ii
>0; ii
--) {
205 if ((prev_i
== (i
-1)) && (prev_j
== (j
-1))) { // match or mismatch
206 DNA_ARRAY
[ii
-1] = check_char(dna
[j
-1]) ;
207 EST_ARRAY
[ii
-1] = check_char(est
[i
-1]) ;
209 else if ((prev_i
== (i
)) && (prev_j
== (j
-1))) {// gap on EST_ARRAY
210 DNA_ARRAY
[ii
-1] = check_char(dna
[j
-1]) ;
211 EST_ARRAY
[ii
-1] = 0 ; //gap
213 else if ((prev_i
== (i
-1)) && (prev_j
== (j
))) { // gap on DNA_ARRAY
214 DNA_ARRAY
[ii
-1] = 0 ; //gap
215 EST_ARRAY
[ii
-1] = check_char(est
[i
-1]) ;
218 for (j
; j
> prev_j
; j
--) {
219 DNA_ARRAY
[ii
-1] = check_char(dna
[j
-1]) ;
220 EST_ARRAY
[ii
-1] = 6 ; //intron
223 ii
++ ; // last ii-- too much (because done in for-loop)
228 prev_i
= ((Pre_score
*)matrices
[prev_m_no
] + i
*dna_len
+ j
)->prev_i
;
229 prev_j
= ((Pre_score
*)matrices
[prev_m_no
] + i
*dna_len
+ j
)->prev_j
;
230 prev_m_no
= ((Pre_score
*)matrices
[prev_m_no
] + i
*dna_len
+ j
)->prev_matrix_no
;
233 } // end of "if z == 0"
237 for (int i
=nr_paths
-1;i
>=0; i
--)
238 delete[] matrices
[i
];
241 void Alignment::getAlignmentResults(int* s_align
, int* e_align
,
242 int* mmatrix_p
, double* alignscores
, double* qScores
) {
245 for(idx
=0; idx
<splice_align_size
; idx
++)
246 s_align
[idx
] = splice_align
[idx
];
248 for(idx
=0; idx
<est_align_size
; idx
++)
249 e_align
[idx
] = est_align
[idx
];
251 for(idx
=0; idx
<mmatrix_param_size
; idx
++)
252 mmatrix_p
[idx
] = mmatrix_param
[idx
];
254 for(idx
=0; idx
<alignmentscores_size
; idx
++)
255 alignscores
[idx
] = alignmentscores
[idx
];
257 if (use_quality_scores
) {
258 penalty_struct currentPlif
;
260 for (int z
=0; z
<nr_paths
; z
++) {
261 for(int estChar
=1;estChar
<6;estChar
++) {
262 for(int dnaChar
=0;dnaChar
<6;dnaChar
++) {
263 int currentPos
= (estChar
-1)*6+dnaChar
;
264 currentPlif
= qualityScoresAllPaths
[z
][currentPos
];
265 for(int pidx
=0; pidx
<currentPlif
.len
; pidx
++) {
266 qScores
[ctr
] = currentPlif
.penalties
[pidx
];
272 //for(idx=0; idx<numPathsPlifs; idx++) {
273 // currentPlif = qualityScoresAllPaths[idx];
274 // //printf("Size is %dx%d\n",numPathsPlifs,currentPlif.len);
275 // for(pidx=0; pidx<currentPlif.len; pidx++) {
276 // qScores[ctr] = currentPlif.penalties[pidx];
281 //printf("\nctr is %d\n",ctr);
282 //printf("Leaving getAlignmentResults...\n");
285 void Alignment::getAlignmentArrays(int* dna_align
, int* est_align
) {
288 for(idx
=0; idx
<result_len
; idx
++) {
289 dna_align
[idx
] = DNA_ARRAY
[idx
];
290 est_align
[idx
] = EST_ARRAY
[idx
];