<
classTDstTreeNode,
classTSrcTreeNode,
classTNodeConvFunc>
78 if(delta_level == 0) {
85parent_node->AddNode(pnode);
90 if(delta_level == 1) {
94parent_node->AddNode(pnode);
98 if(delta_level == -1) {
112 unsigned intuid = src_node.GetValue().GetId();
113pnode->GetValue().SetId(uid);
116 returnpnode.release();
129 template<
classTDynamicTree,
classTSrcBioTree,
classTNodeConvFunc>
131 constTSrcBioTree& bio_tree,
132TNodeConvFunc node_conv)
135 typedef typenameTSrcBioTree::TBioTreeNode TSrcTreeNodeType;
136 typedef typenameTDynamicTree::TBioTreeNode TDstTreeNodeType;
142 constTSrcTreeNodeType *
n= bio_tree.GetTreeNode();
157 template<
classTDynamicTree,
classTTreeNode,
classTNodeConvFunc>
159 constTTreeNode* src_tree,
160TNodeConvFunc node_conv)
164 typedefTTreeNode TSrcTreeNodeType;
165 typedef typenameTDynamicTree::TBioTreeNode TDstTreeNodeType;
181 template<
classTDynamicTree,
classTTreeNode,
classTNodeConvFunc>
183TNodeConvFunc node_conv,
184TTreeNode*& dst_node)
186 typedefTTreeNode TDstTreeNodeType;
187 typedef typenameTDynamicTree::TBioTreeNode TSrcTreeNodeType;
192 constTSrcTreeNodeType *
n= dyn_tree.GetTreeNode();
210 template<
classTBioTreeContainer,
classTDynamicTree>
219 typedef typenameTNodeList::value_type::element_type
TCNode;
228 m_NodeList= &(tree_container->SetNodes().Set());
235 if(delta_level < 0) {
248cnode->SetParent(node_parent->GetValue().GetId());
252TDynamicNodeValueType::TNodeFeaturesType::TFeatureList TFList;
253 constTFList& flist = v.features.GetFeatureList();
255 if(!flist.empty()) {
259 ITERATE(
typenameTFList, it, flist) {
261 const stringfvalue = it->value;
264cfeat->SetFeatureid(fid);
265cfeat->SetValue(fvalue);
267fset.Set().push_back(cfeat);
286 template<
classTBioTreeContainer,
classTDynamicTree>
288 constTDynamicTree& dyn_tree)
292 typedef typenameTBioTreeContainer::TFdict TContainerDict;
298TContainerDict& fd = tree_container.SetFdict();
299 typenameTContainerDict::Tdata& feat_list = fd.Set();
301 typenameTContainerDict::Tdata::value_type::element_type TCFeatureDescr;
305 const string& fvalue = it->second;
312feat_list.push_back(d);
319 typedef typenameTDynamicTree::TBioTreeNode TTreeNode;
320 constTTreeNode *
n= dyn_tree.GetTreeNode();
323func(&tree_container);
334 template<
classTBioTreeContainer,
classTDynamicTree>
336 constTBioTreeContainer& tree_container,
337 boolpreserve_node_ids =
false)
343 typedef typenameTBioTreeContainer::TFdict TContainerDict;
346 constTContainerDict& fd = tree_container.GetFdict();
347 const typenameTContainerDict::Tdata& feat_list = fd.Get();
349 ITERATE(
typenameTContainerDict::Tdata, it, feat_list) {
351 const string& fvalue = (*it)->GetName();
357 typedef typenameTBioTreeContainer::TNodes TCNodeSet;
358 typedef typenameTCNodeSet::Tdata TNodeList;
359 typedef typenameTNodeList::value_type::element_type TCNode;
361 constTNodeList node_list = tree_container.GetNodes().Get();
363std::map<TBioTreeNodeId, typename TDynamicTree::TBioTreeNode*> pmap;
365 ITERATE(
typenameTNodeList, it, node_list) {
371 typedef typenameTDynamicTree::TBioTreeNode TDynamicNodeType;
372 typedef typenameTDynamicNodeType::TValueType TDynamicNodeValueType;
374TDynamicNodeValueType v;
375 if(preserve_node_ids) {
379 typedef typenameTCNode::TFeatures TCNodeFeatureSet;
381 if(cnode->CanGetFeatures()) {
382 constTCNodeFeatureSet& fset = cnode->GetFeatures();
384 const typenameTCNodeFeatureSet::Tdata& flist = fset.Get();
386 ITERATE(
typenameTCNodeFeatureSet::Tdata, fit, flist) {
387 unsigned intfid = (*fit)->GetFeatureid();
388 const string& fvalue = (*fit)->GetValue();
390v.features.SetFeature(fid, fvalue);
396 if(cnode->CanGetParent()) {
398 typenameTDynamicTree::TBioTreeNode* node =
NULL;
400 typenameTDynamicTree::TBioTreeNode* parent_node = pmap[parent_id];
401 if(parent_node !=
NULL) {
402node = dyn_tree.AddNode(v, parent_node);
403 if(!preserve_node_ids) {
404dyn_tree.SetNodeId(node);
413TDynamicNodeType* dnode =
newTDynamicNodeType(v);
414dyn_tree.SetTreeNode(dnode);
415 if(!preserve_node_ids) {
416dyn_tree.SetNodeId(dnode);
427 template<
classTBioTreeContainer,
classTDynamicForest>
429 constTDynamicForest& dyn_forest)
433 typedef typenameTBioTreeContainer::TFdict TContainerDict;
439TContainerDict& fd = tree_container.SetFdict();
440 typenameTContainerDict::Tdata& feat_list = fd.Set();
442 typenameTContainerDict::Tdata::value_type::element_type TCFeatureDescr;
446 const string& fvalue = it->second;
453feat_list.push_back(d);
459 typedef typenameTDynamicForest::TBioTree::TBioTreeNode TTreeNode;
461func(&tree_container);
463 for(
unsigned int i=0;
i<dyn_forest.GetTrees().
size(); ++
i) {
464 constTTreeNode *
n= dyn_forest.GetTrees()[
i]->GetTreeNode();
474 template<
classTBioTreeContainer,
classTDynamicForest>
476 constTBioTreeContainer& tree_container)
482 typedef typenameTBioTreeContainer::TFdict TContainerDict;
485 constTContainerDict& fd = tree_container.GetFdict();
486 const typenameTContainerDict::Tdata& feat_list = fd.Get();
488 ITERATE(
typenameTContainerDict::Tdata, it, feat_list) {
490 const string& fvalue = (*it)->GetName();
496 typedef typenameTBioTreeContainer::TNodes TCNodeSet;
497 typedef typenameTCNodeSet::Tdata TNodeList;
498 typedef typenameTNodeList::value_type::element_type TCNode;
500 constTNodeList node_list = tree_container.GetNodes().Get();
502 typenameTDynamicForest::TBioTree* current_tree =
NULL;
504 ITERATE(
typenameTNodeList, it, node_list) {
510 typedef typenameTDynamicForest::TBioTree TDynamicTree;
511 typedef typenameTDynamicTree::TBioTreeNode TDynamicNodeType;
512 typedef typenameTDynamicNodeType::TValueType TDynamicNodeValueType;
514TDynamicNodeValueType v;
517 typedef typenameTCNode::TFeatures TCNodeFeatureSet;
519 if(cnode->CanGetFeatures()) {
520 constTCNodeFeatureSet& fset = cnode->GetFeatures();
522 const typenameTCNodeFeatureSet::Tdata& flist = fset.Get();
524 ITERATE(
typenameTCNodeFeatureSet::Tdata, fit, flist) {
525 unsigned intfid = (*fit)->GetFeatureid();
526 const string& fvalue = (*fit)->GetValue();
528v.features.SetFeature(fid, fvalue);
534 if(cnode->CanGetParent()) {
535 if(current_tree !=
NULL) {
537current_tree->AddNode(v, parent_id);
544current_tree =
new typenameTDynamicForest::TBioTree();
545dyn_forest.AddTree(current_tree);
547TDynamicNodeType* dnode =
newTDynamicNodeType(v);
548current_tree->SetTreeNode(dnode);
578 template<
classTITaxon4Each,
classTITaxon1Node,
579 classTITreeIterator,
classTBioTreeContainer>
583 typedef typenameTITreeIterator::EAction
EAction;
587 typedef typenameTNodeList::value_type::element_type
TCNode;
598 m_NodeList= &(tree_container->SetNodes().Set());
612 if(uid > (
unsigned int)
m_MaxUID) {
616vector<TTaxId>::size_type psize =
m_Parents.size();
619cnode->SetParent(
TAX_ID_TO(
int, parent_tax_id));
631cfeat->SetValue(pNode->GetName());
633fset.Set().push_back(cfeat);
639cfeat->SetValue(pNode->GetName());
641fset.Set().push_back(cfeat);
648cfeat->SetValue(pNode->GetBlastName());
650fset.Set().push_back(cfeat);
657 intv = pNode->GetRank();
660fset.Set().push_back(cfeat);
667 intv = pNode->GetDivision();
670fset.Set().push_back(cfeat);
677 intv = pNode->GetGC();
680fset.Set().push_back(cfeat);
687 intv = pNode->GetMGC();
690fset.Set().push_back(cfeat);
697 intv = pNode->IsUncultured();
700fset.Set().push_back(cfeat);
708fset.Set().push_back(cfeat);
713 returnTITreeIterator::eOk;
719 m_Parents.push_back(pParent->GetTaxId());
720 returnTITreeIterator::eOk;
727 returnTITreeIterator::eOk;
742 template<
classTBioTreeContainer>
744 unsigned intfeature_id,
745 const string& feature_name)
747 typedef typenameTBioTreeContainer::TFdict TContainerDict;
748 typedef typenameTContainerDict::Tdata::value_type::element_type TFeatureDescr;
750TContainerDict& fd = tree_container.SetFdict();
751 typenameTContainerDict::Tdata& feat_list = fd.Set();
754 ITERATE(
typenameTContainerDict::Tdata, it, feat_list) {
755 if( (
unsigned int)((*it)->GetId()) == feature_id )
760d->SetId(feature_id);
761d->SetName(feature_name);
763feat_list.push_back(d);
768 template<
classTBioTreeContainer,
769 classTTaxon1,
classTITaxon1Node,
classTITreeIterator>
773 typedef typenameTITreeIterator::I4Each
T4Each;
775TITreeIterator, TBioTreeContainer>
791 constTITaxon1Node* tax_node=0;
792 boolres = tax.LoadSubtree(tax_id, &tax_node);
795tax_tree_iter->GoNode(tax_node);
797tax_tree_iter->TraverseDownward(tax_vis);
808tax_tree_iter->GoRoot();
810tax_tree_iter->TraverseDownward(tax_vis);
843 template<
classTBioTreeContainer>
849 typedef typenameTBioTreeContainer::TNodes TCNodeSet;
850 typedef typenameTCNodeSet::Tdata TNodeList;
851 typedef typenameTNodeList::value_type::element_type TCNode;
853 constTNodeList node_list = tree_container.GetNodes().Get();
855 intnumber_roots = 0;
857 ITERATE(
typenameTNodeList, it, node_list) {
861 if(!cnode->CanGetParent())
866 return(number_roots > 1);
Things for representing and manipulating bio trees.
Visitor functor to convert dynamic tree nodes to ASN.1 BioTree container.
Taxon1 tree visitor functor.
Visitor functor to convert one tree to another.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define TAX_ID_TO(T, tax_id)
SStrictId_Tax::TId TTaxId
Taxon id type.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
virtual ~CTaxon1NodeConvertVisitor()
TNodeList::value_type::element_type TCNode
void TreeConvert2Dynamic(TDynamicTree &dyn_tree, const TTreeNode *src_tree, TNodeConvFunc node_conv)
Convert CTreeNode<> to dynamic tree using a node converter.
TCNodeFeatureSet::Tdata TNodeFeatureList
void BioTreeConvert2Dynamic(TDynamicTree &dyn_tree, const TSrcBioTree &bio_tree, TNodeConvFunc node_conv)
Convert biotree to dynamic tree using a node converter.
void BioTreeAddFeatureToDictionary(TBioTreeContainer &tree_container, unsigned int feature_id, const string &feature_name)
void SetupFeatureDictionary(TBioTreeContainer &tree_container)
Add elements to the feature dictionary.
CTaxon1NodeConvertVisitor(TBioTreeContainer *tree_container)
TNodeList::value_type::element_type TCNode
TDynamicNodeType::TValueType TDynamicNodeValueType
TCNode::TFeatures TCNodeFeatureSet
Fun TreeDepthFirstTraverse(TTreeNode &tree_node, Fun func)
Depth-first tree traversal algorithm.
ETreeTraverseCode
Tree traverse code returned by the traverse predicate function.
unsigned int TBioTreeNodeId
Tree node id. Every node has its unique id in the tree.
TSrcTreeNode TSrcTreeNodeType
TCNode::TFeatures TCNodeFeatureSet
ETaxon1ConvFeatures
Feature ids for Bio-Tree.
TNodeConvFunc & m_ConvFunc
void operator()(TBioTreeContainer &tree_container, TTaxon1 &tax, TTaxId tax_id)
TBioTreeContainer::TNodes TCNodeSet
unsigned int TBioTreeFeatureId
Feature Id.
TDstTreeNodeType * MakeNewTreeNode(const TSrcTreeNodeType &src_node)
TNodeFeatureList::value_type::element_type TCNodeFeature
TBioTreeContainer * m_TreeContainer
CTree2TreeFunc(TNodeConvFunc &func)
CTaxon1ConvertToBioTreeContainer()
void BioTreeConvert2Container(TBioTreeContainer &tree_container, const TDynamicTree &dyn_tree)
Convert Dynamic tree to ASN.1 BioTree container.
virtual EAction LevelBegin(const TITaxon1Node *pParent)
TBioTreeFeatureId Register(const string &feature_name)
Register new feature, return its id.
vector< TTaxId > m_Parents
TNodeFeatureList::value_type::element_type TCNodeFeature
void BioTreeConvertContainer2Dynamic(TDynamicTree &dyn_tree, const TBioTreeContainer &tree_container, bool preserve_node_ids=false)
Convert ASN.1 BioTree container to dynamic tree.
TBioTreeContainer * m_Container
void operator()(TBioTreeContainer &tree_container, CRef< TITreeIterator > tax_tree_iter)
TDstTreeNodeType * m_DstTree
virtual EAction Execute(const TITaxon1Node *pNode)
CTaxon1NodeConvertVisitor< T4Each, TITaxon1Node, TITreeIterator, TBioTreeContainer > TTaxon1Visitor
TDstTreeNode TDstTreeNodeType
TCNodeFeatureSet::Tdata TNodeFeatureList
CBioTreeConvert2ContainerFunc(TBioTreeContainer *tree_container)
TITreeIterator::EAction EAction
TDstTreeNodeType * GetTreeNode()
TCNodeSet::Tdata TNodeList
TBioTreeContainer::TNodes TCNodeSet
const TFeatureDict & GetFeatureDict() const
Get reference on the internal map.
bool BioTreeContainerIsForest(const TBioTreeContainer &tree_container)
Function to determine tree if a given biotree container is a single tree or a forest.
ETreeTraverseCode operator()(const TDynamicNodeType &node, int delta_level)
TDynamicTree::TBioTreeNode TDynamicNodeType
TTreeNode * DynamicConvert2Tree(TDynamicTree &dyn_tree, TNodeConvFunc node_conv, TTreeNode *&dst_node)
Convert dynamic tree to CTreeNode<>, returned CTReeNode<> to be deleted by caller.
vector< TDstTreeNodeType * > m_TreeStack
virtual EAction LevelEnd(const TITaxon1Node *)
void BioTreeForestConvert2Container(TBioTreeContainer &tree_container, const TDynamicForest &dyn_forest)
Convert forest of Dynamic trees to ASN.1 BioTree container.
int GetMaxNodeId() const
Get max node id (available after conversion)
TITreeIterator::I4Each T4Each
void BioTreeConvertContainer2DynamicForest(TDynamicForest &dyn_forest, const TBioTreeContainer &tree_container)
Convert ASN.1 BioTree container to forest of dynamic trees.
TCNodeSet::Tdata TNodeList
ETreeTraverseCode operator()(const TSrcTreeNodeType &node, int delta_level)
@ eTreeTraverse
Keep traversal.
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4