Blame view

src/ExternLib/mexvex_els_decode/MexVexElsDecode.hh 3.37 KB
35de3ffa   Elena.Budnik   mexvex_els
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
/*
 * MexVexElsDecode.hh
 *
 *  Created on: Oct 13, 2016
 *      Author: elena / benjamin
 */

#ifndef MEXVEXELSDECODE_HH_
#define MEXVEXELSDECODE_HH_

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

namespace AMDA {
namespace Parameters {
namespace MexVexElsDecode {

/**
 * @class MexVexElsDecode
 * @brief 
 * @details This class implement the interface Operation.
 */

template <typename TParamData> 
class MexVexElsDecode : public Operation {
	
typedef typename TParamData::ElementType ElemType;

public:
	/**
	 * @brief Constructor.
	 * @details Create the ParamData type of the input ParamData.
	 */
	MexVexElsDecode(Process& pProcess, TParamData& paramInput, std::string energyTable)
	: Operation(pProcess),
	  _paramInput(paramInput),
	  _paramOutput(new TParamData()),
	  _energyTable(energyTable){
	  _paramDataOutput=_paramOutput;
	}

	virtual ~MexVexElsDecode() {
		
	}

	/**
	 * @overload Operation::write(ParamDataIndexInfo &pParamDataIndexInfo)
	 */
  
	void write(ParamDataIndexInfo &pParamDataIndexInfo) {
	  
		ParameterSPtr crtParam = _process.getParameterManager().getParameter(_energyTable);
		ParamData* lModeParamInput = crtParam->getParamData(&_process).get();
		for (unsigned int _index = pParamDataIndexInfo._startIndex ;
			_index < pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess;
			++_index)
		{
			double crtTime = _paramInput.getTime(_index);
			ElemType inputElt = _paramInput.get(_index);
		
			int mode = (dynamic_cast<ParamDataScalaireShort*>(lModeParamInput))->get(_index);
	     
			if (mode == 1) {
				for (int i = 0; i < 4; ++i){			       
					_paramOutput->pushTime(crtTime+i);
					pushDataForMode1 (inputElt, i);				 
				}
			}
			else if (mode == 0 || mode == 2)			
			{
				_paramOutput->pushTime(crtTime);
				_paramOutput->getDataList().push_back(inputElt);
			}
		}		
	}
3a91e5e3   Benjamin Renard   Fix mex/vex els p...
78

35de3ffa   Elena.Budnik   mexvex_els
79
80
81
82
	template<typename Type>
	void pushDataForMode1(Type& elt, int index) {
		_paramOutput->getDataList().push_back(elt);
	}
3a91e5e3   Benjamin Renard   Fix mex/vex els p...
83

35de3ffa   Elena.Budnik   mexvex_els
84
85
	template<typename Type>
	void pushDataForMode1(std::vector<Type>& elt, int index) {
5fd5fc53   Elena.Budnik   ELS splitted 4,31
86
87
		typename std::vector<Type>::const_iterator first = elt.begin() + 32 * index;
		typename std::vector<Type>::const_iterator last = elt.begin() + 32 * (index + 1) - 1;
3a91e5e3   Benjamin Renard   Fix mex/vex els p...
88
89
90
91
92
93
94
95
96
		std::vector<Type> splitVec;
		splitVec.resize(128, std::nan(""));

		int i = 0;
		for (typename std::vector<Type>::const_iterator it = first; it != last; ++it) {
			splitVec[i] = (*it);
			++i;
		}

35de3ffa   Elena.Budnik   mexvex_els
97
98
99
100
101
		_paramOutput->getDataList().push_back(splitVec);
	}		
	
	template<typename Type>  
	void pushDataForMode1(Tab2DData<Type>& elt, int index) {
5fd5fc53   Elena.Budnik   ELS splitted 4,31
102
		Tab2DData<Type> newElt(elt.getDim1Size(),31); 
35de3ffa   Elena.Budnik   mexvex_els
103
104
		for(int i = 0; i < elt.getDim1Size(); ++i) {                        			
			std::vector<Type> eltVector = elt[i].toVector();
5fd5fc53   Elena.Budnik   ELS splitted 4,31
105
106
			typename std::vector<Type>::const_iterator first = eltVector.begin() + 32 * index;
			typename std::vector<Type>::const_iterator last =  eltVector.begin() + 32 * (index + 1) - 1;
35de3ffa   Elena.Budnik   mexvex_els
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
			std::vector<Type> splitVec(first, last);
			newElt[i] = splitVec;
		}                
		_paramOutput->getDataList().push_back(newElt);
	}
  
private:
	/**<
	 * @brief It is the channel of data derived
	 */
	TParamData &_paramInput;

	/**<
	 * @brief It is the channel of the data derived
	 */
	TParamData *_paramOutput;
	
	std::string _energyTable; 
};  

} /* namespace MexVexElsDecode */
} /* namespace Parameters */
} /* namespace AMDA */
#endif /* MEXVEXELSDECODE_HH_ */