1 /* @include ensfeature ******************************************************** 2 ** 3 ** Ensembl Feature functions 4 ** 5 ** @author Copyright (C) 1999 Ensembl Developers 6 ** @author Copyright (C) 2006 Michael K. Schuster 7 ** @version $Revision: 1.44 $ 8 ** @modified 2009 by Alan Bleasby for incorporation into EMBOSS core 9 ** @modified $Date: 2013/02/17 13:05:44 $ 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 ENSFEATURE_H 30 #define ENSFEATURE_H 31 32 /* ========================================================================= */ 33 /* ============================= include files ============================= */ 34 /* ========================================================================= */ 35 36 #include "ensanalysis.h" 37 #include "ensassemblyexception.h" 38 #include "ensdata.h" 39 #include "ensslice.h" 40 41 AJ_BEGIN_DECLS 42 43 44 45 46 /* ========================================================================= */ 47 /* =============================== constants =============================== */ 48 /* ========================================================================= */ 49 50 51 52 53 /* ========================================================================= */ 54 /* ============================== public data ============================== */ 55 /* ========================================================================= */ 56 57 /* @data EnsPFeaturepair ****************************************************** 58 ** 59 ** Ensembl Feature Pair. 60 ** 61 ** @alias EnsSFeaturepair 62 ** @alias EnsOFeaturepair 63 ** 64 ** @cc Bio::EnsEMBL::Featurepair 65 ** @attr SourceFeature [EnsPFeature] Source Ensembl Feature (Query) 66 ** @attr TargetFeature [EnsPFeature] Target Ensembl Feature (Target) 67 ** @attr Externaldatabase [EnsPExternaldatabase] Ensembl External Database 68 ** @attr Extradata [AjPStr] Extra data 69 ** @attr SourceSpecies [AjPStr] Source species name 70 ** @attr TargetSpecies [AjPStr] Target species name 71 ** @attr Groupidentifier [ajuint] Group identifier 72 ** @attr Levelidentifier [ajuint] Level identifier 73 ** @attr Evalue [double] e- or p-value 74 ** @attr Score [double] Score 75 ** @attr SourceCoverage [float] Source coverage in percent 76 ** @attr TargetCoverage [float] Target coverage in percent 77 ** @attr Identity [float] Sequence identity in percent 78 ** @attr Use [ajuint] Use counter 79 ** @@ 80 ******************************************************************************/ 81 82 typedef struct EnsSFeaturepair 83 { 84 EnsPFeature SourceFeature; 85 EnsPFeature TargetFeature; 86 EnsPExternaldatabase Externaldatabase; 87 AjPStr Extradata; 88 AjPStr SourceSpecies; 89 AjPStr TargetSpecies; 90 ajuint Groupidentifier; 91 ajuint Levelidentifier; 92 double Evalue; 93 double Score; 94 float SourceCoverage; 95 float TargetCoverage; 96 float Identity; 97 ajuint Use; 98 } EnsOFeaturepair; 99 100 #define EnsPFeaturepair EnsOFeaturepair* 101 102 103 104 105 /* @data EnsPAssemblyexceptionfeatureadaptor ********************************** 106 ** 107 ** Ensembl Assembly Exception Feature Adaptor. 108 ** 109 ** @alias EnsSAssemblyexceptionfeatureadaptor 110 ** @alias EnsOAssemblyexceptionfeatureadaptor 111 ** 112 ** @attr Adaptor [EnsPDatabaseadaptor] Ensembl Database Adaptor 113 ** @attr Cache [AjPList] 114 ** AJAX List of Ensembl Assembly Exception Feature objects 115 ** @attr CacheByIdentifier [AjPTable] 116 ** AJAX Table of Ensembl Assembly Exception Feature objects 117 ** @attr CacheBySlice [EnsPCache] Ensembl Cache by Ensembl Slice names 118 ** @@ 119 ******************************************************************************/ 120 121 typedef struct EnsSAssemblyexceptionfeatureadaptor 122 { 123 EnsPDatabaseadaptor Adaptor; 124 AjPList Cache; 125 AjPTable CacheByIdentifier; 126 EnsPCache CacheBySlice; 127 } EnsOAssemblyexceptionfeatureadaptor; 128 129 #define EnsPAssemblyexceptionfeatureadaptor EnsOAssemblyexceptionfeatureadaptor* 130 131 132 133 134 /* @data EnsPAssemblyexceptionfeature ***************************************** 135 ** 136 ** Ensembl Assembly Exception Feature. 137 ** 138 ** @alias EnsSAssemblyexceptionfeature 139 ** @alias EnsOAssemblyexceptionfeature 140 ** 141 ** @attr Use [ajuint] Use counter 142 ** @cc Bio::EnsEMBL::Storable 143 ** @attr Identifier [ajuint] SQL database-internal identifier 144 ** @attr Adaptor [EnsPAssemblyexceptionfeatureadaptor] 145 ** Ensembl Assembly Exception Feature Adaptor 146 ** @cc Bio::EnsEMBL::Feature 147 ** @attr Feature [EnsPFeature] Ensembl Feature 148 ** @cc Bio::EnsEMBL::Assemblyexceptionfeature 149 ** @attr ExceptionSlice [EnsPSlice] Exception Ensembl Slice 150 ** @attr Type [EnsEAssemblyexceptionType] Ensembl Assembly Exception type 151 ** @attr Padding [ajuint] Padding to alignment boundary 152 ** @@ 153 ******************************************************************************/ 154 155 typedef struct EnsSAssemblyexceptionfeature 156 { 157 ajuint Use; 158 ajuint Identifier; 159 EnsPAssemblyexceptionfeatureadaptor Adaptor; 160 EnsPFeature Feature; 161 EnsPSlice ExceptionSlice; 162 EnsEAssemblyexceptionType Type; 163 ajuint Padding; 164 } EnsOAssemblyexceptionfeature; 165 166 #define EnsPAssemblyexceptionfeature EnsOAssemblyexceptionfeature* 167 168 169 170 171 /* ========================================================================= */ 172 /* =========================== public functions ============================ */ 173 /* ========================================================================= */ 174 175 /* 176 ** Prototype definitions 177 */ 178 179 /* Ensembl Feature */ 180 181 EnsPFeature ensFeatureNewCpy(const EnsPFeature feature); 182 183 EnsPFeature ensFeatureNewIniN(EnsPAnalysis analysis, 184 AjPStr seqname, 185 ajint start, 186 ajint end, 187 ajint strand); 188 189 EnsPFeature ensFeatureNewIniS(EnsPAnalysis analysis, 190 EnsPSlice slice, 191 ajint start, 192 ajint end, 193 ajint strand); 194 195 EnsPFeature ensFeatureNewRef(EnsPFeature feature); 196 197 void ensFeatureDel(EnsPFeature *Pfeature); 198 199 EnsPAnalysis ensFeatureGetAnalysis(const EnsPFeature feature); 200 201 ajint ensFeatureGetEnd(const EnsPFeature feature); 202 203 AjPStr ensFeatureGetSequencename(const EnsPFeature feature); 204 205 EnsPSlice ensFeatureGetSlice(const EnsPFeature feature); 206 207 ajint ensFeatureGetStart(const EnsPFeature feature); 208 209 ajint ensFeatureGetStrand(const EnsPFeature feature); 210 211 AjBool ensFeatureSetAnalysis(EnsPFeature feature, EnsPAnalysis analysis); 212 213 AjBool ensFeatureSetEnd(EnsPFeature feature, ajint end); 214 215 AjBool ensFeatureSetSequencename(EnsPFeature, AjPStr seqname); 216 217 AjBool ensFeatureSetSlice(EnsPFeature feature, EnsPSlice slice); 218 219 AjBool ensFeatureSetStart(EnsPFeature feature, ajint start); 220 221 AjBool ensFeatureSetStrand(EnsPFeature feature, ajint strand); 222 223 AjBool ensFeatureTrace(const EnsPFeature feature, ajuint level); 224 225 ajuint ensFeatureCalculateLength(const EnsPFeature feature); 226 227 size_t ensFeatureCalculateMemsize(const EnsPFeature feature); 228 229 char ensFeatureCalculateStrand(const EnsPFeature feature); 230 231 ajint ensFeatureGetSeqregionEnd(const EnsPFeature feature); 232 233 ajuint ensFeatureGetSeqregionLength(const EnsPFeature feature); 234 235 const AjPStr ensFeatureGetSeqregionName(const EnsPFeature feature); 236 237 const EnsPSeqregion ensFeatureGetSeqregionObject(const EnsPFeature feature); 238 239 ajint ensFeatureGetSeqregionStart(const EnsPFeature feature); 240 241 ajint ensFeatureGetSeqregionStrand(const EnsPFeature feature); 242 243 AjBool ensFeatureFetchAllAlternativelocations(EnsPFeature feature, 244 AjBool all, 245 AjPList features); 246 247 AjBool ensFeatureFetchSequencename(const EnsPFeature feature, AjPStr *Pname); 248 249 AjBool ensFeatureMove(EnsPFeature feature, 250 ajint start, 251 ajint end, 252 ajint strand); 253 254 AjBool ensFeatureProject(const EnsPFeature feature, 255 const AjPStr csname, 256 const AjPStr csversion, 257 AjPList pss); 258 259 AjBool ensFeatureProjectslice(const EnsPFeature feature, 260 EnsPSlice slice, 261 AjPList pss); 262 263 EnsPFeature ensFeatureTransform(EnsPFeature feature, 264 const AjPStr csname, 265 const AjPStr csversion, 266 EnsPSlice slice); 267 268 EnsPFeature ensFeatureTransfer(EnsPFeature feature, EnsPSlice slice); 269 270 AjBool ensFeatureMatch(const EnsPFeature feature1, 271 const EnsPFeature feature2); 272 273 AjBool ensFeatureOverlap(const EnsPFeature feature1, 274 const EnsPFeature feature2); 275 276 AjBool ensFeatureSimilarity(const EnsPFeature feature1, 277 const EnsPFeature feature2); 278 279 int ensFeatureCompareEndAscending(const EnsPFeature feature1, 280 const EnsPFeature feature2); 281 282 int ensFeatureCompareEndDescending(const EnsPFeature feature1, 283 const EnsPFeature feature2); 284 285 int ensFeatureCompareStartAscending(const EnsPFeature feature1, 286 const EnsPFeature feature2); 287 288 int ensFeatureCompareStartDescending(const EnsPFeature feature1, 289 const EnsPFeature feature2); 290 291 /* AJAX List of Ensembl Feature objects */ 292 293 AjBool ensListFeatureSortEndAscending(AjPList features); 294 295 AjBool ensListFeatureSortEndDescending(AjPList features); 296 297 AjBool ensListFeatureSortStartAscending(AjPList features); 298 299 AjBool ensListFeatureSortStartDescending(AjPList features); 300 301 /* Ensembl Feature Adaptor */ 302 303 EnsPFeatureadaptor ensFeatureadaptorNew( 304 EnsPDatabaseadaptor dba, 305 const char *const *Ptablenames, 306 const char *const *Pcolumnnames, 307 const EnsPBaseadaptorLeftjoin leftjoins, 308 const char *defaultcondition, 309 const char *finalcondition, 310 AjBool (*Fstatement) (EnsPBaseadaptor ba, 311 const AjPStr statement, 312 EnsPAssemblymapper am, 313 EnsPSlice slice, 314 AjPList objects), 315 void *(*Fread) (const void *key), 316 void *(*Freference) (void *value), 317 AjBool (*Fwrite) (const void *value), 318 void (*Fdelete) (void **Pvalue), 319 size_t (*Fsize) (const void *value), 320 EnsPFeature (*Fgetfeature) (const void *object), 321 const char *label); 322 323 void ensFeatureadaptorDel(EnsPFeatureadaptor *Pfa); 324 325 EnsPBaseadaptor ensFeatureadaptorGetBaseadaptor( 326 const EnsPFeatureadaptor fa); 327 328 EnsPCache ensFeatureadaptorGetCache( 329 const EnsPFeatureadaptor fa); 330 331 EnsPDatabaseadaptor ensFeatureadaptorGetDatabaseadaptor( 332 const EnsPFeatureadaptor fa); 333 334 ajint ensFeatureadaptorGetMaximumlength( 335 const EnsPFeatureadaptor fa); 336 337 AjBool ensFeatureadaptorGetStartequalsend( 338 const EnsPFeatureadaptor fa); 339 340 AjBool ensFeatureadaptorSetColumnnames(EnsPFeatureadaptor fa, 341 const char *const *Pcolumnnames); 342 343 AjBool ensFeatureadaptorSetDefaultcondition(EnsPFeatureadaptor fa, 344 const char *defaultcondition); 345 346 AjBool ensFeatureadaptorSetFinalcondition(EnsPFeatureadaptor fa, 347 const char *finalcondition); 348 349 AjBool ensFeatureadaptorSetMaximumlength(EnsPFeatureadaptor fa, 350 ajint length); 351 352 AjBool ensFeatureadaptorSetStartequalsend(EnsPFeatureadaptor fa, 353 AjBool flag); 354 355 AjBool ensFeatureadaptorSetTablenames(EnsPFeatureadaptor fa, 356 const char *const *Ptablenames); 357 358 AjBool ensFeatureadaptorEscapeC(EnsPFeatureadaptor fa, 359 char **Ptxt, 360 const AjPStr str); 361 362 AjBool ensFeatureadaptorEscapeS(EnsPFeatureadaptor fa, 363 AjPStr *Pstr, 364 const AjPStr str); 365 366 AjBool ensFeatureadaptorConstraintAppendAnalysisname( 367 const EnsPFeatureadaptor fa, 368 AjPStr *Pconstraint, 369 const AjPStr anname); 370 371 AjBool ensFeatureadaptorFetchAllbyAnalysisname(EnsPFeatureadaptor fa, 372 const AjPStr anname, 373 AjPList objects); 374 375 AjBool ensFeatureadaptorFetchAllbySlice(EnsPFeatureadaptor fa, 376 EnsPSlice slice, 377 const AjPStr constraint, 378 const AjPStr anname, 379 AjPList objects); 380 381 AjBool ensFeatureadaptorFetchAllbySlicescore(EnsPFeatureadaptor fa, 382 EnsPSlice slice, 383 double score, 384 const AjPStr anname, 385 AjPList objects); 386 387 /* Ensembl Feature Pair */ 388 389 EnsPFeaturepair ensFeaturepairNewCpy(const EnsPFeaturepair fp); 390 391 EnsPFeaturepair ensFeaturepairNewIni(EnsPFeature srcfeature, 392 EnsPFeature trgfeature, 393 EnsPExternaldatabase edb, 394 AjPStr extra, 395 AjPStr srcspecies, 396 AjPStr trgspecies, 397 ajuint groupid, 398 ajuint levelid, 399 double evalue, 400 double score, 401 float srccoverage, 402 float trgcoverage, 403 float identity); 404 405 EnsPFeaturepair ensFeaturepairNewRef(EnsPFeaturepair fp); 406 407 void ensFeaturepairDel(EnsPFeaturepair *Pfp); 408 409 double ensFeaturepairGetEvalue( 410 const EnsPFeaturepair fp); 411 412 EnsPExternaldatabase ensFeaturepairGetExternaldatabase( 413 const EnsPFeaturepair fp); 414 415 AjPStr ensFeaturepairGetExtradata( 416 const EnsPFeaturepair fp); 417 418 ajuint ensFeaturepairGetGroupidentifier( 419 const EnsPFeaturepair fp); 420 421 float ensFeaturepairGetIdentity( 422 const EnsPFeaturepair fp); 423 424 ajuint ensFeaturepairGetLevelidentifier( 425 const EnsPFeaturepair fp); 426 427 double ensFeaturepairGetScore( 428 const EnsPFeaturepair fp); 429 430 float ensFeaturepairGetSourceCoverage( 431 const EnsPFeaturepair fp); 432 433 EnsPFeature ensFeaturepairGetSourceFeature( 434 const EnsPFeaturepair fp); 435 436 AjPStr ensFeaturepairGetSourceSpecies( 437 const EnsPFeaturepair fp); 438 439 float ensFeaturepairGetTargetCoverage( 440 const EnsPFeaturepair fp); 441 442 EnsPFeature ensFeaturepairGetTargetFeature( 443 const EnsPFeaturepair fp); 444 445 AjPStr ensFeaturepairGetTargetSpecies( 446 const EnsPFeaturepair fp); 447 448 AjBool ensFeaturepairSetEvalue(EnsPFeaturepair fp, 449 double evalue); 450 451 AjBool ensFeaturepairSetExternaldatabase(EnsPFeaturepair fp, 452 EnsPExternaldatabase edb); 453 454 AjBool ensFeaturepairSetExtradata(EnsPFeaturepair fp, 455 AjPStr extra); 456 457 AjBool ensFeaturepairSetGroupidentifier(EnsPFeaturepair fp, 458 ajuint groupid); 459 460 AjBool ensFeaturepairSetLevelidentifier(EnsPFeaturepair fp, 461 ajuint levelid); 462 463 AjBool ensFeaturepairSetScore(EnsPFeaturepair fp, 464 double score); 465 466 AjBool ensFeaturepairSetSourceCoverage(EnsPFeaturepair fp, 467 float coverage); 468 469 AjBool ensFeaturepairSetSourceFeature(EnsPFeaturepair fp, 470 EnsPFeature feature); 471 472 AjBool ensFeaturepairSetSourceSpecies(EnsPFeaturepair fp, 473 AjPStr species); 474 475 AjBool ensFeaturepairSetTargetCoverage(EnsPFeaturepair fp, 476 float coverage); 477 478 AjBool ensFeaturepairSetTargetFeature(EnsPFeaturepair fp, 479 EnsPFeature feature); 480 481 AjBool ensFeaturepairSetTargetSpecies(EnsPFeaturepair fp, 482 AjPStr species); 483 484 AjBool ensFeaturepairTrace(const EnsPFeaturepair fp, ajuint level); 485 486 AjBool ensFeaturepairSetIdentity(EnsPFeaturepair fp, float identity); 487 488 size_t ensFeaturepairCalculateMemsize(const EnsPFeaturepair fp); 489 490 EnsPFeaturepair ensFeaturepairTransfer(EnsPFeaturepair fp, 491 EnsPSlice slice); 492 493 EnsPFeaturepair ensFeaturepairTransform(const EnsPFeaturepair fp, 494 const AjPStr csname, 495 const AjPStr csversion); 496 497 ajint ensFeaturepairGetSourceEnd(const EnsPFeaturepair fp); 498 499 ajint ensFeaturepairGetSourceStart(const EnsPFeaturepair fp); 500 501 ajint ensFeaturepairGetSourceStrand(const EnsPFeaturepair fp); 502 503 ajint ensFeaturepairGetTargetEnd(const EnsPFeaturepair fp); 504 505 ajint ensFeaturepairGetTargetStart(const EnsPFeaturepair fp); 506 507 ajint ensFeaturepairGetTargetStrand(const EnsPFeaturepair fp); 508 509 int ensFeaturepairCompareSourceEndAscending(const EnsPFeaturepair fp1, 510 const EnsPFeaturepair fp2); 511 512 int ensFeaturepairCompareSourceEndDescending(const EnsPFeaturepair fp1, 513 const EnsPFeaturepair fp2); 514 515 int ensFeaturepairCompareSourceStartAscending(const EnsPFeaturepair fp1, 516 const EnsPFeaturepair fp2); 517 518 int ensFeaturepairCompareSourceStartDescending(const EnsPFeaturepair fp1, 519 const EnsPFeaturepair fp2); 520 521 /* AJAX List of Ensembl Feature Pair objects */ 522 523 AjBool ensListFeaturepairSortSourceEndAscending(AjPList fps); 524 525 AjBool ensListFeaturepairSortSourceEndDescending(AjPList fps); 526 527 AjBool ensListFeaturepairSortSourceStartAscending(AjPList fps); 528 529 AjBool ensListFeaturepairSortSourceStartDescending(AjPList fps); 530 531 /* Ensembl Assembly Exception Feature */ 532 533 EnsPAssemblyexceptionfeature ensAssemblyexceptionfeatureNewCpy( 534 const EnsPAssemblyexceptionfeature aef); 535 536 EnsPAssemblyexceptionfeature ensAssemblyexceptionfeatureNewIni( 537 EnsPAssemblyexceptionfeatureadaptor aefa, 538 ajuint identifier, 539 EnsPFeature feature, 540 EnsPSlice slice, 541 EnsEAssemblyexceptionType type); 542 543 EnsPAssemblyexceptionfeature ensAssemblyexceptionfeatureNewRef( 544 EnsPAssemblyexceptionfeature aef); 545 546 void ensAssemblyexceptionfeatureDel(EnsPAssemblyexceptionfeature *Paef); 547 548 EnsPAssemblyexceptionfeatureadaptor ensAssemblyexceptionfeatureGetAdaptor( 549 const EnsPAssemblyexceptionfeature aef); 550 551 EnsPSlice ensAssemblyexceptionfeatureGetExceptionSlice( 552 const EnsPAssemblyexceptionfeature aef); 553 554 EnsPFeature ensAssemblyexceptionfeatureGetFeature( 555 const EnsPAssemblyexceptionfeature aef); 556 557 ajuint ensAssemblyexceptionfeatureGetIdentifier( 558 const EnsPAssemblyexceptionfeature aef); 559 560 EnsEAssemblyexceptionType ensAssemblyexceptionfeatureGetType( 561 const EnsPAssemblyexceptionfeature aef); 562 563 AjBool ensAssemblyexceptionfeatureSetAdaptor( 564 EnsPAssemblyexceptionfeature aef, 565 EnsPAssemblyexceptionfeatureadaptor aefa); 566 567 AjBool ensAssemblyexceptionfeatureSetExceptionSlice( 568 EnsPAssemblyexceptionfeature aef, 569 EnsPSlice slice); 570 571 AjBool ensAssemblyexceptionfeatureSetFeature(EnsPAssemblyexceptionfeature aef, 572 EnsPFeature feature); 573 574 AjBool ensAssemblyexceptionfeatureSetIdentifier( 575 EnsPAssemblyexceptionfeature aef, 576 ajuint identifier); 577 578 AjBool ensAssemblyexceptionfeatureSetType(EnsPAssemblyexceptionfeature aef, 579 EnsEAssemblyexceptionType type); 580 581 size_t ensAssemblyexceptionfeatureCalculateMemsize( 582 const EnsPAssemblyexceptionfeature aef); 583 584 AjBool ensAssemblyexceptionfeatureFetchDisplayidentifier( 585 const EnsPAssemblyexceptionfeature aef, 586 AjPStr *Pidentifier); 587 588 AjBool ensAssemblyexceptionfeatureTrace(const EnsPAssemblyexceptionfeature aef, 589 ajuint level); 590 591 /* Ensembl Assembly Exception Feature Adaptor */ 592 593 EnsPAssemblyexceptionfeatureadaptor ensRegistryGetAssemblyexceptionfeatureadaptor( 594 EnsPDatabaseadaptor dba); 595 596 EnsPAssemblyexceptionfeatureadaptor ensAssemblyexceptionfeatureadaptorNew( 597 EnsPDatabaseadaptor dba); 598 599 void ensAssemblyexceptionfeatureadaptorDel( 600 EnsPAssemblyexceptionfeatureadaptor *Paefa); 601 602 EnsPDatabaseadaptor ensAssemblyexceptionfeatureadaptorGetDatabaseadaptor( 603 EnsPAssemblyexceptionfeatureadaptor aefa); 604 605 AjBool ensAssemblyexceptionfeatureadaptorFetchAll( 606 EnsPAssemblyexceptionfeatureadaptor aefa, 607 AjPList aefs); 608 609 AjBool ensAssemblyexceptionfeatureadaptorFetchAllbySlice( 610 EnsPAssemblyexceptionfeatureadaptor aefa, 611 EnsPSlice slice, 612 AjPList aefs); 613 614 AjBool ensAssemblyexceptionfeatureadaptorFetchByIdentifier( 615 EnsPAssemblyexceptionfeatureadaptor aefa, 616 ajuint identifier, 617 EnsPAssemblyexceptionfeature *Paef); 618 619 /* 620 ** End of prototype definitions 621 */ 622 623 624 625 626 AJ_END_DECLS 627 628 #endif /* !ENSFEATURE_H */ 629