@@ -8,6 +8,10 @@ namespace cytolib
8
8
{
9
9
EVENT_DATA_VEC H5CytoFrame::read_data (uvec col_idx) const
10
10
{
11
+ H5File file (filename_, default_flags);
12
+ auto dataset = file.openDataSet (DATASET_NAME);
13
+ auto dataspace = dataset.getSpace ();
14
+
11
15
unsigned nrow = n_rows ();
12
16
unsigned ncol = col_idx.size ();
13
17
/*
@@ -61,6 +65,8 @@ namespace cytolib
61
65
}
62
66
void H5CytoFrame::flush_params ()
63
67
{
68
+ H5File file (filename_, default_flags);
69
+
64
70
CompType param_type = get_h5_datatype_params (DataTypeLocation::MEM);
65
71
DataSet ds = file.openDataSet (" params" );
66
72
hsize_t size[1 ] = {params.size ()};
@@ -74,6 +80,7 @@ namespace cytolib
74
80
75
81
void H5CytoFrame::flush_keys ()
76
82
{
83
+ H5File file (filename_, default_flags);
77
84
CompType key_type = get_h5_datatype_keys ();
78
85
DataSet ds = file.openDataSet (" keywords" );
79
86
auto keyVec = to_kw_vec<KEY_WORDS>(keys_);
@@ -87,6 +94,7 @@ namespace cytolib
87
94
}
88
95
void H5CytoFrame::flush_pheno_data ()
89
96
{
97
+ H5File file (filename_, default_flags);
90
98
CompType key_type = get_h5_datatype_keys ();
91
99
DataSet ds = file.openDataSet (" pdata" );
92
100
@@ -103,9 +111,6 @@ namespace cytolib
103
111
H5CytoFrame::H5CytoFrame (const H5CytoFrame & frm):CytoFrame(frm)
104
112
{
105
113
filename_ = frm.filename_ ;
106
- file = frm.file ;// safe to copy due to refcount during copy constructor provided by h5
107
- dataset = frm.dataset ;// safe to copy due to refcount during copy constructor provided by h5
108
- dataspace = frm.dataspace ;// safe to copy due to explicit copy through its assignment operator provided by h5
109
114
is_dirty_params = frm.is_dirty_params ;
110
115
is_dirty_keys = frm.is_dirty_keys ;
111
116
is_dirty_pdata = frm.is_dirty_pdata ;
@@ -120,9 +125,6 @@ namespace cytolib
120
125
// swap(channel_vs_idx, frm.channel_vs_idx);
121
126
// swap(marker_vs_idx, frm.marker_vs_idx);
122
127
swap (filename_, frm.filename_ );
123
- swap (file, frm.file );
124
- swap (dataset, frm.dataset );
125
- swap (dataspace, frm.dataspace );
126
128
swap (dims, frm.dims );
127
129
128
130
swap (is_dirty_params, frm.is_dirty_params );
@@ -133,9 +135,6 @@ namespace cytolib
133
135
{
134
136
CytoFrame::operator =(frm);
135
137
filename_ = frm.filename_ ;
136
- file = frm.file ;
137
- dataset = frm.dataset ;
138
- dataspace = frm.dataspace ;
139
138
is_dirty_params = frm.is_dirty_params ;
140
139
is_dirty_keys = frm.is_dirty_keys ;
141
140
is_dirty_pdata = frm.is_dirty_pdata ;
@@ -146,9 +145,6 @@ namespace cytolib
146
145
{
147
146
CytoFrame::operator =(frm);
148
147
swap (filename_, frm.filename_ );
149
- swap (file, frm.file );
150
- swap (dataset, frm.dataset );
151
- swap (dataspace, frm.dataspace );
152
148
swap (dims, frm.dims );
153
149
swap (is_dirty_params, frm.is_dirty_params );
154
150
swap (is_dirty_keys, frm.is_dirty_keys );
@@ -174,24 +170,23 @@ namespace cytolib
174
170
*/
175
171
H5CytoFrame::H5CytoFrame (const string & h5_filename, bool readonly):CytoFrame(readonly),filename_(h5_filename), is_dirty_params(false ), is_dirty_keys(false ), is_dirty_pdata(false )
176
172
{
177
-
178
-
179
- file.openFile (filename_, H5F_ACC_RDWR);// always use the same flag and keep lock at cf level to avoid h5 open error caused conflicting h5 flags among cf objects that points to the same h5
173
+ // always use the same flag and keep lock at cf level to avoid h5 open error caused conflicting h5 flags among cf objects that points to the same h5
174
+ H5File file (filename_, default_flags);
180
175
load_meta ();
181
176
182
177
183
178
// open dataset for event data
184
179
185
- dataset = file.openDataSet (DATASET_NAME);
186
- dataspace = dataset.getSpace ();
180
+ auto dataset = file.openDataSet (DATASET_NAME);
181
+ auto dataspace = dataset.getSpace ();
187
182
dataspace.getSimpleExtentDims (dims);
188
183
189
184
}
190
185
/* *
191
186
* abandon the changes to the meta data in cache by reloading them from disk
192
187
*/
193
188
void H5CytoFrame::load_meta (){
194
-
189
+ H5File file (filename_, default_flags);
195
190
DataSet ds_param = file.openDataSet (" params" );
196
191
// DataType param_type = ds_param.getDataType();
197
192
@@ -392,11 +387,14 @@ namespace cytolib
392
387
*/
393
388
void H5CytoFrame::set_data (const EVENT_DATA_VEC & _data)
394
389
{
390
+ H5File file (filename_, default_flags);
395
391
check_write_permission ();
396
392
hsize_t dims_data[2 ] = {_data.n_cols , _data.n_rows };
393
+ auto dataset = file.openDataSet (DATASET_NAME);
394
+
397
395
dataset.extend (dims_data);
398
396
// refresh data space and dims
399
- dataspace = dataset.getSpace ();
397
+ auto dataspace = dataset.getSpace ();
400
398
dataspace.getSimpleExtentDims (dims);
401
399
402
400
dataset.write (_data.mem , h5_datatype_data (DataTypeLocation::MEM));
0 commit comments