File: Monitor.h

package info (click to toggle)
camitk 4.1.2-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 427,532 kB
  • sloc: cpp: 79,494; xml: 1,176; sh: 1,137; ansic: 142; makefile: 107; perl: 84; sed: 20
file content (135 lines) | stat: -rw-r--r-- 4,479 bytes parent folder | download | duplicates (2)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*****************************************************************************
 * $CAMITK_LICENCE_BEGIN$
 *
 * CamiTK - Computer Assisted Medical Intervention ToolKit
 * (c) 2001-2018 Univ. Grenoble Alpes, CNRS, TIMC-IMAG UMR 5525 (GMCAO)
 *
 * Visit http://camitk.imag.fr for more information
 *
 * This file is part of CamiTK.
 *
 * CamiTK is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * CamiTK 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 version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with CamiTK.  If not, see <http://www.gnu.org/licenses/>.
 *
 * $CAMITK_LICENCE_END$
 ****************************************************************************/

#ifndef MONITOR_MONITOR_H
#define MONITOR_MONITOR_H

#include "MMLAPI.h"

#include <string>
#include <vector>

// Monitor includes
#include "MonitoringManager.h"
#include <MonitorIn.hxx>

// Reference includes
#include "Reference.h"
/**
 * @ingroup group_cepmodeling_libraries_mml
 *
 * @brief
 * A monitor calculate and store followed data (ex:calculation between current position and references)
 * At current time (current state of simulation is given by Parameters class)
 * A monitor is active between startAt and stopAt time
 *
 **/
class MML_API Monitor {

public:

    /**
     * type of the values stored (please update typeCount and doc if you update the enum)
     * SCALAR: the monitor store a single scalar value
     * SCALARSET: the monitor stores a scalar value for each atom
     * VECTORSET: the monitor stores 3 scalar values for each atom
     * MATRIX_33SET: the monitor stores a matrix 3x3 for each atom
     */
    enum type {
        SCALAR,
        SCALARSET,
        VECTORSET,
        MATRIX_33SET
    };
    /// number of possible types (siez of the previous enum). Please always update if the enum is updated.
    static const unsigned int typeCount = 4;

    /**
     * constructor
     * @param m the xsdcxx generated monitor
     */
    Monitor(mml::Monitor* m, MonitoringManager* monitoringManager, Monitor::type type);
    /// destructor
    virtual ~Monitor();

    /// calculate current followed data and store them in values vector
    virtual void calculate() = 0;
    /// write data stored in values vector into mmlOut file
    virtual void write();

    int getIndex();
    double getStartAt();
    double getStopAt();
    std::string getReferenceName();
    std::string getTargetName();
    Monitor::type getValueType();
    virtual std::string getTypeName() = 0;

    /// populate values with the corresponding values at index i
    bool getValuesOfIndex(int i, double values[]);
    /// get index i of indexes vector
    int getIndexOfValues(const unsigned int i);
    /// get value i of values vector
    double getValue(const unsigned int i);
    /// get number of index in indexes vetor
    unsigned int getNumberOfIndex();
    /// get number of value in values vetor
    unsigned int getNumberOfValues();

protected:
    /// index of monitor
    int index;
    /// time to start monitoring
    double startAt;
    /// time to stop monitoring
    double stopAt;
    /// references used when monitor need references
    std::vector<Reference*> references;
    /// the name of the component targeted by the monitor
    std::string target;
    /// map between indexes and values
    std::map<int, std::vector<double> > indexToValuesMap;
    /// the xsdcxx object representing monitor, used for serialization
    mml::Monitor* mappedObject;
    /// monitoring manager
    MonitoringManager* monitoringManager;
    /// type of the values stored
    Monitor::type valueType;
    /// dimension of data stored
    int dimension;
    /// offset in x direction (if reference is not aligned)
    double dx;
    /// offset in y direction (if reference is not aligned)
    double dy;
    /// offset in z direction (if reference is not aligned)
    double dz;
    /// the vector which contains data monitored
    std::vector<double> values;
    /// vector which contains target's atoms index (in same order that values associate with)
    std::vector<int> indexes;
};

#endif // MONITOR_MONITOR_H