halapi
hierarchichalalignmentformatapi
|
00001 /* 00002 * Copyright (C) 2012 by Glenn Hickey (hickey@soe.ucsc.edu) 00003 * 00004 * Released under the MIT license, see LICENSE.txt 00005 */ 00006 00007 #ifndef _HDF5ALIGNMENT_H 00008 #define _HDF5ALIGNMENT_H 00009 00010 #include <map> 00011 #include <H5Cpp.h> 00012 #include "hdf5Alignment.h" 00013 #include "halAlignmentInstance.h" 00014 #include "hdf5Genome.h" 00015 #include "hdf5MetaData.h" 00016 00017 typedef struct _stTree stTree; 00018 00019 namespace hal { 00020 00021 class HDF5Genome; 00025 class HDF5Alignment : public Alignment 00026 { 00027 public: 00028 00029 ~HDF5Alignment(); 00030 00031 void createNew(const std::string& alignmentPath); 00032 void open(const std::string& alignmentPath, 00033 bool readOnly); 00034 void close(); 00035 00036 Genome* addLeafGenome(const std::string& name, 00037 const std::string& parentName, 00038 double branchLength); 00039 00040 Genome* addRootGenome(const std::string& name, 00041 double branchLength); 00042 00043 void removeGenome(const std::string& name); 00044 00045 const Genome* openConstGenome(const std::string& name) const; 00046 00047 Genome* openGenome(const std::string& name); 00048 00049 std::string getRootName() const; 00050 00051 std::string getParentName(const std::string& name) const; 00052 00053 double getBranchLength(const std::string& parentName, 00054 const std::string& childName) const; 00055 00056 std::vector<std::string> 00057 getChildNames(const std::string& name) const; 00058 00059 std::vector<std::string> 00060 getLeafNamesBelow(const std::string& name) const; 00061 00062 hal_size_t getNumGenomes() const; 00063 00064 MetaData* getMetaData(); 00065 00066 const MetaData* getMetaData() const; 00067 00068 std::string getNewickTree() const; 00069 00070 protected: 00071 // Nobody creates this class except through the interface. 00072 friend AlignmentPtr hdf5AlignmentInstance(); 00073 friend AlignmentConstPtr hdf5AlignmentInstanceReadOnly(); 00074 friend AlignmentPtr 00075 hdf5AlignmentInstance(const H5::FileCreatPropList& fileCreateProps, 00076 const H5::FileAccPropList& fileAccessProps, 00077 const H5::DSetCreatPropList& datasetCreateProps); 00078 friend AlignmentConstPtr 00079 hdf5AlignmentInstanceReadOnly(const H5::FileCreatPropList& fileCreateProps, 00080 const H5::FileAccPropList& fileAccessProps, 00081 const H5::DSetCreatPropList& datasetCreateProps); 00082 00083 HDF5Alignment(); 00084 HDF5Alignment(const H5::FileCreatPropList& fileCreateProps, 00085 const H5::FileAccPropList& fileAccessProps, 00086 const H5::DSetCreatPropList& datasetCreateProps); 00087 00088 void loadTree(); 00089 void writeTree(); 00090 void addGenomeToTree(const std::string& name, 00091 const std::pair<std::string, double>& parentName, 00092 const std::vector<std::pair<std::string, double> >& 00093 childNames); 00094 00095 protected: 00096 00097 H5::H5File* _file; 00098 H5::FileCreatPropList _cprops; 00099 H5::FileAccPropList _aprops; 00100 H5::DSetCreatPropList _dcprops; 00101 int _flags; 00102 HDF5MetaData* _metaData; 00103 static const H5std_string MetaGroupName; 00104 static const H5std_string TreeGroupName; 00105 static const H5std_string GenomesGroupName; 00106 stTree* _tree; 00107 mutable std::map<std::string, stTree*> _nodeMap; 00108 bool _dirty; 00109 mutable std::map<std::string, HDF5Genome*> _openGenomes; 00110 }; 00111 00112 } 00113 #endif 00114