/usr/include/ncl/nxsdistancesblock.h is in libncl-dev 2.1.18+dfsg-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | // Copyright (C) 1999-2003 Paul O. Lewis
//
// This file is part of NCL (Nexus Class Library) version 2.0.
//
// NCL is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// NCL is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with NCL; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
#ifndef NCL_NXSDISTANCESBLOCK_H
#define NCL_NXSDISTANCESBLOCK_H
#include "ncl/nxsdefs.h"
#include "ncl/nxstaxablock.h"
#include "ncl/nxsdistancedatum.h"
/*!
This class handles reading and storage for the NEXUS block DISTANCES. It overrides the member functions Read and
Reset, which are abstract virtual functions in the base class NxsBlock. Below is a table showing the correspondence
between the elements of a DISTANCES block and the variables and member functions that can be used to access each
piece of information stored.
>
NEXUS command Command attribute Data Members Member Functions
------------------------------------------------------------------------
DIMENSIONS NEWTAXA newtaxa
NTAX ntax GetNtax
NCHAR nchar GetNchar
FORMAT TRIANGLE triangle GetTriangle
IsUpperTriangular
IsLowerTriangular
IsRectangular
[NO]DIAGONAL diagonal IsDiagonal
[NO]LABELS labels IsLabels
MISSING missing GetMissingSymbol
INTERLEAVE interleave IsInterleave
TAXLABELS (stored in the (access through
NxsTaxaBlockAPI data member taxa)
object)
MATRIX matrix GetDistance
IsMissing
SetMissing
SetDistance
------------------------------------------------------------------------
>
*/
class NxsDistancesBlock
: public NxsBlock, public NxsTaxaBlockSurrogate
{
public:
NxsDistancesBlock(NxsTaxaBlockAPI *t);
virtual ~NxsDistancesBlock();
double GetDistance(unsigned i, unsigned j) const;
char GetMissingSymbol() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
unsigned GetNchar() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
unsigned GetTriangle() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsRectangular() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsBoth() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsDiagonal() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsInterleave() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsLabels() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsLowerTriangular() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
bool IsMissing(unsigned i, unsigned j) const;
bool IsUpperTriangular() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
virtual void Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
virtual void Reset();
void SetDistance(unsigned i, unsigned j, double d);
void SetMissing(unsigned i, unsigned j);
void SetNchar(unsigned i);
void SetNexus(NxsReader *nxsptr)
{
NxsBlock::SetNexus(nxsptr);
NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
}
/*! \ref BlockTypeIDDiscussion */
virtual const std::string & GetBlockName() const
{
return NCL_BLOCKTYPE_ATTR_NAME;
}
enum NxsDistancesBlockEnum /* used by data member triangle to determine which triangle(s) of the distance matrix is/are occupied */
{
upper = 1, /* matrix is upper-triangular */
lower = 2, /* matrix is lower-triangular */
both = 3 /* matrix is rectangular */
};
virtual VecBlockPtr GetImpliedBlocks()
{
return GetCreatedTaxaBlocks();
}
/*only used it the linkAPI is enabled*/
virtual void HandleLinkCommand(NxsToken & token)
{
HandleLinkTaxaCommand(token);
}
virtual void WriteLinkCommand(std::ostream &out) const
{
WriteLinkTaxaCommand(out);
}
void WriteAsNexus(std::ostream &out) const;
NxsDistancesBlock &operator=(const NxsDistancesBlock &other)
{
Reset();
CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
CopyTaxaBlockSurrogateContents(other);
CopyDistancesContents(other);
return *this;
}
void CopyDistancesContents(const NxsDistancesBlock &other);
NxsDistancesBlock * Clone() const
{
NxsDistancesBlock *d = new NxsDistancesBlock(taxa);
*d = *this;
return d;
}
bool SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
{
return SurrogateSwapEquivalentTaxaBlock(tb);
}
protected:
void WriteFormatCommand(std::ostream &out) const;
void WriteMatrixCommand(std::ostream &out) const;
void HandleDimensionsCommand(NxsToken &token);
void HandleFormatCommand(NxsToken &token);
void HandleMatrixCommand(NxsToken &token);
bool HandleNextPass(NxsToken &token, unsigned &offset, std::vector<unsigned> & fileMatrixCmdOrderToTaxInd, std::set<unsigned> & taxIndsRead);
virtual void Read(NxsToken &token);
private:
NxsDistanceDatum & GetCell(unsigned i, unsigned j)
{
return matrix.at(i).at(j);
}
const NxsDistanceDatum & GetCell(unsigned i, unsigned j) const
{
return matrix.at(i).at(j);
}
typedef std::vector<NxsDistanceDatum> NxsDistanceDatumRow;
typedef std::vector<NxsDistanceDatumRow> NxsDistanceDatumMatrix;
unsigned expectedNtax; /* number of taxa (determines dimensions of the matrix) */
unsigned nchar; /* the number of characters used in generating the pairwise distances */
bool diagonal; /* true if diagonal elements provided when reading in DISTANCES block */
bool interleave; /* true if interleave format used when reading in DISTANCES block */
bool labels; /* true if taxon labels were provided when reading in DISTANCES block */
int triangle; /* indicates whether matrix is upper triangular, lower triangular, or rectangular, taking on one of the elements of the NxsDistancesBlockEnum enumeration */
char missing; /* the symbol used to represent missing data (e.g. '?') */
NxsDistanceDatumMatrix matrix; /* the structure used for storing the pairwise distance matrix */
friend class PublicNexusReader;
};
typedef NxsDistancesBlock DistancesBlock;
class NxsDistancesBlockFactory
:public NxsBlockFactory
{
public:
virtual NxsDistancesBlock * GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
};
inline bool NxsDistancesBlock::IsBoth() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
{
return this->IsRectangular();
}
#endif
|