1 /* @include ensalign **********************************************************
2 **
3 ** Ensembl Alignment functions
4 **
5 ** @author Copyright (C) 1999 Ensembl Developers
6 ** @author Copyright (C) 2006 Michael K. Schuster
7 ** @version $Revision: 1.11 $
8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core
9 ** @modified $Date: 2012/08/05 10:22:52 $ by $Author: mks $
10 ** @@
11 **
12 ** This library is free software; you can redistribute it and/or
13 ** modify it under the terms of the GNU Lesser General Public
14 ** License as published by the Free Software Foundation; either
15 ** version 2.1 of the License, or (at your option) any later version.
16 **
17 ** This library is distributed in the hope that it will be useful,
18 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20 ** Lesser General Public License for more details.
21 **
22 ** You should have received a copy of the GNU Lesser General Public
23 ** License along with this library; if not, write to the Free Software
24 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 ** MA  02110-1301,  USA.
26 **
27 ******************************************************************************/
28 
29 #ifndef ENSALIGN_H
30 #define ENSALIGN_H
31 
32 /* ========================================================================= */
33 /* ============================= include files ============================= */
34 /* ========================================================================= */
35 
36 #include "ensfeature.h"
37 
38 AJ_BEGIN_DECLS
39 
40 
41 
42 
43 /* ========================================================================= */
44 /* =============================== constants =============================== */
45 /* ========================================================================= */
46 
47 /* @const EnsPDnaalignfeatureadaptor ******************************************
48 **
49 ** Ensembl DNA Align Feature Adaptor.
50 ** Defined as an alias in EnsPFeatureadaptor.
51 **
52 ** #alias EnsPFeatureadaptor
53 **
54 ** #cc Bio::EnsEMBL::DBSQL::DnaAlignFeatureAdaptor
55 ** ##
56 ******************************************************************************/
57 
58 #define EnsPDnaalignfeatureadaptor EnsPFeatureadaptor
59 
60 
61 
62 
63 /* @const EnsPProteinalignfeatureadaptor **************************************
64 **
65 ** Ensembl Protein Align Feature Adaptor.
66 ** Defined as an alias in EnsPFeatureadaptor.
67 **
68 ** #alias EnsPFeatureadaptor
69 **
70 ** #cc Bio::EnsEMBL::DBSQL::ProteinAlignFeatureAdaptor
71 ** ##
72 ******************************************************************************/
73 
74 #define EnsPProteinalignfeatureadaptor EnsPFeatureadaptor
75 
76 
77 
78 
79 /* @const EnsPSupportingfeatureadaptor ****************************************
80 **
81 ** Ensembl Supporting Feature Adaptor.
82 ** Defined as an alias in EnsPDatabaseadaptor.
83 **
84 ** #alias EnsPDatabaseadaptor
85 **
86 ** #cc Bio::EnsEMBL::DBSQL::SupportingFeatureAdaptor
87 ** ##
88 ******************************************************************************/
89 
90 #define EnsPSupportingfeatureadaptor EnsPDatabaseadaptor
91 
92 
93 
94 
95 /* @enum EnsEBasealignfeatureType *********************************************
96 **
97 ** Ensembl Base Align Feature Type enumeration
98 **
99 ** @value ensEBasealignfeatureTypeNULL Null
100 ** @value ensEBasealignfeatureTypeDNA DNA alignment
101 ** @value ensEBasealignfeatureTypeProtein Protein alignment
102 ** @@
103 ******************************************************************************/
104 
105 typedef enum EnsOBasealignfeatureType
106 {
107     ensEBasealignfeatureTypeNULL,
108     ensEBasealignfeatureTypeDNA,
109     ensEBasealignfeatureTypeProtein
110 } EnsEBasealignfeatureType;
111 
112 
113 
114 
115 /* ========================================================================= */
116 /* ============================== public data ============================== */
117 /* ========================================================================= */
118 
119 /* @data EnsPBasealignfeature *************************************************
120 **
121 ** Ensembl Base Align Feature.
122 **
123 ** @alias EnsSBasealignfeature
124 ** @alias EnsOBasealignfeature
125 **
126 ** @attr Use [ajuint] Use counter
127 ** @cc Bio::EnsEMBL::Storable
128 ** @attr Identifier [ajuint] SQL database-internal identifier
129 ** @attr Dnaalignfeatureadaptor [EnsPDnaalignfeatureadaptor]
130 ** Ensembl DNA Align Feature Adaptor
131 ** @attr Proteinalignfeatureadaptor [EnsPProteinalignfeatureadaptor]
132 ** Ensembl Protein Align Feature Adaptor
133 ** @cc Bio::EnsEMBL::Featurepair
134 ** @attr Featurepair [EnsPFeaturepair] Ensembl Feature Pair
135 ** @cc Bio::EnsEMBL::Basealignfeature
136 ** @attr FobjectGetFeaturepair [EnsPFeaturepair function]
137 ** Ensembl Object Get Ensembl Feature Pair function
138 ** @attr Cigar [AjPStr] CIGAR line
139 ** @attr Type [EnsEBasealignfeatureType] Type
140 ** @attr Alignmentlength [ajuint] Target component alignment length
141 ** @attr Pairdnaalignfeatureidentifier [ajuint]
142 ** Pair DNA Align Feature identifier
143 ** @attr Padding [ajuint] Padding to alignment boundary
144 ** @@
145 ******************************************************************************/
146 
147 typedef struct EnsSBasealignfeature
148 {
149     ajuint Use;
150     ajuint Identifier;
151     EnsPDnaalignfeatureadaptor Dnaalignfeatureadaptor;
152     EnsPProteinalignfeatureadaptor Proteinalignfeatureadaptor;
153     EnsPFeaturepair Featurepair;
154     EnsPFeaturepair (*FobjectGetFeaturepair) (const void *object);
155     AjPStr Cigar;
156     EnsEBasealignfeatureType Type;
157     ajuint Alignmentlength;
158     ajuint Pairdnaalignfeatureidentifier;
159     ajuint Padding;
160 } EnsOBasealignfeature;
161 
162 #define EnsPBasealignfeature EnsOBasealignfeature*
163 
164 
165 
166 
167 /* ========================================================================= */
168 /* =========================== public functions ============================ */
169 /* ========================================================================= */
170 
171 /*
172 ** Prototype definitions
173 */
174 
175 /* Ensembl Base Align Feature */
176 
177 EnsPBasealignfeature ensBasealignfeatureNewCpy(
178     const EnsPBasealignfeature baf);
179 
180 EnsPBasealignfeature ensBasealignfeatureNewFps(
181     EnsPFeaturepair fp,
182     AjPStr cigar,
183     AjPList fps,
184     EnsEBasealignfeatureType type,
185     ajuint pair);
186 
187 EnsPBasealignfeature ensBasealignfeatureNewIniD(
188     EnsPDnaalignfeatureadaptor dafa,
189     ajuint identifier,
190     EnsPFeaturepair fp,
191     AjPStr cigar,
192     ajuint pair);
193 
194 EnsPBasealignfeature ensBasealignfeatureNewIniP(
195     EnsPProteinalignfeatureadaptor pafa,
196     ajuint identifier,
197     EnsPFeaturepair fp,
198     AjPStr cigar);
199 
200 EnsPBasealignfeature ensBasealignfeatureNewRef(
201     EnsPBasealignfeature baf);
202 
203 void ensBasealignfeatureDel(
204     EnsPBasealignfeature *Pbaf);
205 
206 AjPStr ensBasealignfeatureGetCigar(
207     const EnsPBasealignfeature baf);
208 
209 EnsPDnaalignfeatureadaptor ensBasealignfeatureGetDnaalignfeatureadaptor(
210     const EnsPBasealignfeature baf);
211 
212 EnsPFeaturepair ensBasealignfeatureGetFeaturepair(
213     const EnsPBasealignfeature baf);
214 
215 ajuint ensBasealignfeatureGetIdentifier(
216     const EnsPBasealignfeature baf);
217 
218 ajuint ensBasealignfeatureGetPairdnaalignfeatureidentifier(
219     const EnsPBasealignfeature baf);
220 
221 EnsPProteinalignfeatureadaptor ensBasealignfeatureGetProteinalignfeatureadaptor(
222     const EnsPBasealignfeature baf);
223 
224 EnsEBasealignfeatureType ensBasealignfeatureGetType(
225     const EnsPBasealignfeature baf);
226 
227 AjBool ensBasealignfeatureSetFeaturepair(EnsPBasealignfeature baf,
228                                          EnsPFeaturepair fp);
229 
230 EnsPFeature ensBasealignfeatureGetFeature(const EnsPBasealignfeature baf);
231 
232 void *ensBasealignfeatureCalculateAdaptor(const EnsPBasealignfeature baf);
233 
234 ajuint ensBasealignfeatureCalculateAlignmentlength(EnsPBasealignfeature baf);
235 
236 size_t ensBasealignfeatureCalculateMemsize(const EnsPBasealignfeature baf);
237 
238 ajuint ensBasealignfeatureCalculateUnitSource(const EnsPBasealignfeature baf);
239 
240 ajuint ensBasealignfeatureCalculateUnitTarget(const EnsPBasealignfeature baf);
241 
242 EnsPBasealignfeature ensBasealignfeatureTransfer(
243     EnsPBasealignfeature baf,
244     EnsPSlice slice);
245 
246 EnsPBasealignfeature ensBasealignfeatureTransform(
247     EnsPBasealignfeature baf,
248     const AjPStr csname,
249     const AjPStr csversion);
250 
251 AjBool ensBasealignfeatureTrace(const EnsPBasealignfeature baf, ajuint level);
252 
253 AjBool ensBasealignfeatureFetchAllFeaturepairs(const EnsPBasealignfeature baf,
254                                                AjPList fps);
255 
256 /* AJAX List of Ensembl Base Align Feature objects */
257 
258 AjBool ensListBasealignfeatureSortSourceEndAscending(AjPList bafs);
259 
260 AjBool ensListBasealignfeatureSortSourceEndDescending(AjPList bafs);
261 
262 AjBool ensListBasealignfeatureSortSourceStartAscending(AjPList bafs);
263 
264 AjBool ensListBasealignfeatureSortSourceStartDescending(AjPList bafs);
265 
266 /* Ensembl DNA Align Feature Adaptor */
267 
268 EnsPDnaalignfeatureadaptor ensRegistryGetDnaalignfeatureadaptor(
269     EnsPDatabaseadaptor dba);
270 
271 EnsPDnaalignfeatureadaptor ensDnaalignfeatureadaptorNew(
272     EnsPDatabaseadaptor dba);
273 
274 void ensDnaalignfeatureadaptorDel(
275     EnsPDnaalignfeatureadaptor *Pdafa);
276 
277 EnsPBaseadaptor ensDnaalignfeatureadaptorGetBaseadaptor(
278     EnsPDnaalignfeatureadaptor dafa);
279 
280 EnsPDatabaseadaptor ensDnaalignfeatureadaptorGetDatabaseadaptor(
281     EnsPDnaalignfeatureadaptor dafa);
282 
283 EnsPFeatureadaptor ensDnaalignfeatureadaptorGetFeatureadaptor(
284     EnsPDnaalignfeatureadaptor dafa);
285 
286 AjBool ensDnaalignfeatureadaptorFetchAllbyHitname(
287     EnsPDnaalignfeatureadaptor dafa,
288     const AjPStr hitname,
289     const AjPStr anname,
290     AjPList bafs);
291 
292 AjBool ensDnaalignfeatureadaptorFetchAllbyHitunversioned(
293     EnsPDnaalignfeatureadaptor dafa,
294     const AjPStr hitname,
295     const AjPStr anname,
296     AjPList bafs);
297 
298 AjBool ensDnaalignfeatureadaptorFetchAllbySlicecoverage(
299     EnsPDnaalignfeatureadaptor dafa,
300     EnsPSlice slice,
301     float coverage,
302     const AjPStr anname,
303     AjPList bafs);
304 
305 AjBool ensDnaalignfeatureadaptorFetchAllbySliceidentity(
306     EnsPDnaalignfeatureadaptor dafa,
307     EnsPSlice slice,
308     float identity,
309     const AjPStr anname,
310     AjPList bafs);
311 
312 AjBool ensDnaalignfeatureadaptorFetchAllbySliceexternaldatabasename(
313     EnsPDnaalignfeatureadaptor dafa,
314     EnsPSlice slice,
315     const AjPStr edbname,
316     const AjPStr anname,
317     AjPList bafs);
318 
319 AjBool ensDnaalignfeatureadaptorFetchByIdentifier(
320     EnsPDnaalignfeatureadaptor dafa,
321     ajuint identifier,
322     EnsPBasealignfeature *Pbaf);
323 
324 AjBool ensDnaalignfeatureadaptorRetrieveAllIdentifiers(
325     EnsPDnaalignfeatureadaptor dafa,
326     AjPList identifiers);
327 
328 /* Ensembl Protein Align Feature Adaptor */
329 
330 EnsPProteinalignfeatureadaptor ensRegistryGetProteinalignfeatureadaptor(
331     EnsPDatabaseadaptor dba);
332 
333 EnsPProteinalignfeatureadaptor ensProteinalignfeatureadaptorNew(
334     EnsPDatabaseadaptor dba);
335 
336 void ensProteinalignfeatureadaptorDel(
337     EnsPProteinalignfeatureadaptor *Ppafa);
338 
339 EnsPBaseadaptor ensProteinalignfeatureadaptorGetBaseadaptor(
340     EnsPProteinalignfeatureadaptor pafa);
341 
342 EnsPDatabaseadaptor ensProteinalignfeatureadaptorGetDatabaseadaptor(
343     EnsPProteinalignfeatureadaptor pafa);
344 
345 EnsPFeatureadaptor ensProteinalignfeatureadaptorGetFeatureadaptor(
346     EnsPProteinalignfeatureadaptor pafa);
347 
348 AjBool ensProteinalignfeatureadaptorFetchAllbyHitname(
349     EnsPProteinalignfeatureadaptor pafa,
350     const AjPStr hitname,
351     const AjPStr anname,
352     AjPList bafs);
353 
354 AjBool ensProteinalignfeatureadaptorFetchAllbyHitunversioned(
355     EnsPProteinalignfeatureadaptor pafa,
356     const AjPStr hitname,
357     const AjPStr anname,
358     AjPList bafs);
359 
360 AjBool ensProteinalignfeatureadaptorFetchAllbySlicecoverage(
361     EnsPProteinalignfeatureadaptor pafa,
362     EnsPSlice slice,
363     float coverage,
364     const AjPStr anname,
365     AjPList bafs);
366 
367 AjBool ensProteinalignfeatureadaptorFetchAllbySliceexternaldatabasename(
368     EnsPProteinalignfeatureadaptor pafa,
369     EnsPSlice slice,
370     const AjPStr edbname,
371     const AjPStr anname,
372     AjPList bafs);
373 
374 AjBool ensProteinalignfeatureadaptorFetchAllbySliceidentity(
375     EnsPProteinalignfeatureadaptor pafa,
376     EnsPSlice slice,
377     float identity,
378     const AjPStr anname,
379     AjPList bafs);
380 
381 AjBool ensProteinalignfeatureadaptorFetchByIdentifier(
382     EnsPProteinalignfeatureadaptor pafa,
383     ajuint identifier,
384     EnsPBasealignfeature *Pbaf);
385 
386 AjBool ensProteinalignfeatureadaptorRetrieveAllIdentifiers(
387     EnsPProteinalignfeatureadaptor pafa,
388     AjPList identifiers);
389 
390 /* Ensembl Supporting Feature Adaptor */
391 
392 EnsPSupportingfeatureadaptor ensRegistryGetSupportingfeatureadaptor(
393     EnsPDatabaseadaptor dba);
394 
395 EnsPDatabaseadaptor ensSupportingfeatureadaptorGetDatabaseadaptor(
396     EnsPSupportingfeatureadaptor sfa);
397 
398 AjBool ensSupportingfeatureadaptorFetchAllbyExon(
399     EnsPSupportingfeatureadaptor sfa,
400     EnsPExon exon,
401     AjPList bafs);
402 
403 AjBool ensSupportingfeatureadaptorFetchAllbyTranscript(
404     EnsPSupportingfeatureadaptor sfa,
405     EnsPTranscript transcript,
406     AjPList bafs);
407 
408 /*
409 ** End of prototype definitions
410 */
411 
412 
413 
414 
415 AJ_END_DECLS
416 
417 #endif /* !ENSALIGN_H */
418