Blame view

src/ExternLib/GetClbInfoByIndex/GetClbInfoByIndex.hh 4.04 KB
ed9a1eaf   Benjamin Renard   Add Maven STATIC ...
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
/*
 * GetClbInfoByIndex.hh
 *
 *  Created on: Sep 24, 2015
 *      Author: AKKA
 */

#ifndef GetClbInfoByIndex_HH_
#define GetClbInfoByIndex_HH_

#include "vector"

#include <boost/algorithm/string.hpp>

#include "AMDA_exception.hh"
#include "DicError.hh"

#include "Parameter.hh"
#include "ParamData.hh"
#include "Operation.hh"

using namespace std;
using namespace boost;
using namespace AMDA::Parameters;

namespace AMDA {
namespace GetClbInfoByIndex {

namespace Base {
/**
 * @class Base::GetClbInfoByIndex
 * @brief It is responsible to shift data of any ParamData type.
 * @details This class implement the interface Operation.
 */
		class GetClbInfoByIndex : public Operation {
		public:

			/**
			 * @brief Default Constructor.
			 */
			GetClbInfoByIndex(Process& pProcess) : Operation(pProcess) {}

			/**
			 * @brief Destructor.
			 */
			virtual ~GetClbInfoByIndex() {}

			/**
			 * @brief initialize the operation .
			 * @detail initialize the operation with information stored in pInput.getInfoList() and pAttribute.
			 */
			virtual void init(Parameter& input, Process::AttributeList& pAttribute)	= 0;

		protected:
		};
	}


/**
 * @class GetClbInfoByIndex
 * @brief It is responsible to shift data of any ParamData type.
 * @details This class implement the interface Operation for a TParamData.
 */
template<class TParamData>
class GetClbInfoByIndex : public Base::GetClbInfoByIndex {
public:
	/**
	 * @brief Constructor.
	 * @details Create the ParamData type of the input ParamData.
	 */
  GetClbInfoByIndex(Process& pProcess, TParamData& paramInput)
524e472e   Benjamin Renard   Fix bug with GetC...
72
	: Base::GetClbInfoByIndex(pProcess), _paramInput(paramInput), _paramOutput(new ParamDataTab1DDouble()), _maxTableSize(0) {
ed9a1eaf   Benjamin Renard   Add Maven STATIC ...
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
	  _paramDataOutput=_paramOutput;
	  }

  /**
   *
	 * @overload Base::GetClbInfoByIndex::init()
   */
  void init(Parameter& pInput, Process::AttributeList& pAttribute) {
	  Parameter::InfoList& lInfoList = pInput.getInfoList();

	  std::string clbInfoName = pAttribute[0];
	  int size = atoi(pAttribute[1].c_str());

	  for (unsigned int i=0; i < (unsigned int)size; ++i)
	  {
		  std::string clbInfoIndexName = clbInfoName;
		  clbInfoIndexName += "_";
		  clbInfoIndexName += std::to_string(i);
		  if (lInfoList.find(clbInfoIndexName) == lInfoList.end())
		  {
			  BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_PROCESS_ERR) << AMDA::ex_msg(std::string("GetClbInfoByIndex::init - Cannot find calibInfo "+clbInfoIndexName)));
		  }
		  _calibrationInfoList[i]=lInfoList[clbInfoIndexName].get();
524e472e   Benjamin Renard   Fix bug with GetC...
96
97
                  if (_calibrationInfoList[i]->size() > _maxTableSize)
                      _maxTableSize = _calibrationInfoList[i]->size();
ed9a1eaf   Benjamin Renard   Add Maven STATIC ...
98
99
100
101
102
103
104
105
106
	  }
  }

  /**
	 * @overload Operation::write(ParamDataIndexInfo &pParamDataIndexInfo)
	 */
  void  write(ParamDataIndexInfo &pParamDataIndexInfo) {
    unsigned int index = pParamDataIndexInfo._startIndex;
    for (; index< pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess; index++) {
524e472e   Benjamin Renard   Fix bug with GetC...
107
108
109
110
111
112
113
114
115
116
         _paramOutput->pushTime(_paramInput.getTime(index));
         if (isNAN(_paramInput.getDataList()[index]))  {
             std::vector<double> emptyVec;
             if (_maxTableSize > 0) {
                 emptyVec.resize(_maxTableSize);
                 emptyVec << NotANumber();
             }
             _paramOutput->getDataList().push_back(emptyVec);
             continue;
         }
ed9a1eaf   Benjamin Renard   Add Maven STATIC ...
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
    	_paramOutput->getDataList().push_back(*(_calibrationInfoList[(int)floor(_paramInput.getDataList()[index])]));
    }
  }

private:
	/**
	 * @brief It is the channel of calibration.
	 */
  TParamData &_paramInput;

	/**
	 * @brief It is the channel of the data shifted.
	 */
  ParamDataTab1DDouble *_paramOutput;


524e472e   Benjamin Renard   Fix bug with GetC...
133
134
  double _maxTableSize;

ed9a1eaf   Benjamin Renard   Add Maven STATIC ...
135
136
137
138
139
140
141
142
143
144
145
146
	/**
	 * @brief map of calibrationInfo.
	 * @detail for expression #getClbInfo($ETableN;0:ImaEner_0;1:ImaEner_1)
	 * the key of map is 0 respectively  1
	 * the value of map is  the value of attributes  ImaEner[0] respectively and ImaEner[0]
	 */
  std::map<unsigned int , Parameter::InfoValues*> _calibrationInfoList;
};

} /* namespace GetClbInfoByIndex */
} /* namespace AMDA */
#endif /* GetClbInfoByIndex_HH_ */