FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
WaveformScalarAnalyze.hpp
1
2//
3// $Id: hpp,v 1.0 2000/01/01 00:00:01 werner Exp $
4//
5// $Log: hpp,v $
6// Created 2011/02/04 11:39:53 mritter
7// Initial version
8//
9//
11#ifndef __WAVEFORMSCALARANALYZE
12
13#define __WAVEFORMSCALARANALYZE
14
15#include <string>
16#include <bone/FishField.hpp>
17#include <elementary/eagle/PhysicalSpace.hpp>
18
19
20namespace Waveform
21{
22
23// classes as trait switches carrying is name as static string
24struct WaveTimeOfMaximum{ static const std::string Name; };
25const std::string WaveTimeOfMaximum::Name = "WaveTimeOfMaximum";
26
27struct WaveMaximum{ static const std::string Name; };
28const std::string WaveMaximum::Name = "WaveMaximum";
29
30struct WaveSize{static const std::string Name; };
31const std::string WaveSize::Name = "WaveSize";
32
33struct WaveIntegral{static const std::string Name;};
34const std::string WaveIntegral::Name = "WaveIntegral";
35
36
37// do analysis per fragmented as trait function
38template<class TT>
39bool computeScalarArray( Fiber::MultiArray<2, unsigned short>&Waveform, MemCore::RefPtr<Fiber::Field>&ResultField,
41{
42 puts("WaveformScalarAnalyze::getScalarArray() Do nothing getScalarArray");
43 return false;
44}
45
46
47
48template<>
49bool computeScalarArray<WaveTimeOfMaximum>( Fiber::MultiArray<2, unsigned short>&Waveform,
52{
53#ifdef VERBOSE
54 puts("WaveformScalarAnalyze::computeScalarArray<WaveTimeOfMaximum>() WaveTimeMaximum");
55#endif
56 // get dimensions of waveforms
58 dims = Waveform.Size();
59
60 size_t wavesize = dims[0];
61 size_t number_of_waveforms = dims[1];
62
63#ifdef VERBOSE
64 std::cout << "WaveformScalarAnalyze::computeScalarArray<WaveTimeOfMaximum>() Dims: " << dims[0] << "x" << dims[1] << std::endl;
65#endif
66
67 // create new Array for time values at maximum
69 Fiber::MultiArray<1, unsigned short>&MaxArr = *Maximums;
70
71 // compute maximum and location of maximum (time = int * 500 pico-sec)
72 for( size_t i = 0; i < number_of_waveforms; i++ )
73 {
74 unsigned short max = 0;
75 unsigned short max_pos = 0;
76
77 for( size_t j = 0; j < wavesize; j++ )
78 if( max < Waveform[i][j] )
79 {
80 max = Waveform[i][j];
81 max_pos = j;
82 }
83 MaxArr[i] = max_pos;
84 }
85
86#ifdef VERBOSE
87 if( f )
88 std::cout << "storing in " << f->Name() << std::endl;
89#endif
90
91 // store array data in field
92 ResultField->setPersistentData( Maximums, f );
93
94 return true;
95}
96
97
98
99
100template<>
101bool computeScalarArray<WaveMaximum>( Fiber::MultiArray<2, unsigned short>&Waveform,
104{
105#ifdef VERBOSE
106 puts("WaveformScalarAnalyze::getScalarArray()<WaveMaximum>WaveTimeMaximum");
107#endif
108
110 dims = Waveform.Size();
111
112 size_t wavesize = dims[0];
113 size_t number_of_waveforms = dims[1];
114
116 Fiber::MultiArray<1, unsigned short>&MaxArr = *Maximums;
117
119
120 for( size_t i = 0; i < number_of_waveforms; i++ )
121 {
122 unsigned short max = 0;
123
124 for( size_t j = 0; j < wavesize; j++ )
125 {
126 mi = j,i;
127 if( max < Waveform[mi] )
128 max = Waveform[mi];
129 }
130 MaxArr[i] = max;
131 }
132
133 ResultField->setPersistentData( Maximums, f );
134
135 return true;
136}
137
138// Detecting size of waveform by first occurance of !0 in the waveform array iterated from the back.
139template<>
140bool computeScalarArray<WaveSize>( Fiber::MultiArray<2, unsigned short>&Waveform,
143{
144#ifdef VERBOSE
145 puts("WaveformScalarAnalyze::getScalarArray()<WaveSize>WaveTimeMaximum");
146#endif
148 dims = Waveform.Size();
149
150#ifdef VERBOSE
151 std::cout << "WaveformScalarAnalyze::computeScalarArray<WaveTimeOfMaximum>() Dims: " << dims[0] << "x" << dims[1] << std::endl;
152#endif
153
154 size_t wavesize = dims[0];
155 size_t number_of_waveforms = dims[1];
156
158 Fiber::MultiArray<1, unsigned short>&SizeValue = *SizeArr;
159
161
162
163 for( size_t i = 0; i < number_of_waveforms; i++ )
164 for( size_t j = wavesize - 1; j >= 0; j-- )
165 {
166 mi = j,i;
167 if( Waveform[mi] != 0 )
168 {
169 SizeValue[i] = j + 1;
170// std::cout << " : " << SizeValue[i] << std::endl;
171 break;
172 }
173 }
174
175 ResultField->setPersistentData( SizeArr, f );
176
177 return true;
178}
179
180
181
182
183template<>
184bool computeScalarArray<WaveIntegral>( Fiber::MultiArray<2, unsigned short>&Waveform,
187{
188#ifdef VERBOSE
189 puts("WaveformScalarAnalyze::computeScalarArray<WaveIntegral>()");
190#endif
191
193 dims = Waveform.Size();
194
195 size_t wavesize = dims[0];
196 size_t number_of_waveforms = dims[1];
197
199 Fiber::MultiArray<1, unsigned short>&IntegralValue = *IntegralArr;
200
202
203 for( size_t i = 0; i < number_of_waveforms; i++ )
204 {
205
206 unsigned short sum = 0;
207
208 for( size_t j = 0; j < wavesize; j++ )
209 {
210 mi = j,i;
211 sum += Waveform[mi];
212 }
213 IntegralValue[i] = sum;
214 }
215
216 ResultField->setPersistentData( IntegralArr, f );
217
218 return true;
219}
220
221
222}
223#endif
_Tp max() const
_Tp sum() const
basic_ostream< _CharT, _Traits > & endl(basic_ostream< _CharT, _Traits > &__os)
ostream cout
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
Definition WaveformScalarAnalyze.hpp:33
Definition WaveformScalarAnalyze.hpp:27
Definition WaveformScalarAnalyze.hpp:30
Definition WaveformScalarAnalyze.hpp:24