diff --git a/slsReceiverSoftware/include/HDF5FileStatic.h b/slsReceiverSoftware/include/HDF5FileStatic.h index 243126f37..27126e88e 100644 --- a/slsReceiverSoftware/include/HDF5FileStatic.h +++ b/slsReceiverSoftware/include/HDF5FileStatic.h @@ -591,6 +591,14 @@ public: string srcFileName = HDF5FileStatic::CreateFileName(fpath, fnameprefix, findex, frindexenable, framesSaved, dindex, numunits, i); + // find relative path + string relative_srcFileName = srcFileName; + { + size_t i = srcFileName.rfind('/', srcFileName.length()); + if (i != string::npos) + relative_srcFileName = (srcFileName.substr(i+1, srcFileName.length() - i)); + } + //source dataset name ostringstream osfn; osfn << "/data"; @@ -610,14 +618,14 @@ public: return CloseFileOnError(fd, string("Error in creating source dataspace (parameters) in virtual file ") + virtualFileName + string("\n")); //mapping - if (H5Pset_virtual(dcpl, vdsDataspace, srcFileName.c_str(), srcDatasetName.c_str(), srcDataspace) < 0) { + if (H5Pset_virtual(dcpl, vdsDataspace, relative_srcFileName.c_str(), srcDatasetName.c_str(), srcDataspace) < 0) { cprintf(RED,"could not set mapping for paramter 1\n"); error = true; break; } for (int k = 0; k < NumberofParameters; ++k) { - if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, srcFileName.c_str(), ParameterNames[k], srcDataspace_para) < 0) { + if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, relative_srcFileName.c_str(), ParameterNames[k], srcDataspace_para) < 0) { cprintf(RED,"could not set mapping for paramter %d\n", k); error = true; break; @@ -791,6 +799,14 @@ public: return CloseFileOnError( vfd, string("Error in opening virtual file\n")); } + // find relative path + string relative_virtualfname = virtualfname; + { + size_t i = virtualfname.rfind('/', virtualfname.length()); + if (i != string::npos) + relative_virtualfname = (virtualfname.substr(i+1, virtualfname.length() - i)); + } + //**data dataset** hid_t vdset = H5Dopen2( vfd, virtualDatasetname.c_str(), H5P_DEFAULT); if (vdset < 0) { @@ -798,7 +814,7 @@ public: return CloseFileOnError( vfd, string("Error in opening virtual data dataset\n")); } sprintf(linkname, "/entry/data/%s",virtualDatasetname.c_str()); - if(H5Lcreate_external( virtualfname.c_str(), virtualDatasetname.c_str(), + if(H5Lcreate_external( relative_virtualfname.c_str(), virtualDatasetname.c_str(), mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) { H5Fclose(mfd); mfd = 0; return CloseFileOnError( vfd, string("Error in creating link to data dataset\n")); @@ -813,7 +829,7 @@ public: return CloseFileOnError( vfd, string("Error in opening virtual parameter dataset to create link\n")); } sprintf(linkname, "/entry/data/%s",(/*string("/virtual_") + */string (ParameterNames[i])).c_str()); - if(H5Lcreate_external( virtualfname.c_str(), (/*string("/virtual_") + */string (ParameterNames[i])).c_str(), + if(H5Lcreate_external( relative_virtualfname.c_str(), (/*string("/virtual_") + */string (ParameterNames[i])).c_str(), mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) { H5Fclose(mfd); mfd = 0; return CloseFileOnError( vfd, string("Error in creating link to virtual parameter dataset\n"));