#include <dat.h>

Public Types | |
| enum | EFilter { EFilterInclude = 0, EFilterTerm = EFilterInclude + 1, EFilterExclude = EFilterTerm + 1, EFilterPixie = EFilterExclude + 1, EFilterEdge = EFilterPixie + 1, EFilterHefalmp = EFilterEdge + 1 } |
| Ways in which nodes/edges can be removed to filter a CDat. More... | |
| enum | EFormat { EFormatBinary = 0, EFormatText = EFormatBinary + 1, EFormatPCL = EFormatText + 1, EFormatSparse = EFormatPCL + 1 } |
| Ways in which a CDat can be persisted to/from disk. More... | |
| enum | ENormalize { ENormalizeMinMax = 0, ENormalizeZScore = ENormalizeMinMax + 1, ENormalizeSigmoid = ENormalizeZScore + 1 } |
| Ways in which a CDat can have its edge values normalized. More... | |
Public Member Functions | |
| bool | Open (const char *szFile, bool fMemmap=false, size_t iSkip=2, bool fZScore=false, bool fDuplicates=false) |
| Open a CDat stored in the given file, guessing the format from the file's extension. | |
| bool | Open (std::istream &istm, EFormat eFormat=EFormatBinary, float dDefault=HUGE_VAL, bool fDuplicates=false, size_t iSkip=2, bool fZScore=false) |
| Open a CDat stored in the given stream with the given format, processing missing values and duplicates as specified. | |
| bool | Open (const CSlim &Slim) |
| Construct a CDat from the given ontology slim. | |
| bool | Open (const CSlim &SlimPositives, const CSlim &SlimNonnegatives) |
| Construct a CDat from the given ontology slims. | |
| bool | Open (const std::vector< std::string > &vecstrGenes, bool fClear=true, const char *szFile=NULL) |
| Construct a new CDat with the given gene names. | |
| bool | Open (const std::vector< std::string > &vecstrGenes, const CDistanceMatrix &MatValues) |
| Construct a new CDat with the given gene names and values. | |
| bool | Open (const std::vector< CGenes * > &vecpPositives, const std::vector< CGenes * > &vecpNonnegatives, float dPValue, const CGenome &Genome) |
| Construct a CDat from the given gene sets. | |
| bool | Open (const CDat &DatKnown, const std::vector< CGenes * > &vecpOther, const CGenome &Genome, bool fKnownNegatives) |
| Construct a CDat from the given known gene relationships and gene sets. | |
| bool | Open (const CPCL &PCL, const IMeasure *pMeasure, bool fMeasureMemory) |
| Construct a new CDat backed by the given PCL and similarity measure. | |
| bool | Open (const CDat &Dat) |
| Construct a copy of the given CDat. | |
| bool | OpenGenes (std::istream &istm, bool fBinary, bool fPCL=false) |
| Open the genes from a CDat stored in the stream with the given format. | |
| bool | OpenGenes (const char *szFile, size_t iSkip=2) |
| Open the genes from a CDat stored in the given file, guessing the format from the file's extension. | |
| void | Save (std::ostream &ostm, EFormat eFormat=EFormatBinary) const |
| Save a CDat to the given stream in the requested format. | |
| void | Save (const char *szFile) const |
| Save a CDat to the given file, guessing the format from the file's extension. | |
| void | SaveDOT (std::ostream &ostm, float dCutoff=HUGE_VAL, const CGenome *pGenome=NULL, bool fUnlabeled=false, bool fHashes=true, const std::vector< float > *pvecdColors=NULL, const std::vector< float > *pvecdBorders=NULL) const |
| Generate a DOT-formatted graph from the CDat, suitable for processing with AT&T's Graphviz software. | |
| void | SaveGDF (std::ostream &ostm, float dCutoff=HUGE_VAL) const |
| Generate a GDF-formatted graph from the CDat, suitable for processing with the GUESS graph exploration system. | |
| void | SaveNET (std::ostream &ostm, float dCutoff=HUGE_VAL) const |
| Generate a NET-formatted graph from the CDat. | |
| void | SaveMATISSE (std::ostream &ostm, float dCutoff=HUGE_VAL, const CGenome *pGenome=NULL) const |
| Generate a MATISSE-formatted graph from the CDat, suitable for processing with the MATISSE software. | |
| void | Invert () |
| Replace each finite value in the CDat with one minus that value. | |
| void | Rank () |
| Replace each finite value in the CDat with its integer rank. | |
| bool | FilterGenes (const char *szGenes, EFilter eFilter, size_t iLimit=-1) |
| Remove edges from the CDat based on the given gene file and filter type. | |
| void | FilterGenes (const CGenes &Genes, EFilter eFilter, size_t iLimit=-1, float dEdgeAggressiveness=0.5) |
| Remove edges from the CDat based on the given gene set and filter type. | |
| void | Normalize (ENormalize eNormalize) |
| Normalize each finite value in the CDat by a specific function. | |
| size_t | GetGene (const std::string &strGene) const |
| Return the index of the given gene name, or -1 if it is not included in the CDat. | |
| float & | Get (size_t iY, size_t iX) const |
| Return the value at the requested CDat position. | |
| size_t | GetGenes () const |
| Returns the number of elements (genes) in the CDat. | |
| const CDistanceMatrix & | Get () const |
| Returns the symmetric matrix containing the CDat's values. | |
| CDistanceMatrix & | Get () |
| Returns the symmetric matrix containing the CDat's values. | |
| bool | Set (size_t iY, size_t iX, float dValue) |
| Set the value at the requested CDat position. | |
| std::string | GetGene (size_t iGene) const |
| Returns the gene name at the given CDat position. | |
| const std::vector< std::string > & | GetGeneNames () const |
| Returns the vector of gene names associated with this CDat. | |
| void | Set (size_t iY, const float *adValues) |
| Set an entire row of CDat values efficiently. | |
| const float * | Get (size_t iY) const |
| Get an entire row of CDat values efficiently. | |
| float * | Get (size_t iY) |
| Get an entire row of CDat values efficiently. | |
| void | SetGene (size_t iGene, const std::string &strGene) |
| Set the gene name at the given index. | |
Conceptually, a CDat stores a list of weighted pairs; this is equivalent to a weighted undirected graph with labeled nodes, or a symmetric matrix with labels for each matrix element. CDat entries are stored as continuous values, although they can be discretized in various ways. CDats can be constructed in several ways, read from disk, persisted to disk in multiple file formats, or calculated from existing gene sets, microarray data, or gold standards. In practice, a CDat is simply a continuously valued symmetric matrix (in which zero or more values may be missing) paired with a list of element names (assumed to be genes), but this data structure is sufficiently flexible to represent nearly any biological dataset.
CDats can be loaded (by Open) and/or stored (by Save) from/to disk in the following formats:
GENE1 GENE2 SCORE1 GENE1 GENE3 SCORE2 GENE2 GENE3 SCORE3
Definition at line 75 of file dat.h.
Ways in which nodes/edges can be removed to filter a CDat.
Ways in which a CDat can be persisted to/from disk.
Ways in which a CDat can have its edge values normalized.
| bool Sleipnir::CDat::Open | ( | const char * | szFile, | |
| bool | fMemmap = false, |
|||
| size_t | iSkip = 2, |
|||
| bool | fZScore = false, |
|||
| bool | fDuplicates = false | |||
| ) |
Open a CDat stored in the given file, guessing the format from the file's extension.
| szFile | Filename from which CDat is loaded. | |
| fMemmap | If true, memory map file rather than allocating memory and copying its contents. | |
| iSkip | If the given file is a PCL, the number of columns to skip between the ID and experiments. | |
| fZScore | If true and the given file is a PCL, z-score similarity measures after pairwise calculation. | |
| fDuplicates | If true, allow duplicates (DAT format only), ignoring all but the last value for each gene pair. |
Definition at line 980 of file dat.cpp.
References EFormatBinary, EFormatPCL, EFormatText, and Sleipnir::CMeta::MapRead().
Referenced by Sleipnir::CPCL::Distance(), Sleipnir::CPCL::Impute(), Sleipnir::CDataPair::Open(), and Open().
| bool Sleipnir::CDat::Open | ( | std::istream & | istm, | |
| EFormat | eFormat = EFormatBinary, |
|||
| float | dDefault = HUGE_VAL, |
|||
| bool | fDuplicates = false, |
|||
| size_t | iSkip = 2, |
|||
| bool | fZScore = false | |||
| ) |
Open a CDat stored in the given stream with the given format, processing missing values and duplicates as specified.
| istm | Stream from which CDat is loaded. | |
| eFormat | Format in which the stream should be parsed. | |
| dDefault | Default value inserted for missing pairs (DAT format only). | |
| fDuplicates | If true, allow duplicates (DAT format only), ignoring all but the last value for each gene pair. | |
| iSkip | If the given stream contains a PCL, the number of columns to skip between the ID and experiments. | |
| fZScore | If true and the given stream contains a PCL, z-score similarity measures after pairwise calculation. |
Definition at line 433 of file dat.cpp.
References EFormatPCL, EFormatSparse, and EFormatText.
| bool Sleipnir::CDat::Open | ( | const CSlim & | Slim | ) |
Construct a CDat from the given ontology slim.
| Slim | Set of ontology terms from which to generate a CDat. |
Reimplemented in Sleipnir::CDataPair.
Definition at line 127 of file dat.cpp.
References Get(), Sleipnir::CSlim::GetGeneNames(), Sleipnir::CSlim::GetGenes(), Sleipnir::CSlim::GetSlim(), Sleipnir::CSlim::GetSlims(), Sleipnir::CMeta::IsNaN(), Open(), and Set().
Construct a CDat from the given ontology slims.
| SlimPositives | Set of ontology terms from which to generate related gene pairs. | |
| SlimNonnegatives | Set of ontology terms from which to generate agnostic gene pairs (neither related nor unrelated). |
Definition at line 174 of file dat.cpp.
References Get(), Sleipnir::CSlim::GetGeneNames(), Sleipnir::CSlim::GetGenes(), Sleipnir::CSlim::GetSlim(), Sleipnir::CSlim::GetSlims(), Sleipnir::CMeta::IsNaN(), Open(), and Set().
| bool Sleipnir::CDat::Open | ( | const std::vector< std::string > & | vecstrGenes, | |
| bool | fClear = true, |
|||
| const char * | szFile = NULL | |||
| ) |
Construct a new CDat with the given gene names.
| vecstrGenes | Gene names and size to associate with the CDat. | |
| fClear | If true, set each value of the new CDat to missing (NaN). | |
| szFile | If non-null, use the given file as memory-mapped backing for the new CDat. |
Definition at line 862 of file dat.cpp.
References GetGene(), GetGenes(), Sleipnir::CMeta::GetNaN(), Sleipnir::CHalfMatrix< float >::GetSpace(), Sleipnir::CMeta::MapWrite(), and Set().
| bool Sleipnir::CDat::Open | ( | const std::vector< std::string > & | vecstrGenes, | |
| const CDistanceMatrix & | MatScores | |||
| ) |
Construct a new CDat with the given gene names and values.
| vecstrGenes | Gene names to associate with the CDat. | |
| MatScores | Values to associate with the CDat. |
Reimplemented in Sleipnir::CDataPair.
Definition at line 920 of file dat.cpp.
References Sleipnir::CHalfMatrix< tType >::GetSize().
| bool Sleipnir::CDat::Open | ( | const std::vector< CGenes * > & | vecpPositives, | |
| const std::vector< CGenes * > & | vecpNonnegatives, | |||
| float | dPValue, | |||
| const CGenome & | Genome | |||
| ) |
Construct a CDat from the given gene sets.
| vecpPositives | Set of gene sets from which to generate related gene pairs. | |
| vecpNonnegatives | Set of ontology terms from which to generate agnostic gene pairs (neither related nor unrelated), possibly empty. | |
| dPValue | Hypergeometric p-value of overlap below which nonnegative gene set pairs are considered agnostic rather than negative. | |
| Genome | Genome containing all genes of interest. |
Definition at line 328 of file dat.cpp.
References Get(), Sleipnir::CGenes::GetGene(), Sleipnir::CGenome::GetGeneNames(), GetGenes(), Sleipnir::CGenes::GetGenes(), Sleipnir::CGene::GetName(), Sleipnir::CMeta::GetNaN(), Sleipnir::CStatistics::HypergeometricCDF(), Sleipnir::CGenes::IsGene(), Sleipnir::CMeta::IsNaN(), Open(), and Set().
| bool Sleipnir::CDat::Open | ( | const CDat & | DatKnown, | |
| const std::vector< CGenes * > & | vecpOther, | |||
| const CGenome & | Genome, | |||
| bool | fKnownNegatives | |||
| ) |
Construct a CDat from the given known gene relationships and gene sets.
| DatKnown | Known pairwise scores, either positive or negative as indicated. | |
| vecpOther | Gene sets, either positive or nonnegative as indicated (possibly empty). | |
| Genome | Genome containing all genes of interest. | |
| fKnownNegatives | If true, DatKnown contains known negative gene pairs (0 scores); if false, it contains known related gene pairs (1 scores). In the former case, positives are generated from pairs coannotated to the given gene sets; in the latter, negatives are generated from pairs not coannotated to the given gene sets. |
Reimplemented in Sleipnir::CDataPair.
Definition at line 247 of file dat.cpp.
References Get(), GetGene(), Sleipnir::CGenome::GetGeneNames(), GetGenes(), Sleipnir::CMeta::GetNaN(), Sleipnir::CMeta::IsNaN(), Open(), and Set().
Construct a new CDat backed by the given PCL and similarity measure.
| PCL | PCL from which CDat genes and pairwise values are drawn. | |
| pMeasure | Similarity measure used to calculate pairwise scores between genes. | |
| fMeasureMemory | If true, the CDat is responsible for freeing the given similarity measure. |
| bool Sleipnir::CDat::Open | ( | const CDat & | Dat | ) |
Construct a copy of the given CDat.
| Dat | Data to be copied. |
Definition at line 286 of file dat.cpp.
References Get(), GetGeneNames(), GetGenes(), and Open().
| bool Sleipnir::CDat::OpenGenes | ( | std::istream & | istm, | |
| bool | fBinary, | |||
| bool | fPCL = false | |||
| ) |
Open the genes from a CDat stored in the stream with the given format.
| istm | Stream from which genes are loaded. | |
| fBinary | If true, assume DAB format. | |
| fPCL | If true, assume PCL format. |
Definition at line 667 of file dat.cpp.
Referenced by Sleipnir::CDatasetCompact::Open(), and OpenGenes().
| bool Sleipnir::CDat::OpenGenes | ( | const char * | szFile, | |
| size_t | iSkip = 2 | |||
| ) |
Open the genes from a CDat stored in the given file, guessing the format from the file's extension.
| szFile | Filename from which CDat genes are loaded. | |
| iSkip | If the given file is a PCL, the number of columns to skip between the ID and experiments. |
Definition at line 625 of file dat.cpp.
References EFormatPCL, EFormatText, and OpenGenes().
| void Sleipnir::CDat::Save | ( | std::ostream & | ostm, | |
| EFormat | eFormat = EFormatBinary | |||
| ) | const |
Save a CDat to the given stream in the requested format.
Definition at line 777 of file dat.cpp.
References EFormatSparse, and EFormatText.
Referenced by Save().
| void Sleipnir::CDat::Save | ( | const char * | szFile | ) | const |
Save a CDat to the given file, guessing the format from the file's extension.
| szFile | Filename into which CDat is saved. |
Definition at line 741 of file dat.cpp.
References EFormatPCL, EFormatText, and Save().
| void Sleipnir::CDat::SaveDOT | ( | std::ostream & | ostm, | |
| float | dCutoff = HUGE_VAL, |
|||
| const CGenome * | pGenome = NULL, |
|||
| bool | fUnlabeled = false, |
|||
| bool | fHashes = true, |
|||
| const std::vector< float > * | pvecdColors = NULL, |
|||
| const std::vector< float > * | pvecdBorders = NULL | |||
| ) | const |
Generate a DOT-formatted graph from the CDat, suitable for processing with AT&T's Graphviz software.
| ostm | Stream into which DOT is saved. | |
| dCutoff | If finite, edge weights below this cutoff are not included in the DOT. | |
| pGenome | If non-null, name synonyms from this genome are used to label gene nodes. | |
| fUnlabeled | If true, do not label gene nodes and use only minimal unique identifiers when generating the DOT. | |
| fHashes | If true, include # marks in hexadecimal color strings within the DOT. This is moronic, but some DOT parsers (*coughboostcough*) will randomly crash if # characters are included in the DOT. | |
| pvecdColors | If non-null, contains weights between 0 and 1 interpolating node colors between cyan and yellow. | |
| pvecdBorders | If non-null, contains border widths in pixels for each node. |
Definition at line 1366 of file dat.cpp.
References Sleipnir::CColor::c_Black, Sleipnir::CColor::c_Cyan, Sleipnir::CColor::c_Green, Sleipnir::CColor::c_Red, Sleipnir::CColor::c_White, Sleipnir::CColor::c_Yellow, Sleipnir::CMeta::Filename(), Get(), Sleipnir::CGenome::GetGene(), GetGene(), GetGenes(), Sleipnir::CGene::GetName(), Sleipnir::CGene::GetSynonym(), Sleipnir::CGene::GetSynonyms(), Sleipnir::CColor::Interpolate(), Sleipnir::CMeta::IsNaN(), and Sleipnir::CColor::ToRGB().
| void Sleipnir::CDat::SaveGDF | ( | std::ostream & | ostm, | |
| float | dCutoff = HUGE_VAL | |||
| ) | const |
Generate a GDF-formatted graph from the CDat, suitable for processing with the GUESS graph exploration system.
| ostm | Stream into which GDF is saved. | |
| dCutoff | If finite, edge weights below this cutoff are not included in the GDF. |
Definition at line 1457 of file dat.cpp.
References Sleipnir::CMeta::Filename(), Get(), GetGene(), GetGenes(), and Sleipnir::CMeta::IsNaN().
| void Sleipnir::CDat::SaveNET | ( | std::ostream & | ostm, | |
| float | dCutoff = HUGE_VAL | |||
| ) | const |
Generate a NET-formatted graph from the CDat.
| ostm | Stream into which NET is saved. | |
| dCutoff | If finite, edge weights below this cutoff are not included in the NET. |
Definition at line 1496 of file dat.cpp.
References Get(), GetGene(), GetGenes(), and Sleipnir::CMeta::IsNaN().
| void Sleipnir::CDat::SaveMATISSE | ( | std::ostream & | ostm, | |
| float | dCutoff = HUGE_VAL, |
|||
| const CGenome * | pGenome = NULL | |||
| ) | const |
Generate a MATISSE-formatted graph from the CDat, suitable for processing with the MATISSE software.
| ostm | Stream into which MATISSE file is saved. | |
| dCutoff | If finite, edge weights below this cutoff are not included in the MATISSE file. | |
| pGenome | If non-null, name synonyms from this genome are used to label gene nodes. |
Definition at line 1533 of file dat.cpp.
References Get(), GetGene(), Sleipnir::CGenome::GetGene(), GetGenes(), Sleipnir::CGene::GetGloss(), Sleipnir::CGene::GetSynonym(), Sleipnir::CGene::GetSynonyms(), and Sleipnir::CMeta::IsNaN().
| void Sleipnir::CDat::Invert | ( | ) |
Replace each finite value in the CDat with one minus that value.
Definition at line 1104 of file dat.cpp.
References Get(), GetGenes(), Sleipnir::CMeta::IsNaN(), and Set().
| void Sleipnir::CDat::Rank | ( | ) |
Replace each finite value in the CDat with its integer rank.
Definition at line 1569 of file dat.cpp.
References Get(), GetGenes(), Sleipnir::CMeta::IsNaN(), and Set().
| bool Sleipnir::CDat::FilterGenes | ( | const char * | szGenes, | |
| EFilter | eFilter, | |||
| size_t | iLimit = -1 | |||
| ) |
Remove edges from the CDat based on the given gene file and filter type.
| szGenes | File from which gene names are loaded, one per line. | |
| eFilter | Way in which to use the given genes to remove edges. | |
| iLimit | For EFilterPixie and EFilterHefalmp, the maximum number of genes to retain. |
Definition at line 1136 of file dat.cpp.
References Sleipnir::CGenes::Open().
| void Sleipnir::CDat::FilterGenes | ( | const CGenes & | Genes, | |
| EFilter | eFilter, | |||
| size_t | iLimit = -1, |
|||
| float | dEdgeAggressiveness = 0.5 | |||
| ) |
Remove edges from the CDat based on the given gene set and filter type.
| Genes | Gene set used to filter the CDat. | |
| eFilter | Way in which to use the given genes to remove edges. | |
| iLimit | For EFilterPixie and EFilterHefalmp, the maximum number of genes to retain. | |
| dEdgeAggressiveness | For EFilterPixie and EFilterHefalmp, higher values result in more aggressive edge trimming. NaN completely skips edge trimming. |
Definition at line 1174 of file dat.cpp.
References EFilterEdge, EFilterExclude, EFilterHefalmp, EFilterInclude, EFilterPixie, EFilterTerm, Get(), Sleipnir::CGenes::GetGene(), GetGene(), Sleipnir::CGenes::GetGenes(), GetGenes(), Sleipnir::CGene::GetName(), Sleipnir::CMeta::GetNaN(), and Set().
| void Sleipnir::CDat::Normalize | ( | ENormalize | eNormalize | ) | [inline] |
Normalize each finite value in the CDat by a specific function.
| eNormalize | Method by which scores are normalized. |
Definition at line 216 of file dat.h.
References ENormalizeMinMax, and ENormalizeZScore.
Referenced by Sleipnir::CPCL::Distance(), and Sleipnir::CDatasetCompact::Open().
| size_t Sleipnir::CDat::GetGene | ( | const std::string & | strGene | ) | const [inline] |
Return the index of the given gene name, or -1 if it is not included in the CDat.
| strGene | Gene name to retrieve. |
Definition at line 243 of file dat.h.
Referenced by Sleipnir::CDataFilter::Attach(), FilterGenes(), Sleipnir::CDatasetCompact::Open(), Sleipnir::CDataset::Open(), Open(), SaveDOT(), SaveGDF(), SaveMATISSE(), SaveNET(), and Sleipnir::CStatistics::WilcoxonRankSum().
| float& Sleipnir::CDat::Get | ( | size_t | iY, | |
| size_t | iX | |||
| ) | const [inline] |
Return the value at the requested CDat position.
Definition at line 267 of file dat.h.
Referenced by Sleipnir::CPCL::Distance(), Sleipnir::CPCL::Impute(), Open(), and Sleipnir::CStatistics::WilcoxonRankSum().
| size_t Sleipnir::CDat::GetGenes | ( | ) | const [inline] |
Returns the number of elements (genes) in the CDat.
Definition at line 282 of file dat.h.
Referenced by Sleipnir::CPCL::Distance(), FilterGenes(), Sleipnir::CPCL::Impute(), Invert(), Sleipnir::CDatasetCompact::Open(), Sleipnir::CDataset::Open(), Open(), Rank(), SaveDOT(), SaveGDF(), SaveMATISSE(), SaveNET(), and Sleipnir::CStatistics::WilcoxonRankSum().
| const CDistanceMatrix& Sleipnir::CDat::Get | ( | ) | const [inline] |
Returns the symmetric matrix containing the CDat's values.
Definition at line 293 of file dat.h.
Referenced by FilterGenes(), Invert(), Open(), Rank(), SaveDOT(), SaveGDF(), SaveMATISSE(), and SaveNET().
| CDistanceMatrix& Sleipnir::CDat::Get | ( | ) | [inline] |
| bool Sleipnir::CDat::Set | ( | size_t | iY, | |
| size_t | iX, | |||
| float | dValue | |||
| ) | [inline] |
Set the value at the requested CDat position.
Definition at line 331 of file dat.h.
Referenced by Sleipnir::CPCL::Distance(), FilterGenes(), Sleipnir::CPCL::Impute(), Invert(), Open(), and Rank().
| std::string Sleipnir::CDat::GetGene | ( | size_t | iGene | ) | const [inline] |
| const std::vector<std::string>& Sleipnir::CDat::GetGeneNames | ( | ) | const [inline] |
| void Sleipnir::CDat::Set | ( | size_t | iY, | |
| const float * | adValues | |||
| ) | [inline] |
| const float* Sleipnir::CDat::Get | ( | size_t | iY | ) | const [inline] |
Get an entire row of CDat values efficiently.
| iY | CDat row. |
Definition at line 404 of file dat.h.
References Sleipnir::CHalfMatrix< tType >::Get().
| float* Sleipnir::CDat::Get | ( | size_t | iY | ) | [inline] |
Get an entire row of CDat values efficiently.
| iY | CDat row. |
Definition at line 425 of file dat.h.
References Sleipnir::CHalfMatrix< tType >::Get().
| void Sleipnir::CDat::SetGene | ( | size_t | iGene, | |
| const std::string & | strGene | |||
| ) | [inline] |
1.5.5