SlideIO 2.0.0
Open-source library for reading of medical images
Loading...
Searching...
No Matches
vsifile.hpp
1// This file is part of slideio project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://slideio.com/license.html.
4#pragma once
5#include <memory>
6#include <string>
7#include <vector>
8#include "vsitools.hpp"
9#include "slideio/drivers/vsi/vsi_api_def.hpp"
10#include "slideio/imagetools/tifftools.hpp"
11#include "slideio/drivers/vsi/volume.hpp"
12#include "slideio/drivers/vsi/taginfo.hpp"
13#include <nlohmann/json.hpp>
14
15using json = nlohmann::json;
16
17#if defined(_MSC_VER)
18#pragma warning( push )
19#pragma warning(disable: 4251)
20#endif
21
22
23namespace slideio
24{
25 namespace vsi
26 {
27 class VSIStream;
28 class EtsFile;
29
30 class SLIDEIO_VSI_EXPORTS VSIFile
31 {
32 public:
33 VSIFile(const std::string& filePath);
34 std::shared_ptr<vsi::EtsFile> getEtsFile(int index) const {
35 return m_etsFiles[index];
36 }
37 int getNumEtsFiles() const {
38 return static_cast<int>(m_etsFiles.size());
39 }
40 std::string getRawMetadata() const;
41 void assignAuxVolumes();
42
43 int getNumTiffDirectories() const {
44 return static_cast<int>(m_directories.size());
45 }
46 const TiffDirectory& getTiffDirectory(int index) {
47 return m_directories[index];
48 }
49 int getNumVolumes() const {
50 return static_cast<int>(m_volumes.size());
51 }
52 std::shared_ptr<Volume> getVolume(int index) const {
53 return m_volumes[index];
54 }
55 bool hasMetadata() const {
56 return !m_metadata.empty();
57 }
58 bool expectExternalFiles() const {
59 return m_expectExternalFiles;
60 }
61 bool hasExternalFiles() const {
62 return !m_etsFiles.empty();
63 }
64 void getVolumeMetadataItems(std::list<const TagInfo*>& volumes) const;
65 static void getImageFrameMetadataItems(const TagInfo* volume, std::list<const TagInfo*>& frames);
66 void cleanVolumes();
67
68 private:
69 void read();
70 void checkExternalFilePresence();
71 static StackType getVolumeStackType(const TagInfo* volume);
72 void extractVolumesFromMetadata();
73 bool readVolumeHeader(vsi::VSIStream& vsi, vsi::VolumeHeader& volumeHeader);
74 bool readMetadata(VSIStream& vsiStream, std::list<TagInfo>& path);
75 void serializeMetadata(const TagInfo& tagInfo, json& jsonObj) const;
76 void readVolumeInfo();
77 void processOrphanEtsFiles(std::list<std::shared_ptr<Volume>> volumes,
78 std::list<std::pair<EtsFilePtr, TileInfoListPtr>> orphanEtsFiles);
79 void readExternalFiles();
80 void readExtendedType(vsi::VSIStream& vsi, TagInfo& tag, std::list<TagInfo>& path);
81 private:
82 std::vector<std::shared_ptr<vsi::EtsFile>> m_etsFiles;
83 bool m_expectExternalFiles = false;
84 int m_numChannels = 0;
85 int m_numSlices = 0;
86 std::string m_filePath;
87 TagInfo m_metadata;
88 std::vector<TiffDirectory> m_directories;
89 std::vector<std::shared_ptr<Volume>> m_volumes;
90 };
91 }
92}
93
Definition: exceptions.hpp:15