start implementing the NeXus write routines, needed by any2many.
This commit is contained in:
@@ -408,9 +408,9 @@ Bool_t PRunDataHandler::WriteData(TString fileName)
|
|||||||
break;
|
break;
|
||||||
case A2M_NEXUS:
|
case A2M_NEXUS:
|
||||||
if (fAny2ManyInfo->outFileName.Length() == 0)
|
if (fAny2ManyInfo->outFileName.Length() == 0)
|
||||||
success = WriteNexusFile(fileName);
|
success = WriteNexusFile(fAny2ManyInfo->outFormat, fileName);
|
||||||
else
|
else
|
||||||
success = WriteNexusFile(fAny2ManyInfo->outFileName);
|
success = WriteNexusFile(fAny2ManyInfo->outFormat, fAny2ManyInfo->outFileName);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -684,9 +684,9 @@ Bool_t PRunDataHandler::ReadWriteFilesList()
|
|||||||
break;
|
break;
|
||||||
case A2M_NEXUS:
|
case A2M_NEXUS:
|
||||||
if (fAny2ManyInfo->outFileName.Length() == 0)
|
if (fAny2ManyInfo->outFileName.Length() == 0)
|
||||||
success = WriteNexusFile();
|
success = WriteNexusFile(fAny2ManyInfo->outFormat);
|
||||||
else
|
else
|
||||||
success = WriteNexusFile(fAny2ManyInfo->outFileName);
|
success = WriteNexusFile(fAny2ManyInfo->outFormat, fAny2ManyInfo->outFileName);
|
||||||
break;
|
break;
|
||||||
case A2M_MUD:
|
case A2M_MUD:
|
||||||
if (fAny2ManyInfo->outFileName.Length() == 0)
|
if (fAny2ManyInfo->outFileName.Length() == 0)
|
||||||
@@ -787,7 +787,7 @@ Bool_t PRunDataHandler::ReadWriteFilesList()
|
|||||||
success = WritePsiBinFile(fln);
|
success = WritePsiBinFile(fln);
|
||||||
break;
|
break;
|
||||||
case A2M_NEXUS:
|
case A2M_NEXUS:
|
||||||
success = WriteNexusFile(fln);
|
success = WriteNexusFile(fAny2ManyInfo->outFormat, fln);
|
||||||
break;
|
break;
|
||||||
case A2M_MUD:
|
case A2M_MUD:
|
||||||
success = WriteMudFile(fln);
|
success = WriteMudFile(fln);
|
||||||
@@ -4706,7 +4706,7 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln)
|
|||||||
for (UInt_t i=0; i<fData[0].GetNoOfHistos(); i++) {
|
for (UInt_t i=0; i<fData[0].GetNoOfHistos(); i++) {
|
||||||
dataSet = fData[0].GetDataSet(i, false); // i.e. the false means, that i is the index and NOT the histo number
|
dataSet = fData[0].GetDataSet(i, false); // i.e. the false means, that i is the index and NOT the histo number
|
||||||
if (dataSet == nullptr) { // something is really wrong
|
if (dataSet == nullptr) { // something is really wrong
|
||||||
std::cerr << std::endl << ">> PRunDataHandler::WriteNexusFile: **ERROR** Couldn't get data set (idx=0" << i << ")";
|
std::cerr << std::endl << ">> PRunDataHandler::WriteRootFile: **ERROR** Couldn't get data set (idx=0" << i << ")";
|
||||||
std::cerr << std::endl << ">> something is really wrong!" << std::endl;
|
std::cerr << std::endl << ">> something is really wrong!" << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -4800,16 +4800,14 @@ Bool_t PRunDataHandler::WriteRootFile(TString fln)
|
|||||||
/**
|
/**
|
||||||
* <p> Write the nexus-file format.
|
* <p> Write the nexus-file format.
|
||||||
*
|
*
|
||||||
* <b>return:</b>
|
|
||||||
* - true on successful writting,
|
|
||||||
* - otherwise false.
|
|
||||||
*
|
|
||||||
* \param fln file name. If empty, the routine will try to construct one
|
* \param fln file name. If empty, the routine will try to construct one
|
||||||
|
|
||||||
|
* \return true on successful writting, otherwise false.
|
||||||
*/
|
*/
|
||||||
Bool_t PRunDataHandler::WriteNexusFile(TString fln)
|
Bool_t PRunDataHandler::WriteNexusFile(TString format, TString fln)
|
||||||
{
|
{
|
||||||
#ifdef PNEXUS_ENABLED
|
#ifdef PNEXUS_ENABLED
|
||||||
/* //as35
|
|
||||||
Bool_t ok = false;
|
Bool_t ok = false;
|
||||||
fln = GenerateOutputFileName(fln, ".nxs", ok);
|
fln = GenerateOutputFileName(fln, ".nxs", ok);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
@@ -4818,19 +4816,49 @@ Bool_t PRunDataHandler::WriteNexusFile(TString fln)
|
|||||||
if (!fAny2ManyInfo->useStandardOutput)
|
if (!fAny2ManyInfo->useStandardOutput)
|
||||||
std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): writing a NeXus data file (" << fln.Data() << ") ... " << std::endl;
|
std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): writing a NeXus data file (" << fln.Data() << ") ... " << std::endl;
|
||||||
|
|
||||||
// create NeXus object
|
if (format.Contains("HDF4", TString::kIgnoreCase)) { // HDF4
|
||||||
std::unique_ptr<PNeXus> nxs = std::make_unique<PNeXus>();
|
#ifdef HAVE_HDF4
|
||||||
if (nxs == nullptr) {
|
std::cerr << "**ERROR** not yet implemented!" << std::endl;
|
||||||
std::cerr << std::endl << ">> PRunDataHandler::WriteNexusFile(): **ERROR** couldn't invoke the NeXus object." << std::endl;
|
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
|
} else { // HDF5
|
||||||
|
try {
|
||||||
|
// create NeXus object
|
||||||
|
std::unique_ptr<nxH5::PNeXus> nxs = std::make_unique<nxH5::PNeXus>();
|
||||||
|
if (nxs == nullptr) {
|
||||||
|
std::cerr << std::endl << ">> PRunDataHandler::WriteNexusFile(): **ERROR** couldn't invoke the NeXus object." << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fAny2ManyInfo->idf == 1) { // IDF V1
|
||||||
|
// set NeXus version
|
||||||
|
nxs->AddGroupAttribute("/", "NeXus_version", std::string("4.3.0"));
|
||||||
|
// set HDF5 version
|
||||||
|
nxs->AddGroupAttribute("/", "HDF_version", nxs->GetHdf5LibVersion());
|
||||||
|
// set file name
|
||||||
|
nxs->AddGroupAttribute("/", "file_name", std::string(fln.Data()));
|
||||||
|
// set IDF version
|
||||||
|
nxs->AddDataset<int>("/run/IDF_version", {(int)fAny2ManyInfo->idf}, {1}, H5::PredType::NATIVE_INT32);
|
||||||
|
} else { // IDF V2
|
||||||
|
// set IDF version
|
||||||
|
nxs->AddDataset<int>("/raw_data_1/IDF_version", {(int)fAny2ManyInfo->idf}, {1}, H5::PredType::NATIVE_INT32);
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = nxs->WriteNexusFile(fln.Data(), fAny2ManyInfo->idf);
|
||||||
|
if (result != 0) {
|
||||||
|
std::cerr << std::endl << "**ERROR** PRunDataHandler::WriteNexusFile, fln=" << fln << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (const H5::Exception& e) {
|
||||||
|
std::cerr << std::endl << "HDF5 error: " << e.getDetailMsg() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set IDF version
|
return true;
|
||||||
nxs->SetIdfVersion(fAny2ManyInfo->idf);
|
|
||||||
|
|
||||||
|
/* //as35
|
||||||
if (fAny2ManyInfo->idf == 1) {
|
if (fAny2ManyInfo->idf == 1) {
|
||||||
// fill necessary data structures
|
// fill necessary data structures
|
||||||
nxs->SetFileName(fln.Data());
|
|
||||||
|
|
||||||
// set file creating time
|
// set file creating time
|
||||||
time_t now;
|
time_t now;
|
||||||
@@ -5121,7 +5149,7 @@ Bool_t PRunDataHandler::WriteNexusFile(TString fln)
|
|||||||
nxs->WriteFile(fln, fileType, fAny2ManyInfo->idf);
|
nxs->WriteFile(fln, fileType, fAny2ManyInfo->idf);
|
||||||
*/ //as35
|
*/ //as35
|
||||||
#else
|
#else
|
||||||
std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): Sorry, not enabled at configuration level, i.e. --enable-NeXus when executing configure" << std::endl << std::endl;
|
std::cout << std::endl << ">> PRunDataHandler::WriteNexusFile(): Sorry, not enabled at configuration level, i.e. -Dnexus=1 when executing configure" << std::endl << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -449,7 +449,7 @@ class PRunDataHandler
|
|||||||
|
|
||||||
virtual Bool_t WriteMusrRootFile(Int_t tag=A2M_MUSR_ROOT_DIR, TString fln="");
|
virtual Bool_t WriteMusrRootFile(Int_t tag=A2M_MUSR_ROOT_DIR, TString fln="");
|
||||||
virtual Bool_t WriteRootFile(TString fln="");
|
virtual Bool_t WriteRootFile(TString fln="");
|
||||||
virtual Bool_t WriteNexusFile(TString fln="");
|
virtual Bool_t WriteNexusFile(TString format, TString fln="");
|
||||||
virtual Bool_t WriteWkmFile(TString fln="");
|
virtual Bool_t WriteWkmFile(TString fln="");
|
||||||
virtual Bool_t WritePsiBinFile(TString fln="");
|
virtual Bool_t WritePsiBinFile(TString fln="");
|
||||||
virtual Bool_t WriteMudFile(TString fln="");
|
virtual Bool_t WriteMudFile(TString fln="");
|
||||||
|
|||||||
Reference in New Issue
Block a user