Sfoglia il codice sorgente

Merge pull request #635 from AndreasFetzer/expand-columns-for-subject-and-experiment-quickfix

Expand columns for subject and experiment quickfix
Jean-Christophe Fillion-Robin 9 anni fa
parent
commit
fd697c6906

+ 32 - 0
Libs/XNAT/Core/ctkXnatDefaultSchemaTypes.cpp

@@ -24,8 +24,40 @@
 QString ctkXnatDefaultSchemaTypes::XSI_PROJECT = "xnat:projectData";
 QString ctkXnatDefaultSchemaTypes::XSI_SUBJECT = "xnat:subjectData";
 QString ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT = "xnat:experimentData";
+QString ctkXnatDefaultSchemaTypes::XSI_IMAGE_SESSION_DATA = "xnat:imageSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_SUBJECT_VARIABLE_DATA = "xnat:subjectVariablesData";
 QString ctkXnatDefaultSchemaTypes::XSI_SCAN = "xnat:imageScanData";
 QString ctkXnatDefaultSchemaTypes::XSI_ASSESSOR = "xnat:imageAssessorData";
 QString ctkXnatDefaultSchemaTypes::XSI_FILE = "xnat:abstractResource";
 QString ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION = "xnat:reconstructedImageData";
 QString ctkXnatDefaultSchemaTypes::XSI_RESOURCE = "xnat:resource";
+
+// Specific schema types for an experiment session
+QString ctkXnatDefaultSchemaTypes::XSI_CR_SESSION = "xnat:crSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_CT_SESSION = "xnat:ctSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_DX_SESSION = "xnat:dxSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_DX3DCRANIOFACIAL_SESSION = "xnat:dx3DCraniofacialSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_ECG_SESSION = "xnat:ecgSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_EEG_SESSION = "xnat:eegessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_EPS_SESSION = "xnat:epsSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_ES_SESSION = "xnat:esSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_ESV_SESSION = "xnat:esvSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_GM_SESSION = "xnat:gmSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_GMV_SESSION = "xnat:gmvSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_HD_SESSION = "xnat:hdSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_IO_SESSION = "xnat:ioSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_MEG_SESSION = "xnat:megSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_MG_SESSION = "xnat:mgSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_MR_SESSION = "xnat:mrSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_OP_SESSION = "xnat:opSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_OPT_SESSION = "xnat:optSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_OTHER_DICOM_SESSION = "xnat:otherDicomSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_PET_SESSION = "xnat:petSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_RF_SESSION = "xnat:rfSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_RT_SESSION = "xnat:rtSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_SM_SESSION = "xnat:smSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_US_SESSION = "xnat:usSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_XA_SESSION = "xnat:xaSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_XA3D_SESSION = "xnat:xa3DSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_XC_SESSION = "xnat:xcSessionData";
+QString ctkXnatDefaultSchemaTypes::XSI_XCV_SESSION = "xnat:xcvSessionData";

+ 32 - 0
Libs/XNAT/Core/ctkXnatDefaultSchemaTypes.h

@@ -34,11 +34,43 @@ struct CTK_XNAT_CORE_EXPORT ctkXnatDefaultSchemaTypes
   static QString XSI_PROJECT; // = "xnat:projectData"
   static QString XSI_SUBJECT; // = "xnat:subjectData"
   static QString XSI_EXPERIMENT; // = "xnat:experimentData"
+  static QString XSI_IMAGE_SESSION_DATA; // = "xnat:imageSessionData"
+  static QString XSI_SUBJECT_VARIABLE_DATA; // = "xnat:subjectVariablesData"
   static QString XSI_SCAN; // = "xnat:imageScanData"
   static QString XSI_ASSESSOR; // = "xnat:imageAssessorData"
   static QString XSI_FILE; // = "xnat:abstractResource"
   static QString XSI_RECONSTRUCTION; // = "xnat:reconstructedImageData"
   static QString XSI_RESOURCE; // = "xnat:resource"
