1
/*****************************************************************************
2
TRAVIS - Trajectory Analyzer and Visualizer
3
http://www.travis-analyzer.de/
5
Copyright (c) 2009-2013 Martin Brehm
6
2012-2013 Martin Thomas
8
This file written by Martin Brehm.
10
This program is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version.
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
20
You should have received a copy of the GNU General Public License
21
along with this program. If not, see <http://www.gnu.org/licenses/>.
22
*****************************************************************************/
26
#include "lmwrapper.h"
30
CSDEngine::CSDEngine()
32
m_oaGroups.SetName("CSDEngine::m_oaGroups");
33
m_iaBlockSizes.SetName("CSDEngine::m_iaBlockSizes");
34
m_faTempBuffer.SetName("CSDEngine::m_faTempBuffer");
35
m_faSum.SetName("CSDEngine::m_faSum");
36
m_faSqSum.SetName("CSDEngine::m_faSqSum");
37
m_faMean.SetName("CSDEngine::m_faMean");
38
m_faVari.SetName("CSDEngine::m_faVari");
39
m_faCorLen.SetName("CSDEngine::m_faCorLen");
43
CSDEngine::~CSDEngine()
50
m_oaBlockSets.SetName("CSDGroup::m_oaBlockSets");
59
CSDBlockSet::CSDBlockSet()
62
m_faBlocks.SetName("CSDBlockSet::m_faBlocks");
66
CSDBlockSet::~CSDBlockSet()
71
void CSDEngine::Init(int bins)
79
m_faTempBuffer.SetSize(bins);
80
m_faSum.SetSize(bins);
81
m_faSqSum.SetSize(bins);
82
m_faMean.SetSize(bins);
83
m_faVari.SetSize(bins);
84
m_faCorLen.SetSize(bins);
88
m_faTempBuffer[z] = 0;
97
gr->m_oaBlockSets.SetSize(m_iaBlockSizes.GetSize());
98
gr->m_faBlockVari.SetSize(m_iaBlockSizes.GetSize());
99
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
101
bs = new CSDBlockSet();
102
gr->m_oaBlockSets[z2] = bs;
103
gr->m_faBlockVari[z2] = 0;
105
bs->m_faBlocks.Add(0);
111
void CSDEngine::FinishStep()
119
for (z=0;z<m_oaGroups.GetSize();z++)
121
gr = (CSDGroup*)m_oaGroups[z];
123
m_faSum[z] += m_faTempBuffer[z];
124
m_faSqSum[z] += m_faTempBuffer[z]*m_faTempBuffer[z];
126
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
128
bs = (CSDBlockSet*)gr->m_oaBlockSets[z2];
129
bs->m_faBlocks[bs->m_faBlocks.GetSize()-1] += m_faTempBuffer[z];
132
if (bs->m_iCounter >= m_iaBlockSizes[z2])
135
bs->m_faBlocks[bs->m_faBlocks.GetSize()-1] /= m_iaBlockSizes[z2];
136
bs->m_faBlocks.Add(0);
140
m_faTempBuffer[z] = 0;
145
void CSDEngine::DumpData(CDF *df, float timessigma, bool verbose)
154
double da, ds, dr, tf, dsa, dsmi, dsma;
156
double par[3], *curve;
158
// a = fopen("block.csv","wt");
161
mprintf(" Calculating correlation time of histogram...\n");
163
try { df->m_pAdditionalSets = new double*[4]; } catch(...) { df->m_pAdditionalSets = NULL; }
164
if (df->m_pAdditionalSets == NULL) NewException((double)4*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
166
try { df->m_pAdditionalSetLabels = new char*[4]; } catch(...) { df->m_pAdditionalSetLabels = NULL; }
167
if (df->m_pAdditionalSetLabels == NULL) NewException((double)4*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
169
df->m_iAdditionalSets = 4;
173
try { df->m_pAdditionalSets[z] = new double[df->m_iResolution]; } catch(...) { df->m_pAdditionalSets[z] = NULL; }
174
if (df->m_pAdditionalSets[z] == NULL) NewException((double)df->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
177
sprintf(buf,"%.2f%c confidence range",NormalDistIntegral(timessigma)*2.0-1.0,'%');
178
try { df->m_pAdditionalSetLabels[0] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[0] = NULL; }
179
if (df->m_pAdditionalSetLabels[0] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
180
strcpy(df->m_pAdditionalSetLabels[0],buf);
182
sprintf(buf,"%.2f%c confidence range",NormalDistIntegral(timessigma)*2.0-1.0,'%');
183
try { df->m_pAdditionalSetLabels[1] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[1] = NULL; }
184
if (df->m_pAdditionalSetLabels[1] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
185
strcpy(df->m_pAdditionalSetLabels[1],buf);
187
sprintf(buf,"Standard deviation");
188
try { df->m_pAdditionalSetLabels[2] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[2] = NULL; }
189
if (df->m_pAdditionalSetLabels[2] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
190
strcpy(df->m_pAdditionalSetLabels[2],buf);
192
sprintf(buf,"Correlation Length");
193
try { df->m_pAdditionalSetLabels[3] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[4] = NULL; }
194
if (df->m_pAdditionalSetLabels[3] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
195
strcpy(df->m_pAdditionalSetLabels[3],buf);
197
try { lm = new CLMWrapper(); } catch(...) { lm = NULL; }
198
if (lm == NULL) NewException((double)sizeof(CLMWrapper),__FILE__,__LINE__,__PRETTY_FUNCTION__);
200
try { x = new double[m_iaBlockSizes.GetSize()]; } catch(...) { x = NULL; }
201
if (x == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
203
try { y = new double[m_iaBlockSizes.GetSize()]; } catch(...) { y = NULL; }
204
if (y== NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
206
try { y2 = new double[m_iaBlockSizes.GetSize()]; } catch(...) { y2 = NULL; }
207
if (y2 == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
209
try { curve = new double[m_iaBlockSizes.GetSize()]; } catch(...) { curve = NULL; }
210
if (curve == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
212
mprintf(" Fitting trajectory block decomposition...\n");
215
tf = m_oaGroups.GetSize() / 60.0;
221
for (z=0;z<m_oaGroups.GetSize();z++)
223
if (fmod(z,tf) < 1.0)
226
if (df->m_pBin[z] == 0)
229
gr = (CSDGroup*)m_oaGroups[z];
231
// mprintf(" * Gruppe %d:\n",z);
235
sprintf(buf,"extra%03d.csv",z);
237
fprintf(b,"# Block; Block size; sqrt(size); log(size); 1/size; Vari; Size*Vari; S; log(S); log(S2); Fit\n");
241
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
243
x[z2] = log10(m_iaBlockSizes[z2]);
244
y[z2] = log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]);
263
lm->Fit_SD(m_iaBlockSizes.GetSize(),x,y2,par,curve,&dr,200);
266
fprintf(b,"# A=%G; B=%G; C=%G; R=%G\n",par[0],par[1],par[2],dr);
268
ds = pow(10.0,par[0]*(1.0-exp(par[1]*pow(log10(m_iSteps),par[2]))));
279
// mprintf(" Fit done. y(x) = %10G * (1 - exp( %10G * x^%10G ) ). R = %10G. S = %10G\n",par[0],par[1],par[2],dr,ds);
283
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
284
fprintf(b,"%d; %d; %G; %G; %G; %G; %G; %G; %G; %G; %G\n",z2,(int)m_iaBlockSizes[z2],sqrt(m_iaBlockSizes[z2]),log10(m_iaBlockSizes[z2]),1.0/m_iaBlockSizes[z2],gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z],y[z2],y2[z2],curve[z2]);
287
/* x = new double[m_iaBlockSizes.GetSize()];
288
y = new double[m_iaBlockSizes.GetSize()];
292
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
294
bs = (CSDBlockSet*)gr->m_oaBlockSets[z2];
295
// mprintf(" - Blockgroesse %d (%d Schritte)\n",z2,m_iaBlockSizes[z2]);
296
// mprintf(" %d Bloecke, Counter %d.\n",bs->m_faBlocks.GetSize(),bs->m_iCounter);
300
for (z3=0;z3<bs->m_faBlocks.GetSize()-1;z3++)
302
fprintf(a,"%d; %d; %G\n",z2,z3,bs->m_faBlocks[z3]);
307
x[z2] = log10(m_iaBlockSizes[z2]);
308
y[z2] = log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]);
313
xa /= m_iaBlockSizes.GetSize();
314
ya /= m_iaBlockSizes.GetSize();
320
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
322
dxy += (x[z2] - xa) * (y[z2] - ya);
323
dxx += (x[z2] - xa) * (x[z2] - xa);
324
dyy += (y[z2] - ya) * (y[z2] - ya);
330
ds = pow(10.0, da + db * log10(m_iSteps));
332
dr = sqrt( dxy*dxy / dxx / dyy );
334
mprintf(" y(x) = %10G + %10G * x; S = %10G; R = %10G\n",da,db,ds,dr);
336
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
337
fprintf(b,"%d; %d; %G; %G; %G; %G; %G; %G; %G; %G\n",z2,(int)m_iaBlockSizes[z2],sqrt(m_iaBlockSizes[z2]),log10(m_iaBlockSizes[z2]),1.0/m_iaBlockSizes[z2],gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z],log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]),da+db*x[z2]);
353
mprintf(WHITE,"]\n");
357
mprintf(" Correlation length: Min %.3f, Max %.3f, Avg %.3f time steps.\n",dsmi,dsma,dsa);
359
for (z=0;z<m_oaGroups.GetSize();z++)
363
for (z2=z-10;z2<=z+10;z2++)
367
if (z2 >= m_oaGroups.GetSize())
369
if (df->m_pBin[z2] == 0)
371
ds += m_faCorLen[z2];
376
if (df->m_pBin[z] != 0)
378
// df->m_pAdditionalSets[2][z] = sqrt(ds / m_iSteps) * df->m_pBin[z];
379
df->m_pAdditionalSets[2][z] = sqrt(ds / m_iSteps * m_faVari[z]);
380
df->m_pAdditionalSets[3][z] = ds;
382
df->m_pAdditionalSets[0][z] = df->m_pBin[z] - timessigma*df->m_pAdditionalSets[2][z];
383
df->m_pAdditionalSets[1][z] = df->m_pBin[z] + timessigma*df->m_pAdditionalSets[2][z];
386
df->m_pAdditionalSets[0][z] = 0;
387
df->m_pAdditionalSets[1][z] = 0;
388
df->m_pAdditionalSets[2][z] = 0;
389
df->m_pAdditionalSets[3][z] = 0;
397
void CSDEngine::FinishAnalysis()
403
mprintf(" Calculating block averages...\n");
405
for (z=0;z<m_oaGroups.GetSize();z++)
407
m_faMean[z] = m_faSum[z] / m_iSteps;
408
m_faVari[z] = (m_faSqSum[z] / m_iSteps) - (m_faMean[z]*m_faMean[z]);
410
// mprintf(" # Bin %3d: Sum %10G; SqSum %10G; Mean %10G; Vari %10G\n",z,m_faSum[z],m_faSqSum[z],m_faMean[z],m_faVari[z]);
412
gr = (CSDGroup*)m_oaGroups[z];
414
for (z2=0;z2<gr->m_oaBlockSets.GetSize();z2++)
416
bl = (CSDBlockSet*)gr->m_oaBlockSets[z2];
418
for (z3=0;z3<bl->m_faBlocks.GetSize()-1;z3++)
419
gr->m_faBlockVari[z2] += pow(bl->m_faBlocks[z3] - m_faMean[z], 2);
421
gr->m_faBlockVari[z2] /= ((double)bl->m_faBlocks.GetSize()-1);
1
/*****************************************************************************
2
TRAVIS - Trajectory Analyzer and Visualizer
3
http://www.travis-analyzer.de/
5
Copyright (c) 2009-2014 Martin Brehm
6
2012-2014 Martin Thomas
8
This file written by Martin Brehm.
10
This program is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version.
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
20
You should have received a copy of the GNU General Public License
21
along with this program. If not, see <http://www.gnu.org/licenses/>.
22
*****************************************************************************/
26
#include "lmwrapper.h"
30
CSDEngine::CSDEngine()
32
m_oaGroups.SetName("CSDEngine::m_oaGroups");
33
m_iaBlockSizes.SetName("CSDEngine::m_iaBlockSizes");
34
m_faTempBuffer.SetName("CSDEngine::m_faTempBuffer");
35
m_faSum.SetName("CSDEngine::m_faSum");
36
m_faSqSum.SetName("CSDEngine::m_faSqSum");
37
m_faMean.SetName("CSDEngine::m_faMean");
38
m_faVari.SetName("CSDEngine::m_faVari");
39
m_faCorLen.SetName("CSDEngine::m_faCorLen");
43
CSDEngine::~CSDEngine()
50
m_oaBlockSets.SetName("CSDGroup::m_oaBlockSets");
59
CSDBlockSet::CSDBlockSet()
62
m_faBlocks.SetName("CSDBlockSet::m_faBlocks");
66
CSDBlockSet::~CSDBlockSet()
71
void CSDEngine::Init(int bins)
79
m_faTempBuffer.SetSize(bins);
80
m_faSum.SetSize(bins);
81
m_faSqSum.SetSize(bins);
82
m_faMean.SetSize(bins);
83
m_faVari.SetSize(bins);
84
m_faCorLen.SetSize(bins);
88
m_faTempBuffer[z] = 0;
97
gr->m_oaBlockSets.SetSize(m_iaBlockSizes.GetSize());
98
gr->m_faBlockVari.SetSize(m_iaBlockSizes.GetSize());
99
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
101
bs = new CSDBlockSet();
102
gr->m_oaBlockSets[z2] = bs;
103
gr->m_faBlockVari[z2] = 0;
105
bs->m_faBlocks.Add(0);
111
void CSDEngine::FinishStep()
119
for (z=0;z<m_oaGroups.GetSize();z++)
121
gr = (CSDGroup*)m_oaGroups[z];
123
m_faSum[z] += m_faTempBuffer[z];
124
m_faSqSum[z] += m_faTempBuffer[z]*m_faTempBuffer[z];
126
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
128
bs = (CSDBlockSet*)gr->m_oaBlockSets[z2];
129
bs->m_faBlocks[bs->m_faBlocks.GetSize()-1] += m_faTempBuffer[z];
132
if (bs->m_iCounter >= m_iaBlockSizes[z2])
135
bs->m_faBlocks[bs->m_faBlocks.GetSize()-1] /= m_iaBlockSizes[z2];
136
bs->m_faBlocks.Add(0);
140
m_faTempBuffer[z] = 0;
145
void CSDEngine::DumpData(CDF *df, float timessigma, bool verbose)
154
double da, ds, dr, tf, dsa, dsmi, dsma;
156
double par[3], *curve;
158
// a = fopen("block.csv","wt");
161
mprintf(" Calculating correlation time of histogram...\n");
163
try { df->m_pAdditionalSets = new double*[4]; } catch(...) { df->m_pAdditionalSets = NULL; }
164
if (df->m_pAdditionalSets == NULL) NewException((double)4*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
166
try { df->m_pAdditionalSetLabels = new char*[4]; } catch(...) { df->m_pAdditionalSetLabels = NULL; }
167
if (df->m_pAdditionalSetLabels == NULL) NewException((double)4*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
169
df->m_iAdditionalSets = 4;
173
try { df->m_pAdditionalSets[z] = new double[df->m_iResolution]; } catch(...) { df->m_pAdditionalSets[z] = NULL; }
174
if (df->m_pAdditionalSets[z] == NULL) NewException((double)df->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
177
sprintf(buf,"%.2f%c confidence range",NormalDistIntegral(timessigma)*2.0-1.0,'%');
178
try { df->m_pAdditionalSetLabels[0] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[0] = NULL; }
179
if (df->m_pAdditionalSetLabels[0] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
180
strcpy(df->m_pAdditionalSetLabels[0],buf);
182
sprintf(buf,"%.2f%c confidence range",NormalDistIntegral(timessigma)*2.0-1.0,'%');
183
try { df->m_pAdditionalSetLabels[1] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[1] = NULL; }
184
if (df->m_pAdditionalSetLabels[1] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
185
strcpy(df->m_pAdditionalSetLabels[1],buf);
187
sprintf(buf,"Standard deviation");
188
try { df->m_pAdditionalSetLabels[2] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[2] = NULL; }
189
if (df->m_pAdditionalSetLabels[2] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
190
strcpy(df->m_pAdditionalSetLabels[2],buf);
192
sprintf(buf,"Correlation Length");
193
try { df->m_pAdditionalSetLabels[3] = new char[strlen(buf)+1]; } catch(...) { df->m_pAdditionalSetLabels[4] = NULL; }
194
if (df->m_pAdditionalSetLabels[3] == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
195
strcpy(df->m_pAdditionalSetLabels[3],buf);
197
try { lm = new CLMWrapper(); } catch(...) { lm = NULL; }
198
if (lm == NULL) NewException((double)sizeof(CLMWrapper),__FILE__,__LINE__,__PRETTY_FUNCTION__);
200
try { x = new double[m_iaBlockSizes.GetSize()]; } catch(...) { x = NULL; }
201
if (x == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
203
try { y = new double[m_iaBlockSizes.GetSize()]; } catch(...) { y = NULL; }
204
if (y== NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
206
try { y2 = new double[m_iaBlockSizes.GetSize()]; } catch(...) { y2 = NULL; }
207
if (y2 == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
209
try { curve = new double[m_iaBlockSizes.GetSize()]; } catch(...) { curve = NULL; }
210
if (curve == NULL) NewException((double)m_iaBlockSizes.GetSize()*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
212
mprintf(" Fitting trajectory block decomposition...\n");
215
tf = m_oaGroups.GetSize() / 60.0;
221
for (z=0;z<m_oaGroups.GetSize();z++)
223
if (fmod(z,tf) < 1.0)
226
if (df->m_pBin[z] == 0)
229
gr = (CSDGroup*)m_oaGroups[z];
231
// mprintf(" * Gruppe %d:\n",z);
235
sprintf(buf,"extra%03d.csv",z);
237
fprintf(b,"# Block; Block size; sqrt(size); log(size); 1/size; Vari; Size*Vari; S; log(S); log(S2); Fit\n");
241
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
243
x[z2] = log10(m_iaBlockSizes[z2]);
244
y[z2] = log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]);
263
lm->Fit_SD(m_iaBlockSizes.GetSize(),x,y2,par,curve,&dr,200);
266
fprintf(b,"# A=%G; B=%G; C=%G; R=%G\n",par[0],par[1],par[2],dr);
268
ds = pow(10.0,par[0]*(1.0-exp(par[1]*pow(log10(m_iSteps),par[2]))));
279
// mprintf(" Fit done. y(x) = %10G * (1 - exp( %10G * x^%10G ) ). R = %10G. S = %10G\n",par[0],par[1],par[2],dr,ds);
283
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
284
fprintf(b,"%d; %d; %G; %G; %G; %G; %G; %G; %G; %G; %G\n",z2,(int)m_iaBlockSizes[z2],sqrt(m_iaBlockSizes[z2]),log10(m_iaBlockSizes[z2]),1.0/m_iaBlockSizes[z2],gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z],y[z2],y2[z2],curve[z2]);
287
/* x = new double[m_iaBlockSizes.GetSize()];
288
y = new double[m_iaBlockSizes.GetSize()];
292
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
294
bs = (CSDBlockSet*)gr->m_oaBlockSets[z2];
295
// mprintf(" - Blockgroesse %d (%d Schritte)\n",z2,m_iaBlockSizes[z2]);
296
// mprintf(" %d Bloecke, Counter %d.\n",bs->m_faBlocks.GetSize(),bs->m_iCounter);
300
for (z3=0;z3<bs->m_faBlocks.GetSize()-1;z3++)
302
fprintf(a,"%d; %d; %G\n",z2,z3,bs->m_faBlocks[z3]);
307
x[z2] = log10(m_iaBlockSizes[z2]);
308
y[z2] = log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]);
313
xa /= m_iaBlockSizes.GetSize();
314
ya /= m_iaBlockSizes.GetSize();
320
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
322
dxy += (x[z2] - xa) * (y[z2] - ya);
323
dxx += (x[z2] - xa) * (x[z2] - xa);
324
dyy += (y[z2] - ya) * (y[z2] - ya);
330
ds = pow(10.0, da + db * log10(m_iSteps));
332
dr = sqrt( dxy*dxy / dxx / dyy );
334
mprintf(" y(x) = %10G + %10G * x; S = %10G; R = %10G\n",da,db,ds,dr);
336
for (z2=0;z2<m_iaBlockSizes.GetSize();z2++)
337
fprintf(b,"%d; %d; %G; %G; %G; %G; %G; %G; %G; %G\n",z2,(int)m_iaBlockSizes[z2],sqrt(m_iaBlockSizes[z2]),log10(m_iaBlockSizes[z2]),1.0/m_iaBlockSizes[z2],gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2],m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z],log10(m_iaBlockSizes[z2]*gr->m_faBlockVari[z2]/m_faVari[z]),da+db*x[z2]);
353
mprintf(WHITE,"]\n");
357
mprintf(" Correlation length: Min %.3f, Max %.3f, Avg %.3f time steps.\n",dsmi,dsma,dsa);
359
for (z=0;z<m_oaGroups.GetSize();z++)
363
for (z2=z-10;z2<=z+10;z2++)
367
if (z2 >= m_oaGroups.GetSize())
369
if (df->m_pBin[z2] == 0)
371
ds += m_faCorLen[z2];
376
if (df->m_pBin[z] != 0)
378
// df->m_pAdditionalSets[2][z] = sqrt(ds / m_iSteps) * df->m_pBin[z];
379
df->m_pAdditionalSets[2][z] = sqrt(ds / m_iSteps * m_faVari[z]);
380
df->m_pAdditionalSets[3][z] = ds;
382
df->m_pAdditionalSets[0][z] = df->m_pBin[z] - timessigma*df->m_pAdditionalSets[2][z];
383
df->m_pAdditionalSets[1][z] = df->m_pBin[z] + timessigma*df->m_pAdditionalSets[2][z];
386
df->m_pAdditionalSets[0][z] = 0;
387
df->m_pAdditionalSets[1][z] = 0;
388
df->m_pAdditionalSets[2][z] = 0;
389
df->m_pAdditionalSets[3][z] = 0;
397
void CSDEngine::FinishAnalysis()
403
mprintf(" Calculating block averages...\n");
405
for (z=0;z<m_oaGroups.GetSize();z++)
407
m_faMean[z] = m_faSum[z] / m_iSteps;
408
m_faVari[z] = (m_faSqSum[z] / m_iSteps) - (m_faMean[z]*m_faMean[z]);
410
// mprintf(" # Bin %3d: Sum %10G; SqSum %10G; Mean %10G; Vari %10G\n",z,m_faSum[z],m_faSqSum[z],m_faMean[z],m_faVari[z]);
412
gr = (CSDGroup*)m_oaGroups[z];
414
for (z2=0;z2<gr->m_oaBlockSets.GetSize();z2++)
416
bl = (CSDBlockSet*)gr->m_oaBlockSets[z2];
418
for (z3=0;z3<bl->m_faBlocks.GetSize()-1;z3++)
419
gr->m_faBlockVari[z2] += pow(bl->m_faBlocks[z3] - m_faMean[z], 2);
421
gr->m_faBlockVari[z2] /= ((double)bl->m_faBlocks.GetSize()-1);