You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.2 KiB
C
170 lines
5.2 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkPhyloXMLTreeReader.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkPhyloXMLTreeReader
|
||
|
* @brief read vtkTree from PhyloXML formatted file
|
||
|
*
|
||
|
* vtkPhyloXMLTreeReader is a source object that reads PhyloXML tree format
|
||
|
* files.
|
||
|
* The output of this reader is a single vtkTree data object.
|
||
|
*
|
||
|
*
|
||
|
* @warning
|
||
|
* This reader does not implement the entire PhyloXML specification.
|
||
|
* It currently only supports the following tags:
|
||
|
* phylogeny, name, description, confidence, property, clade, branch_length,
|
||
|
* color, red, green, and blue.
|
||
|
* This reader also only supports a single phylogeny per file.
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkTree vtkXMLReader vtkPhyloXMLTreeWriter
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkPhyloXMLTreeReader_h
|
||
|
#define vtkPhyloXMLTreeReader_h
|
||
|
|
||
|
#include "vtkIOInfovisModule.h" // For export macro
|
||
|
#include "vtkSmartPointer.h" // For SP ivar
|
||
|
#include "vtkXMLReader.h"
|
||
|
|
||
|
class vtkBitArray;
|
||
|
class vtkMutableDirectedGraph;
|
||
|
class vtkTree;
|
||
|
class vtkXMLDataElement;
|
||
|
|
||
|
class VTKIOINFOVIS_EXPORT vtkPhyloXMLTreeReader : public vtkXMLReader
|
||
|
{
|
||
|
public:
|
||
|
static vtkPhyloXMLTreeReader* New();
|
||
|
vtkTypeMacro(vtkPhyloXMLTreeReader, vtkXMLReader);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get the output of this reader.
|
||
|
*/
|
||
|
vtkTree* GetOutput();
|
||
|
vtkTree* GetOutput(int idx);
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkPhyloXMLTreeReader();
|
||
|
~vtkPhyloXMLTreeReader() override;
|
||
|
|
||
|
/**
|
||
|
* Read the input PhyloXML and populate our output vtkTree.
|
||
|
*/
|
||
|
void ReadXMLData() override;
|
||
|
|
||
|
/**
|
||
|
* Read one particular XML element. This method calls the more specific
|
||
|
* methods (ReadCladeElement, ReadNameElement, etc) based on what type
|
||
|
* of tag it encounters.
|
||
|
*/
|
||
|
void ReadXMLElement(vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Read a clade element. This method does not parse the subelements of
|
||
|
* the clade. Instead, this task is handled by other methods of this class.
|
||
|
* This method returns the vtkIdType of the newly created vertex in our
|
||
|
* output vtkTree.
|
||
|
*/
|
||
|
vtkIdType ReadCladeElement(
|
||
|
vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType parent);
|
||
|
|
||
|
/**
|
||
|
* Read a name and assign it to the specified vertex, or the whole tree
|
||
|
* if vertex is -1.
|
||
|
*/
|
||
|
void ReadNameElement(vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Read the description for the tree.
|
||
|
*/
|
||
|
void ReadDescriptionElement(vtkXMLDataElement* element, vtkMutableDirectedGraph* g);
|
||
|
|
||
|
/**
|
||
|
* Read a property and assign it to our output vtkTree's VertexData for the
|
||
|
* specified vertex. If this property has not been encountered yet, this
|
||
|
* method creates a new array and adds it to the VertexData.
|
||
|
*/
|
||
|
void ReadPropertyElement(
|
||
|
vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Read & store the branch length for this clade. Branch length is defined
|
||
|
* as the edge weight from this vertex to its parent. Note that this
|
||
|
* value can also be specified as an attribute of the clade element.
|
||
|
*/
|
||
|
void ReadBranchLengthElement(
|
||
|
vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Read confidence value and store it for the specified vertex, or the
|
||
|
* whole tree is vertex is -1.
|
||
|
*/
|
||
|
void ReadConfidenceElement(
|
||
|
vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Read RGB color value for this vertex. Note that this color is also
|
||
|
* applied to all children of this vertex until a new value is specified.
|
||
|
*/
|
||
|
void ReadColorElement(vtkXMLDataElement* element, vtkMutableDirectedGraph* g, vtkIdType vertex);
|
||
|
|
||
|
/**
|
||
|
* Assign the parent's branch color to child vertices where none is
|
||
|
* otherwise specified.
|
||
|
*/
|
||
|
void PropagateBranchColor(vtkTree* tree);
|
||
|
|
||
|
/**
|
||
|
* Count the number of vertices in the tree.
|
||
|
*/
|
||
|
void CountNodes(vtkXMLDataElement* element);
|
||
|
|
||
|
/**
|
||
|
* Return a copy of the input string with all leading & trailing
|
||
|
* whitespace removed.
|
||
|
*/
|
||
|
std::string GetTrimmedString(const char* input);
|
||
|
|
||
|
/**
|
||
|
* Return the portion of the input string that occurs before the
|
||
|
* first colon (:).
|
||
|
*/
|
||
|
std::string GetStringBeforeColon(const char* input);
|
||
|
|
||
|
/**
|
||
|
* Return the portion of the input string that occurs after the
|
||
|
* first colon (:).
|
||
|
*/
|
||
|
std::string GetStringAfterColon(const char* input);
|
||
|
|
||
|
int FillOutputPortInformation(int, vtkInformation*) override;
|
||
|
const char* GetDataSetName() override;
|
||
|
void SetOutput(vtkTree* output);
|
||
|
void SetupEmptyOutput() override;
|
||
|
|
||
|
private:
|
||
|
vtkIdType NumberOfNodes;
|
||
|
bool HasBranchColor;
|
||
|
vtkSmartPointer<vtkBitArray> ColoredVertices;
|
||
|
vtkPhyloXMLTreeReader(const vtkPhyloXMLTreeReader&) = delete;
|
||
|
void operator=(const vtkPhyloXMLTreeReader&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|