[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [labplot/gsoc2016_fits] src: cfitsio linked, fits extension names getter function implemented.
From:       Fabian Kristof <f-kristof () hotmail ! com>
Date:       2016-05-02 23:51:46
Message-ID: E1axNcw-0002mz-UZ () scm ! kde ! org
[Download RAW message or body]

Git commit df3856a991b7def4dda0f51523d9979a4bd3ea14 by Fabian Kristof.
Committed on 02/05/2016 at 23:51.
Pushed by fkristof into branch 'gsoc2016_fits'.

cfitsio linked, fits extension names getter function implemented.

M  +1    -1    src/CMakeLists.txt
M  +70   -5    src/backend/datasources/filters/FITSFilter.cpp
M  +3    -1    src/backend/datasources/filters/FITSFilter.h
M  +6    -6    src/backend/datasources/filters/FITSFilterPrivate.h
M  +1    -1    src/kdefrontend/spreadsheet/StatisticsDialog.h

http://commits.kde.org/labplot/df3856a991b7def4dda0f51523d9979a4bd3ea14

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4b621e5..8ccec30 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -211,7 +211,7 @@ set(LABPLOT_SRCS ${GUI_SOURCES} ${PLOTS_SOURCES})
 INCLUDE_DIRECTORIES(. ${GSL_INCLUDE_DIR} ${GSL_INCLUDEDIR}/..)
 kde4_add_ui_files(LABPLOT_SRCS ${UI_SOURCES})
 kde4_add_executable(labplot2 ${LABPLOT_SRCS} ${BACKEND_SOURCES} \
                ${DATASOURCES_SOURCES} ${COMMONFRONTEND_SOURCES} ${TOOLS_SOURCES})
-target_link_libraries(labplot2 ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${GSL_LIBRARIES} \
${GSL_CBLAS_LIBRARIES} ${HDF5_LIBRARY} ${NETCDF_LIBRARY}) \
+target_link_libraries(labplot2 ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${GSL_LIBRARIES} \
${GSL_CBLAS_LIBRARIES} ${HDF5_LIBRARY} ${NETCDF_LIBRARY} ${CFITSIO_LIBRARY})  # \
${OPJ_LIBRARY}  
 ############## installation ################################
diff --git a/src/backend/datasources/filters/FITSFilter.cpp \
b/src/backend/datasources/filters/FITSFilter.cpp index 28f9ddd..8839044 100644
--- a/src/backend/datasources/filters/FITSFilter.cpp
+++ b/src/backend/datasources/filters/FITSFilter.cpp
@@ -53,8 +53,8 @@ bool FITSFilter::load(XmlStreamReader * loader) {
     return false;
 }
 
-QStringList FITSFilter::extensionNames() const {
-    return d->extensionNames();
+QStringList FITSFilter::extensionNames(const QString &fileName) {
+    return d->extensionNames(fileName);
 }
 
 //#####################################################################
@@ -62,7 +62,7 @@ QStringList FITSFilter::extensionNames() const {
 //#####################################################################
 
 FITSFilterPrivate::FITSFilterPrivate(FITSFilter* owner) :
-    q(owner), status(0) {
+    q(owner) {
 }
 
 void FITSFilterPrivate::readCHDU(const QString &fileName, AbstractDataSource \
*dataSource, AbstractFileFilter::ImportMode importMode) { @@ -76,8 +76,73 @@ void \
FITSFilterPrivate::writeCHDU(const QString &fileName, AbstractDataSource *d  \
Q_UNUSED(dataSource)  }
 
-QStringList FITSFilterPrivate::extensionNames() const {
-    return QStringList();
+QStringList FITSFilterPrivate::extensionNames(const QString& fileName) {
+    QStringList extensionNames;
+    int status = 0;
+    if (!fits_open_file(&fitsFile, fileName.toLatin1(), READONLY, &status )) {
+        int hduCount;
+
+        if (!fits_get_num_hdus(fitsFile, &hduCount, &status)) {
+            int imageCount = 0;
+            int asciiTableCount = 0;
+            int binaryTableCount = 0;
+            for (int currentHDU = 1; currentHDU <= hduCount; ++currentHDU) {
+
+                char extensionName[80];
+                int hduType;
+
+                fits_get_hdu_type(fitsFile, &hduType, &status);
+
+                switch (hduType) {
+                case IMAGE_HDU:
+                    imageCount++;
+                    break;
+                case ASCII_TBL:
+                    asciiTableCount++;
+                    break;
+                case BINARY_TBL:
+                    binaryTableCount++;
+                    break;
+                }
+                QString extName;
+                if (!fits_read_keyword(fitsFile, "EXTNAME", extensionName, NULL, \
&status)){ +                    extName = QString(extensionName);
+                } else {
+                    status = 0;
+                    if (!fits_read_keyword(fitsFile, "HDUNAME", extensionName, NULL, \
&status)) { +                        extName = QString(extensionName);
+                    } else {
+                        switch (hduType) {
+                        case IMAGE_HDU:
+                            extName = i18n("IMAGE #%1").arg(imageCount);
+                            break;
+                        case ASCII_TBL:
+                            extName = i18n("ASCII_TBL #%1").arg(asciiTableCount);
+                            break;
+                        case BINARY_TBL:
+                            extName = i18n("BINARY_TBL #%1").arg(binaryTableCount);
+                            break;
+                        }
+                    }
+                }
+                extensionNames << extName.trimmed();
+                fits_movrel_hdu(fitsFile, 1, NULL, &status);
+            }
+        } else {
+            printError(status);
+        }
+    } else {
+        printError(status);
+    }
+
+    return extensionNames;
+}
+
+void FITSFilterPrivate::printError(int status) const {
+    if (status) {
+        char errorText[80];
+        fits_get_errstatus(status, errorText );
+    }
 }
 
 
diff --git a/src/backend/datasources/filters/FITSFilter.h \
b/src/backend/datasources/filters/FITSFilter.h index b9623c9..abcc14a 100644
--- a/src/backend/datasources/filters/FITSFilter.h
+++ b/src/backend/datasources/filters/FITSFilter.h
@@ -30,6 +30,8 @@ Copyright            : (C) 2016 by Fabian Kristof \
(fkristofszabolcs@gmail.com)  
 #include "backend/datasources/filters/AbstractFileFilter.h"
 #include <QStringList>
+#include <KLocale>
+
 class FITSFilterPrivate;
 class FITSFilter : public AbstractFileFilter{
     Q_OBJECT
@@ -44,7 +46,7 @@ class FITSFilter : public AbstractFileFilter{
 
     virtual void save(QXmlStreamWriter*) const;
     virtual bool load(XmlStreamReader*);
-    QStringList extensionNames() const;
+    QStringList extensionNames(const QString& fileName);
 
   private:
     FITSFilterPrivate* const d;
diff --git a/src/backend/datasources/filters/FITSFilterPrivate.h \
b/src/backend/datasources/filters/FITSFilterPrivate.h index 397d27c..4f6c662 100644
--- a/src/backend/datasources/filters/FITSFilterPrivate.h
+++ b/src/backend/datasources/filters/FITSFilterPrivate.h
@@ -27,9 +27,9 @@ Copyright            : (C) 2016 by Fabian Kristof \
                (fkristofszabolcs@gmail.com)
 *   Boston, MA  02110-1301  USA                                           *
 *                                                                         *
 ***************************************************************************/
-#ifdef HAVE_FITS
+//#ifdef HAVE_FITS
 #include "fitsio.h"
-#endif
+//#endif
 class AbstractDataSource;
 
 class FITSFilterPrivate {
@@ -41,15 +41,15 @@ class FITSFilterPrivate {
                 void writeCHDU(const QString & fileName, AbstractDataSource* \
dataSource);  
                 const FITSFilter* q;
-                QStringList extensionNames() const;
+                QStringList extensionNames(const QString &fileName) ;
 
 
         private:
-                int status;
+                void printError(int status) const;
 
-#ifdef HAVE_FITS
+//#ifdef HAVE_FITS
                 fitsfile* fitsFile;
-#endif
+//#endif
 
 };
 
diff --git a/src/kdefrontend/spreadsheet/StatisticsDialog.h \
b/src/kdefrontend/spreadsheet/StatisticsDialog.h index 8609b8d..cb7427b 100644
--- a/src/kdefrontend/spreadsheet/StatisticsDialog.h
+++ b/src/kdefrontend/spreadsheet/StatisticsDialog.h
@@ -3,7 +3,7 @@
     Project              : LabPlot
     Description          : Dialog showing statistics for column values
     --------------------------------------------------------------------
-    Copyright            : (C) 2016 by Fabian Kristof (fkristofszabolcs@gmail.com))
+    Copyright            : (C) 2016 by Fabian Kristof (fkristofszabolcs@gmail.com)
     Copyright            : (C) 2016 by Alexander Semke (alexander.semke@web.de)
 
  ***************************************************************************/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic