00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
#ifndef _gnSequence_h_
00014
#define _gnSequence_h_
00015
00016
#include "gn/gnDefs.h"
00017
00018
#include <string>
00019
#include <iostream>
00020
#include <list>
00021
#include "gn/gnBaseSource.h"
00022
#include "gn/gnGenomeSpec.h"
00023
#include "gn/gnSourceSpec.h"
00024
#include "gn/gnStringSpec.h"
00025
#include "gn/gnBaseFilter.h"
00026
#include "gn/gnCompare.h"
00027
00035 class GNDLLEXPORT gnSequence :
public gnClone
00036 {
00037
public:
00041 gnSequence();
00046 gnSequence(
const gnSeqC* seq );
00051 gnSequence(
const string& str );
00056 gnSequence(
const gnGenomeSpec& gngs );
00061 gnSequence(
const gnFragmentSpec& gnfs );
00067 gnSequence(
const gnContigSpec& gncs );
00073 gnSequence(
gnSeqC *bases,
const gnSeqI length);
00078 gnSequence(
const gnSequence& seq);
00082 ~gnSequence();
00083
00087 gnSequence& operator=(
const gnSequence& seq);
00088
00089 gnSequence*
Clone()
const;
00090
00095
gnSeqI contigListSize()
const;
00100
gnSeqI contigListLength()
const;
00107
uint32 contigIndexByBase(
const gnSeqI baseI)
const;
00114 gnSequence contig(
const uint32 contigI)
const;
00121 gnSequence contigByBase(
const gnSeqI baseI)
const;
00128
virtual gnSeqI contigStart(
const uint32 contigI)
const;
00135
virtual gnSeqI contigLength(
const uint32 contigI)
const;
00143
virtual uint32 contigIndexByName( string& contigName)
const;
00150
virtual string contigName(
const uint32 contigI)
const;
00158
virtual gnSequence contigByName( string& contigName)
const;
00165
virtual void merge(
const gnSeqI startI,
const gnSeqI endI);
00172
virtual void mergeContigs(
const uint32 startC,
const uint32 endC);
00178
virtual void splitContig(
const gnSeqI splitI,
const uint32 contigI=ALL_CONTIGS);
00179
00180
virtual void setContigName(
const uint32 contigI,
const string& contig_name);
00181
00186
virtual uint32 getFeatureListLength()
const;
00193
virtual gnBaseFeature* getFeature(
const uint32 featureI)
const;
00200
virtual void getContainedFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector, vector<uint32>& index_vector)
const;
00207
virtual void getIntersectingFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector, vector<uint32>& index_vector)
const;
00213
virtual uint32 addFeature(
gnBaseFeature* feature);
00219
virtual void removeFeature(
const uint32 featureI);
00225
virtual void getBrokenFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector)
const;
00232
virtual uint32 getHeaderListLength(
const uint32 contigI)
const;
00241
virtual gnBaseHeader* getHeader(
const uint32 contigI,
const uint32 headerI)
const;
00249
virtual void addHeader(
const uint32 contigI,
gnBaseHeader* header,
const uint32 headerI);
00256
virtual void removeHeader(
const uint32 contigI,
const uint32 headerI);
00263
virtual void setReverseComplement(
const boolean revComp,
const uint32 contigI=ALL_CONTIGS);
00270
virtual boolean isReverseComplement(
const uint32 contigI=ALL_CONTIGS );
00275
virtual boolean isCircular()
const;
00282
virtual void setCircular(
const boolean value );
00283
00290
virtual void globalToLocal(
uint32& contigI,
gnSeqI& baseI)
const;
00291
00299
virtual void localToGlobal(
const uint32 contigI,
gnSeqI& baseI)
const;
00307
virtual void globalToSource(
uint32& contigI,
gnSeqI& baseI)
const;
00317
virtual void localToSource(
uint32& contigI,
gnSeqI& baseI)
const;
00326
virtual bool LoadSource(
const string sourcename);
00327
00332
virtual void setFilter(
const gnBaseFilter* filt);
00333
00339
virtual void setFilterList(list<const gnBaseFilter*>& filt_list);
00340
00344
virtual list<const gnBaseFilter*> getFilterList()
const;
00345
00350
virtual void assign(gnSequence& seq);
00351
00352
00356
void operator=(gnSequence& seq);
00357
boolean operator==(
const gnSequence& seq)
const;
00358
boolean operator!=(
const gnSequence& seq)
const;
00359
boolean operator<(
const gnSequence& seq)
const;
00360
boolean operator<=(
const gnSequence& seq)
const;
00361
boolean operator>(
const gnSequence& seq)
const;
00362
boolean operator>=(
const gnSequence& seq)
const;
00366 gnSequence& operator+=(
const gnSequence& seq);
00373
virtual int compare(
const gnSequence& seq)
const;
00374
virtual int compare(
const string& str)
const;
00375
00380
virtual void append(
const gnSequence& seq);
00388
virtual void insert(
const gnSeqI offset,
const gnSeqC *bases,
const gnSeqI length);
00395
virtual void insert(
const gnSeqI offset,
const gnSequence& seq);
00402
virtual void insert(
const gnSeqI offset,
const gnGenomeSpec& gnbs);
00403
00407 gnSequence
const operator+(
const gnSequence& seq)
const;
00408
00415 gnSequence subseq(
const gnSeqI offset,
const gnSeqI length)
const;
00421
virtual void erase(
const gnSeqI offset=0,
const gnSeqI length=
GNSEQI_END );
00422
00426
friend std::istream&
operator>>(std::istream& is, gnSequence& gns);
00430
friend std::ostream&
operator<<(std::ostream& os,
const gnSequence& gns);
00431
00436
virtual gnSeqI length()
const;
00441
virtual gnSeqI size()
const;
00442
00449
virtual string ToString(
const gnSeqI length=
GNSEQI_END,
const gnSeqI offset=1 )
const;
00457
virtual boolean ToString( string& str,
const gnSeqI length=
GNSEQI_END,
const gnSeqI offset=1 )
const;
00467
virtual boolean ToArray(
gnSeqC* pSeqC,
gnSeqI length,
const gnSeqI offset=1 )
const;
00473
virtual gnSeqC GetSeqC(
const gnSeqI offset )
const;
00478
gnSeqC operator[](
const gnSeqI offset )
const;
00479
00484
virtual gnGenomeSpec* GetSpec()
const;
00489
virtual void SetSpec(
gnGenomeSpec* s);
00490
00499
virtual gnSeqI find(
const gnSequence& search,
const gnSeqI offset=0)
const;
00500
00501
private:
00502 gnGenomeSpec *spec;
00503 list<const gnBaseFilter*> filter_list;
00504 const gnCompare* comparator;
00505 };
00506
00507
00508
GNDLLEXPORT
00509 std::istream&
operator>>(std::istream& is, gnSequence& gns);
00510
GNDLLEXPORT
00511 std::ostream&
operator<<(std::ostream& os,
const gnSequence& gns);
00512
00513
00514
inline
00515 void gnSequence::operator=(gnSequence& seq){
00516
spec = seq.
spec->
Clone();
00517 }
00518
inline
00519 void gnSequence::assign(gnSequence& seq){
00520
spec = seq.
spec->
Clone();
00521 }
00522
inline
00523 boolean gnSequence::operator==(
const gnSequence& seq)
const{
00524
return (
compare(seq)==0);
00525 }
00526
inline
00527 boolean gnSequence::operator!=(
const gnSequence& seq)
const{
00528
return (
compare(seq)!=0);
00529 }
00530
inline
00531 boolean gnSequence::operator<(
const gnSequence& seq)
const{
00532
return (
compare(seq)<0);
00533 }
00534
inline
00535 boolean gnSequence::operator<=(
const gnSequence& seq)
const{
00536
return (
compare(seq)<=0);
00537 }
00538
inline
00539 boolean gnSequence::operator>(
const gnSequence& seq)
const{
00540
return (
compare(seq)>0);
00541 }
00542
inline
00543 boolean gnSequence::operator>=(
const gnSequence& seq)
const{
00544
return (
compare(seq)>=0);
00545 }
00546
00547
inline
00548 gnSequence&
gnSequence::operator+=(
const gnSequence& seq){
00549
insert(
GNSEQI_END, *seq.
spec);
00550
return *
this;
00551 }
00552
inline
00553 void gnSequence::append(
const gnSequence& seq){
00554
insert(
GNSEQI_END, *seq.
spec);
00555 }
00556
00557
inline
00558 uint32 gnSequence::getFeatureListLength()
const{
00559
return spec->
GetFeatureListLength();
00560 }
00561
inline
00562 gnBaseFeature*
gnSequence::getFeature(
const uint32 featureI)
const{
00563
return spec->
GetFeature(featureI);
00564 }
00565
inline
00566 uint32 gnSequence::addFeature(
gnBaseFeature* feature){
00567
return spec->
AddFeature(feature);
00568 }
00569
inline
00570 void gnSequence::removeFeature(
const uint32 featureI){
00571
spec->
RemoveFeature(featureI);
00572 }
00573
inline
00574 void gnSequence::getContainedFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector, vector<uint32>& index_vector)
const{
00575
spec->
GetContainedFeatures(lt, feature_vector, index_vector);
00576 }
00577
inline
00578 void gnSequence::getIntersectingFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector, vector<uint32>& index_vector)
const{
00579
spec->
GetIntersectingFeatures(lt, feature_vector, index_vector);
00580 }
00581
inline
00582 void gnSequence::getBrokenFeatures(
const gnLocation& lt, vector<gnBaseFeature*>& feature_vector)
const{
00583
spec->
GetBrokenFeatures(lt, feature_vector);
00584 }
00585
00586
inline
00587 boolean gnSequence::isCircular()
const{
00588
return spec->
IsCircular();
00589 }
00590
00591
inline
00592 void gnSequence::setCircular(
const boolean value ){
00593
spec->
SetCircular(value);
00594 }
00595
inline
00596 void gnSequence::insert(
const gnSeqI offset,
const gnSequence& seq){
00597
insert(offset, *seq.
spec);
00598 }
00599
00600
00601
inline
00602 gnSeqI gnSequence::length()
const{
00603
return spec->
GetLength();
00604 }
00605
inline
00606 gnSeqI gnSequence::size()
const{
00607
return spec->
GetLength();
00608 }
00609
inline
00610 gnGenomeSpec*
gnSequence::GetSpec()
const{
00611
return spec;
00612 }
00613
inline
00614 void gnSequence::SetSpec(
gnGenomeSpec* s){
00615
if(
spec != NULL)
00616
delete spec;
00617
spec = s;
00618 }
00619
00620
inline
00621 void gnSequence::setFilter(
const gnBaseFilter* filt){
00622
filter_list.clear();
00623
if(filt != NULL)
00624
filter_list.push_back(filt);
00625 }
00626
inline
00627 void gnSequence::setFilterList(list<const gnBaseFilter*>& filt_list){
00628
filter_list = filt_list;
00629 }
00630
inline
00631 list<const gnBaseFilter*>
gnSequence::getFilterList()
const{
00632
return filter_list;
00633 }
00634
00635
00636
#endif
00637