+
+  // Specific schema types for an experiment session
+  static QString XSI_CR_SESSION; // = "xnat:crSessionData"
+  static QString XSI_CT_SESSION; // = "xnat:ctSessionData"
+  static QString XSI_DX_SESSION; // = "xnat:dxSessionData"
+  static QString XSI_DX3DCRANIOFACIAL_SESSION; // = "xnat:dx3DCraniofacialSessionData"
+  static QString XSI_ECG_SESSION; // = "xnat:ecgSessionData"
+  static QString XSI_EEG_SESSION; // = "xnat:eegessionData"
+  static QString XSI_EPS_SESSION; // = "xnat:epsSessionData"
+  static QString XSI_ES_SESSION; // = "xnat:esSessionData"
+  static QString XSI_ESV_SESSION; // = "xnat:esvSessionData"
+  static QString XSI_GM_SESSION; // = "xnat:gmSessionData"
+  static QString XSI_GMV_SESSION; // = "xnat:gmvSessionData"
+  static QString XSI_HD_SESSION; // = "xnat:hdSessionData"
+  static QString XSI_IO_SESSION; // = "xnat:ioSessionData"
+  static QString XSI_MEG_SESSION; // = "xnat:megSessionData"
+  static QString XSI_MG_SESSION; // = "xnat:mgSessionData"
+  static QString XSI_MR_SESSION; // = "xnat:mrSessionData"
+  static QString XSI_OP_SESSION; // = "xnat:opSessionData"
+  static QString XSI_OPT_SESSION; // = "xnat:optSessionData"
+  static QString XSI_OTHER_DICOM_SESSION; // = "xnat:otherDicomSessionData"
+  static QString XSI_PET_SESSION; // = "xnat:petSessionData"
+  static QString XSI_RF_SESSION; // = "xnat:rfSessionData"
+  static QString XSI_RT_SESSION; // = "xnat:rtSessionData"
+  static QString XSI_SM_SESSION; // = "xnat:smSessionData"
+  static QString XSI_US_SESSION; // = "xnat:usSessionData"
+  static QString XSI_XA_SESSION; // = "xnat:xaSessionData"
+  static QString XSI_XA3D_SESSION; // = "xnat:xa3DSessionData"
+  static QString XSI_XC_SESSION; // = "xnat:xcSessionData"
+  static QString XSI_XCV_SESSION; // = "xnat:xcvSessionData"
 };
 
 #endif // CTKXNATDEFAULTSCHEMATYPES_H

+ 53 - 0
Libs/XNAT/Core/ctkXnatExperiment.cpp

@@ -34,6 +34,11 @@
 
 #include <QDebug>
 
+const QString ctkXnatExperiment::DATE_OF_ACQUISITION = "date";
+const QString ctkXnatExperiment::TIME_OF_ACQUISITION = "time";
+const QString ctkXnatExperiment::SCANNER_TYPE = "scanner";
+const QString ctkXnatExperiment::IMAGE_MODALITY = "modality";
+
 //----------------------------------------------------------------------------
 class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 {
@@ -99,6 +104,54 @@ void ctkXnatExperiment::setLabel(const QString &label)
 }
 
 //----------------------------------------------------------------------------
+QString ctkXnatExperiment::dateOfAcquisition() const
+{
+  return this->property(DATE_OF_ACQUISITION);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatExperiment::setDateOfAcquisition(const QString &dateOfAcquisition)
+{
+  this->setProperty(DATE_OF_ACQUISITION, dateOfAcquisition);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatExperiment::timeOfAcquisition() const
+{
+  return this->property(TIME_OF_ACQUISITION);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatExperiment::setTimeOfAcquisition(const QString &timeOfAcquisition)
+{
+  this->setProperty(TIME_OF_ACQUISITION, timeOfAcquisition);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatExperiment::scannerType() const
+{
+  return this->property(SCANNER_TYPE);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatExperiment::setScannerType(const QString &scannerType)
+{
+  this->setProperty(SCANNER_TYPE, scannerType);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatExperiment::imageModality() const
+{
+  return this->property(IMAGE_MODALITY);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatExperiment::setImageModality(const QString &imageModality)
+{
+  this->setProperty(IMAGE_MODALITY, imageModality);
+}
+
+//----------------------------------------------------------------------------
 void ctkXnatExperiment::reset()
 {
   ctkXnatObject::reset();

+ 16 - 0
Libs/XNAT/Core/ctkXnatExperiment.h

@@ -51,9 +51,25 @@ public:
   void setLabel(const QString &label);
   QString label() const;
 
+  QString dateOfAcquisition() const;
+  void setDateOfAcquisition(const QString &dateOfAcquisition);
+
+  QString timeOfAcquisition() const;
+  void setTimeOfAcquisition(const QString &timeOfAcquisition);
+
+  QString scannerType() const;
+  void setScannerType(const QString &scannerType);
+
+  QString imageModality() const;
+  void setImageModality(const QString &imageModality);
 
   void reset();
 
+  static const QString DATE_OF_ACQUISITION;
+  static const QString TIME_OF_ACQUISITION;
+  static const QString SCANNER_TYPE;
+  static const QString IMAGE_MODALITY;
+
 private:
 
   virtual void fetchImpl();

+ 4 - 2
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -38,6 +38,8 @@
 const QString ctkXnatObject::ID = "ID";
 const QString ctkXnatObject::NAME = "name";
 const QString ctkXnatObject::LABEL = "label";
+const QString ctkXnatObject::URI = "URI";
+const QString ctkXnatObject::XSI_SCHEMA_TYPE = "xsiType";
 
 //----------------------------------------------------------------------------
 ctkXnatObject::ctkXnatObject(const ctkXnatObject&)
@@ -276,13 +278,13 @@ bool ctkXnatObject::isFetched() const
 //----------------------------------------------------------------------------
 QString ctkXnatObject::schemaType() const
 {
-  return this->property("xsiType");
+  return this->property(XSI_SCHEMA_TYPE);
 }
 
 //----------------------------------------------------------------------------
 void ctkXnatObject::setSchemaType(const QString& schemaType)
 {
-  this->setProperty("xsiType", schemaType);
+  this->setProperty(XSI_SCHEMA_TYPE, schemaType);
 }
 
 //----------------------------------------------------------------------------

+ 2 - 0
Libs/XNAT/Core/ctkXnatObject.h

@@ -160,6 +160,8 @@ public:
   static const QString ID;
   static const QString NAME;
   static const QString LABEL;
+  static const QString URI;
+  static const QString XSI_SCHEMA_TYPE;
 
 protected:
 

+ 15 - 1
Libs/XNAT/Core/ctkXnatProject.cpp

@@ -149,7 +149,21 @@ void ctkXnatProject::fetchImpl()
 {
   QString subjectsUri = this->resourceUri() + "/subjects";
   ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(subjectsUri);
+  QMap<QString, QString> paramMap;
+  QString arglist = QString("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11")
+    .arg(ctkXnatObject::ID)
+    .arg(ctkXnatObject::LABEL)
+    .arg(ctkXnatObject::URI)
+    .arg(ctkXnatSubject::INSERT_DATE)
+    .arg(ctkXnatSubject::INSERT_USER)
+    .arg(ctkXnatSubject::DATE_OF_BIRTH)
+    .arg(ctkXnatSubject::PROJECT_ID)
+    .arg(ctkXnatSubject::GENDER)
+    .arg(ctkXnatSubject::HANDEDNESS)
+    .arg(ctkXnatSubject::WEIGHT)
+    .arg(ctkXnatSubject::HEIGHT);
+  paramMap.insert("columns", arglist);
+  QUuid queryId = session->httpGet(subjectsUri, paramMap);
   QList<ctkXnatObject*> subjects = session->httpResults(queryId,
                                                         ctkXnatDefaultSchemaTypes::XSI_SUBJECT);
 

+ 123 - 5
Libs/XNAT/Core/ctkXnatSubject.cpp

@@ -29,6 +29,12 @@
 
 #include <QDebug>
 
+const QString ctkXnatSubject::PROJECT_ID = "project";
+const QString ctkXnatSubject::DATE_OF_BIRTH = "dob";
+const QString ctkXnatSubject::GENDER = "gender";
+const QString ctkXnatSubject::HANDEDNESS = "handedness";
+const QString ctkXnatSubject::WEIGHT = "weight";
+const QString ctkXnatSubject::HEIGHT = "height";
 const QString ctkXnatSubject::INSERT_DATE = "insert_date";
 const QString ctkXnatSubject::INSERT_USER = "insert_user";
 
@@ -122,6 +128,78 @@ void ctkXnatSubject::setInsertUser(const QString& insertUser)
 }
 
 //----------------------------------------------------------------------------
+QString ctkXnatSubject::projectID() const
+{
+  return this->property(PROJECT_ID);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setProjectID(const QString &projectID)
+{
+  this->setProperty(PROJECT_ID, projectID);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatSubject::dateOfBirth() const
+{
+  return this->property(DATE_OF_BIRTH);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setDateOfBirth(const QString &dateOfBirth)
+{
+  this->setProperty(DATE_OF_BIRTH, dateOfBirth);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatSubject::gender() const
+{
+  return this->property(GENDER);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setGender(const QString &gender)
+{
+  this->setProperty(GENDER, gender);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatSubject::handedness() const
+{
+  return this->property(HANDEDNESS);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setHandedness(const QString &handedness)
+{
+  this->setProperty(HANDEDNESS, handedness);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatSubject::height() const
+{
+  return this->property(HEIGHT);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setHeight(const QString &height)
+{
+  this->setProperty(HEIGHT, height);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatSubject::weight() const
+{
+  return this->property(WEIGHT);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatSubject::setWeight(const QString &weight)
+{
+  this->setProperty(WEIGHT, weight);
+}
+
+//----------------------------------------------------------------------------
 QString ctkXnatSubject::resourceUri() const
 {
   if (this->id().isEmpty())
@@ -141,11 +219,9 @@ void ctkXnatSubject::reset()
 //----------------------------------------------------------------------------
 void ctkXnatSubject::fetchImpl()
 {
-  QString experimentsUri = this->resourceUri() + "/experiments";
-  ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(experimentsUri);
-  QList<ctkXnatObject*> experiments = session->httpResults(queryId,
-                                                           ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT);
+  QList<ctkXnatObject*> experiments;
+  experiments.append(this->fetchImageSessionData());
+  experiments.append(this->fetchSubjectVariablesData());
 
   foreach (ctkXnatObject* experiment, experiments)
   {
@@ -161,6 +237,48 @@ void ctkXnatSubject::fetchImpl()
 }
 
 //----------------------------------------------------------------------------
+QList<ctkXnatObject*> ctkXnatSubject::fetchImageSessionData()
+{
+  QString experimentsUri = this->resourceUri() + "/experiments";
+  ctkXnatSession* const session = this->session();
+  QMap<QString, QString> paramMap;
+  QString arglist = QString("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10")
+    .arg(ctkXnatObject::ID)
+    .arg(ctkXnatObject::LABEL)
+    .arg(ctkXnatObject::XSI_SCHEMA_TYPE)
+    .arg(INSERT_DATE)
+    .arg(INSERT_USER)
+    .arg(ctkXnatObject::URI)
+    .arg(ctkXnatExperiment::DATE_OF_ACQUISITION)
+    .arg(ctkXnatExperiment::TIME_OF_ACQUISITION)
+    .arg(ctkXnatExperiment::SCANNER_TYPE)
+    .arg(ctkXnatExperiment::IMAGE_MODALITY);
+  paramMap.insert("columns", arglist);
+  paramMap.insert(ctkXnatObject::XSI_SCHEMA_TYPE, ctkXnatDefaultSchemaTypes::XSI_IMAGE_SESSION_DATA);
+  QUuid queryId = session->httpGet(experimentsUri, paramMap);
+  return session->httpResults(queryId, ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT);
+}
+
+//----------------------------------------------------------------------------
+QList<ctkXnatObject*> ctkXnatSubject::fetchSubjectVariablesData()
+{
+  QString experimentsUri = this->resourceUri() + "/experiments";
+  ctkXnatSession* const session = this->session();
+  QMap<QString, QString> paramMap;
+  QString arglist = QString("%1,%2,%3,%4,%5,%6")
+    .arg(ctkXnatObject::ID)
+    .arg(ctkXnatObject::LABEL)
+    .arg(ctkXnatObject::XSI_SCHEMA_TYPE)
+    .arg(INSERT_DATE)
+    .arg(INSERT_USER)
+    .arg(ctkXnatObject::URI);
+  paramMap.insert("columns", arglist);
+  paramMap.insert(ctkXnatObject::XSI_SCHEMA_TYPE, ctkXnatDefaultSchemaTypes::XSI_SUBJECT_VARIABLE_DATA);
+  QUuid queryId = session->httpGet(experimentsUri, paramMap);
+  return session->httpResults(queryId, ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT);
+}
+
+//----------------------------------------------------------------------------
 void ctkXnatSubject::downloadImpl(const QString& filename)
 {
   qDebug() << "ctkXnatSubject::downloadImpl(const QString& filename) not yet implemented or not available by REST API";

+ 27 - 0
Libs/XNAT/Core/ctkXnatSubject.h

@@ -63,10 +63,34 @@ public:
   /// @warning does not overwrite the insert user on the server, since this is read only
   void setInsertUser(const QString& insertUser);
 
+  QString projectID() const;
+  void setProjectID(const QString& projectID);
+
+  QString dateOfBirth() const;
+  void setDateOfBirth(const QString& dateOfBirth);
+
+  QString gender() const;
+  void setGender(const QString& gender);
+
+  QString handedness() const;
+  void setHandedness(const QString& handedness);
+
+  QString weight() const;
+  void setWeight(const QString& weight);
+
+  QString height() const;
+  void setHeight(const QString& height);
+
   virtual QString resourceUri() const;
 
   void reset();
 
+  static const QString PROJECT_ID;
+  static const QString DATE_OF_BIRTH;
+  static const QString GENDER;
+  static const QString HANDEDNESS;
+  static const QString WEIGHT;
+  static const QString HEIGHT;
   static const QString INSERT_DATE;
   static const QString INSERT_USER;
 
@@ -76,6 +100,9 @@ private:
 
   virtual void fetchImpl();
 
+  QList<ctkXnatObject*> fetchImageSessionData();
+  QList<ctkXnatObject*> fetchSubjectVariablesData();
+
   virtual void downloadImpl(const QString&);
 
   Q_DECLARE_PRIVATE(ctkXnatSubject)