WMReadDipoles.h 4.66 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV-Leipzig and CNCF-CBS
// For more information see http://www.openwalnut.org/copying
//
// This file is part of OpenWalnut.
//
// OpenWalnut is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenWalnut is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
//
//---------------------------------------------------------------------------

#ifndef WMREADDIPOLES_H
#define WMREADDIPOLES_H

#include <string>
29
#include <vector>
30 31 32 33 34 35 36

#include <osg/Geode>

#include "core/kernel/WModule.h"
#include "core/kernel/WModuleInputData.h"
#include "core/kernel/WModuleOutputData.h"

37
class WDataSetDipoles;
38

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/**
 * Someone should add some documentation here.
 * Probably the best person would be the module's
 * creator, i.e. "wiebel".
 *
 * This is only an empty template for a new module. For
 * an example module containing many interesting concepts
 * and extensive documentation have a look at "src/modules/template"
 *
 * \ingroup modules
 */
class WMReadDipoles: public WModule
{
public:
    /**
54
     * Simple constructor
55 56 57 58
     */
    WMReadDipoles();

    /**
59
     * Destructs the reader.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
     */
    virtual ~WMReadDipoles();

    /**
     * Gives back the name of this module.
     * \return the module's name.
     */
    virtual const std::string getName() const;

    /**
     * Gives back a description of this module.
     * \return description to module.
     */
    virtual const std::string getDescription() const;

    /**
     * Due to the prototype design pattern used to build modules, this method returns a new instance of this method. NOTE: it
     * should never be initialized or modified in some other way. A simple new instance is required.
     *
     * \return the prototype used to create every module in OpenWalnut.
     */
    virtual boost::shared_ptr< WModule > factory() const;

    /**
     * Get the icon for this module in XPM format.
     *
     * \return The icon.
     */
    virtual const char** getXPMIcon() const;

protected:
    /**
     * Entry point after loading the module. Runs in separate thread.
     */
    virtual void moduleMain();

    /**
     * Initialize the connectors this module is using.
     */
    virtual void connectors();

    /**
     * Initialize the properties for this module.
     */
    virtual void properties();

    /**
     * Initialize requirements for this module.
     */
    virtual void requirements();

private:
112
    /**
113
     * Function that composes the data read by readFile() from the different files to one WDataSetDipoles
114
     *
115
     * \param filenames Names and locations of files to read.
116 117
     * \return A pointer to the loaded dataset
     */
118
    boost::shared_ptr< WDataSetDipoles > readFiles( std::vector< std::string > filenames );
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

    /**
     * Function doing the actual reading from one file
     *
     * \param filename Name and locations of file to read.
     * \param pos position of the dipole
     * \param times time values of the time steps
     * \param magnitudes magnitudes of the dipole at the different time steps.
     * \return A pointer to the loaded dataset
     */
    void readFile( std::string filename,
                   WPosition* pos,
                   std::vector< float >* times,
                   std::vector< float >* magnitudes );

    /**
     * Function reading meta file with filenames of dipole files
     *
     * \param filename Name and location of meta file to read.
     * \return A pointer to the loaded dataset
     */
140
    boost::shared_ptr< WDataSetDipoles > readMetaData( std::string filename );
141 142 143 144

    /**
     * Output connector for dipoles of EEG data
     */
145
    boost::shared_ptr< WModuleOutputData< WDataSetDipoles > > m_dipoles;
146 147 148 149

    /**
     * Pointer to the loaded dataset
     */
150
    boost::shared_ptr< WDataSetDipoles > m_dataSet;
151 152 153

    boost::shared_ptr< WCondition > m_propCondition;  //!< A condition used to notify about changes in several properties.
    WPropFilename m_dataFile; //!< The data will be read from this file.
154
    WPropBool m_metaFile; //!< Use meta file containing fileNames.
155 156 157
};

#endif  // WMREADDIPOLES_H