#include "PatientDataReader.h" #include "Helper/MatlabHelper.h" #include "Data/ConfigHeader.h" #include "Json/json.hpp" #include #include #include namespace { static std::string getPatientStringData(mat_t* aPatMat, const char* aFieldName) { matvar_t* matVar = Mat_VarRead(aPatMat,aFieldName); std::string result; if(matVar!=nullptr) { result = MatlabHelper::getMatlabString(matVar); } Mat_VarFree(matVar); return result; } } PatientDataReader::PatientDataReader() { } PatientData PatientDataReader::getPatientDataFromKIT(const std::string& aFilePath) { mat_t* patMat = Mat_Open(aFilePath.c_str(), MAT_ACC_RDONLY); PatientData result; if(patMat == nullptr) { return result; } //InstitutionAddress result.setInstituationAddress(getPatientStringData(patMat,"InstitutionAddress")); //InstitutionName result.setInstituationName(getPatientStringData(patMat,"InstitutionName")); //IsEmptyData matvar_t* isEmptyDataVar = Mat_VarRead(patMat,"IsEmptyData"); if(isEmptyDataVar!=nullptr) { bool isEmptyData = static_cast(*reinterpret_cast(isEmptyDataVar->data)); result.setIsEmptyData(isEmptyData); } Mat_VarFree(isEmptyDataVar); //Laterality result.setLaterality(getPatientStringData(patMat,"Laterality")); //OperatorName result.setOperatorName(getPatientStringData(patMat,"OperatorName")); //PatientBirthDate result.setPatientBirthDate(getPatientStringData(patMat,"PatientBirthDate")); //PatientID result.setPatientID(getPatientStringData(patMat,"PatientID")); //PatientName result.setPatientName(getPatientStringData(patMat,"PatientName")); //AccessionNumber result.setAccessionNumber(getPatientStringData(patMat,"AccessionNumber")); //StudyUID result.setStudyUID(getPatientStringData(patMat,"StudyUID")); //PatientSex result.setPatientSex(getPatientStringData(patMat,"PatientSex")); //ReferringPhysicianName result.setReferringPhysicianName(getPatientStringData(patMat,"ReferringPhysicianName")); Mat_Close(patMat); return result; } PatientData PatientDataReader::getPatientDataFromHJ(const std::string& aFilePath, ConfigHeader* aConfigHeader) { PatientData result; std::ifstream stream; stream.open(aFilePath, std::ios_base::binary | std::ios::in); stream.seekg(aConfigHeader->getPatientPosition(),std::ios::beg); char* patientCString = new char[aConfigHeader->getPatientLength()]; stream.read(patientCString,aConfigHeader->getPatientLength()); std::string patientJsonString = patientCString; nlohmann::json jsonObj = nlohmann::json::parse(patientJsonString); if(!jsonObj.contains("Patient Info")) { return result; } nlohmann::json patientObj = jsonObj.at("Patient Info"); if(patientObj.contains("PatientID")) { result.setPatientID(patientObj.at("PatientID").get()); } if(patientObj.contains("PatientName")) { result.setPatientName(patientObj.at("PatientName").get()); } if(patientObj.contains("PatientBirthDate")) { result.setPatientBirthDate(patientObj.at("PatientBirthDate").get()); } if(patientObj.contains("ReferringPhysicianName")) { result.setReferringPhysicianName(patientObj.at("ReferringPhysicianName").get()); } if(patientObj.contains("InstitutionName")) { result.setInstituationName(patientObj.at("InstitutionName").get()); } if(patientObj.contains("InstitutionAddress")) { result.setInstituationAddress(patientObj.at("InstitutionAddress").get()); } if(patientObj.contains("OperatorName")) { result.setOperatorName(patientObj.at("OperatorName").get()); } if(patientObj.contains("IsEmptyData")) { result.setIsEmptyData(patientObj.at("IsEmptyData").get()); } if(patientObj.contains("PatientSex")) { result.setPatientSex(patientObj.at("PatientSex").get()); } if(patientObj.contains("Laterality")) { result.setLaterality(patientObj.at("Laterality").get()); } if(patientObj.contains("AccessionNumber")) { result.setAccessionNumber(patientObj.at("AccessionNumber").get()); } if(patientObj.contains("StudyUID")) { result.setStudyUID(patientObj.at("StudyUID").get()); } if(patientObj.contains("Modality")) { result.setModality(patientObj.at("Modality").get()); } delete[] patientCString; stream.close(); return result; }