~ubuntu-branches/ubuntu/trusty/travis/trusty-proposed

« back to all changes in this revision

Viewing changes to src/travis.cpp

  • Committer: Package Import Robot
  • Author(s): Daniel Leidert
  • Date: 2014-01-18 20:07:16 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20140118200716-whsmcg7fa1eyqecq
Tags: 140117-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
    TRAVIS - Trajectory Analyzer and Visualizer
3
 
    http://www.travis-analyzer.de/
4
 
 
5
 
    Copyright (c) 2009-2013 Martin Brehm
6
 
                  2012-2013 Martin Thomas
7
 
 
8
 
    This file written by Martin Brehm.
9
 
 
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.
14
 
 
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.
19
 
 
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
 
*****************************************************************************/
23
 
 
24
 
#include "travis.h"
25
 
#include "tools.h"
26
 
#include "database.h"
27
 
#include "statistics.h"
28
 
#include "maintools.h"
29
 
#include <float.h>
30
 
#include "dacf.h"
31
 
#include "lmwrapper.h"
32
 
#include "cluster.h"
33
 
#include "xdvector3.h"
34
 
#include "xdmatrix3.h"
35
 
#include "xquaternion.h"
36
 
#include "interface.h"
37
 
#include "random.h"
38
 
#include "ltspec.h"
39
 
#include "structurefactor.h"
40
 
 
41
 
#ifdef TARGET_WINDOWS
42
 
#include <windows.h>
43
 
#include <direct.h>
44
 
#endif
45
 
 
46
 
#ifdef TARGET_LINUX
47
 
#include <unistd.h>
48
 
#endif
49
 
 
50
 
/***************************************************************************************************************
51
 
 ********************** Beginn Quellcode ***********************************************************************
52
 
 ***************************************************************************************************************/
53
 
 
54
 
int main(int argc, const char *argv[])
55
 
{
56
 
        BTIN;
57
 
//      FILE *fff;
58
 
        FILE *a, *tfi;
59
 
        char buf[256], buf2[64], buf3[256], *p, *q;
60
 
        int ti=-1, ti2=-1, ti3, cc, cc2, ticomb, tic_r=-1, tic_o=-1;
61
 
        int z0, z, z2, z3, z4, z5, z6, z7, z8, zr, zs, zi, z2b, z3b;
62
 
        int z1a, z1t, z2a, z2t;
63
 
        CxIntArray *a1, *a2;
64
 
        CAtomGroup *g1, *g2;
65
 
        int tia[3];
66
 
        CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
67
 
        CxMatrix3 mat;
68
 
        double tf, tf2, /*tfr,*/ tf3, tf4, tfs;
69
 
        double c0, c1, r;
70
 
        double *pd;
71
 
        float *pf;
72
 
        CMolecule *m, *tm, *m2;
73
 
        CSingleMolecule *sm, *smfix, *sm2, *tsm;
74
 
        char tc;
75
 
        unsigned long t0, t1, eta;
76
 
        int showinterval;
77
 
        CObservation *o;
78
 
        CTimeStep rot_ts;
79
 
        C3DF *tempSDF;
80
 
        C3DF *temp3DF;
81
 
        CDF *tdf;
82
 
        int sic;
83
 
//      CxIntArray tempwa, *twa;   // "Temporaeres "W"ord-"A"rray
84
 
        CxIntArray templa, *tla;
85
 
        CxDoubleArray **apfa; // "A"rray von "P"ointern auf "F"loat-"A"rrays
86
 
        double *tda;          // "T"emporaeres "D"ouble-"Array"
87
 
        CxByteArray **apba;
88
 
        CxVec3Array tempvel;
89
 
        CAtomGroup *atgr, *ag;
90
 
        struct tm *today;
91
 
        time_t ltime;
92
 
        bool secondmolrun, tb, tbs;
93
 
        int multicounter;
94
 
        char multibuf[64];
95
 
        long fpos, fpos2;
96
 
        CMolBondGroup *bg;
97
 
        CMolBond *bond;
98
 
        CxFloatArray tempfa, tempfa2, *ptfa, *ptfab;
99
 
        CxFloatArray *ptfa2, *ptfa3, *ptfa2b;
100
 
        CGrace *gc, *gc2;
101
 
        CFFT *fft/*, *fft2*/;
102
 
        C2DF *temp2df, *tempc2df, **temp2dfa;
103
 
//      CNbSet *nbset;
104
 
        CConditionGroup *cg;
105
 
//      CNbSearch *nbs;
106
 
        int *tpi;
107
 
        bool ReactSecondRun;
108
 
        CAutoCorrelation *ac;
109
 
        CCrossCorrelation *ccr;
110
 
        CDACFSub *dacfsub;
111
 
        CMicroHetObservation *mho;
112
 
        unsigned int *pSwapMatrix;
113
 
        CxDMatrix3 tdmat, tdmat2;
114
 
        CxDVector3 dvec0, dvec1, dvec2, dvec3, dvec4;
115
 
        CxQuaternion tq, tq2;
116
 
        CReorDyn *trdyn;
117
 
 
118
 
#ifdef TARGET_WINDOWS
119
 
        unsigned long tul;
120
 
#endif
121
 
 
122
 
/*      CxVector3 va, vb, vc;
123
 
 
124
 
        for (z=0;z<100;z++)
125
 
        {
126
 
                va[0] = ((rand()%20001)-10000)/10000.0;
127
 
                va[1] = ((rand()%20001)-10000)/10000.0;
128
 
                va[2] = ((rand()%20001)-10000)/10000.0;
129
 
                vb[0] = ((rand()%20001)-10000)/10000.0;
130
 
                vb[1] = ((rand()%20001)-10000)/10000.0;
131
 
                vb[2] = ((rand()%20001)-10000)/10000.0;
132
 
                vc[0] = ((rand()%20001)-10000)/10000.0;
133
 
                vc[1] = ((rand()%20001)-10000)/10000.0;
134
 
                vc[2] = ((rand()%20001)-10000)/10000.0;
135
 
 
136
 
                tf = Dihedral(va,vb,vc,true);
137
 
                tf2 = Dihedral2(va,vb,vc,true);
138
 
 
139
 
                mprintf("%G, %G, %G\n",tf,tf2,tf-tf2);
140
 
        }
141
 
 
142
 
        return 0;*/
143
 
 
144
 
/*      int maj, min;
145
 
        for (tf=10;tf<=100;tf+=1.0)
146
 
        {
147
 
                CreateTicks(0,tf,maj,min);
148
 
                printf("*******************************\n");
149
 
        }
150
 
        return 0;*/
151
 
 
152
 
 
153
 
/*      a = fopen("test.xyz","wt");
154
 
 
155
 
        for (z=0;z<1000;z++)
156
 
                fprintf(a,"2\n\nNe %f 0.0 0.0\nNe 0.0 0.0 5.0\n",(float)(z%50));
157
 
 
158
 
        fclose(a);
159
 
        return 0;*/
160
 
 
161
 
 
162
 
/*      // RDF Error 2 Particle test
163
 
        g_pLogFile = OpenFileWrite("travis.log",true);
164
 
 
165
 
        CDF *tedf;
166
 
        CRandom *random;
167
 
        int bc, bma, bmi;
168
 
        long N;
169
 
 
170
 
        tedf = new CDF();
171
 
        random = new CRandom();
172
 
 
173
 
        tedf->m_fMinVal = 0;
174
 
        tedf->m_fMaxVal = 1000.0;
175
 
        tedf->m_iResolution = 100;
176
 
        tedf->Create();
177
 
 
178
 
        bc = 100;
179
 
        bma = 1000;
180
 
        bmi = 1;
181
 
 
182
 
        mprintf("    Initializing SD Engine...\n");
183
 
        tedf->m_pSDEngine = new CSDEngine();
184
 
        tedf->m_pSDEngine->m_iaBlockSizes.SetSize(bc);
185
 
        mprintf("    Using the following %d block sizes:\n",bc);
186
 
        tf2 = 0;
187
 
        for (z4=0;z4<bc;z4++)
188
 
        {
189
 
                tf = 3.0;
190
 
                tedf->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/bc)-1.0) / (exp((bc-1.0)*tf/bc)-1.0) * (bma - bmi)) + bmi;
191
 
                mprintf("      %3d: %6d\n",z4+1,tedf->m_pSDEngine->m_iaBlockSizes[z4]);
192
 
                tf2 += (g_iTrajSteps/tedf->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
193
 
        }
194
 
        tf2 *= tedf->m_iResolution * sizeof(double);
195
 
        mprintf("\n    This requires %s of memory.\n",FormatBytes(tf2));
196
 
        tedf->m_pSDEngine->Init(tedf->m_iResolution);
197
 
 
198
 
        N = 100000;
199
 
 
200
 
        mprintf("[");
201
 
        for (z=0;z<N;z++)
202
 
        {
203
 
                if ((z%(N/100))==0)
204
 
                        mprintf("#");
205
 
                tf = sqrt(pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) );
206
 
                tedf->AddToBin(tf);
207
 
                tedf->m_pSDEngine->FinishStep();
208
 
        }
209
 
        mprintf("]\n\n");
210
 
 
211
 
        mprintf(GREEN,"\n>>> SD Engine >>>\n\n");
212
 
        tedf->m_pSDEngine->FinishAnalysis();
213
 
        tedf->m_pSDEngine->DumpData(tedf);
214
 
        mprintf(GREEN,"\n<<< SD Engine <<<\n\n");
215
 
        tedf->Write("","testrdf.csv","",false);
216
 
 
217
 
        return 0;*/
218
 
 
219
 
 
220
 
/*      // Exp Spectrum Test 2
221
 
        g_pLogFile = OpenFileWrite("travis.log",true);
222
 
 
223
 
        CDF *tedf;
224
 
        CRandom *random;
225
 
 
226
 
        tedf = new CDF();
227
 
        random = new CRandom();
228
 
 
229
 
        tedf->m_fMinVal = 0;
230
 
        tedf->m_fMaxVal = 200.0;
231
 
        tedf->m_iResolution = 200;
232
 
        tedf->Create();
233
 
 
234
 
        for (z=0;z<10000;z++)
235
 
        {
236
 
                tf = (random->RandomNormal()*50.0)+60.0;
237
 
                if (tf < 0)
238
 
                        continue;
239
 
 
240
 
                for (z2=0;z2<200;z2++)
241
 
                {
242
 
                        tf2 = 1.0 - (z2/tf);
243
 
                        if (tf2 < 0)
244
 
                                break;
245
 
                        tedf->m_pBin[z2] += tf2;
246
 
                }
247
 
        }
248
 
 
249
 
        tf2 = tedf->m_pBin[0];
250
 
        for (z2=0;z2<200;z2++)
251
 
                tedf->m_pBin[z2] /= tf2;
252
 
 
253
 
        tedf->Fit_ExpSpectrum(50,0.01,1.0);
254
 
 
255
 
        tedf->Write("","exp.csv","",false);
256
 
 
257
 
        return 0;*/
258
 
 
259
 
 
260
 
/*      // Exp Spectrum Test
261
 
        g_pLogFile = OpenFileWrite("travis.log",true);
262
 
 
263
 
        CDF *tedf;
264
 
 
265
 
        tedf = new CDF();
266
 
 
267
 
        tedf->m_fMinVal = 0;
268
 
        tedf->m_fMaxVal = 200.0;
269
 
        tedf->m_iResolution = 200;
270
 
        tedf->Create();
271
 
 
272
 
        for (z=0;z<200;z++)
273
 
        {
274
 
                tedf->m_pBin[z] = exp(-0.1*z) + exp(-0.05*z);
275
 
//              tedf->m_pBin[z] = (z<100)?1.0-(z/100.0):0;
276
 
        }
277
 
 
278
 
        tedf->Fit_ExpSpectrum(30,0.01,1.0);
279
 
 
280
 
        tedf->Write("","exp.csv","",false);
281
 
 
282
 
        return 0;*/
283
 
 
284
 
 
285
 
/*      // Random Test
286
 
 
287
 
        CRandom *random;
288
 
        CDF *dfu, *dfn, *dfe;
289
 
 
290
 
        random = new CRandom();
291
 
 
292
 
        dfu = new CDF();
293
 
        dfu->m_iResolution = 100;
294
 
        dfu->m_fMinVal = 0;
295
 
        dfu->m_fMaxVal = 1;
296
 
        dfu->Create();
297
 
 
298
 
        dfn = new CDF();
299
 
        dfn->m_iResolution = 800;
300
 
        dfn->m_fMinVal = -4;
301
 
        dfn->m_fMaxVal = 4;
302
 
        dfn->Create();
303
 
 
304
 
        dfe = new CDF();
305
 
        dfe->m_iResolution = 400;
306
 
        dfe->m_fMinVal = 0;
307
 
        dfe->m_fMaxVal = 4;
308
 
        dfe->Create();
309
 
 
310
 
        for (z=0;z<1000000;z++)
311
 
        {
312
 
                dfu->AddToBin(random->RandomUniform());
313
 
                dfn->AddToBin(random->RandomNormal());
314
 
                dfe->AddToBin
315
 
                        (random->RandomExp());
316
 
//              if ((z%50000) == 0)
317
 
//                      mprintf("#");
318
 
                if ((z%10000) == 0)
319
 
                        mprintf("%f\n",random->RandomNormal());
320
 
        }
321
 
        mprintf("\n");
322
 
 
323
 
        dfu->Write("","uniform.csv","",false);
324
 
        dfn->Write("","normal.csv","",false);
325
 
        dfe->Write("","exp.csv","",false);
326
 
 
327
 
        return 0;*/
328
 
 
329
 
/*      a = fopen("E:\\tmptraj.xyz","wt");
330
 
 
331
 
        for (z=0;z<20000;z++)
332
 
        {
333
 
                mfprintf(a,"2\n\n");
334
 
                mfprintf(a,"C   %f  %f  %f\n",sin(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),cos(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),0);
335
 
                mfprintf(a,"Si  %f  %f  %f\n",-sin(pow(z/50.0,1.0))*0.0,-cos(pow(z/50.0,1.0))*0.0,0);
336
 
        }
337
 
 
338
 
        fclose(a);
339
 
        return 0;*/
340
 
 
341
 
        InitGlobalVars();
342
 
 
343
 
        /**** Initialize Local Variables ***/
344
 
        tdmat2.Unity();
345
 
        tq2.Unity();
346
 
        multicounter = 0;
347
 
        pSwapMatrix = NULL;
348
 
        apfa = NULL;
349
 
        tda = NULL;
350
 
        ReactSecondRun = false;
351
 
        /***********************************/
352
 
 
353
 
 
354
 
        AddElementData();
355
 
 
356
 
        try { g_sExeName = new char[strlen(argv[0])+1]; } catch(...) { g_sExeName = NULL; }
357
 
        if (g_sExeName == NULL) NewException((double)(strlen(argv[0])+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
358
 
        
359
 
        strcpy(g_sExeName,argv[0]);
360
 
 
361
 
        GetTravisPath();
362
 
 
363
 
        InstallSignalHandler();
364
 
 
365
 
        InitColor();
366
 
 
367
 
        g_pLogFile = OpenFileWrite("travis.log",true);
368
 
 
369
 
        fprintf(g_pLogFile,"Command line:\n\"");
370
 
        for (z=0;z<argc;z++)
371
 
        {
372
 
                fprintf(g_pLogFile,"%s",argv[z]);
373
 
                if (z < argc-1)
374
 
                        fprintf(g_pLogFile," ");
375
 
        }
376
 
        fprintf(g_pLogFile,"\"\n\n");
377
 
        fflush(g_pLogFile);
378
 
 
379
 
        showinterval = 1;
380
 
 
381
 
        srand(time(NULL));
382
 
 
383
 
#ifdef TARGET_WINDOWS
384
 
        tul = 256;
385
 
        g_sHomeDir = getenv("APPDATA");
386
 
        if (GetComputerName(buf,&tul))
387
 
        { 
388
 
                try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
389
 
                if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
390
 
                
391
 
                strcpy(g_sHostName,buf);
392
 
        } else g_sHostName = NULL;
393
 
 
394
 
        g_sWorkingDir = _getcwd(NULL,1024);
395
 
#elif defined(TARGET_LINUX)
396
 
        g_sHomeDir = getenv("HOME");
397
 
        buf[0] = 0;
398
 
        if (gethostname(buf,256)==0)
399
 
        {
400
 
                try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
401
 
                if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
402
 
                
403
 
                strcpy(g_sHostName,buf);
404
 
        } else g_sHostName = NULL;
405
 
 
406
 
        g_sWorkingDir = getcwd(NULL,1024);
407
 
#else
408
 
        g_sHomeDir = NULL;
409
 
        g_sHostName = NULL;
410
 
        g_sWorkingDir = NULL;
411
 
#endif
412
 
 
413
 
        ParsePassiveArgs(argc,argv);
414
 
 
415
 
        InitAnalyses();
416
 
        
417
 
        WriteHeader();
418
 
 
419
 
        InitDatabase();
420
 
 
421
 
/*      C2DF *t2df;
422
 
        int N;
423
 
 
424
 
        t2df = new C2DF();
425
 
        t2df->m_iRes[0] = 150;
426
 
        t2df->m_iRes[1] = 150;
427
 
        t2df->m_fMinVal[0] = 0;
428
 
        t2df->m_fMaxVal[0] = 1.0;
429
 
        t2df->m_fMinVal[1] = 0;
430
 
        t2df->m_fMaxVal[1] = 0.5;
431
 
        t2df->SetLabelX("Relative Cube Edge Length");
432
 
        t2df->SetLabelY("Total mass [g/mol]");
433
 
        t2df->Create();
434
 
        t2df->m_iPlotType = 2;
435
 
        t2df->m_iSmoothGrade = 0;
436
 
        t2df->m_fPlotExp = 0.15;
437
 
        t2df->m_iInterpolationOrder = 1;
438
 
        t2df->m_iPlotPixel = 2000;
439
 
        t2df->m_bContourLines = false;
440
 
        t2df->m_iGPInterpolation = 5;
441
 
 
442
 
        N = 1024;
443
 
 
444
 
        for (z=0;z<150;z++)
445
 
        {
446
 
                tf = pow((double)(z+1)/150.0,3); // Percentage of total volume
447
 
 
448
 
                for (z2=0;z2<=N;z2++)
449
 
                {
450
 
                        tf2 = pow(tf,z2) * pow(1.0-tf,N-z2) * BinomialCoeff(N,z2); // Probability for z2 Ar in Cube
451
 
 
452
 
                        t2df->AddToBin_IntX(z,z2*10.0 / tf / 5600.0 / 5600.0 / 5600.0 * 1.0e9 * 0.0016605,tf2);
453
 
                }
454
 
        }
455
 
 
456
 
 
457
 
 
458
 
        t2df->NormalizeBinIntegral(1000000.0);
459
 
 
460
 
        t2df->WriteGnuplotInput("","2df","",false);
461
 
 
462
 
        return 0;*/
463
 
 
464
 
        /********************************************************************/
465
 
 
466
 
/*      CDF *tedf;
467
 
        FILE *tfil;
468
 
 
469
 
        g_fTimestepLength = 1.0;
470
 
        g_iTrajSteps = 1000000;
471
 
 
472
 
        tedf = new CDF();
473
 
 
474
 
        tedf->m_fMinVal = 0;
475
 
        tedf->m_fMaxVal = 40.0;
476
 
        tedf->m_iResolution = 40000;
477
 
        tedf->Create();
478
 
 
479
 
        tfil = fopen("D:\\Software\\WaterClassic300Eval\\4b\\rdyn_H2O_[O_H]_P2.csv","rt");
480
 
        fgets(buf,256,tfil);
481
 
 
482
 
        for (z=0;z<40000;z++)
483
 
        {
484
 
                fgets(buf,256,tfil);
485
 
                buf[strlen(buf)-1] = 0;
486
 
                p = strchr(buf,';');
487
 
                p++;
488
 
                tf = atof(p);
489
 
                mprintf("%f\n",tf);
490
 
                tedf->m_pBin[z] = tf;
491
 
        }
492
 
 
493
 
        fclose(tfil);
494
 
 
495
 
 
496
 
        try { tedf->m_pParameters = new double*[4+1]; } catch(...) { tedf->m_pParameters = NULL; }
497
 
        if (tedf->m_pParameters == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
498
 
        
499
 
        try { tedf->m_pFitIntegral = new double[4+1]; } catch(...) { tedf->m_pFitIntegral = NULL; }
500
 
        if (tedf->m_pFitIntegral == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
501
 
        
502
 
        try { tedf->m_pCorrCoeff = new double[4+1]; } catch(...) { tedf->m_pCorrCoeff = NULL; }
503
 
        if (tedf->m_pCorrCoeff == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
504
 
        
505
 
        try { tedf->m_pAdditionalSets = new double*[4+1]; } catch(...) { tedf->m_pAdditionalSets = NULL; }
506
 
        if (tedf->m_pAdditionalSets == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
507
 
        
508
 
        try { tedf->m_pAdditionalSetLabels = new char*[4+1]; } catch(...) { tedf->m_pAdditionalSetLabels = NULL; }
509
 
        if (tedf->m_pAdditionalSetLabels == NULL) NewException((double)(4+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
510
 
        
511
 
        tedf->m_iAdditionalSets = 4+1;
512
 
 
513
 
        for (z2=0;z2<=4;z2++)
514
 
        {
515
 
                tedf->m_pAdditionalSets[z2] = NULL;
516
 
                tedf->m_pAdditionalSetLabels[z2] = NULL;
517
 
        }
518
 
 
519
 
        mprintf(YELLOW,"    Please note: ");
520
 
        mprintf("The lifetime is two times the integral value!\n\n");
521
 
 
522
 
        for (z2=1;z2<=4;z2++)
523
 
                tedf->Fit_PolyExp(z2,5000);
524
 
 
525
 
//      if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
526
 
        {
527
 
                mprintf(YELLOW,"    DACF fit integral overview:\n");
528
 
                mprintf("      (use the row with the highest R value)\n\n");
529
 
                mprintf(WHITE,"      Degree  R             Integral [ps]     Lifetime [ps]\n");
530
 
                for (z2=1;z2<=4;z2++)
531
 
                {
532
 
                        if (tedf->m_pFitIntegral[z2] >= 0)
533
 
                                mprintf("      %d       %10.8f    %-10G        %-10G\n",z2,tedf->m_pCorrCoeff[z2],tedf->m_pFitIntegral[z2],tedf->m_pFitIntegral[z2]*2.0);
534
 
                                        else mprintf("      %d       %10.8f             -             -\n",z2,tedf->m_pCorrCoeff[z2]);
535
 
                }
536
 
                mprintf("\n");
537
 
        }
538
 
 
539
 
        sprintf(buf,"dacf_D.csv");
540
 
        mprintf("    Saving DACF File as \"%s\"...\n",buf);
541
 
        tedf->Write("",buf,"",false);
542
 
 
543
 
        return 0;*/
544
 
 
545
 
 
546
 
        /********************************************************************/
547
 
 
548
 
 
549
 
        if (g_bDipolGrimme)
550
 
        {
551
 
                if (argc < 3)
552
 
                        DipolGrimme(NULL);
553
 
                                else DipolGrimme(argv[2]);
554
 
                return 0;
555
 
        }
556
 
 
557
 
        if (!ParseArgs(argc,argv))
558
 
                goto _ende;
559
 
 
560
 
        if (g_sInputTraj == NULL)
561
 
        {
562
 
                eprintf("    No trajectory file specified.\n");
563
 
                mprintf("    Please use the -p flag to specify an input trajectory in the command line.\n\n");
564
 
                mprintf("    Enter the file name of the trajectory file to open: [Quit] ");
565
 
                myget(buf);
566
 
                mprintf("\n");
567
 
                if (strlen(buf)==0)
568
 
                {
569
 
                        CommandLineHelp();
570
 
                        goto _ende;
571
 
                }
572
 
 
573
 
                try { g_sInputTraj = new char[strlen(buf)+1]; } catch(...) { g_sInputTraj = NULL; }
574
 
                if (g_sInputTraj == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
575
 
 
576
 
                strcpy(g_sInputTraj,buf);
577
 
        }
578
 
 
579
 
        if (!DetermineTrajFormat())
580
 
                goto _ende;
581
 
 
582
 
        g_bInputRedirected = false;
583
 
        if (g_sInputFile != NULL)
584
 
        {
585
 
                g_fInputFile = fopen(g_sInputFile,"rt");
586
 
                if (g_fInputFile == NULL)
587
 
                {
588
 
                        eprintf("Could not open input file \"%s\".\n",g_sInputFile);
589
 
                        goto _ende;
590
 
                }
591
 
                g_bInputRedirected = true;
592
 
        }
593
 
 
594
 
        if (IsTTY(stdin) && (!g_bInputRedirected))
595
 
        {
596
 
                g_fInput = OpenFileWrite("input.txt",true);
597
 
                g_bInputRedirected = false;
598
 
                inpprintf("! TRAVIS input file\n! Created with TRAVIS version compiled at %s %s\n",__DATE__,__TIME__);
599
 
 
600
 
                time(&ltime);
601
 
                today = localtime(&ltime);
602
 
                strcpy(buf,asctime(today));
603
 
                buf[strlen(buf)-1] = 0;
604
 
                inpprintf("! Input file written at %s.\n",buf);
605
 
        } else g_bInputRedirected = true;
606
 
 
607
 
        if (g_sInputTraj[0] != 0)
608
 
        {
609
 
                mprintf("    Opening position trajectory %s ...",g_sInputTraj);
610
 
                if (!FileExist(g_sInputTraj))
611
 
                {
612
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
613
 
                        goto _ende;
614
 
                }
615
 
        }
616
 
        if (g_sInputVel[0] != 0)
617
 
        {
618
 
                mprintf("    Opening velocity trajectory %s ...",g_sInputVel);
619
 
                if (!FileExist(g_sInputVel))
620
 
                {
621
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
622
 
                        goto _ende;
623
 
                }
624
 
        }
625
 
        if (g_sInputForce[0] != 0)
626
 
        {
627
 
                mprintf("    Opening Force Trajectory %s ...",g_sInputForce);
628
 
                if (!FileExist(g_sInputForce))
629
 
                {
630
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
631
 
                        goto _ende;
632
 
                }
633
 
        }
634
 
        mprintf("\n");
635
 
        if (g_sInputTraj[0] == 0)
636
 
        {
637
 
                eprintf("Error: No trajectory file specified.\n");
638
 
                goto _ende;
639
 
        }
640
 
        g_fPos = fopen(g_sInputTraj,"rt");
641
 
        if (g_fPos == NULL)
642
 
        {
643
 
                eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
644
 
                goto _ende;
645
 
        }
646
 
 
647
 
        if (!g_TimeStep.ReadTimestep(g_fPos,true))
648
 
        {
649
 
                eprintf("\nError reading first time step from trajectory. Leaving.\n");
650
 
                goto _ende;
651
 
        }
652
 
 
653
 
        if (g_bXYZ4thCol)
654
 
                mprintf("\n    Found 4th column of numbers in XYZ file.\n");
655
 
 
656
 
        g_TimeStep.CalcMinMax();
657
 
 
658
 
        if (!g_bStreamInput)
659
 
        {
660
 
        //      fgetpos(g_fPos,&fpos);
661
 
                fpos = ftell(g_fPos);
662
 
                fseek(g_fPos,0,SEEK_END);
663
 
                fpos2 = ftell(g_fPos);
664
 
        //      fgetpos(g_fPos,&fpos2);
665
 
                fclose(g_fPos);
666
 
        } else fpos2 = -1;
667
 
 
668
 
        if (fpos2 < 0)
669
 
        {
670
 
                mprintf("\n    Could not determine trajectory file size.\n\n");
671
 
                g_iTrajSteps = -1;
672
 
        } else
673
 
        {
674
 
                g_iTrajSteps = fpos2/fpos;
675
 
                mprintf("\n    Trajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
676
 
        }
677
 
 
678
 
        g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
679
 
 
680
 
        if (g_iGesAtomCount == 0)
681
 
        {
682
 
                eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
683
 
                goto _ende;
684
 
        }       
685
 
 
686
 
        g_iGesVirtAtomCount = g_iGesAtomCount;
687
 
        g_TimeStep.AddAtoms();
688
 
        if (g_bUnknownElements)
689
 
                mprintf("\n");
690
 
 
691
 
        SortAtoms();
692
 
        mprintf(WHITE,"    %d atoms in the system: ",g_iGesAtomCount);
693
 
        for (z=0;z<g_oaAtoms.GetSize();z++)
694
 
        {
695
 
                mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
696
 
                if (z < (int)g_oaAtoms.GetSize()-1)
697
 
                        mprintf(", ");
698
 
        }
699
 
        mprintf("\n\n");
700
 
        mprintf("    System extent:  X = { %+5.0f .. %+5.0f pm }, dX = %.0f pm\n",g_TimeStep.m_vMin[0],g_TimeStep.m_vMax[0],g_TimeStep.m_vMax[0]-g_TimeStep.m_vMin[0]);
701
 
        mprintf("      (in step 1)   Y = { %+5.0f .. %+5.0f pm }, dY = %.0f pm\n",g_TimeStep.m_vMin[1],g_TimeStep.m_vMax[1],g_TimeStep.m_vMax[1]-g_TimeStep.m_vMin[1]);
702
 
        mprintf("                    Z = { %+5.0f .. %+5.0f pm }, dZ = %.0f pm\n",g_TimeStep.m_vMin[2],g_TimeStep.m_vMax[2],g_TimeStep.m_vMax[2]-g_TimeStep.m_vMin[2]);
703
 
 
704
 
        g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
705
 
 
706
 
        xAddAtom("#");
707
 
 
708
 
        /****************************/
709
 
 
710
 
        if (!GatherInfos())
711
 
                goto _ende;
712
 
 
713
 
        /************** Beginn Analyse **************/
714
 
 
715
 
        if (g_bStreamInput)
716
 
        {
717
 
                if (g_bScanVelocities)
718
 
                {
719
 
                        eprintf("\nError: Velocity pre-analysis not compatible with stream input.\n\n");
720
 
                        goto _ende;
721
 
                }
722
 
 
723
 
                if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
724
 
                {
725
 
                        eprintf("\nError: Neighborhood pre-analysis not compatible with stream input.\n\n");
726
 
                        goto _ende;
727
 
                }
728
 
        }
729
 
 
730
 
        g_iStartTime = time(NULL);
731
 
 
732
 
        if (g_iMaxStep != -1)
733
 
        {
734
 
                g_iTrajSteps = g_iMaxStep;
735
 
        } else
736
 
        {
737
 
                if (g_iTrajSteps != -1)
738
 
                {
739
 
                        g_iTrajSteps -= g_iBeginStep;
740
 
                        if (g_iTrajSteps < 1)
741
 
                                g_iTrajSteps = 1;
742
 
                }
743
 
        }
744
 
 
745
 
        if (g_bResp || g_bFFGen)
746
 
                goto _ende;
747
 
 
748
 
        g_iStepHistory = 3;
749
 
        multicounter = 0;
750
 
 
751
 
_multiintervalstart:
752
 
        if (g_bMultiInterval)
753
 
        {
754
 
                g_iBeginStep = g_laMultiIntervalStart[multicounter];
755
 
                g_iScanNbhStart = g_iBeginStep;
756
 
                g_iMaxStep = g_laMultiIntervalEnd[multicounter] - g_laMultiIntervalStart[multicounter] + 1;
757
 
                g_iScanNbhSteps = g_iMaxStep;
758
 
                mprintf(YELLOW,"***********************************************\n");
759
 
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) starting. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
760
 
                mprintf(YELLOW,"***********************************************\n\n");
761
 
                sprintf(multibuf,"_I%d_%d-%d",multicounter+1,g_laMultiIntervalStart[multicounter],g_laMultiIntervalEnd[multicounter]);
762
 
        } else multibuf[0] = 0;
763
 
 
764
 
        mprintf(WHITE,">>> Initialization >>>\n\n");
765
 
 
766
 
        g_bAbortAnalysis = false;
767
 
 
768
 
        if (!g_bStreamInput)
769
 
        {
770
 
                g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
771
 
                if (g_fPos == NULL)
772
 
                {
773
 
                        eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
774
 
                        goto _ende;
775
 
                }
776
 
                if ((g_bNPT) && (g_sNPTFile[0] != 0))
777
 
                {
778
 
                        g_fNPTFile = fopen(g_sNPTFile,"rt");
779
 
                        if (g_fNPTFile == NULL)
780
 
                        {
781
 
                                eprintf("\nCould not open cell vector file.\n");
782
 
                                goto _ende;
783
 
                        }
784
 
                }
785
 
        }
786
 
 
787
 
        if (g_iBeginStep != 0)
788
 
        {
789
 
                mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
790
 
                if (g_iBeginStep != g_iScanMolStep)
791
 
                {
792
 
                        mprintf(WHITE,"  [");
793
 
                        for (z=0;z<g_iBeginStep;z++)
794
 
                        {
795
 
                                if (fmod(z,g_iBeginStep/50.0) < 1.0)
796
 
                                        mprintf(WHITE,"#");
797
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
798
 
                                {
799
 
                                        eprintf("\nError: Unexpected end of position trajectory.\n");
800
 
                                        goto _ende;
801
 
                                }
802
 
                                if ((g_bNPT) && (g_sNPTFile[0] != 0))
803
 
                                        fgets(buf,256,g_fNPTFile);
804
 
                        }
805
 
                        mprintf(WHITE,"]\n");
806
 
                        if (!g_bStreamInput)
807
 
                                g_iFastForwardPos = ftell(g_fPos);
808
 
                                        else g_iFastForwardPos = 0;
809
 
                } else
810
 
                {
811
 
                        mprintf("  Position already known from molecule recognition, directly seeking.\n");
812
 
                        fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
813
 
                }
814
 
                if (!g_bStreamInput)
815
 
                        mprintf("  Step %d begins at offset %lu (%.1f MB).\n\n",g_iBeginStep+1,g_iFastForwardPos,g_iFastForwardPos/1024.0/1024.0);
816
 
        }
817
 
//      fclose(g_fPos);
818
 
//      g_fPos = fopen(g_sInputTraj,"rb");
819
 
//      mprintf("Seek: %d.\n",g_iFastForwardPos);
820
 
//      fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
821
 
 
822
 
        if (!g_bStreamInput)
823
 
        {
824
 
                g_TimeStep.ReadTimestep(g_fPos,true);
825
 
                if ((g_bNPT) && (g_sNPTFile[0] != 0))
826
 
                {
827
 
                        g_TimeStep.ReadCellVector(g_fNPTFile);
828
 
                        fclose(g_fNPTFile);
829
 
                }
830
 
                fclose(g_fPos);
831
 
        }
832
 
 
833
 
        g_TimeStep.CalcCenters();
834
 
 
835
 
        if (g_bPeriodic)
836
 
                g_TimeStep.UniteMolecules(false);
837
 
 
838
 
        if (g_bScanVelocities && (!g_bStreamInput))
839
 
        {
840
 
                mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
841
 
 
842
 
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
843
 
                if (g_fPos == NULL)
844
 
                {
845
 
                        eprintf("Error. Input Trajectory suddenly vanished ^^\n");
846
 
                        return 0;
847
 
                }
848
 
                g_iSteps = 0; // Der Zaehler der Zeitschritte
849
 
                if (g_iScanVelStart != 0)
850
 
                {
851
 
                        mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
852
 
                        mprintf(WHITE,"  [");
853
 
                        for (z=0;z<g_iScanVelStart;z++)
854
 
                        {
855
 
                                if (fmod(z,g_iScanVelStart/60.0) < 1.0)
856
 
                                        mprintf(WHITE,"#");
857
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
858
 
                                        break;
859
 
                        }
860
 
                        mprintf(WHITE,"]\n");
861
 
                }
862
 
 
863
 
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
864
 
                {
865
 
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
866
 
                                goto _endvel;
867
 
                        if (g_TimeStep.m_iGesAtomCount == 0)
868
 
                                goto _endvel;
869
 
 
870
 
                        g_TimeStep.CalcCenters();
871
 
        
872
 
                        if ((g_iSteps % 4) == 0)
873
 
                        {
874
 
                                if ((g_iSteps % 200) == 0) 
875
 
                                        mprintf("\nStep %6d...",g_iSteps);
876
 
                                                else mprintf(".");
877
 
                        }
878
 
        
879
 
                        g_iSteps++;
880
 
        
881
 
                        if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
882
 
                                break;
883
 
                }
884
 
                _endvel:
885
 
 
886
 
                fclose(g_fPos);
887
 
 
888
 
                mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
889
 
        } // END IF g_bScanVelocities
890
 
 
891
 
 
892
 
        if (g_bSaveRefEnv && (g_iNbhMode == 1))
893
 
        {
894
 
                mprintf("Creating statical neighborhood...\n");
895
 
                g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
896
 
                if (g_bSaveRefWithEnv)
897
 
                {
898
 
                        mprintf("Adding reference molecule to neighborhood...\n");
899
 
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
900
 
                }
901
 
                mprintf("\n");
902
 
                g_pNbSet->Dump();
903
 
                mprintf("\n");
904
 
        }
905
 
 
906
 
        if (g_bVACF && g_bGlobalVACF)
907
 
        {
908
 
                mprintf("Initializing Global Velocity Autocorrelation Function...\n");
909
 
                g_pGlobalVACF->Create();
910
 
 
911
 
                if (!g_bVACFCacheMode)
912
 
                {
913
 
                        if (g_pGlobalVACF->m_iSize > g_iStepHistory)
914
 
                                g_iStepHistory = g_pGlobalVACF->m_iSize;
915
 
                } else
916
 
                {
917
 
                        mprintf("    VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_iGesAtomCount*g_iTrajSteps*3.1*sizeof(float)));
918
 
                        for (z=0;z<g_iGesAtomCount;z++)
919
 
                        {
920
 
//                              mprintf("%d: %s: %f\n",z,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_sLabel,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fRadius);
921
 
                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z] > 1000))
922
 
                                        continue;
923
 
//                              mprintf("  --> Ok\n");
924
 
 
925
 
                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
926
 
                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
927
 
                                
928
 
                                if (g_iTrajSteps != -1)
929
 
                                {
930
 
                                        ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
931
 
                                        ptfa->SetGrow((long)(g_iTrajSteps*0.1));
932
 
                                } else ptfa->SetGrow(1000);
933
 
                                g_pGlobalVACF->m_oaCache.Add(ptfa);
934
 
                        }
935
 
                }
936
 
        }
937
 
 
938
 
        if (g_bIRSpec && g_bGlobalIR)
939
 
        {
940
 
                mprintf("  Creating global IR Spectrum...\n");
941
 
                g_pGlobalIR->m_pRDyn->m_fMinVal = 0;
942
 
                g_pGlobalIR->m_pRDyn->m_fMaxVal = g_pGlobalIR->m_iDepth * g_fTimestepLength / 1000.0f;
943
 
                g_pGlobalIR->m_pRDyn->m_iResolution = g_pGlobalIR->m_iDepth/g_pGlobalIR->m_iStride;
944
 
                g_pGlobalIR->m_pRDyn->SetLabelX("Tau [ps]");
945
 
                g_pGlobalIR->m_pRDyn->SetLabelY("Dipole autocorrelation");
946
 
                g_pGlobalIR->m_pRDyn->Create();
947
 
                if (g_bRDynCacheMode)
948
 
                {
949
 
                        if (g_iTrajSteps != -1)
950
 
                                mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
951
 
                                        else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*10000/g_iStride*3.1*sizeof(float)));
952
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
953
 
                        {
954
 
                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
955
 
                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
956
 
                                
957
 
                                if (g_iTrajSteps != -1)
958
 
                                {
959
 
                                        ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
960
 
                                        ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
961
 
                                } else ptfa->SetGrow(10000);
962
 
                                g_pGlobalIR->m_oaCache.Add(ptfa);
963
 
                        }
964
 
                } else
965
 
                {
966
 
                        try { g_pGlobalIR->m_pCount = new double[g_pGlobalIR->m_pRDyn->m_iResolution]; } catch(...) { g_pGlobalIR->m_pCount = NULL; }
967
 
                        if (g_pGlobalIR->m_pCount == NULL) NewException((double)g_pGlobalIR->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
968
 
                        
969
 
                        for (z2=0;z2<g_pGlobalIR->m_pRDyn->m_iResolution;z2++)
970
 
                                g_pGlobalIR->m_pCount[z2] = 0;
971
 
                        if (!g_bRDynCacheMode)
972
 
                        {
973
 
                                if (g_pGlobalIR->m_iDepth > g_iStepHistory)
974
 
                                        g_iStepHistory = g_pGlobalIR->m_iDepth;
975
 
                        }
976
 
                }
977
 
        }
978
 
 
979
 
/*      if (g_bSFac)
980
 
        {
981
 
                mprintf("  Creating Structure Factor Analysis...\n");
982
 
                g_pSFac->Create();
983
 
        }*/
984
 
 
985
 
        if (g_bSaveCondSnapshot)
986
 
                g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
987
 
 
988
 
        for (z=0;z<g_oaObserv.GetSize();z++)
989
 
        {
990
 
                mprintf("Initializing Observation %d...\n",z+1);
991
 
                o = (CObservation*)g_oaObserv[z];
992
 
 
993
 
                if (g_bAggregation)
994
 
                {
995
 
                        mprintf("  Creating Aggregation Functions (%d value sets)...\n",o->m_pDACF->m_oaSubDACFs.GetSize());
996
 
                        for (z2=0;z2<o->m_pDACF->m_oaSubDACFs.GetSize();z2++)
997
 
                        {
998
 
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
999
 
                                if (g_bDLDisp)
1000
 
                                {
1001
 
                                        try { dacfsub->m_pDLDisp = new C2DF(); } catch(...) { dacfsub->m_pDLDisp = NULL; }
1002
 
                                        if (dacfsub->m_pDLDisp == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1003
 
                                        
1004
 
                                        dacfsub->m_pDLDisp->m_iRes[0] = o->m_pDACF->m_iLifetimeRes;
1005
 
                                        dacfsub->m_pDLDisp->m_fMinVal[0] = 0.0f;
1006
 
                                        dacfsub->m_pDLDisp->m_fMaxVal[0] = o->m_pDACF->m_fLargestLifetime;
1007
 
                                        dacfsub->m_pDLDisp->m_iRes[1] = o->m_pDACF->m_iDisplacementRes;
1008
 
                                        dacfsub->m_pDLDisp->m_fMinVal[1] = 0.0f;
1009
 
                                        dacfsub->m_pDLDisp->m_fMaxVal[1] = o->m_pDACF->m_fLargestDisplacement;
1010
 
                                        dacfsub->m_pDLDisp->Create();
1011
 
                                        dacfsub->m_pDLDisp->SetLabelX("Lifetime [ps]");
1012
 
                                        dacfsub->m_pDLDisp->SetLabelY("Displacement [pm]");
1013
 
                                }
1014
 
 
1015
 
                                if (g_bPairMSD)
1016
 
                                {
1017
 
                                        try { dacfsub->m_pPairMSD = new CAF(); } catch(...) { dacfsub->m_pPairMSD = NULL; }
1018
 
                                        if (dacfsub->m_pPairMSD == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1019
 
                                        
1020
 
                                        dacfsub->m_pPairMSD->m_iResolution = o->m_pDACF->m_iDACFRes;
1021
 
                                        dacfsub->m_pPairMSD->m_fMinVal = 0.0f;
1022
 
                                        dacfsub->m_pPairMSD->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1023
 
                                        dacfsub->m_pPairMSD->Create();
1024
 
                                }
1025
 
 
1026
 
                                if (g_bDDisp)
1027
 
                                {
1028
 
                                        try { dacfsub->m_pDDisp = new CDF(); } catch(...) { dacfsub->m_pDDisp = NULL; }
1029
 
                                        if (dacfsub->m_pDDisp == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1030
 
                                        
1031
 
                                        dacfsub->m_pDDisp->m_iResolution = o->m_pDACF->m_iDisplacementRes;
1032
 
                                        dacfsub->m_pDDisp->m_fMinVal = 0.0f;
1033
 
                                        dacfsub->m_pDDisp->m_fMaxVal = o->m_pDACF->m_fLargestDisplacement;
1034
 
                                        dacfsub->m_pDDisp->SetLabelX("Dimer displacement [pm]");
1035
 
                                        dacfsub->m_pDDisp->SetLabelY("Occurrence");
1036
 
                                        dacfsub->m_pDDisp->Create();
1037
 
                                }
1038
 
 
1039
 
                                if (g_bDLDF)
1040
 
                                {
1041
 
                                        try { dacfsub->m_pDLDF = new CDF(); } catch(...) { dacfsub->m_pDLDF = NULL; }
1042
 
                                        if (dacfsub->m_pDLDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1043
 
                                        
1044
 
                                        dacfsub->m_pDLDF->m_bLeft = true;
1045
 
                                        dacfsub->m_pDLDF->m_iResolution = o->m_pDACF->m_iLifetimeRes;
1046
 
                                        dacfsub->m_pDLDF->m_fMinVal = 0.0f;
1047
 
                                        dacfsub->m_pDLDF->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1048
 
                                        dacfsub->m_pDLDF->SetLabelX("Tau [ps]");
1049
 
                                        dacfsub->m_pDLDF->SetLabelY("Occurrence");
1050
 
                                        dacfsub->m_pDLDF->Create();
1051
 
                                }
1052
 
 
1053
 
                                if (g_bDACF)
1054
 
                                {
1055
 
                                        try { dacfsub->m_pDACF = new CDF(); } catch(...) { dacfsub->m_pDACF = NULL; }
1056
 
                                        if (dacfsub->m_pDACF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1057
 
                                        
1058
 
                                        dacfsub->m_pDACF->m_bLeft = true;
1059
 
                                        dacfsub->m_pDACF->m_iResolution = o->m_pDACF->m_iDACFRes;
1060
 
                                        dacfsub->m_pDACF->m_fMinVal = 0;
1061
 
                                        dacfsub->m_pDACF->m_fMaxVal = o->m_pDACF->m_iDACFRes * g_fTimestepLength / 1000.0;
1062
 
                                        dacfsub->m_pDACF->SetLabelX("Tau [ps]");
1063
 
                                        dacfsub->m_pDACF->SetLabelY("Occurrence");
1064
 
                                        dacfsub->m_pDACF->Create();
1065
 
 
1066
 
                                        if (dacfsub->m_bNewMode)
1067
 
                                        {
1068
 
                                //              mprintf("Create: %d*%d=%d\n",((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize());
1069
 
                                                try { dacfsub->m_piaIntervals = new CxIntArray[((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()]; } catch(...) { dacfsub->m_piaIntervals = NULL; }
1070
 
                                                if (dacfsub->m_piaIntervals == NULL) NewException((double)((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()*sizeof(CxIntArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1071
 
                                        }
1072
 
                                }
1073
 
 
1074
 
                                try { dacfsub->m_pNDF = new CDF(); } catch(...) { dacfsub->m_pNDF = NULL; }
1075
 
                                if (dacfsub->m_pNDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1076
 
                                
1077
 
                                dacfsub->m_pNDF->m_iResolution = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1078
 
                                dacfsub->m_pNDF->m_fMinVal = 0.0f;
1079
 
                                dacfsub->m_pNDF->m_fMaxVal = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1080
 
                                dacfsub->m_pNDF->Create();
1081
 
                        }
1082
 
                }
1083
 
 
1084
 
                if (g_bSDF)
1085
 
                {
1086
 
                        mprintf("  Creating SDF...\n");
1087
 
                        o->m_pSDF->m_pSDF->m_fMinVal[0] = -o->m_pSDF->m_fRadius;
1088
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[0] = o->m_pSDF->m_fRadius;
1089
 
                        o->m_pSDF->m_pSDF->m_fMinVal[1] = -o->m_pSDF->m_fRadius;
1090
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[1] = o->m_pSDF->m_fRadius;
1091
 
                        o->m_pSDF->m_pSDF->m_fMinVal[2] = -o->m_pSDF->m_fRadius;
1092
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[2] = o->m_pSDF->m_fRadius;
1093
 
                        o->m_pSDF->m_pSDF->m_iRes[0] = o->m_pSDF->m_iResolution;
1094
 
                        o->m_pSDF->m_pSDF->m_iRes[1] = o->m_pSDF->m_iResolution;
1095
 
                        o->m_pSDF->m_pSDF->m_iRes[2] = o->m_pSDF->m_iResolution;
1096
 
                        o->m_pSDF->m_pSDF->m_iHistogramRes = o->m_pSDF->m_iHistogramRes;
1097
 
                        o->m_pSDF->m_pSDF->Create();
 
1
/*****************************************************************************
 
2
    TRAVIS - Trajectory Analyzer and Visualizer
 
3
    http://www.travis-analyzer.de/
 
4
 
 
5
    Copyright (c) 2009-2014 Martin Brehm
 
6
                  2012-2014 Martin Thomas
 
7
 
 
8
    This file written by Martin Brehm.
 
9
 
 
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.
 
14
 
 
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.
 
19
 
 
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
*****************************************************************************/
 
23
 
 
24
#include "travis.h"
 
25
#include "tools.h"
 
26
#include "database.h"
 
27
#include "statistics.h"
 
28
#include "maintools.h"
 
29
#include <float.h>
 
30
#include "dacf.h"
 
31
#include "lmwrapper.h"
 
32
#include "cluster.h"
 
33
#include "xdvector3.h"
 
34
#include "xdmatrix3.h"
 
35
#include "xquaternion.h"
 
36
#include "interface.h"
 
37
#include "random.h"
 
38
#include "ltspec.h"
 
39
//#include "structurefactor.h"
 
40
#include "plproj.h"
 
41
 
 
42
#ifdef TARGET_WINDOWS
 
43
#include <windows.h>
 
44
#include <direct.h>
 
45
#endif
 
46
 
 
47
#ifdef TARGET_LINUX
 
48
#include <unistd.h>
 
49
#endif
 
50
 
 
51
/***************************************************************************************************************
 
52
 ********************** Beginn Quellcode ***********************************************************************
 
53
 ***************************************************************************************************************/
 
54
 
 
55
int main(int argc, const char *argv[])
 
56
{
 
57
        BTIN;
 
58
//      FILE *fff;
 
59
        FILE *a, *tfi;
 
60
        char buf[256], buf2[64], buf3[256], *p, *q;
 
61
        int ti=-1, ti2=-1, ti3, cc, cc2, ticomb, tic_r=-1, tic_o=-1;
 
62
        int z0, z, z2, z3, z4, z5, z6, z7, z8, zr, zs, zi, z2b, z3b;
 
63
        int z1a, z1t, z2a, z2t;
 
64
        CxIntArray *a1, *a2;
 
65
        CAtomGroup *g1, *g2;
 
66
        int tia[3];
 
67
        CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
 
68
        CxMatrix3 mat;
 
69
        double tf, tf2, /*tfr,*/ tf3, tf4, tfs;
 
70
        double c0, c1, r;
 
71
        double *pd;
 
72
        float *pf;
 
73
        CMolecule *m, *tm, *m2;
 
74
        CSingleMolecule *sm, *smfix, *sm2, *tsm;
 
75
        char tc;
 
76
        unsigned long t0, t1, eta;
 
77
        int showinterval;
 
78
        CObservation *o;
 
79
        CTimeStep rot_ts;
 
80
        C3DF *tempSDF;
 
81
        C3DF *temp3DF;
 
82
        CDF *tdf;
 
83
        int sic;
 
84
//      CxIntArray tempwa, *twa;   // "Temporaeres "W"ord-"A"rray
 
85
        CxIntArray templa, *tla;
 
86
        CxDoubleArray **apfa; // "A"rray von "P"ointern auf "F"loat-"A"rrays
 
87
        double *tda;          // "T"emporaeres "D"ouble-"Array"
 
88
        CxByteArray **apba;
 
89
        CxVec3Array tempvel;
 
90
        CAtomGroup *atgr, *ag;
 
91
        struct tm *today;
 
92
        time_t ltime;
 
93
        bool secondmolrun, tb, tbs;
 
94
        int multicounter;
 
95
        char multibuf[64];
 
96
        long fpos, fpos2;
 
97
        CMolBondGroup *bg;
 
98
        CMolBond *bond;
 
99
        CxFloatArray tempfa, tempfa2, *ptfa, *ptfab;
 
100
        CxFloatArray *ptfa2, *ptfa3, *ptfa2b;
 
101
        CGrace *gc, *gc2;
 
102
        CFFT *fft/*, *fft2*/;
 
103
        C2DF *temp2df, *tempc2df, **temp2dfa;
 
104
//      CNbSet *nbset;
 
105
        CConditionGroup *cg;
 
106
//      CNbSearch *nbs;
 
107
        int *tpi;
 
108
        bool ReactSecondRun;
 
109
        CAutoCorrelation *ac;
 
110
        CCrossCorrelation *ccr;
 
111
        CDACFSub *dacfsub;
 
112
        CMicroHetObservation *mho;
 
113
        unsigned int *pSwapMatrix;
 
114
        CxDMatrix3 tdmat, tdmat2;
 
115
        CxDVector3 dvec0, dvec1, dvec2, dvec3, dvec4;
 
116
        CxQuaternion tq, tq2;
 
117
        CReorDyn *trdyn;
 
118
 
 
119
#ifdef TARGET_WINDOWS
 
120
        unsigned long tul;
 
121
#endif
 
122
 
 
123
/*      CxVector3 va, vb, vc;
 
124
 
 
125
        for (z=0;z<100;z++)
 
126
        {
 
127
                va[0] = ((rand()%20001)-10000)/10000.0;
 
128
                va[1] = ((rand()%20001)-10000)/10000.0;
 
129
                va[2] = ((rand()%20001)-10000)/10000.0;
 
130
                vb[0] = ((rand()%20001)-10000)/10000.0;
 
131
                vb[1] = ((rand()%20001)-10000)/10000.0;
 
132
                vb[2] = ((rand()%20001)-10000)/10000.0;
 
133
                vc[0] = ((rand()%20001)-10000)/10000.0;
 
134
                vc[1] = ((rand()%20001)-10000)/10000.0;
 
135
                vc[2] = ((rand()%20001)-10000)/10000.0;
 
136
 
 
137
                tf = Dihedral(va,vb,vc,true);
 
138
                tf2 = Dihedral2(va,vb,vc,true);
 
139
 
 
140
                mprintf("%G, %G, %G\n",tf,tf2,tf-tf2);
 
141
        }
 
142
 
 
143
        return 0;*/
 
144
 
 
145
/*      int maj, min;
 
146
        for (tf=10;tf<=100;tf+=1.0)
 
147
        {
 
148
                CreateTicks(0,tf,maj,min);
 
149
                printf("*******************************\n");
 
150
        }
 
151
        return 0;*/
 
152
 
 
153
 
 
154
/*      a = fopen("test.xyz","wt");
 
155
 
 
156
        for (z=0;z<1000;z++)
 
157
                fprintf(a,"2\n\nNe %f 0.0 0.0\nNe 0.0 0.0 5.0\n",(float)(z%50));
 
158
 
 
159
        fclose(a);
 
160
        return 0;*/
 
161
 
 
162
 
 
163
/*      // RDF Error 2 Particle test
 
164
        g_pLogFile = OpenFileWrite("travis.log",true);
 
165
 
 
166
        CDF *tedf;
 
167
        CRandom *random;
 
168
        int bc, bma, bmi;
 
169
        long N;
 
170
 
 
171
        tedf = new CDF();
 
172
        random = new CRandom();
 
173
 
 
174
        tedf->m_fMinVal = 0;
 
175
        tedf->m_fMaxVal = 1000.0;
 
176
        tedf->m_iResolution = 100;
 
177
        tedf->Create();
 
178
 
 
179
        bc = 100;
 
180
        bma = 1000;
 
181
        bmi = 1;
 
182
 
 
183
        mprintf("    Initializing SD Engine...\n");
 
184
        tedf->m_pSDEngine = new CSDEngine();
 
185
        tedf->m_pSDEngine->m_iaBlockSizes.SetSize(bc);
 
186
        mprintf("    Using the following %d block sizes:\n",bc);
 
187
        tf2 = 0;
 
188
        for (z4=0;z4<bc;z4++)
 
189
        {
 
190
                tf = 3.0;
 
191
                tedf->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/bc)-1.0) / (exp((bc-1.0)*tf/bc)-1.0) * (bma - bmi)) + bmi;
 
192
                mprintf("      %3d: %6d\n",z4+1,tedf->m_pSDEngine->m_iaBlockSizes[z4]);
 
193
                tf2 += (g_iTrajSteps/tedf->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
 
194
        }
 
195
        tf2 *= tedf->m_iResolution * sizeof(double);
 
196
        mprintf("\n    This requires %s of memory.\n",FormatBytes(tf2));
 
197
        tedf->m_pSDEngine->Init(tedf->m_iResolution);
 
198
 
 
199
        N = 100000;
 
200
 
 
201
        mprintf("[");
 
202
        for (z=0;z<N;z++)
 
203
        {
 
204
                if ((z%(N/100))==0)
 
205
                        mprintf("#");
 
206
                tf = sqrt(pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) );
 
207
                tedf->AddToBin(tf);
 
208
                tedf->m_pSDEngine->FinishStep();
 
209
        }
 
210
        mprintf("]\n\n");
 
211
 
 
212
        mprintf(GREEN,"\n>>> SD Engine >>>\n\n");
 
213
        tedf->m_pSDEngine->FinishAnalysis();
 
214
        tedf->m_pSDEngine->DumpData(tedf);
 
215
        mprintf(GREEN,"\n<<< SD Engine <<<\n\n");
 
216
        tedf->Write("","testrdf.csv","",false);
 
217
 
 
218
        return 0;*/
 
219
 
 
220
 
 
221
/*      // Exp Spectrum Test 2
 
222
        g_pLogFile = OpenFileWrite("travis.log",true);
 
223
 
 
224
        CDF *tedf;
 
225
        CRandom *random;
 
226
 
 
227
        tedf = new CDF();
 
228
        random = new CRandom();
 
229
 
 
230
        tedf->m_fMinVal = 0;
 
231
        tedf->m_fMaxVal = 200.0;
 
232
        tedf->m_iResolution = 200;
 
233
        tedf->Create();
 
234
 
 
235
        for (z=0;z<10000;z++)
 
236
        {
 
237
                tf = (random->RandomNormal()*50.0)+60.0;
 
238
                if (tf < 0)
 
239
                        continue;
 
240
 
 
241
                for (z2=0;z2<200;z2++)
 
242
                {
 
243
                        tf2 = 1.0 - (z2/tf);
 
244
                        if (tf2 < 0)
 
245
                                break;
 
246
                        tedf->m_pBin[z2] += tf2;
 
247
                }
 
248
        }
 
249
 
 
250
        tf2 = tedf->m_pBin[0];
 
251
        for (z2=0;z2<200;z2++)
 
252
                tedf->m_pBin[z2] /= tf2;
 
253
 
 
254
        tedf->Fit_ExpSpectrum(50,0.01,1.0);
 
255
 
 
256
        tedf->Write("","exp.csv","",false);
 
257
 
 
258
        return 0;*/
 
259
 
 
260
 
 
261
/*      // Exp Spectrum Test
 
262
        g_pLogFile = OpenFileWrite("travis.log",true);
 
263
 
 
264
        CDF *tedf;
 
265
 
 
266
        tedf = new CDF();
 
267
 
 
268
        tedf->m_fMinVal = 0;
 
269
        tedf->m_fMaxVal = 200.0;
 
270
        tedf->m_iResolution = 200;
 
271
        tedf->Create();
 
272
 
 
273
        for (z=0;z<200;z++)
 
274
        {
 
275
                tedf->m_pBin[z] = exp(-0.1*z) + exp(-0.05*z);
 
276
//              tedf->m_pBin[z] = (z<100)?1.0-(z/100.0):0;
 
277
        }
 
278
 
 
279
        tedf->Fit_ExpSpectrum(30,0.01,1.0);
 
280
 
 
281
        tedf->Write("","exp.csv","",false);
 
282
 
 
283
        return 0;*/
 
284
 
 
285
 
 
286
/*      // Random Test
 
287
 
 
288
        CRandom *random;
 
289
        CDF *dfu, *dfn, *dfe;
 
290
 
 
291
        random = new CRandom();
 
292
 
 
293
        dfu = new CDF();
 
294
        dfu->m_iResolution = 100;
 
295
        dfu->m_fMinVal = 0;
 
296
        dfu->m_fMaxVal = 1;
 
297
        dfu->Create();
 
298
 
 
299
        dfn = new CDF();
 
300
        dfn->m_iResolution = 800;
 
301
        dfn->m_fMinVal = -4;
 
302
        dfn->m_fMaxVal = 4;
 
303
        dfn->Create();
 
304
 
 
305
        dfe = new CDF();
 
306
        dfe->m_iResolution = 400;
 
307
        dfe->m_fMinVal = 0;
 
308
        dfe->m_fMaxVal = 4;
 
309
        dfe->Create();
 
310
 
 
311
        for (z=0;z<1000000;z++)
 
312
        {
 
313
                dfu->AddToBin(random->RandomUniform());
 
314
                dfn->AddToBin(random->RandomNormal());
 
315
                dfe->AddToBin
 
316
                        (random->RandomExp());
 
317
//              if ((z%50000) == 0)
 
318
//                      mprintf("#");
 
319
                if ((z%10000) == 0)
 
320
                        mprintf("%f\n",random->RandomNormal());
 
321
        }
 
322
        mprintf("\n");
 
323
 
 
324
        dfu->Write("","uniform.csv","",false);
 
325
        dfn->Write("","normal.csv","",false);
 
326
        dfe->Write("","exp.csv","",false);
 
327
 
 
328
        return 0;*/
 
329
 
 
330
/*      a = fopen("E:\\tmptraj.xyz","wt");
 
331
 
 
332
        for (z=0;z<20000;z++)
 
333
        {
 
334
                mfprintf(a,"2\n\n");
 
335
                mfprintf(a,"C   %f  %f  %f\n",sin(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),cos(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),0);
 
336
                mfprintf(a,"Si  %f  %f  %f\n",-sin(pow(z/50.0,1.0))*0.0,-cos(pow(z/50.0,1.0))*0.0,0);
 
337
        }
 
338
 
 
339
        fclose(a);
 
340
        return 0;*/
 
341
 
 
342
        InitGlobalVars();
 
343
 
 
344
        /**** Initialize Local Variables ***/
 
345
        tdmat2.Unity();
 
346
        tq2.Unity();
 
347
        multicounter = 0;
 
348
        pSwapMatrix = NULL;
 
349
        apfa = NULL;
 
350
        tda = NULL;
 
351
        ReactSecondRun = false;
 
352
        /***********************************/
 
353
 
 
354
 
 
355
        AddElementData();
 
356
 
 
357
        try { g_sExeName = new char[strlen(argv[0])+1]; } catch(...) { g_sExeName = NULL; }
 
358
        if (g_sExeName == NULL) NewException((double)(strlen(argv[0])+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
359
        
 
360
        strcpy(g_sExeName,argv[0]);
 
361
 
 
362
        GetTravisPath();
 
363
 
 
364
        InstallSignalHandler();
 
365
 
 
366
        InitColor();
 
367
 
 
368
        g_pLogFile = OpenFileWrite("travis.log",true);
 
369
 
 
370
        fprintf(g_pLogFile,"Command line:\n\"");
 
371
        for (z=0;z<argc;z++)
 
372
        {
 
373
                fprintf(g_pLogFile,"%s",argv[z]);
 
374
                if (z < argc-1)
 
375
                        fprintf(g_pLogFile," ");
 
376
        }
 
377
        fprintf(g_pLogFile,"\"\n\n");
 
378
        fflush(g_pLogFile);
 
379
 
 
380
        showinterval = 1;
 
381
 
 
382
        srand(time(NULL));
 
383
 
 
384
#ifdef TARGET_WINDOWS
 
385
        tul = 256;
 
386
        g_sHomeDir = getenv("APPDATA");
 
387
        if (GetComputerName(buf,&tul))
 
388
        { 
 
389
                try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
 
390
                if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
391
                
 
392
                strcpy(g_sHostName,buf);
 
393
        } else g_sHostName = NULL;
 
394
 
 
395
        g_sWorkingDir = _getcwd(NULL,1024);
 
396
#elif defined(TARGET_LINUX)
 
397
        g_sHomeDir = getenv("HOME");
 
398
        buf[0] = 0;
 
399
        if (gethostname(buf,256)==0)
 
400
        {
 
401
                try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
 
402
                if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
403
                
 
404
                strcpy(g_sHostName,buf);
 
405
        } else g_sHostName = NULL;
 
406
 
 
407
        g_sWorkingDir = getcwd(NULL,1024);
 
408
#else
 
409
        g_sHomeDir = NULL;
 
410
        g_sHostName = NULL;
 
411
        g_sWorkingDir = NULL;
 
412
#endif
 
413
 
 
414
        ParsePassiveArgs(argc,argv);
 
415
 
 
416
        InitAnalyses();
 
417
        
 
418
        WriteHeader();
 
419
 
 
420
        InitDatabase();
 
421
 
 
422
/*      C2DF *t2df;
 
423
        int N;
 
424
 
 
425
        t2df = new C2DF();
 
426
        t2df->m_iRes[0] = 150;
 
427
        t2df->m_iRes[1] = 150;
 
428
        t2df->m_fMinVal[0] = 0;
 
429
        t2df->m_fMaxVal[0] = 1.0;
 
430
        t2df->m_fMinVal[1] = 0;
 
431
        t2df->m_fMaxVal[1] = 0.5;
 
432
        t2df->SetLabelX("Relative Cube Edge Length");
 
433
        t2df->SetLabelY("Total mass [g/mol]");
 
434
        t2df->Create();
 
435
        t2df->m_iPlotType = 2;
 
436
        t2df->m_iSmoothGrade = 0;
 
437
        t2df->m_fPlotExp = 0.15;
 
438
        t2df->m_iInterpolationOrder = 1;
 
439
        t2df->m_iPlotPixel = 2000;
 
440
        t2df->m_bContourLines = false;
 
441
        t2df->m_iGPInterpolation = 5;
 
442
 
 
443
        N = 1024;
 
444
 
 
445
        for (z=0;z<150;z++)
 
446
        {
 
447
                tf = pow((double)(z+1)/150.0,3); // Percentage of total volume
 
448
 
 
449
                for (z2=0;z2<=N;z2++)
 
450
                {
 
451
                        tf2 = pow(tf,z2) * pow(1.0-tf,N-z2) * BinomialCoeff(N,z2); // Probability for z2 Ar in Cube
 
452
 
 
453
                        t2df->AddToBin_IntX(z,z2*10.0 / tf / 5600.0 / 5600.0 / 5600.0 * 1.0e9 * 0.0016605,tf2);
 
454
                }
 
455
        }
 
456
 
 
457
 
 
458
 
 
459
        t2df->NormalizeBinIntegral(1000000.0);
 
460
 
 
461
        t2df->WriteGnuplotInput("","2df","",false);
 
462
 
 
463
        return 0;*/
 
464
 
 
465
        /********************************************************************/
 
466
 
 
467
/*      CDF *tedf;
 
468
        FILE *tfil;
 
469
 
 
470
        g_fTimestepLength = 1.0;
 
471
        g_iTrajSteps = 1000000;
 
472
 
 
473
        tedf = new CDF();
 
474
 
 
475
        tedf->m_fMinVal = 0;
 
476
        tedf->m_fMaxVal = 40.0;
 
477
        tedf->m_iResolution = 40000;
 
478
        tedf->Create();
 
479
 
 
480
        tfil = fopen("D:\\Software\\WaterClassic300Eval\\4b\\rdyn_H2O_[O_H]_P2.csv","rt");
 
481
        fgets(buf,256,tfil);
 
482
 
 
483
        for (z=0;z<40000;z++)
 
484
        {
 
485
                fgets(buf,256,tfil);
 
486
                buf[strlen(buf)-1] = 0;
 
487
                p = strchr(buf,';');
 
488
                p++;
 
489
                tf = atof(p);
 
490
                mprintf("%f\n",tf);
 
491
                tedf->m_pBin[z] = tf;
 
492
        }
 
493
 
 
494
        fclose(tfil);
 
495
 
 
496
 
 
497
        try { tedf->m_pParameters = new double*[4+1]; } catch(...) { tedf->m_pParameters = NULL; }
 
498
        if (tedf->m_pParameters == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
499
        
 
500
        try { tedf->m_pFitIntegral = new double[4+1]; } catch(...) { tedf->m_pFitIntegral = NULL; }
 
501
        if (tedf->m_pFitIntegral == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
502
        
 
503
        try { tedf->m_pCorrCoeff = new double[4+1]; } catch(...) { tedf->m_pCorrCoeff = NULL; }
 
504
        if (tedf->m_pCorrCoeff == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
505
        
 
506
        try { tedf->m_pAdditionalSets = new double*[4+1]; } catch(...) { tedf->m_pAdditionalSets = NULL; }
 
507
        if (tedf->m_pAdditionalSets == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
508
        
 
509
        try { tedf->m_pAdditionalSetLabels = new char*[4+1]; } catch(...) { tedf->m_pAdditionalSetLabels = NULL; }
 
510
        if (tedf->m_pAdditionalSetLabels == NULL) NewException((double)(4+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
511
        
 
512
        tedf->m_iAdditionalSets = 4+1;
 
513
 
 
514
        for (z2=0;z2<=4;z2++)
 
515
        {
 
516
                tedf->m_pAdditionalSets[z2] = NULL;
 
517
                tedf->m_pAdditionalSetLabels[z2] = NULL;
 
518
        }
 
519
 
 
520
        mprintf(YELLOW,"    Please note: ");
 
521
        mprintf("The lifetime is two times the integral value!\n\n");
 
522
 
 
523
        for (z2=1;z2<=4;z2++)
 
524
                tedf->Fit_PolyExp(z2,5000);
 
525
 
 
526
//      if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
 
527
        {
 
528
                mprintf(YELLOW,"    DACF fit integral overview:\n");
 
529
                mprintf("      (use the row with the highest R value)\n\n");
 
530
                mprintf(WHITE,"      Degree  R             Integral [ps]     Lifetime [ps]\n");
 
531
                for (z2=1;z2<=4;z2++)
 
532
                {
 
533
                        if (tedf->m_pFitIntegral[z2] >= 0)
 
534
                                mprintf("      %d       %10.8f    %-10G        %-10G\n",z2,tedf->m_pCorrCoeff[z2],tedf->m_pFitIntegral[z2],tedf->m_pFitIntegral[z2]*2.0);
 
535
                                        else mprintf("      %d       %10.8f             -             -\n",z2,tedf->m_pCorrCoeff[z2]);
 
536
                }
 
537
                mprintf("\n");
 
538
        }
 
539
 
 
540
        sprintf(buf,"dacf_D.csv");
 
541
        mprintf("    Saving DACF File as \"%s\"...\n",buf);
 
542
        tedf->Write("",buf,"",false);
 
543
 
 
544
        return 0;*/
 
545
 
 
546
 
 
547
        /********************************************************************/
 
548
 
 
549
 
 
550
        if (g_bDipolGrimme)
 
551
        {
 
552
                if (argc < 3)
 
553
                        DipolGrimme(NULL);
 
554
                                else DipolGrimme(argv[2]);
 
555
                return 0;
 
556
        }
 
557
 
 
558
        if (!ParseArgs(argc,argv))
 
559
                goto _ende;
 
560
 
 
561
        if (g_sInputTraj == NULL)
 
562
        {
 
563
                eprintf("    No trajectory file specified.\n");
 
564
                mprintf("    Please use the -p flag to specify an input trajectory in the command line.\n\n");
 
565
 
 
566
                if (argc == 1)
 
567
                {
 
568
                        mprintf("    Enter the file name of the trajectory file to open: [Quit] ");
 
569
                        myget(buf);
 
570
                        mprintf("\n");
 
571
                        if (strlen(buf)==0)
 
572
                        {
 
573
                                CommandLineHelp();
 
574
                                goto _ende;
 
575
                        }
 
576
 
 
577
                        try { g_sInputTraj = new char[strlen(buf)+1]; } catch(...) { g_sInputTraj = NULL; }
 
578
                        if (g_sInputTraj == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
579
 
 
580
                        strcpy(g_sInputTraj,buf);
 
581
                } else
 
582
                {
 
583
                        CommandLineHelp();
 
584
                        goto _ende;
 
585
                }
 
586
        }
 
587
 
 
588
        if (!DetermineTrajFormat())
 
589
                goto _ende;
 
590
 
 
591
        g_bInputRedirected = false;
 
592
        if (g_sInputFile != NULL)
 
593
        {
 
594
                g_fInputFile = fopen(g_sInputFile,"rt");
 
595
                if (g_fInputFile == NULL)
 
596
                {
 
597
                        eprintf("Could not open input file \"%s\".\n",g_sInputFile);
 
598
                        goto _ende;
 
599
                }
 
600
                g_bInputRedirected = true;
 
601
        }
 
602
 
 
603
        if (IsTTY(stdin) && (!g_bInputRedirected))
 
604
        {
 
605
                g_fInput = OpenFileWrite("input.txt",true);
 
606
                g_bInputRedirected = false;
 
607
                inpprintf("! TRAVIS input file\n! Created with TRAVIS version compiled at %s %s\n",__DATE__,__TIME__);
 
608
 
 
609
                time(&ltime);
 
610
                today = localtime(&ltime);
 
611
                strcpy(buf,asctime(today));
 
612
                buf[strlen(buf)-1] = 0;
 
613
                inpprintf("! Input file written at %s.\n",buf);
 
614
        } else g_bInputRedirected = true;
 
615
 
 
616
        if (g_sInputTraj[0] != 0)
 
617
        {
 
618
                mprintf("    Opening position trajectory %s ...",g_sInputTraj);
 
619
                if (!FileExist(g_sInputTraj))
 
620
                {
 
621
                        eprintf("\nError. File does not exist or cannot be read.\n");
 
622
                        goto _ende;
 
623
                }
 
624
        }
 
625
        if (g_sInputVel[0] != 0)
 
626
        {
 
627
                mprintf("    Opening velocity trajectory %s ...",g_sInputVel);
 
628
                if (!FileExist(g_sInputVel))
 
629
                {
 
630
                        eprintf("\nError. File does not exist or cannot be read.\n");
 
631
                        goto _ende;
 
632
                }
 
633
        }
 
634
        if (g_sInputForce[0] != 0)
 
635
        {
 
636
                mprintf("    Opening Force Trajectory %s ...",g_sInputForce);
 
637
                if (!FileExist(g_sInputForce))
 
638
                {
 
639
                        eprintf("\nError. File does not exist or cannot be read.\n");
 
640
                        goto _ende;
 
641
                }
 
642
        }
 
643
        mprintf("\n");
 
644
        if (g_sInputTraj[0] == 0)
 
645
        {
 
646
                eprintf("Error: No trajectory file specified.\n");
 
647
                goto _ende;
 
648
        }
 
649
        g_fPos = fopen(g_sInputTraj,"rt");
 
650
        if (g_fPos == NULL)
 
651
        {
 
652
                eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
 
653
                goto _ende;
 
654
        }
 
655
 
 
656
        if (!g_TimeStep.ReadTimestep(g_fPos,true))
 
657
        {
 
658
                eprintf("\nError reading first time step from trajectory. Leaving.\n");
 
659
                goto _ende;
 
660
        }
 
661
 
 
662
        if (g_bXYZ4thCol)
 
663
                mprintf("\n    Found 4th column of numbers in XYZ file.\n");
 
664
 
 
665
        g_TimeStep.CalcMinMax();
 
666
 
 
667
        if (!g_bStreamInput)
 
668
        {
 
669
        //      fgetpos(g_fPos,&fpos);
 
670
                fpos = ftell(g_fPos);
 
671
                fseek(g_fPos,0,SEEK_END);
 
672
                fpos2 = ftell(g_fPos);
 
673
        //      fgetpos(g_fPos,&fpos2);
 
674
                fclose(g_fPos);
 
675
        } else fpos2 = -1;
 
676
 
 
677
        if (fpos2 < 0)
 
678
        {
 
679
                mprintf("\n    Could not determine trajectory file size.\n\n");
 
680
                g_iTrajSteps = -1;
 
681
        } else
 
682
        {
 
683
                g_iTrajSteps = fpos2/fpos;
 
684
                mprintf("\n    Trajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
 
685
        }
 
686
 
 
687
        g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
 
688
 
 
689
        if (g_iGesAtomCount == 0)
 
690
        {
 
691
                eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
 
692
                goto _ende;
 
693
        }       
 
694
 
 
695
        g_iGesVirtAtomCount = g_iGesAtomCount;
 
696
        g_TimeStep.AddAtoms();
 
697
        if (g_bUnknownElements)
 
698
                mprintf("\n");
 
699
 
 
700
        SortAtoms();
 
701
        mprintf(WHITE,"    %d atoms in the system: ",g_iGesAtomCount);
 
702
        for (z=0;z<g_oaAtoms.GetSize();z++)
 
703
        {
 
704
                mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
 
705
                if (z < (int)g_oaAtoms.GetSize()-1)
 
706
                        mprintf(", ");
 
707
        }
 
708
        mprintf("\n\n");
 
709
        mprintf("    System extent:  X = { %+5.0f .. %+5.0f pm }, dX = %.0f pm\n",g_TimeStep.m_vMin[0],g_TimeStep.m_vMax[0],g_TimeStep.m_vMax[0]-g_TimeStep.m_vMin[0]);
 
710
        mprintf("      (in step 1)   Y = { %+5.0f .. %+5.0f pm }, dY = %.0f pm\n",g_TimeStep.m_vMin[1],g_TimeStep.m_vMax[1],g_TimeStep.m_vMax[1]-g_TimeStep.m_vMin[1]);
 
711
        mprintf("                    Z = { %+5.0f .. %+5.0f pm }, dZ = %.0f pm\n",g_TimeStep.m_vMin[2],g_TimeStep.m_vMax[2],g_TimeStep.m_vMax[2]-g_TimeStep.m_vMin[2]);
 
712
 
 
713
        g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
 
714
 
 
715
        xAddAtom("#");
 
716
 
 
717
        /****************************/
 
718
 
 
719
        if (!GatherInfos())
 
720
                goto _ende;
 
721
 
 
722
        /************** Beginn Analyse **************/
 
723
 
 
724
        if (g_bStreamInput)
 
725
        {
 
726
                if (g_bScanVelocities)
 
727
                {
 
728
                        eprintf("\nError: Velocity pre-analysis not compatible with stream input.\n\n");
 
729
                        goto _ende;
 
730
                }
 
731
 
 
732
                if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
 
733
                {
 
734
                        eprintf("\nError: Neighborhood pre-analysis not compatible with stream input.\n\n");
 
735
                        goto _ende;
 
736
                }
 
737
        }
 
738
 
 
739
        g_iStartTime = time(NULL);
 
740
 
 
741
        if (g_iMaxStep != -1)
 
742
        {
 
743
                g_iTrajSteps = g_iMaxStep;
 
744
        } else
 
745
        {
 
746
                if (g_iTrajSteps != -1)
 
747
                {
 
748
                        g_iTrajSteps -= g_iBeginStep;
 
749
                        if (g_iTrajSteps < 1)
 
750
                                g_iTrajSteps = 1;
 
751
                }
 
752
        }
 
753
 
 
754
        if (g_bResp || g_bFFGen)
 
755
                goto _ende;
 
756
 
 
757
        g_iStepHistory = 3;
 
758
        multicounter = 0;
 
759
 
 
760
_multiintervalstart:
 
761
        if (g_bMultiInterval)
 
762
        {
 
763
                g_iBeginStep = g_laMultiIntervalStart[multicounter];
 
764
                g_iScanNbhStart = g_iBeginStep;
 
765
                g_iMaxStep = g_laMultiIntervalEnd[multicounter] - g_laMultiIntervalStart[multicounter] + 1;
 
766
                g_iScanNbhSteps = g_iMaxStep;
 
767
                mprintf(YELLOW,"***********************************************\n");
 
768
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) starting. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
 
769
                mprintf(YELLOW,"***********************************************\n\n");
 
770
                sprintf(multibuf,"_I%d_%d-%d",multicounter+1,g_laMultiIntervalStart[multicounter],g_laMultiIntervalEnd[multicounter]);
 
771
        } else multibuf[0] = 0;
 
772
 
 
773
        mprintf(WHITE,">>> Initialization >>>\n\n");
 
774
 
 
775
        g_bAbortAnalysis = false;
 
776
 
 
777
        if (!g_bStreamInput)
 
778
        {
 
779
                g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
 
780
                if (g_fPos == NULL)
 
781
                {
 
782
                        eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
 
783
                        goto _ende;
 
784
                }
 
785
                if ((g_bNPT) && (g_sNPTFile[0] != 0))
 
786
                {
 
787
                        g_fNPTFile = fopen(g_sNPTFile,"rt");
 
788
                        if (g_fNPTFile == NULL)
 
789
                        {
 
790
                                eprintf("\nCould not open cell vector file.\n");
 
791
                                goto _ende;
 
792
                        }
 
793
                }
 
794
        }
 
795
 
 
796
        if (g_iBeginStep != 0)
 
797
        {
 
798
                mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
 
799
                if (g_iBeginStep != g_iScanMolStep)
 
800
                {
 
801
                        mprintf(WHITE,"  [");
 
802
                        for (z=0;z<g_iBeginStep;z++)
 
803
                        {
 
804
                                if (fmod(z,g_iBeginStep/50.0) < 1.0)
 
805
                                        mprintf(WHITE,"#");
 
806
                                if (!g_TimeStep.SkipTimestep(g_fPos))
 
807
                                {
 
808
                                        eprintf("\nError: Unexpected end of position trajectory.\n");
 
809
                                        goto _ende;
 
810
                                }
 
811
                                if ((g_bNPT) && (g_sNPTFile[0] != 0))
 
812
                                        fgets(buf,256,g_fNPTFile);
 
813
                        }
 
814
                        mprintf(WHITE,"]\n");
 
815
                        if (!g_bStreamInput)
 
816
                                g_iFastForwardPos = ftell(g_fPos);
 
817
                                        else g_iFastForwardPos = 0;
 
818
                } else
 
819
                {
 
820
                        mprintf("  Position already known from molecule recognition, directly seeking.\n");
 
821
                        fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
 
822
                }
 
823
                if (!g_bStreamInput)
 
824
                        mprintf("  Step %d begins at offset %lu (%.1f MB).\n\n",g_iBeginStep+1,g_iFastForwardPos,g_iFastForwardPos/1024.0/1024.0);
 
825
        }
 
826
//      fclose(g_fPos);
 
827
//      g_fPos = fopen(g_sInputTraj,"rb");
 
828
//      mprintf("Seek: %d.\n",g_iFastForwardPos);
 
829
//      fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
 
830
 
 
831
        if (!g_bStreamInput)
 
832
        {
 
833
                g_TimeStep.ReadTimestep(g_fPos,true);
 
834
                if ((g_bNPT) && (g_sNPTFile[0] != 0))
 
835
                {
 
836
                        g_TimeStep.ReadCellVector(g_fNPTFile);
 
837
                        fclose(g_fNPTFile);
 
838
                }
 
839
                fclose(g_fPos);
 
840
        }
 
841
 
 
842
        g_TimeStep.CalcCenters();
 
843
 
 
844
        if (g_bPeriodic)
 
845
                g_TimeStep.UniteMolecules(false);
 
846
 
 
847
        if (g_bScanVelocities && (!g_bStreamInput))
 
848
        {
 
849
                mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
 
850
 
 
851
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
 
852
                if (g_fPos == NULL)
 
853
                {
 
854
                        eprintf("Error. Input Trajectory suddenly vanished ^^\n");
 
855
                        return 0;
 
856
                }
 
857
                g_iSteps = 0; // Der Zaehler der Zeitschritte
 
858
                if (g_iScanVelStart != 0)
 
859
                {
 
860
                        mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
 
861
                        mprintf(WHITE,"  [");
 
862
                        for (z=0;z<g_iScanVelStart;z++)
 
863
                        {
 
864
                                if (fmod(z,g_iScanVelStart/60.0) < 1.0)
 
865
                                        mprintf(WHITE,"#");
 
866
                                if (!g_TimeStep.SkipTimestep(g_fPos))
 
867
                                        break;
 
868
                        }
 
869
                        mprintf(WHITE,"]\n");
 
870
                }
 
871
 
 
872
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
 
873
                {
 
874
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
 
875
                                goto _endvel;
 
876
                        if (g_TimeStep.m_iGesAtomCount == 0)
 
877
                                goto _endvel;
 
878
 
 
879
                        g_TimeStep.CalcCenters();
 
880
        
 
881
                        if ((g_iSteps % 4) == 0)
 
882
                        {
 
883
                                if ((g_iSteps % 200) == 0) 
 
884
                                        mprintf("\nStep %6d...",g_iSteps);
 
885
                                                else mprintf(".");
 
886
                        }
 
887
        
 
888
                        g_iSteps++;
 
889
        
 
890
                        if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
 
891
                                break;
 
892
                }
 
893
                _endvel:
 
894
 
 
895
                fclose(g_fPos);
 
896
 
 
897
                mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
 
898
        } // END IF g_bScanVelocities
 
899
 
 
900
 
 
901
        if (g_bSaveRefEnv && (g_iNbhMode == 1))
 
902
        {
 
903
                mprintf("Creating statical neighborhood...\n");
 
904
                g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
 
905
                if (g_bSaveRefWithEnv)
 
906
                {
 
907
                        mprintf("Adding reference molecule to neighborhood...\n");
 
908
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
 
909
                }
 
910
                mprintf("\n");
 
911
                g_pNbSet->Dump();
 
912
                mprintf("\n");
 
913
        }
 
914
 
 
915
        if (g_bVACF && g_bGlobalVACF)
 
916
        {
 
917
                mprintf("Initializing Global Velocity Autocorrelation Function...\n");
 
918
                g_pGlobalVACF->Create();
 
919
 
 
920
                if (!g_bVACFCacheMode)
 
921
                {
 
922
                        if (g_pGlobalVACF->m_iSize > g_iStepHistory)
 
923
                                g_iStepHistory = g_pGlobalVACF->m_iSize;
 
924
                } else
 
925
                {
 
926
                        mprintf("    VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_iGesAtomCount*g_iTrajSteps*3.1*sizeof(float)));
 
927
                        for (z=0;z<g_iGesAtomCount;z++)
 
928
                        {
 
929
//                              mprintf("%d: %s: %f\n",z,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_sLabel,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fRadius);
 
930
                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z] > 1000))
 
931
                                        continue;
 
932
//                              mprintf("  --> Ok\n");
 
933
 
 
934
                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
935
                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
936
                                
 
937
                                if (g_iTrajSteps != -1)
 
938
                                {
 
939
                                        ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
 
940
                                        ptfa->SetGrow((long)(g_iTrajSteps*0.1));
 
941
                                } else ptfa->SetGrow(1000);
 
942
                                g_pGlobalVACF->m_oaCache.Add(ptfa);
 
943
                        }
 
944
                }
 
945
        }
 
946
 
 
947
        if (g_bIRSpec && g_bGlobalIR)
 
948
        {
 
949
                mprintf("  Creating global IR Spectrum...\n");
 
950
                g_pGlobalIR->m_pRDyn->m_fMinVal = 0;
 
951
                g_pGlobalIR->m_pRDyn->m_fMaxVal = g_pGlobalIR->m_iDepth * g_fTimestepLength / 1000.0f;
 
952
                g_pGlobalIR->m_pRDyn->m_iResolution = g_pGlobalIR->m_iDepth/g_pGlobalIR->m_iStride;
 
953
                g_pGlobalIR->m_pRDyn->SetLabelX("Tau [ps]");
 
954
                g_pGlobalIR->m_pRDyn->SetLabelY("Dipole autocorrelation");
 
955
                g_pGlobalIR->m_pRDyn->Create();
 
956
                if (g_bRDynCacheMode)
 
957
                {
 
958
                        if (g_iTrajSteps != -1)
 
959
                                mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
 
960
                                        else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*10000/g_iStride*3.1*sizeof(float)));
 
961
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
962
                        {
 
963
                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
964
                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
965
                                
 
966
                                if (g_iTrajSteps != -1)
 
967
                                {
 
968
                                        ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
 
969
                                        ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
 
970
                                } else ptfa->SetGrow(10000);
 
971
                                g_pGlobalIR->m_oaCache.Add(ptfa);
 
972
                        }
 
973
                } else
 
974
                {
 
975
                        try { g_pGlobalIR->m_pCount = new double[g_pGlobalIR->m_pRDyn->m_iResolution]; } catch(...) { g_pGlobalIR->m_pCount = NULL; }
 
976
                        if (g_pGlobalIR->m_pCount == NULL) NewException((double)g_pGlobalIR->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
977
                        
 
978
                        for (z2=0;z2<g_pGlobalIR->m_pRDyn->m_iResolution;z2++)
 
979
                                g_pGlobalIR->m_pCount[z2] = 0;
 
980
                        if (!g_bRDynCacheMode)
 
981
                        {
 
982
                                if (g_pGlobalIR->m_iDepth > g_iStepHistory)
 
983
                                        g_iStepHistory = g_pGlobalIR->m_iDepth;
 
984
                        }
 
985
                }
 
986
        }
 
987
 
 
988
/*      if (g_bSFac)
 
989
        {
 
990
                mprintf("  Creating Structure Factor Analysis...\n");
 
991
                g_pSFac->Create();
 
992
        }*/
 
993
 
 
994
        if (g_bSaveCondSnapshot)
 
995
                g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
 
996
 
 
997
        for (z=0;z<g_oaObserv.GetSize();z++)
 
998
        {
 
999
                mprintf("Initializing Observation %d...\n",z+1);
 
1000
                o = (CObservation*)g_oaObserv[z];
 
1001
 
 
1002
                if (g_bAggregation)
 
1003
                {
 
1004
                        mprintf("  Creating Aggregation Functions (%d value sets)...\n",o->m_pDACF->m_oaSubDACFs.GetSize());
 
1005
                        for (z2=0;z2<o->m_pDACF->m_oaSubDACFs.GetSize();z2++)
 
1006
                        {
 
1007
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
 
1008
                                if (g_bDLDisp)
 
1009
                                {
 
1010
                                        try { dacfsub->m_pDLDisp = new C2DF(); } catch(...) { dacfsub->m_pDLDisp = NULL; }
 
1011
                                        if (dacfsub->m_pDLDisp == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1012
                                        
 
1013
                                        dacfsub->m_pDLDisp->m_iRes[0] = o->m_pDACF->m_iLifetimeRes;
 
1014
                                        dacfsub->m_pDLDisp->m_fMinVal[0] = 0.0f;
 
1015
                                        dacfsub->m_pDLDisp->m_fMaxVal[0] = o->m_pDACF->m_fLargestLifetime;
 
1016
                                        dacfsub->m_pDLDisp->m_iRes[1] = o->m_pDACF->m_iDisplacementRes;
 
1017
                                        dacfsub->m_pDLDisp->m_fMinVal[1] = 0.0f;
 
1018
                                        dacfsub->m_pDLDisp->m_fMaxVal[1] = o->m_pDACF->m_fLargestDisplacement;
 
1019
                                        dacfsub->m_pDLDisp->Create();
 
1020
                                        dacfsub->m_pDLDisp->SetLabelX("Lifetime [ps]");
 
1021
                                        dacfsub->m_pDLDisp->SetLabelY("Displacement [pm]");
 
1022
                                }
 
1023
 
 
1024
                                if (g_bPairMSD)
 
1025
                                {
 
1026
                                        try { dacfsub->m_pPairMSD = new CAF(); } catch(...) { dacfsub->m_pPairMSD = NULL; }
 
1027
                                        if (dacfsub->m_pPairMSD == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1028
                                        
 
1029
                                        dacfsub->m_pPairMSD->m_iResolution = o->m_pDACF->m_iDACFRes;
 
1030
                                        dacfsub->m_pPairMSD->m_fMinVal = 0.0f;
 
1031
                                        dacfsub->m_pPairMSD->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
 
1032
                                        dacfsub->m_pPairMSD->Create();
 
1033
                                }
 
1034
 
 
1035
                                if (g_bDDisp)
 
1036
                                {
 
1037
                                        try { dacfsub->m_pDDisp = new CDF(); } catch(...) { dacfsub->m_pDDisp = NULL; }
 
1038
                                        if (dacfsub->m_pDDisp == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1039
                                        
 
1040
                                        dacfsub->m_pDDisp->m_iResolution = o->m_pDACF->m_iDisplacementRes;
 
1041
                                        dacfsub->m_pDDisp->m_fMinVal = 0.0f;
 
1042
                                        dacfsub->m_pDDisp->m_fMaxVal = o->m_pDACF->m_fLargestDisplacement;
 
1043
                                        dacfsub->m_pDDisp->SetLabelX("Dimer displacement [pm]");
 
1044
                                        dacfsub->m_pDDisp->SetLabelY("Occurrence");
 
1045
                                        dacfsub->m_pDDisp->Create();
 
1046
                                }
 
1047
 
 
1048
                                if (g_bDLDF)
 
1049
                                {
 
1050
                                        try { dacfsub->m_pDLDF = new CDF(); } catch(...) { dacfsub->m_pDLDF = NULL; }
 
1051
                                        if (dacfsub->m_pDLDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1052
                                        
 
1053
                                        dacfsub->m_pDLDF->m_bLeft = true;
 
1054
                                        dacfsub->m_pDLDF->m_iResolution = o->m_pDACF->m_iLifetimeRes;
 
1055
                                        dacfsub->m_pDLDF->m_fMinVal = 0.0f;
 
1056
                                        dacfsub->m_pDLDF->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
 
1057
                                        dacfsub->m_pDLDF->SetLabelX("Tau [ps]");
 
1058
                                        dacfsub->m_pDLDF->SetLabelY("Occurrence");
 
1059
                                        dacfsub->m_pDLDF->Create();
 
1060
                                }
 
1061
 
 
1062
                                if (g_bDACF)
 
1063
                                {
 
1064
                                        try { dacfsub->m_pDACF = new CDF(); } catch(...) { dacfsub->m_pDACF = NULL; }
 
1065
                                        if (dacfsub->m_pDACF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1066
                                        
 
1067
                                        dacfsub->m_pDACF->m_bLeft = true;
 
1068
                                        dacfsub->m_pDACF->m_iResolution = o->m_pDACF->m_iDACFRes;
 
1069
                                        dacfsub->m_pDACF->m_fMinVal = 0;
 
1070
                                        dacfsub->m_pDACF->m_fMaxVal = o->m_pDACF->m_iDACFRes * g_fTimestepLength / 1000.0;
 
1071
                                        dacfsub->m_pDACF->SetLabelX("Tau [ps]");
 
1072
                                        dacfsub->m_pDACF->SetLabelY("Occurrence");
 
1073
                                        dacfsub->m_pDACF->Create();
 
1074
 
 
1075
                                        if (dacfsub->m_bNewMode)
 
1076
                                        {
 
1077
                                //              mprintf("Create: %d*%d=%d\n",((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
1078
                                                try { dacfsub->m_piaIntervals = new CxIntArray[((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()]; } catch(...) { dacfsub->m_piaIntervals = NULL; }
 
1079
                                                if (dacfsub->m_piaIntervals == NULL) NewException((double)((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()*sizeof(CxIntArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1080
                                        }
 
1081
                                }
 
1082
 
 
1083
                                try { dacfsub->m_pNDF = new CDF(); } catch(...) { dacfsub->m_pNDF = NULL; }
 
1084
                                if (dacfsub->m_pNDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1085
                                
 
1086
                                dacfsub->m_pNDF->m_iResolution = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
 
1087
                                dacfsub->m_pNDF->m_fMinVal = 0.0f;
 
1088
                                dacfsub->m_pNDF->m_fMaxVal = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
 
1089
                                dacfsub->m_pNDF->Create();
 
1090
                        }
 
1091
                }
 
1092
 
 
1093
                if (g_bSDF)
 
1094
                {
 
1095
                        mprintf("  Creating SDF...\n");
 
1096
                        o->m_pSDF->m_pSDF->m_fMinVal[0] = -o->m_pSDF->m_fRadius;
 
1097
                        o->m_pSDF->m_pSDF->m_fMaxVal[0] = o->m_pSDF->m_fRadius;
 
1098
                        o->m_pSDF->m_pSDF->m_fMinVal[1] = -o->m_pSDF->m_fRadius;
 
1099
                        o->m_pSDF->m_pSDF->m_fMaxVal[1] = o->m_pSDF->m_fRadius;
 
1100
                        o->m_pSDF->m_pSDF->m_fMinVal[2] = -o->m_pSDF->m_fRadius;
 
1101
                        o->m_pSDF->m_pSDF->m_fMaxVal[2] = o->m_pSDF->m_fRadius;
 
1102
                        o->m_pSDF->m_pSDF->m_iRes[0] = o->m_pSDF->m_iResolution;
 
1103
                        o->m_pSDF->m_pSDF->m_iRes[1] = o->m_pSDF->m_iResolution;
 
1104
                        o->m_pSDF->m_pSDF->m_iRes[2] = o->m_pSDF->m_iResolution;
 
1105
                        o->m_pSDF->m_pSDF->m_iHistogramRes = o->m_pSDF->m_iHistogramRes;
 
1106
                        o->m_pSDF->m_pSDF->Create();
 
1107
//                      mprintf("Observation %d: Creating %d VecArrays.\n",z+1,o->m_iShowMolCount);
 
1108
 
 
1109
                        try { o->m_pSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_vaData = NULL; }
 
1110
                        if (o->m_pSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1111
                        
 
1112
                        if (o->m_pSDF->m_bVdWSpheres)
 
1113
                        {
 
1114
                                try { o->m_pSDF->m_faRadius = new CxFloatArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_faRadius = NULL; }
 
1115
                                if (o->m_pSDF->m_faRadius == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1116
                        }
 
1117
 
 
1118
                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1119
                        {
 
1120
                                try { o->m_pSDF->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_baDataEnabled = NULL; }
 
1121
                                if (o->m_pSDF->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1122
                        }
 
1123
                }
 
1124
 
 
1125
                if (g_bPlProj)
 
1126
                {
 
1127
                        mprintf("  Creating Plane Projection DF...\n");
 
1128
                        o->m_pPlProj->m_p2DF->m_fMinVal[0] = o->m_pPlProj->m_fMinVal[0];
 
1129
                        o->m_pPlProj->m_p2DF->m_fMaxVal[0] = o->m_pPlProj->m_fMaxVal[0];
 
1130
                        o->m_pPlProj->m_p2DF->m_fMinVal[1] = o->m_pPlProj->m_fMinVal[1];
 
1131
                        o->m_pPlProj->m_p2DF->m_fMaxVal[1] = o->m_pPlProj->m_fMaxVal[1];
 
1132
                        o->m_pPlProj->m_p2DF->m_iRes[0] = o->m_pPlProj->m_iResolution[0];
 
1133
                        o->m_pPlProj->m_p2DF->m_iRes[1] = o->m_pPlProj->m_iResolution[1];
 
1134
                        o->m_pPlProj->m_p2DF->m_iHistogramRes = o->m_pPlProj->m_iHistogramRes;
 
1135
                        o->m_pPlProj->m_p2DF->SetLabelX("X [pm]");
 
1136
                        o->m_pPlProj->m_p2DF->SetLabelY("Y [pm]");
 
1137
                        o->m_pPlProj->m_p2DF->Create();
1098
1138
//                      mprintf("Observation %d: Creating %d VecArrays.\n",z+1,o->m_iShowMolCount);
1099
1139
 
1100
 
                        try { o->m_pSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_vaData = NULL; }
1101
 
                        if (o->m_pSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1140
                        try { o->m_pPlProj->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pPlProj->m_vaData = NULL; }
 
1141
                        if (o->m_pPlProj->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1102
1142
                        
1103
 
                        if (o->m_pSDF->m_bVdWSpheres)
1104
 
                        {
1105
 
                                try { o->m_pSDF->m_faRadius = new CxFloatArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_faRadius = NULL; }
1106
 
                                if (o->m_pSDF->m_faRadius == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1107
 
                        }
1108
 
 
1109
1143
                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1110
1144
                        {
1111
 
                                try { o->m_pSDF->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_baDataEnabled = NULL; }
1112
 
                                if (o->m_pSDF->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1113
 
                        }
1114
 
                }
1115
 
 
1116
 
                if (g_bRDyn)
1117
 
                {
1118
 
                        mprintf("  Creating Reorientation Dynamics...\n");
1119
 
                        o->m_pRDyn->m_pRDyn->m_fMinVal = 0;
1120
 
                        o->m_pRDyn->m_pRDyn->m_fMaxVal = o->m_pRDyn->m_iDepth * g_fTimestepLength / 1000.0f;
1121
 
                        o->m_pRDyn->m_pRDyn->m_iResolution = o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;
1122
 
                        o->m_pRDyn->m_pRDyn->SetLabelX("Tau [ps]");
1123
 
                        o->m_pRDyn->m_pRDyn->SetLabelY("Vector autocorrelation");
1124
 
                        o->m_pRDyn->m_pRDyn->Create();
1125
 
                        if (g_bRDynCacheMode)
1126
 
                        {
1127
 
                                if (g_iTrajSteps != -1)
1128
 
                                        mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1129
 
                                                else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1130
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
1131
 
                                {
1132
 
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1133
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1134
 
                                        
1135
 
                                        if (g_iTrajSteps != -1)
1136
 
                                        {
1137
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1138
 
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1139
 
                                        } else ptfa->SetGrow(10000);
1140
 
                                        o->m_pRDyn->m_oaCache.Add(ptfa);
1141
 
                                }
1142
 
                        } else
1143
 
                        {
1144
 
                                try { o->m_pRDyn->m_pCount = new double[o->m_pRDyn->m_pRDyn->m_iResolution]; } catch(...) { o->m_pRDyn->m_pCount = NULL; }
1145
 
                                if (o->m_pRDyn->m_pCount == NULL) NewException((double)o->m_pRDyn->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1146
 
                                
1147
 
                                for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
1148
 
                                        o->m_pRDyn->m_pCount[z2] = 0;
1149
 
                                if (!g_bRDynCacheMode)
1150
 
                                {
1151
 
                                        if (o->m_pRDyn->m_iDepth > g_iStepHistory)
1152
 
                                                g_iStepHistory = o->m_pRDyn->m_iDepth;
1153
 
                                }
1154
 
                        }
1155
 
                }
1156
 
 
1157
 
                if (g_bIRSpec)
1158
 
                {
1159
 
                        mprintf("  Creating IR Spectrum...\n");
1160
 
                        o->m_pIRSpec->m_pRDyn->m_fMinVal = 0;
1161
 
                        o->m_pIRSpec->m_pRDyn->m_fMaxVal = o->m_pIRSpec->m_iDepth * g_fTimestepLength / 1000.0f;
1162
 
                        o->m_pIRSpec->m_pRDyn->m_iResolution = o->m_pIRSpec->m_iDepth/o->m_pIRSpec->m_iStride;
1163
 
                        o->m_pIRSpec->m_pRDyn->SetLabelX("Tau [ps]");
1164
 
                        o->m_pIRSpec->m_pRDyn->SetLabelY("Dipole autocorrelation");
1165
 
                        o->m_pIRSpec->m_pRDyn->Create();
1166
 
                        if (g_bRDynCacheMode)
1167
 
                        {
1168
 
                                if (g_iTrajSteps != -1)
1169
 
                                        mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1170
 
                                                else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1171
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations;z2++)
1172
 
                                {
1173
 
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1174
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1175
 
                                        
1176
 
                                        if (g_iTrajSteps != -1)
1177
 
                                        {
1178
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1179
 
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1180
 
                                        } else ptfa->SetGrow(10000);
1181
 
                                        o->m_pIRSpec->m_oaCache.Add(ptfa);
1182
 
                                }
1183
 
                        } else
1184
 
                        {
1185
 
                                try { o->m_pIRSpec->m_pCount = new double[o->m_pIRSpec->m_pRDyn->m_iResolution]; } catch(...) { o->m_pIRSpec->m_pCount = NULL; }
1186
 
                                if (o->m_pIRSpec->m_pCount == NULL) NewException((double)o->m_pIRSpec->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1187
 
                                
1188
 
                                for (z2=0;z2<o->m_pIRSpec->m_pRDyn->m_iResolution;z2++)
1189
 
                                        o->m_pIRSpec->m_pCount[z2] = 0;
1190
 
                                if (!g_bRDynCacheMode)
1191
 
                                {
1192
 
                                        if (o->m_pIRSpec->m_iDepth > g_iStepHistory)
1193
 
                                                g_iStepHistory = o->m_pIRSpec->m_iDepth;
1194
 
                                }
1195
 
                        }
1196
 
                }
1197
 
 
1198
 
                if (g_bDens)
1199
 
                {
1200
 
                        mprintf("  Creating Density Distribution Function...\n");
1201
 
                        o->m_pDensityDF->m_pDensDF->m_fMinVal = o->m_pDensityDF->m_fMinDist;
1202
 
                        o->m_pDensityDF->m_pDensDF->m_fMaxVal = o->m_pDensityDF->m_fMaxDist;
1203
 
                        o->m_pDensityDF->m_pDensDF->m_iResolution = o->m_pDensityDF->m_iResolution;
1204
 
                        o->m_pDensityDF->m_pDensDF->m_iHistogramRes = o->m_pDensityDF->m_iHistogramRes;
1205
 
                        o->m_pDensityDF->m_pDensDF->SetLabelX("Distance [pm]");
1206
 
                        if (o->m_pDensityDF->m_bDensityMass)
1207
 
                                o->m_pDensityDF->m_pDensDF->SetLabelY("Mass Density [g/cm^3]");
1208
 
                                        else o->m_pDensityDF->m_pDensDF->SetLabelY("Particle Density [1/nm^3]");
1209
 
                        o->m_pDensityDF->m_pDensDF->Create();
1210
 
                }
1211
 
 
1212
 
                if (g_bVHDF)
1213
 
                {
1214
 
                        mprintf("  Creating VHCF...\n");
1215
 
                        o->m_pVHDF->m_pVHDF->m_fMinVal[1] = o->m_pVHDF->m_fMinDist;
1216
 
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[1] = o->m_pVHDF->m_fMaxDist;
1217
 
                        o->m_pVHDF->m_pVHDF->m_iRes[1] = o->m_pVHDF->m_iResolution;
1218
 
                        o->m_pVHDF->m_pVHDF->m_fMinVal[0] = 0.0;
1219
 
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[0] = o->m_pVHDF->m_iDepth * g_fTimestepLength / 1000.0f;
1220
 
                        o->m_pVHDF->m_pVHDF->m_iRes[0] = o->m_pVHDF->m_iDepth / o->m_pVHDF->m_iStride;
1221
 
                        o->m_pVHDF->m_pVHDF->Create();
1222
 
 
1223
 
                        try { o->m_pVHDF->m_pCount = new double[o->m_pVHDF->m_pVHDF->m_iRes[0]]; } catch(...) { o->m_pVHDF->m_pCount = NULL; }
1224
 
                        if (o->m_pVHDF->m_pCount == NULL) NewException((double)o->m_pVHDF->m_pVHDF->m_iRes[0]*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1225
 
                        
1226
 
                        for (z0=0;z0<o->m_pVHDF->m_pVHDF->m_iRes[0];z0++)
1227
 
                                o->m_pVHDF->m_pCount[z0] = 0;
1228
 
                        o->m_pVHDF->m_pVHDF->SetLabelY("Distance [pm]");
1229
 
                        o->m_pVHDF->m_pVHDF->SetLabelX("Tau [ps]");
1230
 
//                      o->m_pVHDF->m_pVHDF->m_fPlotExp = 1.0;
1231
 
                        if (o->m_pVHDF->m_iDepth > g_iStepHistory)
1232
 
                                g_iStepHistory = o->m_pVHDF->m_iDepth;
1233
 
                        mprintf("    Setting trajectory ring buffer to %s...\n",FormatBytes(g_iStepHistory*g_iGesVirtAtomCount*sizeof(float)*3));
1234
 
                } 
1235
 
 
1236
 
                if (g_bNbAnalysis)
1237
 
                {
1238
 
                        mprintf("  Creating Neighborhood Analysis...\n");
1239
 
 
1240
 
                        try { o->m_pNbAnalysis->m_pNPFCount = new CDF(); } catch(...) { o->m_pNbAnalysis->m_pNPFCount = NULL; }
1241
 
                        if (o->m_pNbAnalysis->m_pNPFCount == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1242
 
                        
1243
 
                        o->m_pNbAnalysis->m_pNPFCount->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1244
 
                        o->m_pNbAnalysis->m_pNPFCount->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1245
 
                        o->m_pNbAnalysis->m_pNPFCount->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1246
 
 
1247
 
                        o->m_pNbAnalysis->m_pNPFCount->Create();
1248
 
 
1249
 
                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1250
 
                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1251
 
                        
1252
 
                        tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1253
 
                        tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1254
 
                        tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1255
 
                        tdf->SetLabelX("Distance [pm]");
1256
 
                        tdf->SetLabelY("Occurrence");
1257
 
                        tdf->Create();
1258
 
                        o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1259
 
 
1260
 
                        for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
1261
 
                        {
1262
 
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1263
 
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1264
 
                                
1265
 
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1266
 
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1267
 
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1268
 
                                tdf->SetLabelX("Distance [pm]");
1269
 
                                tdf->SetLabelY("Occurrence");
1270
 
                                tdf->Create();
1271
 
                                o->m_pNbAnalysis->m_oaDF.Add(tdf);
1272
 
 
1273
 
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1274
 
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1275
 
                                
1276
 
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1277
 
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1278
 
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1279
 
                                tdf->SetLabelX("Distance [pm]");
1280
 
                                tdf->SetLabelY("Occurrence");
1281
 
                                tdf->Create();
1282
 
                                o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1283
 
                        }
1284
 
                } 
1285
 
 
1286
 
                for (z0=0;z0<g_iCDFChannels;z0++)
1287
 
                {
1288
 
                        if (g_bRDF && (o->m_pRDF[z0] != NULL))
1289
 
                        {
1290
 
                                mprintf("  Creating RDF...\n");
1291
 
                                o->m_pRDF[z0]->m_pRDF->m_fMinVal = o->m_pRDF[z0]->m_fMinDist;
1292
 
                                o->m_pRDF[z0]->m_pRDF->m_fMaxVal = o->m_pRDF[z0]->m_fMaxDist;
1293
 
                                o->m_pRDF[z0]->m_pRDF->m_iResolution = o->m_pRDF[z0]->m_iResolution;
1294
 
                                o->m_pRDF[z0]->m_pRDF->m_iHistogramRes = o->m_pRDF[z0]->m_iHistogramRes;
1295
 
                                o->m_pRDF[z0]->m_pRDF->SetLabelX("Distance [pm]");
1296
 
                                if (o->m_pRDF[z0]->m_bProbDens)
1297
 
                                        o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r) [nm^(-3)]");
1298
 
                                                else o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r)");
1299
 
 
1300
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1301
 
                                {
1302
 
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1303
 
 
1304
 
                        /*              try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1305
 
                                        if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1306
 
                                        
1307
 
                                        for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
1308
 
                                        {
1309
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1310
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1311
 
                                        }
1312
 
                        */
1313
 
                                        for (z3=0;z3<o->m_waObsRefList.GetSize();z3++)
1314
 
                                        {
1315
 
                                                for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
1316
 
                                                {
1317
 
                                                        if ((o->m_waObsRefList.GetSize() > 1) && (o->m_waObsShowList.GetSize() > 1))
1318
 
                                                                sprintf(buf,"RM%d-OM%d",o->m_waObsRefList[z3]+1,o->m_waObsShowList[z2]+1);
1319
 
                                                        else if (o->m_waObsRefList.GetSize() > 1)
1320
 
                                                                sprintf(buf,"RM%d",o->m_waObsRefList[z3]+1);
1321
 
                                                        else 
1322
 
                                                                sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
1323
 
 
1324
 
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z3*o->m_waObsShowList.GetSize()+z2,buf);
1325
 
                                                }
1326
 
                                        }
1327
 
                                } else if (o->m_bDecompType)
1328
 
                                {
1329
 
                                        m = (CMolecule*)g_oaMolecules[g_iFixMol];
1330
 
                                        o->m_waDecompTypeRefOffs.SetSize(g_iGesVirtAtomCount);
1331
 
                                        for (z3=0;z3<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z3++)
1332
 
                                        {
1333
 
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z3*2];
1334
 
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1335
 
                                                {
1336
 
                                                        for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1337
 
                                                                if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
1338
 
                                                                        goto _decomptype1;
1339
 
                                                        z3 = o->m_waDecompTypeRefList.GetSize();
1340
 
                                                        o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
1341
 
_decomptype1:
1342
 
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1343
 
                                                        {
1344
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1345
 
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1346
 
                                                                        o->m_waDecompTypeRefOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1347
 
                                                        }
1348
 
                                                }
1349
 
                                        }
1350
 
 
1351
 
                                        if (o->m_bOthers)
1352
 
                                                m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
1353
 
                                                        else m = (CMolecule*)g_oaMolecules[g_iFixMol];
1354
 
                                        o->m_waDecompTypeObsOffs.SetSize(g_iGesVirtAtomCount);
1355
 
                                        for (z6=0;z6<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z6++)
1356
 
                                        {
1357
 
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z6*2+1];
1358
 
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1359
 
                                                {
1360
 
                                                        for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
1361
 
                                                                if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
1362
 
                                                                        goto _decomptype2;
1363
 
                                                        z3 = o->m_waDecompTypeObsList.GetSize();
1364
 
                                                        o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
1365
 
_decomptype2:
1366
 
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1367
 
                                                        {
1368
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1369
 
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1370
 
                                                                        o->m_waDecompTypeObsOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1371
 
                                                        }
1372
 
                                                }
1373
 
                                        }
1374
 
 
1375
 
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
1376
 
 
1377
 
        /*                              try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1378
 
                                        if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1379
 
                                        
1380
 
                                        for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
1381
 
                                        {
1382
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1383
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1384
 
                                        }*/
1385
 
 
1386
 
                                        for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1387
 
                                        {
1388
 
                                                for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
1389
 
                                                {
1390
 
                                                        sprintf(buf,"%s-%s",((CAtom*)g_oaAtoms[o->m_waDecompTypeRefList[z3]])->m_sName,((CAtom*)g_oaAtoms[o->m_waDecompTypeObsList[z2]])->m_sName);
1391
 
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waDecompTypeObsList.GetSize()+z2,buf);
1392
 
                                                }
1393
 
                                        }
1394
 
                                } else o->m_pRDF[z0]->m_pRDF->Create();
1395
 
 
1396
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1397
 
                                {
1398
 
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1399
 
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1400
 
                                        
1401
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1402
 
                                        {
1403
 
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1404
 
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1405
 
                                        }
1406
 
                                } else
1407
 
                                {
1408
 
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1409
 
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1410
 
                                        
1411
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1412
 
                                        {
1413
 
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1414
 
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1415
 
                                        }
1416
 
                                }
1417
 
                                if (o->m_bTimeDev)
1418
 
                                {
1419
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1420
 
                                        {
1421
 
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[1]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1422
 
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1423
 
                                                
1424
 
                                                sprintf(buf,"rdf_timedev_%s%s.csv",o->m_pRDF[z0]->m_sName,multibuf);
1425
 
                                                o->m_pRDF[z0]->m_fDist[0] = OpenFileWrite(buf,true);
1426
 
                                        } else
1427
 
                                        {
1428
 
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1429
 
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1430
 
                                                
1431
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1432
 
                                                {
1433
 
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1434
 
                                                        o->m_pRDF[z0]->m_fDist[z2] = OpenFileWrite(buf,true);
1435
 
                                                }
1436
 
                                        }
1437
 
                                        if (o->m_bCombinedPlot)
1438
 
                                        {
1439
 
//                                              mprintf("Combined: Reflist %d, Showlist %d, Combinations %d, Steps %d.\n",o->m_waSaveRefList.GetSize(),o->m_waSaveShowList.GetSize(),o->m_pRDF[z0]->m_iCombinations,g_iTrajSteps);
1440
 
 
1441
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = NULL; }
1442
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1443
 
                                                
1444
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetTitle("Combined distance time development/histogram");
1445
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSubTitle(o->m_pRDF[z0]->m_sShortName);
1446
 
                                //              smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
1447
 
                                //              sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[0]];
1448
 
                                //              o->m_pRDF[z0]->BuildAtomList(smfix,sm,sm,&templa);
1449
 
                                                mprintf("    Trying to reserve %s of memory for combined plot...\n",FormatBytes((double)sizeof(double)*o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pRDF[z0]->m_iCombinations*g_iTrajSteps/g_iStride));
1450
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1451
 
                                                {
1452
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1453
 
                                                        {
1454
 
                        /*                                      for (z4=0;z4<templa.GetSize()/2;z4++)
1455
 
                                                                {
1456
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1457
 
                                                                        sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2]]]])->m_sName,g_waAtomMolNumber[templa[z4*2]]+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2+1]]]])->m_sName,g_waAtomMolNumber[templa[z4*2+1]]+1);
1458
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1459
 
                                                                        if (g_iTrajSteps != -1)
1460
 
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *g_iTrajSteps);
1461
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *100);
1462
 
                                                                        if (o->m_bCombinedGreyMode)
1463
 
                                                                        {
1464
 
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1465
 
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_iLineColor = ti*0x10000 + ti*0x100 + ti;
1466
 
                                                                        }
1467
 
                                                                }*/
1468
 
 
1469
 
                                                                ti2 = 0;
1470
 
                                                                for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
1471
 
                                                                {
1472
 
                                                                        g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
1473
 
                                                                        for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
1474
 
                                                                        {
1475
 
                                                                                a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
1476
 
                                                                                for (z1a=0;z1a<a1->GetSize();z1a++)
1477
 
                                                                                {
1478
 
                                                                                        g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
1479
 
                                                                                        for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
1480
 
                                                                                        {
1481
 
                                                                                                a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
1482
 
                                                                                                for (z2a=0;z2a<a2->GetSize();z2a++)
1483
 
                                                                                                {
1484
 
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1485
 
                                                                                                        if (o->m_bOthers)
1486
 
                                                                                                                sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1487
 
                                                                                                                        else sprintf(buf,"%s[%d] %s%d - %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1488
 
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1489
 
                                                                                                        if (g_iTrajSteps != -1)
1490
 
                                                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *g_iTrajSteps/g_iStride);
1491
 
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *100);
1492
 
                                                                                                        if (o->m_bCombinedGreyMode)
1493
 
                                                                                                        {
1494
 
                                                                                                                ti = o->m_iCombinedGreyMin + ((ti2+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1495
 
                                                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1496
 
                                                                                                        }
1497
 
                                                                                                        ti2++;
1498
 
/*                                                                                                      if (o->m_pRDF[z0]->m_iRefOrSec[0])
1499
 
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1500
 
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1501
 
                                                                                                        if (o->m_pRDF[z0]->m_iRefOrSec[1])
1502
 
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1503
 
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1504
 
*/                                                                              //                      mprintf("Vector z=%d, z1t=%d, z1a=%d, z2t=%d, z2a=%d.\n",z,z1t,z1a,z2t,z2a);
1505
 
                                                                                                }
1506
 
                                                                                        }
1507
 
                                                                                }
1508
 
                                                                        }
1509
 
                                                                }
1510
 
 
1511
 
                                                        }
1512
 
                                                }
1513
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelX("Time [ps] / g(r)");
1514
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelY("Distance [pm]");
1515
 
                                        }
1516
 
                                } // END IF TIMEDEV
1517
 
 
1518
 
                                if (o->m_bTimeDiff)
1519
 
                                        o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
1520
 
 
1521
 
                                if (g_bDeriv)
1522
 
                                        o->m_pRDF[z0]->InitDeriv();
1523
 
 
1524
 
                                if (o->m_pRDF[z0]->m_bCalcSD)
1525
 
                                {
1526
 
                                        mprintf("    Initializing Standard Deviation Engine...\n");
1527
 
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine = new CSDEngine();
1528
 
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes.SetSize(o->m_pRDF[z0]->m_iSDBlocks);
1529
 
                                        mprintf("    Using the following %d trajectory block sizes:",o->m_pRDF[z0]->m_iSDBlocks);
1530
 
                                        tf2 = 0;
1531
 
                                        tf = 3.0;
1532
 
                                        for (z4=0;z4<o->m_pRDF[z0]->m_iSDBlocks;z4++)
1533
 
                                        {
1534
 
                                                if ((z4 % 10) == 0)
1535
 
                                                        mprintf("\n      ");
1536
 
                                                o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) / (exp((o->m_pRDF[z0]->m_iSDBlocks-1.0)*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) * (o->m_pRDF[z0]->m_iSDBlockMax - o->m_pRDF[z0]->m_iSDBlockMin)) + o->m_pRDF[z0]->m_iSDBlockMin;
1537
 
                                                mprintf("%5d",o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]);
1538
 
                                                if (z4 < o->m_pRDF[z0]->m_iSDBlocks-1)
1539
 
                                                        mprintf(", ");
1540
 
                                                                else mprintf(".");
1541
 
                                                tf2 += (g_iTrajSteps/o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
1542
 
                                        }
1543
 
                                        tf2 *= o->m_pRDF[z0]->m_pRDF->m_iResolution * sizeof(double);
1544
 
                                        mprintf("\n    This requires %s of memory.\n\n",FormatBytes(tf2));
1545
 
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine->Init(o->m_pRDF[z0]->m_pRDF->m_iResolution);
1546
 
                                }
1547
 
                        } // END IF RDF
1548
 
 
1549
 
                        if (g_bADF && (o->m_pADF[z0] != NULL))
1550
 
                        {
1551
 
                                mprintf("  Creating ADF...\n");
1552
 
                                o->m_pADF[z0]->m_pADF->m_fMinVal = o->m_pADF[z0]->m_fMinAngle;
1553
 
                                o->m_pADF[z0]->m_pADF->m_fMaxVal = o->m_pADF[z0]->m_fMaxAngle;
1554
 
                                o->m_pADF[z0]->m_pADF->m_iResolution = o->m_pADF[z0]->m_iResolution;
1555
 
                                o->m_pADF[z0]->m_pADF->m_iHistogramRes = o->m_pADF[z0]->m_iHistogramRes;
1556
 
                                if (o->m_pADF[z0]->m_bCosine)
1557
 
                                        o->m_pADF[z0]->m_pADF->SetLabelX("Cos(angle)");
1558
 
                                                else o->m_pADF[z0]->m_pADF->SetLabelX("Angle (degree)");
1559
 
                                o->m_pADF[z0]->m_pADF->SetLabelY("Occurrence");
1560
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1561
 
                                        o->m_pADF[z0]->m_pADF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1562
 
                                                else o->m_pADF[z0]->m_pADF->Create();
1563
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1564
 
                                {
1565
 
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1566
 
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1567
 
                                        
1568
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1569
 
                                        {
1570
 
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1571
 
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1572
 
                                        }
1573
 
                                } else
1574
 
                                {
1575
 
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1576
 
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1577
 
                                        
1578
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1579
 
                                        {
1580
 
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1581
 
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1582
 
                                        }
1583
 
                                }
1584
 
                                if (o->m_bTimeDev)
1585
 
                                {
1586
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1587
 
                                        {
1588
 
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1589
 
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1590
 
                                                
1591
 
                                                sprintf(buf,"adf_timedev_%s%s.csv",o->m_pADF[z0]->m_sName,multibuf);
1592
 
                                                o->m_pADF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1593
 
                                        } else
1594
 
                                        {
1595
 
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1596
 
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1597
 
                                                
1598
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1599
 
                                                {
1600
 
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1601
 
                                                        o->m_pADF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1602
 
                                                }
1603
 
                                        }
1604
 
                                        if (o->m_bCombinedPlot)
1605
 
                                        {
1606
 
                                                try { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = NULL; }
1607
 
                                                if (o->m_pADF[z0]->m_pADF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1608
 
                                                
1609
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetTitle("Combined angle time development/histogram");
1610
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSubTitle(o->m_pADF[z0]->m_sShortName);
1611
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1612
 
                                                {
1613
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1614
 
                                                        {
1615
 
                                                                for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
1616
 
                                                                {
1617
 
                                                                        o->m_pADF[z0]->m_pADF->m_pCombinedPlot->AddDataset();
1618
 
                                                                        if (g_iTrajSteps != -1)
1619
 
                                                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*g_iTrajSteps);
1620
 
                                                                        o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*100);
1621
 
                                                                        if (o->m_bCombinedGreyMode)
1622
 
                                                                        {
1623
 
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pADF[z0]->m_iCombinations+z2*o->m_pADF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1624
 
                                                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1625
 
                                                                        }
1626
 
                                        //                              o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pADF[z0]->m_iCombinations+z4,2.0f);
1627
 
                                                                }
1628
 
                                                        }
1629
 
                                                }
1630
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelX("Time [ps] / ADF(r)");
1631
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelY("Angle [Degree]");
1632
 
                                        }
1633
 
                                } // END IF TIMEDEV
1634
 
 
1635
 
                                if (o->m_bTimeDiff)
1636
 
                                        o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
1637
 
 
1638
 
                                if (g_bDeriv)
1639
 
                                        o->m_pADF[z0]->InitDeriv();
1640
 
                        } // END IF ADF
1641
 
 
1642
 
                        if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
1643
 
                        {
1644
 
                                mprintf("  Creating DipDF...\n");
1645
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMinVal = o->m_pDipDF[z0]->m_fDipoleMin;
1646
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMaxVal = o->m_pDipDF[z0]->m_fDipoleMax;
1647
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iResolution = o->m_pDipDF[z0]->m_iResolution;
1648
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iHistogramRes = o->m_pDipDF[z0]->m_iHistogramRes;
1649
 
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelX("Dipole moment (Debye)");
1650
 
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelY("Occurrence");
1651
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1652
 
                                        o->m_pDipDF[z0]->m_pDipoleDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1653
 
                                                else o->m_pDipDF[z0]->m_pDipoleDF->Create();
1654
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1655
 
                                {
1656
 
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1657
 
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1658
 
                                        
1659
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1660
 
                                        {
1661
 
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1662
 
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1663
 
                                        }
1664
 
                                } else
1665
 
                                {
1666
 
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1667
 
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1668
 
                                        
1669
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1670
 
                                        {
1671
 
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1672
 
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1673
 
                                        }
1674
 
                                }
1675
 
                                if (o->m_bTimeDev)
1676
 
                                {
1677
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1678
 
                                        {
1679
 
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[1]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1680
 
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1681
 
                                                
1682
 
                                                sprintf(buf,"dipole_timedev_%s%s.csv",o->m_pDipDF[z0]->m_sName,multibuf);
1683
 
                                                o->m_pDipDF[z0]->m_fDipole[0] = OpenFileWrite(buf,true);
1684
 
                                        } else
1685
 
                                        {
1686
 
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1687
 
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1688
 
                                                
1689
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1690
 
                                                {
1691
 
                                                        sprintf(buf,"dipole_timedev_%s_ref%d%s.csv",o->m_pDipDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1692
 
                                                        o->m_pDipDF[z0]->m_fDipole[z2] = OpenFileWrite(buf,true);
1693
 
                                                }
1694
 
                                        }
1695
 
                                        if (o->m_bCombinedPlot)
1696
 
                                        {
1697
 
                                                try { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = NULL; }
1698
 
                                                if (o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1699
 
                                                
1700
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetTitle("Combined dipole moment time development/histogram");
1701
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSubTitle(o->m_pDipDF[z0]->m_sShortName);
1702
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1703
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1704
 
                                                        {
1705
 
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->AddDataset();
1706
 
                                                                if (g_iTrajSteps != -1)
1707
 
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*g_iTrajSteps);
1708
 
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*100);
1709
 
                                                                if (o->m_bCombinedGreyMode)
1710
 
                                                                {
1711
 
                                                                        ti = o->m_iCombinedGreyMin + ((z3+z2*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1712
 
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1713
 
                                                                }
1714
 
                                                        }
1715
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelX("Time [ps] / DipDF(r)");
1716
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelY("Dipole moment [Debye]");
1717
 
                                        }
1718
 
                                } // END IF TIMEDEV
1719
 
 
1720
 
                                if (o->m_bTimeDiff)
1721
 
                                        o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
1722
 
 
1723
 
                                if (g_bDeriv)
1724
 
                                        o->m_pDipDF[z0]->InitDeriv();
1725
 
                        } // END IF DIPOLE
1726
 
 
1727
 
                        if (g_bVDF && (o->m_pVDF[z0] != NULL))
1728
 
                        {
1729
 
                                mprintf("  Creating VDF...\n");
1730
 
                                o->m_pVDF[z0]->m_pVDF->m_fMinVal = o->m_pVDF[z0]->m_fMinSpeed;
1731
 
                                o->m_pVDF[z0]->m_pVDF->m_fMaxVal = o->m_pVDF[z0]->m_fMaxSpeed;
1732
 
                                o->m_pVDF[z0]->m_pVDF->m_iResolution = o->m_pVDF[z0]->m_iResolution;
1733
 
                                o->m_pVDF[z0]->m_pVDF->m_iHistogramRes = o->m_pVDF[z0]->m_iHistogramRes;
1734
 
                                o->m_pVDF[z0]->m_pVDF->SetLabelX("Velocity [pm/ps]");
1735
 
                                o->m_pVDF[z0]->m_pVDF->SetLabelY("Occurrence");
1736
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1737
 
                                        o->m_pVDF[z0]->m_pVDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1738
 
                                                else o->m_pVDF[z0]->m_pVDF->Create();
1739
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1740
 
                                {
1741
 
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1742
 
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1743
 
                                        
1744
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1745
 
                                        {
1746
 
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1747
 
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1748
 
                                        }
1749
 
                                } else
1750
 
                                {
1751
 
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1752
 
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1753
 
                                        
1754
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1755
 
                                        {
1756
 
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1757
 
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1758
 
                                        }
1759
 
                                }
1760
 
                                if (o->m_bTimeDev)
1761
 
                                {
1762
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1763
 
                                        {
1764
 
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[1]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1765
 
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1766
 
                                                
1767
 
                                                sprintf(buf,"vdf_timedev_%s%s.csv",o->m_pVDF[z0]->m_sName,multibuf);
1768
 
                                                o->m_pVDF[z0]->m_fSpeed[0] = OpenFileWrite(buf,true);
1769
 
                                        } else
1770
 
                                        {
1771
 
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1772
 
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1773
 
                                                
1774
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1775
 
                                                {
1776
 
                                                        sprintf(buf,"vdf_timedev_%s_ref%d%s.csv",o->m_pVDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1777
 
                                                        o->m_pVDF[z0]->m_fSpeed[z2] = OpenFileWrite(buf,true);
1778
 
                                                }
1779
 
                                        }
1780
 
                                        if (o->m_bCombinedPlot)
1781
 
                                        {
1782
 
                                                try { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = NULL; }
1783
 
                                                if (o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1784
 
                                                
1785
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetTitle("Combined velocity time development/histogram");
1786
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSubTitle(o->m_pVDF[z0]->m_sShortName);
1787
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1788
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1789
 
                                                                for (z4=0;z4<o->m_pVDF[z0]->m_iCombinations;z4++)
1790
 
                                                                {
1791
 
                                                                        o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->AddDataset();
1792
 
                                                                        if (g_iTrajSteps != -1)
1793
 
                                                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*g_iTrajSteps);
1794
 
                                                                        o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*100);
1795
 
                                                                        if (o->m_bCombinedGreyMode)
1796
 
                                                                        {
1797
 
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pVDF[z0]->m_iCombinations+z2*o->m_pVDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1798
 
                                                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1799
 
                                                                        }
1800
 
//                                                                      o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
1801
 
                                                                }
1802
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelX("Time [ps] / VDF(r)");
1803
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelY("Velocity [pm/ps]");
1804
 
                                        }
1805
 
                                } // END IF TIMEDEV
1806
 
 
1807
 
                                if (o->m_bTimeDiff)
1808
 
                                        o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
1809
 
 
1810
 
                                if (g_bDeriv)
1811
 
                                        o->m_pVDF[z0]->InitDeriv();
1812
 
                        } // END IF VDF
1813
 
 
1814
 
                        if (g_bDDF && (o->m_pDDF[z0] != NULL))
1815
 
                        {
1816
 
                                mprintf("  Creating DDF...\n");
1817
 
                                o->m_pDDF[z0]->m_pDDF->m_fMinVal = o->m_pDDF[z0]->m_fMinAngle;
1818
 
                                o->m_pDDF[z0]->m_pDDF->m_fMaxVal = o->m_pDDF[z0]->m_fMaxAngle;
1819
 
                                o->m_pDDF[z0]->m_pDDF->m_iResolution = o->m_pDDF[z0]->m_iResolution;
1820
 
                                o->m_pDDF[z0]->m_pDDF->m_iHistogramRes = o->m_pDDF[z0]->m_iHistogramRes;
1821
 
                                if (o->m_pDDF[z0]->m_bCosine)
1822
 
                                        o->m_pDDF[z0]->m_pDDF->SetLabelX("Cos(Dihedral Angle)");
1823
 
                                                else o->m_pDDF[z0]->m_pDDF->SetLabelX("Dihedral Angle (Degree)");
1824
 
                                o->m_pDDF[z0]->m_pDDF->SetLabelY("Occurrence");
1825
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1826
 
                                        o->m_pDDF[z0]->m_pDDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1827
 
                                                else o->m_pDDF[z0]->m_pDDF->Create();
1828
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1829
 
                                {
1830
 
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1831
 
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1832
 
                                        
1833
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1834
 
                                        {
1835
 
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1836
 
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1837
 
                                        }
1838
 
                                } else
1839
 
                                {
1840
 
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1841
 
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1842
 
                                        
1843
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1844
 
                                        {
1845
 
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1846
 
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1847
 
                                        }
1848
 
                                                
1849
 
                                        if (o->m_pDDF[z0]->m_bRotate)
1850
 
                                        {
1851
 
                                                for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
1852
 
                                                {
1853
 
                                                        o->m_pDDF[z0]->m_faLastData.Add(0);
1854
 
                                                        o->m_pDDF[z0]->m_laRotation.Add(0);
1855
 
                                                }
1856
 
                                        }
1857
 
                                }
1858
 
                                if (o->m_bTimeDev)
1859
 
                                {
1860
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1861
 
                                        {
1862
 
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1863
 
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1864
 
                                                
1865
 
                                                sprintf(buf,"ddf_timedev_%s%s.csv",o->m_pDDF[z0]->m_sName,multibuf);
1866
 
                                                o->m_pDDF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1867
 
                                        } else
1868
 
                                        {
1869
 
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1870
 
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1871
 
                                                
1872
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1873
 
                                                {
1874
 
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1875
 
                                                        o->m_pDDF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1876
 
                                                }
1877
 
                                        }
1878
 
                                        if (o->m_bCombinedPlot)
1879
 
                                        {
1880
 
                                                try { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = NULL; }
1881
 
                                                if (o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1882
 
                                                
1883
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetTitle("Combined dihedral time development/histogram");
1884
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSubTitle(o->m_pDDF[z0]->m_sShortName);
1885
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1886
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1887
 
                                                                for (z4=0;z4<o->m_pDDF[z0]->m_iCombinations;z4++)
1888
 
                                                                {
1889
 
                                                                        o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->AddDataset();
1890
 
                                                                        if (g_iTrajSteps != -1)
1891
 
                                                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*g_iTrajSteps);
1892
 
                                                                        o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*100);
1893
 
                                                                        if (o->m_bCombinedGreyMode)
1894
 
                                                                        {
1895
 
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pDDF[z0]->m_iCombinations+z2*o->m_pDDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1896
 
                                                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1897
 
                                                                        }
1898
 
                                //                                      o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pDDF[z0]->m_iCombinations+z4,2.0f);
1899
 
                                                                }
1900
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelX("Time [ps] / DDF(r)");
1901
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelY("Dihedral [Degree]");
1902
 
                                        }
1903
 
                                } // END IF TIMEDEV
1904
 
 
1905
 
                                if (o->m_bTimeDiff)
1906
 
                                        o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
1907
 
 
1908
 
                                if (g_bDeriv)
1909
 
                                        o->m_pDDF[z0]->InitDeriv();
1910
 
                        } // END IF DDF
1911
 
 
1912
 
                        if (g_bPlDF && (o->m_pPlDF[z0] != NULL))
1913
 
                        {
1914
 
                                mprintf("  Creating PlDF...\n");
1915
 
                                o->m_pPlDF[z0]->m_pPlDF->m_fMinVal = o->m_pPlDF[z0]->m_fMinDist;
1916
 
                                o->m_pPlDF[z0]->m_pPlDF->m_fMaxVal = o->m_pPlDF[z0]->m_fMaxDist;
1917
 
                                o->m_pPlDF[z0]->m_pPlDF->m_iResolution = o->m_pPlDF[z0]->m_iResolution;
1918
 
                                o->m_pPlDF[z0]->m_pPlDF->m_iHistogramRes = o->m_pPlDF[z0]->m_iHistogramRes;
1919
 
                                o->m_pPlDF[z0]->m_pPlDF->SetLabelX("Distance from plane [pm]");
1920
 
                                o->m_pPlDF[z0]->m_pPlDF->SetLabelY("Occurrence");
1921
 
                                o->m_pPlDF[z0]->m_pPlDF->Create();
1922
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1923
 
                                {
1924
 
                                        try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1925
 
                                        if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1926
 
                                        
1927
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1928
 
                                        {
1929
 
                                                try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1930
 
                                                if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1931
 
                                        }
1932
 
                                } else
1933
 
                                {
1934
 
                                        try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1935
 
                                        if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1936
 
                                        
1937
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1938
 
                                        {
1939
 
                                                try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1940
 
                                                if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1941
 
                                        }
1942
 
                                }
1943
 
                        } // END IF PlDF
1944
 
 
1945
 
                        if (g_bLiDF && (o->m_pLiDF[z0] != NULL))
1946
 
                        {
1947
 
                                mprintf("  Creating LiDF...\n");
1948
 
                                o->m_pLiDF[z0]->m_pLiDF->m_fMinVal = o->m_pLiDF[z0]->m_fMinDist;
1949
 
                                o->m_pLiDF[z0]->m_pLiDF->m_fMaxVal = o->m_pLiDF[z0]->m_fMaxDist;
1950
 
                                o->m_pLiDF[z0]->m_pLiDF->m_iResolution = o->m_pLiDF[z0]->m_iResolution;
1951
 
                                o->m_pLiDF[z0]->m_pLiDF->m_iHistogramRes = o->m_pLiDF[z0]->m_iHistogramRes;
1952
 
                                o->m_pLiDF[z0]->m_pLiDF->SetLabelX("Distance from line [pm]");
1953
 
                                o->m_pLiDF[z0]->m_pLiDF->SetLabelY("Occurrence");
1954
 
                                o->m_pLiDF[z0]->m_pLiDF->Create();
1955
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1956
 
                                {
1957
 
                                        try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
1958
 
                                        if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1959
 
                                        
1960
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1961
 
                                        {
1962
 
                                                try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
1963
 
                                                if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1964
 
                                        }
1965
 
                                } else
1966
 
                                {
1967
 
                                        try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
1968
 
                                        if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1969
 
                                        
1970
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1971
 
                                        {
1972
 
                                                try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
1973
 
                                                if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1974
 
                                        }
1975
 
                                }
1976
 
                        } // END IF LiDF
1977
 
 
1978
 
                } // END FOR z0
1979
 
 
1980
 
                if (g_bCDF)
1981
 
                {
1982
 
                        mprintf("  Creating CDF...\n");
1983
 
                        if (g_iCDFChannels == 2)
1984
 
                        {
1985
 
                                try { o->m_pCDF->m_p2DF = new C2DF(); } catch(...) { o->m_pCDF->m_p2DF = NULL; }
1986
 
                                if (o->m_pCDF->m_p2DF == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1987
 
                                
1988
 
                                buf[0] = 0;
1989
 
                                for (z2=0;z2<2;z2++)
1990
 
                                {
1991
 
                                        o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1992
 
                                        switch(g_iObsChannel[z2])
1993
 
                                        {
1994
 
                                                case 0:
1995
 
                                                        strcat(buf,"_rdf");
1996
 
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
1997
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
1998
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
1999
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2000
 
                                                        break;
2001
 
 
2002
 
                                                case 1:
2003
 
                                                        strcat(buf,"_adf");
2004
 
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
2005
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2006
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2007
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2008
 
                                                        break;
2009
 
 
2010
 
                                                case 2:
2011
 
                                                        strcat(buf,"_ddf");
2012
 
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
2013
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2014
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2015
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2016
 
                                                        break;
2017
 
 
2018
 
                                                case 3:
2019
 
                                                        strcat(buf,"_dipole");
2020
 
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2021
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2022
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2023
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2024
 
                                                        break;
2025
 
 
2026
 
                                                case 4:
2027
 
                                                        strcat(buf,"_vdf");
2028
 
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
2029
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2030
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2031
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2032
 
                                                        break;
2033
 
 
2034
 
                                                case 5:
2035
 
                                                        strcat(buf,"_pldf");
2036
 
                                                        strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2037
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2038
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2039
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2040
 
                                                        break;
2041
 
 
2042
 
                                                case 6:
2043
 
                                                        strcat(buf,"_lidf");
2044
 
                                                        strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2045
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2046
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2047
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2048
 
                                                        break;
2049
 
                                        }
2050
 
                                }
2051
 
                                o->m_pCDF->m_p2DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2052
 
                                o->m_pCDF->m_p2DF->Create();
2053
 
                                switch(g_iObsChannel[0])
2054
 
                                {
2055
 
                                        case 0:
2056
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2057
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2058
 
                                                break;
2059
 
                                        case 1:
2060
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2061
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2062
 
                                                break;
2063
 
                                        case 2:
2064
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2065
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2066
 
                                                break;
2067
 
                                        case 3:
2068
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2069
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2070
 
                                                break;
2071
 
                                        case 4:
2072
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2073
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2074
 
                                                break;
2075
 
                                        case 5:
2076
 
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2077
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2078
 
                                                break;
2079
 
                                        case 6:
2080
 
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2081
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
2082
 
                                                break;
2083
 
                                }
2084
 
                                switch(g_iObsChannel[1])
2085
 
                                {
2086
 
                                        case 0:
2087
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2088
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2089
 
                                                break;
2090
 
                                        case 1:
2091
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2092
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2093
 
                                                break;
2094
 
                                        case 2:
2095
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2096
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2097
 
                                                break;
2098
 
                                        case 3:
2099
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2100
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2101
 
                                                break;
2102
 
                                        case 4:
2103
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2104
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2105
 
                                                break;
2106
 
                                        case 5:
2107
 
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2108
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2109
 
                                                break;
2110
 
                                        case 6:
2111
 
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2112
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
2113
 
                                                break;
2114
 
                                }
2115
 
                        } // END IF CHANNELS == 2
2116
 
 
2117
 
                        if (g_iCDFChannels == 3)
2118
 
                        {
2119
 
                                try { o->m_pCDF->m_p3DF = new C3DF(); } catch(...) { o->m_pCDF->m_p3DF = NULL; }
2120
 
                                if (o->m_pCDF->m_p3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2121
 
                                
2122
 
                                buf[0] = 0;
2123
 
                                for (z2=0;z2<g_iCDFChannels;z2++)
2124
 
                                {
2125
 
                                        o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
2126
 
                                        switch(g_iObsChannel[z2])
2127
 
                                        {
2128
 
                                                case 0:
2129
 
                                                        strcat(buf,"_rdf");
2130
 
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
2131
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
2132
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
2133
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2134
 
                                                        break;
2135
 
                                                case 1:
2136
 
                                                        strcat(buf,"_adf");
2137
 
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
2138
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2139
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2140
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2141
 
                                                        break;
2142
 
                                                case 2:
2143
 
                                                        strcat(buf,"_ddf");
2144
 
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
2145
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2146
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2147
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2148
 
                                                        break;
2149
 
                                                case 3:
2150
 
                                                        strcat(buf,"_dipole");
2151
 
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2152
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2153
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2154
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2155
 
                                                        break;
2156
 
                                                case 4:
2157
 
                                                        strcat(buf,"_vdf");
2158
 
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
2159
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2160
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2161
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2162
 
                                                        break;
2163
 
                                                case 5:
2164
 
                                                        strcat(buf,"_pldf");
2165
 
                                                        strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2166
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2167
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2168
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2169
 
                                                        break;
2170
 
                                                case 6:
2171
 
                                                        strcat(buf,"_lidf");
2172
 
                                                        strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2173
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2174
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2175
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2176
 
                                                        break;
2177
 
                                        }
2178
 
                                }
2179
 
                                o->m_pCDF->m_p3DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2180
 
                                o->m_pCDF->m_p3DF->Create();
2181
 
                                switch(g_iObsChannel[0])
2182
 
                                {
2183
 
                                        case 0:
2184
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2185
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2186
 
                                                break;
2187
 
                                        case 1:
2188
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2189
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2190
 
                                                break;
2191
 
                                        case 2:
2192
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2193
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2194
 
                                                break;
2195
 
                                        case 3:
2196
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2197
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2198
 
                                                break;
2199
 
                                        case 4:
2200
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2201
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2202
 
                                                break;
2203
 
                                        case 5:
2204
 
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2205
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2206
 
                                                break;
2207
 
                                        case 6:
2208
 
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2209
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
2210
 
                                                break;
2211
 
                                }
2212
 
                                switch(g_iObsChannel[1])
2213
 
                                {
2214
 
                                        case 0:
2215
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2216
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2217
 
                                                break;
2218
 
                                        case 1:
2219
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2220
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2221
 
                                                break;
2222
 
                                        case 2:
2223
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2224
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2225
 
                                                break;
2226
 
                                        case 3:
2227
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2228
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2229
 
                                                break;
2230
 
                                        case 4:
2231
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2232
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2233
 
                                                break;
2234
 
                                        case 5:
2235
 
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2236
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2237
 
                                                break;
2238
 
                                        case 6:
2239
 
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2240
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
2241
 
                                                break;
2242
 
                                }
2243
 
                                switch(g_iObsChannel[2])
2244
 
                                {
2245
 
                                        case 0:
2246
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
2247
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2248
 
                                                break;
2249
 
                                        case 1:
2250
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
2251
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2252
 
                                                break;
2253
 
                                        case 2:
2254
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
2255
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2256
 
                                                break;
2257
 
                                        case 3:
2258
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
2259
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2260
 
                                                break;
2261
 
                                        case 4:
2262
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
2263
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2264
 
                                                break;
2265
 
                                        case 5:
2266
 
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[2]->m_sShortName);
2267
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2268
 
                                                break;
2269
 
                                        case 6:
2270
 
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[2]->m_sShortName);
2271
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2272
 
                                                break;
2273
 
                                }
2274
 
 
2275
 
                                // Fuer jede C3DF noch die 3 C2DFs erzeugen
2276
 
                                for (z3=0;z3<3;z3++)
2277
 
                                {
2278
 
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3] = new C2DF(); } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3] = NULL; }
2279
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2280
 
                                        
2281
 
                                        buf3[0] = 0;
2282
 
                                        switch(z3)
2283
 
                                        {
2284
 
                                                case 0:
2285
 
                                                        tia[0] = 0;
2286
 
                                                        tia[1] = 1;
2287
 
                                                        break;
2288
 
                                                case 1:
2289
 
                                                        tia[0] = 0;
2290
 
                                                        tia[1] = 2;
2291
 
                                                        break;
2292
 
                                                case 2:
2293
 
                                                        tia[0] = 1;
2294
 
                                                        tia[1] = 2;
2295
 
                                                        break;
2296
 
                                        }
2297
 
                                        for (z2=0;z2<2;z2++)
2298
 
                                        {
2299
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iRes[z2] = o->m_pCDF->m_iResolution[tia[z2]];
2300
 
                                                switch(g_iObsChannel[tia[z2]])
2301
 
                                                {
2302
 
                                                        case 0:
2303
 
                                                                strcat(buf3,"_rdf");
2304
 
                                                                strcat(buf3,o->m_pRDF[tia[z2]]->m_sShortName);
2305
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pRDF[tia[z2]]->m_fMinDist;
2306
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pRDF[tia[z2]]->m_fMaxDist;
2307
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pRDF[tia[z2]]->m_pRDF;
2308
 
                                                                break;
2309
 
                                                        case 1:
2310
 
                                                                strcat(buf3,"_adf");
2311
 
                                                                strcat(buf3,o->m_pADF[tia[z2]]->m_sShortName);
2312
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pADF[tia[z2]]->m_fMinAngle;
2313
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pADF[tia[z2]]->m_fMaxAngle;
2314
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pADF[tia[z2]]->m_pADF;
2315
 
                                                                break;
2316
 
                                                        case 2:
2317
 
                                                                strcat(buf3,"_ddf");
2318
 
                                                                strcat(buf3,o->m_pDDF[tia[z2]]->m_sShortName);
2319
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDDF[tia[z2]]->m_fMinAngle;
2320
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDDF[tia[z2]]->m_fMaxAngle;
2321
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDDF[tia[z2]]->m_pDDF;
2322
 
                                                                break;
2323
 
                                                        case 3:
2324
 
                                                                strcat(buf3,"_dipole");
2325
 
                                                                strcat(buf3,o->m_pDipDF[tia[z2]]->m_sShortName);
2326
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMin;
2327
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMax;
2328
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDipDF[tia[z2]]->m_pDipoleDF;
2329
 
                                                                break;
2330
 
                                                        case 4:
2331
 
                                                                strcat(buf3,"_vdf");
2332
 
                                                                strcat(buf3,o->m_pVDF[tia[z2]]->m_sShortName);
2333
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pVDF[tia[z2]]->m_fMinSpeed;
2334
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pVDF[tia[z2]]->m_fMaxSpeed;
2335
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pVDF[tia[z2]]->m_pVDF;
2336
 
                                                                break;
2337
 
                                                        case 5:
2338
 
                                                                strcat(buf3,"_pldf");
2339
 
                                                                strcat(buf3,o->m_pPlDF[tia[z2]]->m_sShortName);
2340
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pPlDF[tia[z2]]->m_fMinDist;
2341
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pPlDF[tia[z2]]->m_fMaxDist;
2342
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pPlDF[tia[z2]]->m_pPlDF;
2343
 
                                                                break;
2344
 
                                                        case 6:
2345
 
                                                                strcat(buf3,"_lidf");
2346
 
                                                                strcat(buf3,o->m_pLiDF[tia[z2]]->m_sShortName);
2347
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pLiDF[tia[z2]]->m_fMinDist;
2348
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pLiDF[tia[z2]]->m_fMaxDist;
2349
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pLiDF[tia[z2]]->m_pLiDF;
2350
 
                                                                break;
2351
 
                                                }
2352
 
                                        }
2353
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2354
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Create();
2355
 
                                        switch(g_iObsChannel[tia[0]])
2356
 
                                        {
2357
 
                                                case 0:
2358
 
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
2359
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2360
 
                                                        break;
2361
 
                                                case 1:
2362
 
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
2363
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2364
 
                                                        break;
2365
 
                                                case 2:
2366
 
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
2367
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2368
 
                                                        break;
2369
 
                                                case 3:
2370
 
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[0]]->m_sShortName);
2371
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2372
 
                                                        break;
2373
 
                                                case 4:
2374
 
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[0]]->m_sShortName);
2375
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2376
 
                                                        break;
2377
 
                                                case 5:
2378
 
                                                        sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[0]]->m_sShortName);
2379
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2380
 
                                                        break;
2381
 
                                                case 6:
2382
 
                                                        sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[0]]->m_sShortName);
2383
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2384
 
                                                        break;
2385
 
                                        }
2386
 
                                        switch(g_iObsChannel[tia[1]])
2387
 
                                        {
2388
 
                                                case 0:
2389
 
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
2390
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2391
 
                                                        break;
2392
 
                                                case 1:
2393
 
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
2394
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2395
 
                                                        break;
2396
 
                                                case 2:
2397
 
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
2398
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2399
 
                                                        break;
2400
 
                                                case 3:
2401
 
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[1]]->m_sShortName);
2402
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2403
 
                                                        break;
2404
 
                                                case 4:
2405
 
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[1]]->m_sShortName);
2406
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2407
 
                                                        break;
2408
 
                                                case 5:
2409
 
                                                        sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[1]]->m_sShortName);
2410
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2411
 
                                                        break;
2412
 
                                                case 6:
2413
 
                                                        sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[1]]->m_sShortName);
2414
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2415
 
                                                        break;
2416
 
                                        }
2417
 
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = NULL; }
2418
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2419
 
                                        
2420
 
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName,buf3);
2421
 
                                        sprintf(buf3,"cdf_2");
2422
 
                                        strcat(buf3,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName);
2423
 
 
2424
 
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = NULL; }
2425
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2426
 
                                        
2427
 
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
2428
 
                                } // END FOR z3
2429
 
                        } // END IF CHANNELS == 3
2430
 
 
2431
 
                        try { o->m_pCDF->m_sShortName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sShortName = NULL; }
2432
 
                        if (o->m_pCDF->m_sShortName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2433
 
                        
2434
 
                        strcpy(o->m_pCDF->m_sShortName,buf);
2435
 
                        sprintf(buf,"cdf_%d",g_iCDFChannels);
2436
 
                        strcat(buf,o->m_pCDF->m_sShortName);
2437
 
 
2438
 
                        try { o->m_pCDF->m_sName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sName = NULL; }
2439
 
                        if (o->m_pCDF->m_sName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2440
 
                        
2441
 
                        strcpy(o->m_pCDF->m_sName,buf);
2442
 
                        if (o->m_pCDF->m_bDumpDat)
2443
 
                        {
2444
 
                                sprintf(buf,"cdfdump_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2445
 
                                o->m_pCDF->m_fDump = OpenFileWrite(buf,true);
2446
 
                                mfprintf(o->m_pCDF->m_fDump,"#  step;  RM;  OM1;  OM2;  channels\n");
2447
 
                        }
2448
 
                        if (o->m_bTimeDev)
2449
 
                        {
2450
 
                                if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
2451
 
                                {
2452
 
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[1]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2453
 
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2454
 
                                        
2455
 
                                        sprintf(buf,"cdf_timedev_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2456
 
                                        o->m_pCDF->m_fTimeDev[0] = OpenFileWrite(buf,true);
2457
 
                                } else
2458
 
                                {
2459
 
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2460
 
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2461
 
                                        
2462
 
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2463
 
                                        {
2464
 
                                                sprintf(buf,"cdf_timedev_%dd%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
2465
 
                                                o->m_pCDF->m_fTimeDev[z2] = OpenFileWrite(buf,true);
2466
 
                                        }
2467
 
                                }
2468
 
                                if (o->m_pCDF->m_bTDAnimation)
2469
 
                                {
2470
 
                                        try { o->m_pCDF->m_pTDAPlot = new CGrace(); } catch(...) { o->m_pCDF->m_pTDAPlot = NULL; }
2471
 
                                        if (o->m_pCDF->m_pTDAPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2472
 
                                        
2473
 
                                        o->m_pCDF->m_pTDAPlot->SetTitle("CDF Time Development");
2474
 
                                        o->m_pCDF->m_pTDAPlot->SetSubTitle(&o->m_pCDF->m_sShortName[1]);
2475
 
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2476
 
                                        {
2477
 
                                                for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
2478
 
                                                {
2479
 
                                                        for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
2480
 
                                                        {
2481
 
                                                                o->m_pCDF->m_pTDAPlot->AddDataset();
2482
 
                                                                if (g_iTrajSteps != -1)
2483
 
                                                                        o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*g_iTrajSteps);
2484
 
                                                                o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*100);
2485
 
                                                        }
2486
 
                                                }
2487
 
                                        }
2488
 
                                        o->m_pCDF->m_pTDAPlot->SetRangeX(o->m_pCDF->m_p2DF->m_fMinVal[0],o->m_pCDF->m_p2DF->m_fMaxVal[0]);
2489
 
                                        o->m_pCDF->m_pTDAPlot->SetRangeY(o->m_pCDF->m_p2DF->m_fMinVal[1],o->m_pCDF->m_p2DF->m_fMaxVal[1]);
2490
 
                                        o->m_pCDF->m_pTDAPlot->MakeTicks();
2491
 
                                        o->m_pCDF->m_pTDAPlot->SetLabelX(o->m_pCDF->m_p2DF->m_sLabelX);
2492
 
                                        o->m_pCDF->m_pTDAPlot->SetLabelY(o->m_pCDF->m_p2DF->m_sLabelY);
2493
 
                                }
2494
 
                        }
2495
 
                } // END IF CDF
2496
 
 
2497
 
                if (g_bVACF)
2498
 
                {
2499
 
                        mprintf("  Creating VACF...\n");
2500
 
                        o->m_pVACF->Create();
2501
 
                        if (g_bVACFCacheMode)
2502
 
                        {
2503
 
                                mprintf("    VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes*g_iTrajSteps*3.1*sizeof(float)));
2504
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
2505
 
                                {
2506
 
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2507
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2508
 
                                        
2509
 
                                        if (g_iTrajSteps != -1)
2510
 
                                        {
2511
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
2512
 
                                                ptfa->SetGrow((long)(g_iTrajSteps*0.1));
2513
 
                                        } else ptfa->SetGrow(1000);
2514
 
                                        o->m_pVACF->m_oaCache.Add(ptfa);
2515
 
                                }
2516
 
                        } else
2517
 
                        {
2518
 
                                if (o->m_pVACF->m_iSize > g_iStepHistory)
2519
 
                                        g_iStepHistory = o->m_pVACF->m_iSize;
2520
 
                        }
2521
 
                }
2522
 
 
2523
 
/*              if (g_bDipACF)
2524
 
                {
2525
 
                        mprintf("  Creating DipACF...\n");
2526
 
                        o->m_pDipACF->Create();
2527
 
                }*/
2528
 
 
2529
 
                if (g_bMSD)
2530
 
                {
2531
 
                        mprintf("  Creating MSD...\n");
2532
 
                        o->m_pMSD->m_pMSD->m_fMinVal = 0.0f;
2533
 
                        o->m_pMSD->m_pMSD->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength*g_iStride/1000.0;
2534
 
                        o->m_pMSD->m_pMSD->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2535
 
                        o->m_pMSD->m_pMSD->Create();
2536
 
                        if (g_bMSDCacheMode)
2537
 
                        {
2538
 
                                mprintf("    MSD Cache: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
2539
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2540
 
                                {
2541
 
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2542
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2543
 
                                        
2544
 
                                        if (g_iTrajSteps != -1)
2545
 
                                        {
2546
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.1));
2547
 
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.1));
2548
 
                                        } else ptfa->SetGrow(1000);
2549
 
                                        o->m_pMSD->m_oaCache.Add(ptfa);
2550
 
                                }
2551
 
                                if (o->m_pMSD->m_bSplit)
2552
 
                                {
2553
 
                                        mprintf("    MSD Split: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride*sizeof(double)));
2554
 
                                        try { o->m_pMSD->m_pSplitMSD = new CAF*[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms]; } catch(...) { o->m_pMSD->m_pSplitMSD = NULL; }
2555
 
                                        if (o->m_pMSD->m_pSplitMSD == NULL) NewException((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*sizeof(CAF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2556
 
                                        
2557
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2558
 
                                        {
2559
 
                                                try { o->m_pMSD->m_pSplitMSD[z2] = new CAF(); } catch(...) { o->m_pMSD->m_pSplitMSD[z2] = NULL; }
2560
 
                                                if (o->m_pMSD->m_pSplitMSD[z2] == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2561
 
                                                
2562
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMinVal = 0.0f;
2563
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength/1000.0;
2564
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2565
 
                                                o->m_pMSD->m_pSplitMSD[z2]->Create();
2566
 
                                        }
2567
 
                                }
2568
 
                        } else
2569
 
                        {
2570
 
                                if (!g_bMSDCacheMode)
2571
 
                                {
2572
 
                                        if (o->m_pMSD->m_iResolution > g_iStepHistory)
2573
 
                                                g_iStepHistory = o->m_pMSD->m_iResolution;
2574
 
                                }
2575
 
                        }
2576
 
                }
2577
 
 
2578
 
                if (g_bRevSDF)
2579
 
                {
2580
 
                        mprintf("  Creating Pseudo SDF...\n");
2581
 
                        o->m_pRevSDF->m_p2DF->m_fMinVal[0] = -o->m_pRevSDF->m_fRadius;
2582
 
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[0] = o->m_pRevSDF->m_fRadius;
2583
 
                        o->m_pRevSDF->m_p2DF->m_fMinVal[1] = -o->m_pRevSDF->m_fRadius;
2584
 
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[1] = o->m_pRevSDF->m_fRadius;
2585
 
                        o->m_pRevSDF->m_p2DF->m_iRes[0] = o->m_pRevSDF->m_iResolution;
2586
 
                        o->m_pRevSDF->m_p2DF->m_iRes[1] = o->m_pRevSDF->m_iResolution;
2587
 
                        o->m_pRevSDF->m_p2DF->SetLabelX("X [pm]");
2588
 
                        o->m_pRevSDF->m_p2DF->SetLabelY("Y [pm]");
2589
 
                        o->m_pRevSDF->m_p2DF->m_iHistogramRes = o->m_pRevSDF->m_iHistogramRes;
2590
 
                        o->m_pRevSDF->m_p2DF->Create();
2591
 
 
2592
 
                        try { o->m_pRevSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pRevSDF->m_vaData = NULL; }
2593
 
                        if (o->m_pRevSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2594
 
                }
2595
 
        }
2596
 
 
2597
 
        if (g_bBondACF)
2598
 
        {
2599
 
                mprintf("  Creating BondACF...\n");
2600
 
                for (z=0;z<g_oaSingleMolecules.GetSize();z++)
2601
 
                {
2602
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z];
2603
 
                        for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
2604
 
                        {
2605
 
                                bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
2606
 
                                for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
2607
 
                                {
2608
 
                                        if (g_iTrajSteps != -1)
2609
 
                                        {
2610
 
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetMaxSize(g_iTrajSteps);
2611
 
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(g_iTrajSteps/10);
2612
 
                                        } else ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(10000);
2613
 
                                }
2614
 
                        }
2615
 
                }
2616
 
        }
2617
 
 
2618
 
        if (g_bClusterAnalysis)
2619
 
        {
2620
 
                mprintf("  Creating Cluster Analysis...\n");
2621
 
                g_pClusterAnalysis->Create();
2622
 
        }
2623
 
 
2624
 
        if (g_bFESA)
2625
 
        {
2626
 
                mprintf("  Creating FES Analysis...\n");
2627
 
                g_pFESA->Create();
2628
 
        }
2629
 
 
2630
 
        if (g_bMicroHet)
2631
 
        {
2632
 
                mprintf("  Creating Microheterogeneity Analysis...\n");
2633
 
                g_pMicroHet->Create();
2634
 
        }
2635
 
 
2636
 
        if (g_bThermo)
2637
 
        {
2638
 
                mprintf("  Creating Thermodynamic Analysis...\n");
2639
 
                g_pThermoAnalysis->Create();
2640
 
        }
2641
 
 
2642
 
        if (g_iRefSystemDim == 3) 
2643
 
                g_pRefMol.SetSize(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
2644
 
        if ((g_iRefSystemDim == 3) && !g_bMiddleAvg) // Einfach das erstbeste Molekuel als Referenz nehmen
2645
 
        {
2646
 
                mprintf("Creating reference molecule from first time step...");
2647
 
                g_TimeStep.CalcCenters();
2648
 
                vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2649
 
                vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
2650
 
                vec3 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
2651
 
                vec2 -= vec1;
2652
 
                vec3 -= vec1;
2653
 
                mat.MatUltra(vec2,vec3);
2654
 
                cc = 0;
2655
 
                // Jeden Atomtyp des Zielmolekuels durchgehen
2656
 
                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
2657
 
                {
2658
 
                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
2659
 
                        {
2660
 
                                vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[z3])->GetAt(z4)];
2661
 
                                vec2 -= vec1;
2662
 
                                g_pRefMol[cc] = mat * vec2;
2663
 
                                cc++;
2664
 
                        }
2665
 
                }
2666
 
                mprintf("Done.\n");
2667
 
        } // Ende Referenzbestimmung
2668
 
 
2669
 
        if (g_iSwapAtoms)
2670
 
        {
2671
 
                mprintf("Creating Reference Molecule Swap Matrix...\n");
2672
 
 
2673
 
                try { pSwapMatrix = new unsigned int[((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes]; } catch(...) { pSwapMatrix = NULL; }
2674
 
                if (pSwapMatrix == NULL) NewException((double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*sizeof(unsigned int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2675
 
                
2676
 
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes;z++)
2677
 
                        pSwapMatrix[z] = 0;
2678
 
        }
2679
 
 
2680
 
        g_iCurrentTimeStep = -1;
2681
 
        g_iNextTimeStep = -1;
2682
 
        g_iLastTimeStep = -1;
2683
 
 
2684
 
        try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
2685
 
        if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2686
 
 
2687
 
        if ((g_bSaveRefEnv) && (g_iNbhMode == 3) && (!g_bStreamInput))
2688
 
        {
2689
 
                mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
2690
 
 
2691
 
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
2692
 
                if (g_fPos == NULL)
2693
 
                {
2694
 
                        eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
2695
 
                        return 0;
2696
 
                }
2697
 
                g_iSteps = 0; // Der Zaehler der Zeitschritte
2698
 
                if (g_iScanNbhStart != 0)
2699
 
                {
2700
 
                        mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
2701
 
                        mprintf(WHITE,"  [");
2702
 
                        for (z=0;z<g_iScanNbhStart;z++)
2703
 
                        {
2704
 
                                if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
2705
 
                                        mprintf(WHITE,"#");
2706
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
2707
 
                                        break;
2708
 
                        }
2709
 
                        mprintf(WHITE,"]\n");
2710
 
                }
2711
 
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2712
 
                {
2713
 
                        for (z=0;z<(g_iScanNbhStride-1);z++)
2714
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
2715
 
                                        goto _endnbs;
2716
 
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
2717
 
                                goto _endnbs;
2718
 
                        if (g_TimeStep.m_iGesAtomCount == 0)
2719
 
                                goto _endnbs;
2720
 
//                      g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
2721
 
//                      g_TimeStep.UniteMolecules();
2722
 
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2723
 
                        g_TimeStep.CalcCenters();
2724
 
        
2725
 
                        if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
2726
 
                        {
2727
 
                                if ((g_iSteps % (200*g_iScanNbhStride)) == 0) 
2728
 
                                        mprintf("\nStep %6d...",g_iSteps);
2729
 
                                                else mprintf(".");
2730
 
                        }
2731
 
        
2732
 
                        g_iSteps+=g_iScanNbhStride;
2733
 
        
2734
 
//                      vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2735
 
        
2736
 
//                      g_TimeStep.CenterPos(vec1);
2737
 
        
2738
 
//                      if (g_bFold)
2739
 
//                              g_TimeStep.FoldMolecules();
2740
 
 
2741
 
//                      for (z=0;z<g_oaNbSearches.GetSize();z++)
2742
 
                        g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
2743
 
 
2744
 
                        if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
2745
 
                                break;
2746
 
                }
2747
 
                _endnbs:
2748
 
 
2749
 
                fclose(g_fPos);
2750
 
                mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
2751
 
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2752
 
                {
2753
 
                        mprintf(YELLOW,"\n*** Choose Neighbors\n");
2754
 
//                      nbset = (CNbSet*)g_oaNbSearches[z0];
2755
 
                        // Sort Neighbors after time they have been neighbors
2756
 
                        for (z=0;z<g_pNbSet->m_oaConditionGroups.GetSize();z++)
2757
 
                        {
2758
 
                                if (g_pNbSet->m_oaConditionGroups[z] == NULL)
2759
 
                                        continue;
2760
 
                                cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
2761
 
 
2762
 
                                try { tpi = new int[((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()]; } catch(...) { tpi = NULL; }
2763
 
                                if (tpi == NULL) NewException((double)((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()*sizeof(int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2764
 
                                
2765
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2766
 
                                {
2767
 
                                        cg->m_bAlwaysTrue[z2] = false;
2768
 
                                        tpi[z2] = -1;
2769
 
                                }
2770
 
                                ti3 = 0;
2771
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2772
 
                                {
2773
 
                                        ti = 0;
2774
 
                                        for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
2775
 
                                        {
2776
 
                                                for (z4=0;z4<z2;z4++)
2777
 
                                                        if (tpi[z4] == z3)
2778
 
                                                                goto _nbhave;
2779
 
                                                if (cg->m_iPassCounter[z3] > ti)
2780
 
                                                {
2781
 
                                                        ti = cg->m_iPassCounter[z3];
2782
 
                                                        ti2 = z3;
2783
 
                                                }
2784
 
_nbhave:;
2785
 
                                        }
2786
 
                                        if (ti == 0)
2787
 
                                                break;
2788
 
                                        ti3++;
2789
 
                                        tpi[z2] = ti2;
2790
 
                                }
2791
 
                                mprintf(WHITE,"\n  Molecule type %s. %d neighbors found in total:\n",((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2792
 
                                for (z2=0;z2<ti3;z2++)
2793
 
                                        mprintf("    %2d.) Molecule %3d (%8.4f percent of the time, %d hits)\n",z2+1,tpi[z2]+1,((double)cg->m_iPassCounter[tpi[z2]])*g_iScanNbhStride/g_iSteps*100.0,cg->m_iPassCounter[tpi[z2]]);
2794
 
 
2795
 
                                if (ti3 != 0)
2796
 
                                {
2797
 
                                        z3 = AskUnsignedInteger("\nUse how many of the frequentiest neighbors for molecule %s? [%d] ",ti3,((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2798
 
                                        for (z2=0;z2<z3;z2++)
2799
 
                                                cg->m_bAlwaysTrue[tpi[z2]] = true;
2800
 
                                }
2801
 
 
2802
 
                                delete[] tpi;
2803
 
                                cg->m_bInactive = true;
2804
 
                        }
2805
 
                }
2806
 
                mprintf("\n");
2807
 
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2808
 
                if (g_bSaveRefWithEnv)
2809
 
                {
2810
 
                        mprintf("Adding reference molecule to neighborhood...\n");
2811
 
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
2812
 
                }
2813
 
 
2814
 
                g_pNbSet->Reset();
2815
 
                g_pNbSet->Dump();
2816
 
        }
2817
 
 
2818
 
        if (g_bVFDF)
2819
 
        {
2820
 
                g_iVFCorrCount = 0;
2821
 
                for (z=0;z<g_oaMolecules.GetSize();z++)
2822
 
                {
2823
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
2824
 
                        {
2825
 
                                sprintf(buf,"vfcorr_%s_%s%s.dat",((CMolecule*)g_oaMolecules[z])->m_sName,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[z])->m_baAtomIndex[z2]])->m_sName,multibuf);
2826
 
//                              FreeFileName(buf);
2827
 
                                g_fVFCorr[g_iVFCorrCount] = OpenFileWrite(buf,true);
2828
 
                                g_iVFCorrCount++;
2829
 
                        }
2830
 
                }
2831
 
        }
2832
 
 
2833
 
        if (g_bReact)
2834
 
        {
2835
 
                g_pReact->Create();
2836
 
                g_pReact->InitMolecules(&g_TimeStep);
2837
 
        }
2838
 
 
2839
 
        if (g_bSaveRefEnv)
2840
 
        {
2841
 
                mprintf("\n");
2842
 
                sprintf(g_sRefEnv,"refenv_%s.%d.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1);
2843
 
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
2844
 
                        if (g_pNbAll->m_waMolCount[z] != 0)
2845
 
                        {
2846
 
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2847
 
                                strcat(g_sRefEnv,buf2);
2848
 
                        }*/
2849
 
/*              if (!g_bDynamicNeighbor)
2850
 
                        strcat(g_sRefEnv,"static.");
2851
 
                if (g_bRefEnvCenter)
2852
 
                        strcat(g_sRefEnv,"center.");
2853
 
                if (g_bRefEnvFix)
2854
 
                        strcat(g_sRefEnv,"fix.");
2855
 
                if (g_bScanNeighbors)
2856
 
                        strcat(g_sRefEnv,"scannb.");*/
2857
 
                strcat(g_sRefEnv,multibuf);
2858
 
                strcat(g_sRefEnv,"xyz");
2859
 
                mprintf(">>> Saving reference environment as %s\n",g_sRefEnv);
2860
 
//              FreeFileName(g_sRefEnv);
2861
 
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2862
 
                mprintf("\n");
2863
 
        }
2864
 
 
2865
 
        if (g_bCutCluster)
2866
 
        {
2867
 
                mprintf("\n");
2868
 
                sprintf(g_sRefEnv,"cluster_%s.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
2869
 
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
2870
 
                        if (g_pNbAll->m_waMolCount[z] != 0)
2871
 
                        {
2872
 
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2873
 
                                strcat(g_sRefEnv,buf2);
2874
 
                        }*/
2875
 
/*              if (g_bRefEnvCenter)
2876
 
                        strcat(g_sRefEnv,"center.");
2877
 
                if (g_bRefEnvFix)
2878
 
                        strcat(g_sRefEnv,"fix.");*/
2879
 
                strcat(g_sRefEnv,multibuf);
2880
 
                strcat(g_sRefEnv,"xyz");
2881
 
                mprintf(">>> Saving cluster list as %s\n",g_sRefEnv);
2882
 
//              FreeFileName(g_sRefEnv);
2883
 
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2884
 
                mprintf("\n");
2885
 
        }
2886
 
 
2887
 
        if (g_bSaveJustTraj)
2888
 
        {
2889
 
                strcpy(buf,g_sInputTraj);
2890
 
                p = strrchr(buf,'/');
2891
 
                q = strrchr(buf,'\\');
2892
 
                if (q > p)
2893
 
                        p = q;
2894
 
                if (p == NULL)
2895
 
                        p = buf;
2896
 
                                else p++;
2897
 
                strcpy(buf2,p);
2898
 
                p = strrchr(buf2,'.');
2899
 
                if (p != NULL)
2900
 
                        *p = 0;
2901
 
                strcat(buf2,multibuf);
2902
 
                strcat(buf2,"_out.xyz");
2903
 
//              FreeFileName(buf);
2904
 
//              sprintf(buf,"traj_out.xyz");
2905
 
                mprintf("Saving processed trajectory as %s ...\n",buf2);
2906
 
                g_fSaveJustTraj = OpenFileWrite(buf2,true);
2907
 
        }
2908
 
 
2909
 
 
2910
 
        /******* Interface *******************/
2911
 
        if (!Interface_Initialization())
2912
 
                goto _ende;
2913
 
 
2914
 
 
2915
 
        mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
2916
 
 
2917
 
_beginmain:
2918
 
        if (ReactSecondRun)
2919
 
        {
2920
 
                mprintf(WHITE,"\n### Starting Second Pass ###\n");
2921
 
        } else
2922
 
        {
2923
 
                mprintf(WHITE,"\n### Starting Main Analysis ###\n");
2924
 
                if (g_bVHDF)
2925
 
                        mprintf("\n    Please note: The VHCF analysis will become slower while it proceeds.\n");
2926
 
        }
2927
 
 
2928
 
#ifdef TARGET_LINUX
2929
 
        if (!g_bMultiInterval || (multicounter == 0))
2930
 
        {
2931
 
                mprintf(WHITE,"\nHint: ");
2932
 
                mprintf("Press CTRL+C once to softly interrupt analysis and still write the results.\n");
2933
 
                mprintf("      Creating an empty file named EXIT (\"touch EXIT\") has the same effect.\n");
2934
 
        }
2935
 
#endif
2936
 
 
2937
 
        if (!g_bStreamInput)
2938
 
        {
2939
 
                g_fPos = fopen(g_sInputTraj,"rb"); 
2940
 
                if (g_fPos == NULL)
2941
 
                {
2942
 
                        eprintf("\nCould not open position trajectory.\n");
2943
 
                        goto _ende;
2944
 
                }
2945
 
        }
2946
 
 
2947
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
2948
 
        {
2949
 
                g_fNPTFile = fopen(g_sNPTFile,"rt");
2950
 
                if (g_fNPTFile == NULL)
2951
 
                {
2952
 
                        eprintf("\nCould not open cell vector file.\n");
2953
 
                        goto _ende;
2954
 
                }
2955
 
        }
2956
 
 
2957
 
        if (g_bUseVelocities && (g_sInputVel[0] != 0))
2958
 
        {
2959
 
                g_fVel = fopen(g_sInputVel,"rt"); 
2960
 
                if (g_fVel == NULL)
2961
 
                {
2962
 
                        eprintf("\nCould not open velocity trajectory.\n");
2963
 
                        goto _ende;
2964
 
                }
2965
 
        }
2966
 
        if (g_bUseForces && (g_sInputForce[0] != 0))
2967
 
        {
2968
 
                g_fForce = fopen(g_sInputForce,"rt"); 
2969
 
                if (g_fForce == NULL)
2970
 
                {
2971
 
                        eprintf("\nCould not open force trajectory.\n");
2972
 
                        goto _ende;
2973
 
                }
2974
 
        }
2975
 
 
2976
 
//      fff = fopen("dipole.txt","wt");
2977
 
 
2978
 
        if (g_iBeginStep != 0)
2979
 
        {
2980
 
                mprintf("\nFast-forwarding to step %d...\n",g_iBeginStep+1);
2981
 
//              mprintf("Seek: %d.\n",g_iFastForwardPos);
2982
 
                fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
2983
 
                if ((g_fVel != NULL) || (g_fForce != NULL) || ((g_bNPT) && (g_sNPTFile[0] != 0)))
2984
 
                {
2985
 
                        mprintf(WHITE,"  [");
2986
 
                        for (z=0;z<g_iBeginStep;z++)
2987
 
                        {
2988
 
/*                              if (!g_TimeStep.SkipTimestep(g_fPos))
2989
 
                                {
2990
 
                                        eprintf("Error. Unexpected end of position trajectory.\n");
2991
 
                                        goto _endmainloop;
2992
 
                                }*/
2993
 
                                if (fmod(z,g_iBeginStep/60.0) < 1.0)
2994
 
                                        mprintf(WHITE,"#");
2995
 
                                if (g_fVel != NULL)
2996
 
                                {
2997
 
                                        if (!g_TimeStep.SkipTimestep(g_fVel))
2998
 
                                        {
2999
 
                                                eprintf("Error. Unexpected end of velocity trajectory.\n");
3000
 
                                                goto _endmainloop;
3001
 
                                        }
3002
 
                                }
3003
 
                                if (g_fForce != NULL)
3004
 
                                {
3005
 
                                        if (!g_TimeStep.SkipTimestep(g_fForce))
3006
 
                                        {
3007
 
                                                eprintf("Error. Unexpected end of force trajectory.\n");
3008
 
                                                goto _endmainloop;
3009
 
                                        }
3010
 
                                }
3011
 
                                if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3012
 
                                        fgets(buf,256,g_fNPTFile);
3013
 
                        }
3014
 
                        mprintf(WHITE,"]\n");
3015
 
                }
3016
 
        }
3017
 
 
3018
 
        g_oaTimeSteps.SetSize(g_iStepHistory);
3019
 
        for (z=0;z<g_iStepHistory;z++)
3020
 
                g_oaTimeSteps[z] = NULL;
3021
 
 
3022
 
        g_iSteps = 0; // Der Zaehler der Zeitschritte
3023
 
        g_iCurrentTimeStep = 0;
3024
 
        t0 = time(NULL);
3025
 
        g_iClusterPos = 0;
3026
 
        sic = 0;
3027
 
        g_iSaveCondCount = 0;
3028
 
 
3029
 
        try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
3030
 
        if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3031
 
        
3032
 
        try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
3033
 
        if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3034
 
 
3035
 
        try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
3036
 
        if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3037
 
 
3038
 
        if (g_bDeriv)
3039
 
        {
3040
 
                g_iDerivNext = 2;
3041
 
                g_iDerivCurr = 1;
3042
 
                g_iDerivLast = 0;
3043
 
        }
3044
 
 
3045
 
        if (g_bDipole && g_bDumpDipoleVector)
3046
 
        {
3047
 
                g_fDumpDipole = OpenFileWrite("dipole_vectors.csv",true);
3048
 
                fprintf(g_fDumpDipole,"#Step");
3049
 
                for (z=0;z<g_oaMolecules.GetSize();z++)
3050
 
                {
3051
 
                        if (g_oaDumpDipoleVector[z] == NULL)
3052
 
                                continue;
3053
 
                        for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3054
 
                        {
3055
 
                                fprintf(g_fDumpDipole,";  %s[%d]_X;  Y;  Z",((CMolecule*)g_oaMolecules[z])->m_sName,((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)+1);
3056
 
                                if (g_bDumpDipoleAbs)
3057
 
                                        fprintf(g_fDumpDipole,";  Abs");
3058
 
                        }
3059
 
                }
3060
 
                fprintf(g_fDumpDipole,"\n");
3061
 
 
3062
 
                if (g_bDumpDipoleXYZ)
3063
 
                {
3064
 
                        g_fDumpDipoleXYZ = OpenFileWrite("dipole_vectors.xyz",true);
3065
 
 
3066
 
                        fprintf(g_fDumpDipoleXYZ,"%d\n\n",g_iDumpDipoleXYZAtoms);
3067
 
 
3068
 
                        for (z=0;z<g_oaMolecules.GetSize();z++)
3069
 
                        {
3070
 
                                if (g_oaDumpDipoleVector[z] == NULL)
3071
 
                                        continue;
3072
 
                                m = (CMolecule*)g_oaMolecules[z];
3073
 
                                for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3074
 
                                {
3075
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)]];
3076
 
 
3077
 
                                        for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3078
 
                                        {
3079
 
                                                if (m->m_baAtomIndex[z3] == g_iVirtAtomType)
3080
 
                                                        continue;
3081
 
                                                for (z4=0;z4<((CxIntArray*)sm->m_oaAtomOffset[z3])->GetSize();z4++)
3082
 
                                                {
3083
 
                                                        ti = ((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(z4);
3084
 
                                                        fprintf(g_fDumpDipoleXYZ,"%s  %12f  %12f  %12f\n",((CAtom*)g_oaAtoms[m->m_baAtomIndex[z3]])->m_sName,g_TimeStep.m_vaCoords[ti][0]/100.0,g_TimeStep.m_vaCoords[ti][1]/100.0,g_TimeStep.m_vaCoords[ti][2]/100.0);
3085
 
                                                }
3086
 
                                        }
3087
 
                                }
3088
 
                        }
3089
 
 
3090
 
                        ti2 = 0;
3091
 
                        for (z=0;z<g_oaMolecules.GetSize();z++)
3092
 
                        {
3093
 
                                if (g_oaDumpDipoleVector[z] == NULL)
3094
 
                                        continue;
3095
 
                                m = (CMolecule*)g_oaMolecules[z];
3096
 
                                for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3097
 
                                {
3098
 
                                        fprintf(g_fDumpDipoleXYZ,"B  %12f  0    0\n",100.0+ti2*3.0);
3099
 
                                        fprintf(g_fDumpDipoleXYZ,"B  %12f  0.5  0\n",100.0+ti2*3.0);
3100
 
                                        ti2++;
3101
 
                                }
3102
 
                        }
3103
 
                }
3104
 
        }
3105
 
 
3106
 
 
3107
 
/*****************************************************************************
3108
 
*************** Beginn Hauptschleife *****************************************
3109
 
*****************************************************************************/
3110
 
 
3111
 
        g_iLastTimeStep = -1;
3112
 
        g_iDotCounter = 0;
3113
 
        g_bStepSkipped = false;
3114
 
        g_iFirstStepSkipped = -1;
3115
 
        tbs = false;
3116
 
 
3117
 
        while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
3118
 
        {
3119
 
                if (feof(g_fPos))
3120
 
                {
3121
 
                        mprintf("\nEnd of trajectory file reached.\n");
3122
 
                        break;
3123
 
                }
3124
 
                if (g_bAbortAnalysis)
3125
 
                {
3126
 
                        mprintf("\nAnalysis aborted by user.\n");
3127
 
                        break;
3128
 
                }
3129
 
                g_iCurrentTimeStep++;
3130
 
                if (g_iCurrentTimeStep >= g_iStepHistory)
3131
 
                        g_iCurrentTimeStep = 0;
3132
 
 
3133
 
                if (g_bDeriv)
3134
 
                {
3135
 
                        g_iDerivNext++;
3136
 
                        if (g_iDerivNext > 2)
3137
 
                                g_iDerivNext = 0;
3138
 
                        g_iDerivCurr++;
3139
 
                        if (g_iDerivCurr > 2)
3140
 
                                g_iDerivCurr = 0;
3141
 
                        g_iDerivLast++;
3142
 
                        if (g_iDerivLast > 2)
3143
 
                                g_iDerivLast = 0;
3144
 
                }
3145
 
 
3146
 
                for (z=0;z<(g_iStride-1);z++)
3147
 
                {
3148
 
                        if (!g_TimeStep.SkipTimestep(g_fPos))
3149
 
                        {
3150
 
                                if (!feof(g_fPos))
3151
 
                                        eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
3152
 
                                goto _endmainloop;
3153
 
                        }
3154
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3155
 
                                fgets(buf,256,g_fNPTFile);
3156
 
                        if (g_fVel != NULL)
3157
 
                        {
3158
 
                                if (!g_TimeStep.SkipTimestep(g_fVel))
3159
 
                                {
3160
 
                                        eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
3161
 
                                        goto _endmainloop;
3162
 
                                }
3163
 
                        }
3164
 
                        if (g_fForce != NULL)
3165
 
                        {
3166
 
                                if (!g_TimeStep.SkipTimestep(g_fForce))
3167
 
                                {
3168
 
                                        eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
3169
 
                                        goto _endmainloop;
3170
 
                                }
3171
 
                        }
3172
 
                }
3173
 
_readagain:
3174
 
                if (g_bUseVelocities || g_bUseForces)
3175
 
                {
3176
 
                        if (GetTimeStep(-1) == NULL)
3177
 
                        {
3178
 
                                try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
3179
 
                                if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3180
 
                        }
3181
 
                        if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
3182
 
                        {
3183
 
                                if (feof(g_fPos))
3184
 
                                {
3185
 
                                        mprintf("\nEnd of Trajectory File reached.\n");
3186
 
                                        break;
3187
 
                                }
3188
 
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3189
 
                                goto _endmainloop;
3190
 
                        }
3191
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3192
 
                                GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
3193
 
                        if (g_bSkipDoubleSteps)
3194
 
                        {
3195
 
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3196
 
                                {
3197
 
                                        if (!g_bStepSkipped)
3198
 
                                        {
3199
 
                                                g_bStepSkipped = true;
3200
 
                                                g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3201
 
                                                mprintf("\nSkipping:");
3202
 
                                        }
3203
 
                                        mprintf("*");
3204
 
                                        goto _readagain;
3205
 
                                } else if (g_iFirstStepSkipped != -1)
3206
 
                                {
3207
 
                                        if (g_iFirstStepSkipped == GetTimeStep(-1)->ExtractNumber(g_iNumberPos))
3208
 
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3209
 
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(-1)->ExtractNumber(g_iNumberPos));
3210
 
                                        g_iDotCounter = 0;
3211
 
                                        g_iFirstStepSkipped = -1;
3212
 
                                }
3213
 
 
3214
 
                                if (g_iLastTimeStep != -1)
3215
 
                                {
3216
 
                                        if (g_iStrideDetect == -1)
3217
 
                                        {
3218
 
                                                g_iStrideDetect = GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3219
 
                                        } else
3220
 
                                        {
3221
 
                                                if (g_iStrideDetect != (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3222
 
                                                {
3223
 
                                                        if (!tbs)
3224
 
                                                                eprintf("\n");
3225
 
                                                        eprintf("Warning: Two successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(-1)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3226
 
                                                        tbs = true;
3227
 
                                                } else tbs = false;
3228
 
                                        }
3229
 
                                }
3230
 
 
3231
 
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3232
 
                                        g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3233
 
                        } 
3234
 
                        if (GetTimeStep(-1)->m_iGesAtomCount == 0)
3235
 
                        {
3236
 
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3237
 
                                goto _endmainloop;
3238
 
                        }
3239
 
                        GetTimeStep(-1)->UniteMolecules(false);
3240
 
                        if (g_bRemoveCOM)
3241
 
                                GetTimeStep(-1)->CenterCOM();
3242
 
                        GetTimeStep(-1)->CalcCenters();
3243
 
                        if (g_bDipole)
3244
 
                        {
3245
 
                                if (g_bWannier)
3246
 
                                        GetTimeStep(-1)->ScanWannier(false);
3247
 
                                GetTimeStep(-1)->CalcDipoles();
3248
 
                                if (g_bDumpDipoleVector)
3249
 
                                        GetTimeStep(-1)->DumpDipoles();
3250
 
                        }
3251
 
                } else
3252
 
                {
3253
 
                        if (GetTimeStep(0) == NULL)
3254
 
                        {
3255
 
                                try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
3256
 
                                if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3257
 
                        }
3258
 
                        if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
3259
 
                        {
3260
 
                                if (feof(g_fPos))
3261
 
                                {
3262
 
                                        mprintf("\nEnd of trajectory file reached.\n");
3263
 
                                        break;
3264
 
                                }
3265
 
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3266
 
                                goto _endmainloop;
3267
 
                        }
3268
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3269
 
                                GetTimeStep(0)->ReadCellVector(g_fNPTFile);
3270
 
                        if (g_bSkipDoubleSteps)
3271
 
                        {
3272
 
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3273
 
                                {
3274
 
//                                      mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
3275
 
                                        if (!g_bStepSkipped)
3276
 
                                        {
3277
 
                                                g_bStepSkipped = true;
3278
 
                                                g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3279
 
                                                mprintf("\nSkipping:");
3280
 
                                        }
3281
 
                                        mprintf("*");
3282
 
                                        goto _readagain;
3283
 
                                } else if (g_iFirstStepSkipped != -1)
3284
 
                                {
3285
 
                                        if (g_iFirstStepSkipped == GetTimeStep(0)->ExtractNumber(g_iNumberPos))
3286
 
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3287
 
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(0)->ExtractNumber(g_iNumberPos));
3288
 
                                        g_iDotCounter = 0;
3289
 
                                        g_iFirstStepSkipped = -1;
3290
 
                                }
3291
 
//                              mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
3292
 
 
3293
 
                                if (g_iLastTimeStep != -1)
3294
 
                                {
3295
 
                                        if (g_iStrideDetect == -1)
3296
 
                                        {
3297
 
                                                g_iStrideDetect = GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3298
 
                                        } else
3299
 
                                        {
3300
 
                                                if (g_iStrideDetect != (GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3301
 
                                                {
3302
 
                                                        if (!tbs)
3303
 
                                                                eprintf("\n");
3304
 
                                                        eprintf("Warning: Successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(0)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3305
 
                                                        tbs = true;
3306
 
                                                } else tbs = false;
3307
 
                                        }
3308
 
                                }
3309
 
 
3310
 
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3311
 
                                        g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3312
 
                        }
3313
 
                        if (GetTimeStep(0)->m_iGesAtomCount == 0)
3314
 
                        {
3315
 
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3316
 
                                goto _endmainloop;
3317
 
                        }
3318
 
                        if (!g_bSaveCoordsUnchanged)
3319
 
                        {
3320
 
                                GetTimeStep(0)->UniteMolecules(false);
3321
 
                                if (g_bRemoveCOM)
3322
 
                                        GetTimeStep(0)->CenterCOM();
3323
 
                        }
3324
 
                        GetTimeStep(0)->CalcCenters();
3325
 
                        if (g_bDipole)
3326
 
                        {
3327
 
                                if (g_bWannier)
3328
 
                                        GetTimeStep(0)->ScanWannier(false);
3329
 
                                GetTimeStep(0)->CalcDipoles();
3330
 
                                if (g_bDumpDipoleVector)
3331
 
                                        GetTimeStep(0)->DumpDipoles();
3332
 
                        }
3333
 
                }
3334
 
                g_bWarnUnsteady = false;
3335
 
 
3336
 
                if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
3337
 
                {
3338
 
                        if ((g_iSteps == 0) || g_bStepSkipped)
3339
 
                        {
3340
 
                                g_bStepSkipped = false;
3341
 
                                if (!g_bSilentProgress)
3342
 
                                        mprintf("\nStep %6d ",g_iSteps);
3343
 
                        }
3344
 
                        if (g_bAsciiArt && (!g_bSilentProgress))
3345
 
                        {
3346
 
                                tc = g_oAsciiArt.GetChar();
3347
 
                                if (tc == 0)
3348
 
                                {
3349
 
                                        if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3350
 
                                        {
3351
 
                                                if ((time(NULL) - t0) > 5)
3352
 
                                                {
3353
 
                                                        eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),(((g_iMaxStep > 0)?g_iMaxStep:g_iTrajSteps) - ((long)g_iSteps)))));
3354
 
                                                        FormatTime(eta,buf);
3355
 
                                                        mprintf(" ETA %s",buf);
3356
 
                                                }
3357
 
                                        }
3358
 
                                        mprintf("\nStep %6d ",g_iSteps);
3359
 
                                        if (g_iSteps != 0)
3360
 
                                                g_oAsciiArt.NewLine();
3361
 
                                } else mprintf("%c",tc);
3362
 
                        } else
3363
 
                        {
3364
 
                                if (g_iDotCounter >= 50)
3365
 
                                {
3366
 
                                        g_iDotCounter = 0;
3367
 
                                        if (!g_bSilentProgress)
3368
 
                                        {
3369
 
                                                if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3370
 
                                                {
3371
 
                                                        if ((time(NULL) - t0) > 5)
3372
 
                                                        {
3373
 
                                                                eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),g_iTrajSteps - ((long)g_iSteps))));
3374
 
                                                                FormatTime(eta,buf);
3375
 
                                                                mprintf(" ETA %s",buf);
3376
 
                                                        }
3377
 
                                                }
3378
 
                                                mprintf("\nStep %6d ",g_iSteps);
3379
 
                                        }
3380
 
                                }
3381
 
                                g_iDotCounter++;
3382
 
                                if (!g_bSilentProgress)
3383
 
                                        mprintf(".");
3384
 
                        }
3385
 
                        if (FileExist("EXIT"))
3386
 
                        {
3387
 
                                mprintf("\n\n*** File \"EXIT\" detected. Aborting analysis. ***\n\n");
3388
 
                                remove("EXIT");
3389
 
                                break;
3390
 
                        }
3391
 
                }
3392
 
 
3393
 
                if ((int)g_iSteps == /*showinterval**/g_iStride*50)
3394
 
                {
3395
 
                        t1 = time(NULL);
3396
 
                        if (t1 == t0)
3397
 
                                showinterval = 20;
3398
 
                                        else showinterval = (int)(20.0f/(t1-t0));
3399
 
                        if (showinterval == 0)
3400
 
                                showinterval = 1;
3401
 
                        sic = 1;
3402
 
                }
3403
 
 
3404
 
                g_iSteps += g_iStride;
3405
 
 
3406
 
                if (GetTimeStep(0)==NULL)
3407
 
                        continue;
3408
 
 
3409
 
                if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
3410
 
                        continue;
3411
 
 
3412
 
                if (g_bUseVelocities)
3413
 
                {
3414
 
                        if (g_fVel == NULL)
3415
 
                        {
3416
 
                                CalcVelocities();
3417
 
                        } else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
3418
 
                        {
3419
 
                                eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
3420
 
                                goto _endmainloop;
3421
 
                        }
3422
 
                }
3423
 
                if (g_bUseForces)
3424
 
                {
3425
 
                        if (g_fForce == NULL)
3426
 
                        {
3427
 
                                CalcForces();
3428
 
                        } else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
3429
 
                        {
3430
 
                                eprintf("\nError reading force time step %d.\n",g_iSteps+1);
3431
 
                                goto _endmainloop;
3432
 
                        }
3433
 
                }
3434
 
 
3435
 
                if (g_bCutCluster)
3436
 
                {
3437
 
                        if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
3438
 
                                break;
3439
 
 
3440
 
                        if (g_iClusterPos >= g_iClusterCount)
3441
 
                                break;
3442
 
 
3443
 
                        if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
3444
 
                                continue;
3445
 
                }
3446
 
        //      mprintf("\nStep %d for clusters.",((int)g_iSteps/g_iStride));
3447
 
 
3448
 
                if (g_bUnwrap && ((int)g_iSteps > g_iStride))
3449
 
 // Nicht im ersten Schritt
3450
 
                {
3451
 
                        for (z=0;z<g_oaMolecules.GetSize();z++)
3452
 
                        {
3453
 
                                m = (CMolecule*)g_oaMolecules[z];
3454
 
                                for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3455
 
                                {
3456
 
                                        if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
3457
 
                                                continue;
3458
 
                                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
3459
 
                                        {
3460
 
                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
3461
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] > g_fBoxX/2.0f)
3462
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] -= g_fBoxX;
3463
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] < -g_fBoxX/2.0f)
3464
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] += g_fBoxX;
3465
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] > g_fBoxY/2.0f)
3466
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] -= g_fBoxY;
3467
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] < -g_fBoxY/2.0f)
3468
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] += g_fBoxY;
3469
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] > g_fBoxZ/2.0f)
3470
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] -= g_fBoxZ;
3471
 
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] < -g_fBoxZ/2.0f)
3472
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] += g_fBoxZ;
3473
 
        //                                      mprintf("\n%2d.%2d: %f, %f, %f",z,z2,g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2]);
3474
 
                                        }
3475
 
                                }
3476
 
                        }
3477
 
                }
3478
 
 
3479
 
                if (g_bKeepUnfoldedCoords)
3480
 
                        GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
3481
 
 
3482
 
                /******* Interface *********/
3483
 
                Interface_ProcessStep(GetTimeStep(0));
3484
 
 
3485
 
                if (g_bMSD)
3486
 
                {
3487
 
                        g_pT2Timestep = GetTimeStep(0);
3488
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3489
 
                        {
3490
 
                                ti2 = 0;
3491
 
                                o = (CObservation*)g_oaObserv[z0];
3492
 
                                if (g_bMSDCacheMode)
3493
 
                                {
3494
 
                                        for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3495
 
                                        {
3496
 
                                                for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3497
 
                                                {
3498
 
                                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3499
 
                                                        {
3500
 
                                                                ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3501
 
                                                                ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[ti2];
3502
 
 
3503
 
                                                                if (g_bPeriodic && (ptfa->GetSize() > 0))
3504
 
                                                                {
3505
 
                                                                        ti3 = ptfa->GetSize()-3;
3506
 
                                                                        vec1[0] = ptfa->GetAt(ti3++);
3507
 
                                                                        vec1[1] = ptfa->GetAt(ti3++);
3508
 
                                                                        vec1[2] = ptfa->GetAt(ti3);
3509
 
                                                                        tf = (g_pT2Timestep->m_vaCoords[ti]-vec1).GetLength();
3510
 
                                                                        if (tf > g_fMinPeriodic/2.0)
3511
 
                                                                                eprintf("\nDiscontinuity in step %d: %s[%d] %s%d moved %.2f pm. Can't compute MSD from wrapped trajectory - unwrap first.",g_iSteps,((CMolecule*)g_oaMolecules[g_waAtomMolIndex[ti]])->m_sName,g_laAtomSMLocalIndex[ti]+1,((CAtom*)g_oaAtoms[g_waAtomRealElement[ti]])->m_sName,g_waAtomMolNumber[ti]+1,tf);
3512
 
                                                                }
3513
 
 
3514
 
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][0]);
3515
 
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][1]);
3516
 
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][2]);
3517
 
 
3518
 
                                                                ti2++;
3519
 
                                                        }
3520
 
                                                }
3521
 
                                        }
3522
 
                                } else
3523
 
                                {
3524
 
                                        for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
3525
 
                                        {
3526
 
                                                g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
3527
 
                                                if (g_pTempTimestep == NULL)
3528
 
                                                        continue;
3529
 
                                                for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3530
 
                                                {
3531
 
                                                        for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3532
 
                                                        {
3533
 
                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3534
 
                                                                {
3535
 
                                                                        ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3536
 
                                                                        o->m_pMSD->m_pMSD->AddToBin_Index(z,(double)(pow(g_pTempTimestep->m_vaCoords[ti][0]-g_pT2Timestep->m_vaCoords[ti][0],2)+pow(g_pTempTimestep->m_vaCoords[ti][1]-g_pT2Timestep->m_vaCoords[ti][1],2)+pow(g_pTempTimestep->m_vaCoords[ti][2]-g_pT2Timestep->m_vaCoords[ti][2],2)));
3537
 
                                                                }
3538
 
                                                        }
3539
 
                                                }
3540
 
                                        }
3541
 
                                }
3542
 
                        }
3543
 
                } // END IF MSD 
3544
 
 
3545
 
                if (g_bSaveJustTraj)
3546
 
                {
3547
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3548
 
 
3549
 
                        if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
3550
 
                        {
3551
 
                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iSaveJustMol])->m_laSingleMolIndex[g_iSaveJustSM]])->m_oaAtomOffset[g_iSaveJustAtomType])->GetAt(g_iSaveJustAtom)];
3552
 
                                g_pTempTimestep->CenterPos(vec0);
3553
 
                        }
3554
 
 
3555
 
                        if (g_bSaveTrajNoRot)
3556
 
                        {
3557
 
                                g_pTempTimestep->CenterCOM();
3558
 
 
3559
 
//                              mfprintf(g_fSaveJustTraj,"  %d\n\n",(int)g_iSaveGesAtoms*3);
3560
 
 
3561
 
//                              for (z=0;z<g_iGesAtomCount;z++)
3562
 
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3563
 
 
3564
 
                //              g_pTempTimestep->Transform(tdmat2);
3565
 
                                g_pTempTimestep->Transform(tq2);
3566
 
 
3567
 
//                              for (z=0;z<g_iGesAtomCount;z++)
3568
 
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+10.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3569
 
 
3570
 
                                if ((int)g_iSteps > g_iStride)
3571
 
                                {
3572
 
                                        dvec1 = 0;
3573
 
                                        for (z=0;z<g_iGesAtomCount;z++)
3574
 
                                        {
3575
 
                                                dvec2 = (g_pTempTimestep->m_vaCoords[z] - rot_ts.m_vaCoords[z]);
3576
 
                                                dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3577
 
 
3578
 
                //                              tf3 = dvec4.GetLength();
3579
 
                //                              tf2 = dvec2.GetLength();
3580
 
                //                              if (4*tf3*tf3 > 0.25*tf2*tf2)
3581
 
                //                              {
3582
 
                //                                      dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3583
 
                //                                      mprintf("\n%.10g",1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2));
3584
 
                //                              }
3585
 
 
3586
 
                                                dvec3 = CrossP(dvec4,dvec2);
3587
 
                                                dvec1 += dvec3 * ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass;
3588
 
//                                              mprintf("  %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f\n",z,dvec2[0],dvec2[1],dvec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],dvec3[0],dvec3[1],dvec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3589
 
                                        }
3590
 
//                                      mprintf("Drehimpuls: %g ( %g, %g, %g )\n",dvec1.GetLength(),dvec1[0],dvec1[1],dvec1[2]);
3591
 
                                        dvec3 = dvec1;
3592
 
                                        dvec3.Normalize();
3593
 
        //                              mprintf("      ( %g, %g, %g )\n",vec3[0],vec3[1],vec3[2]);
3594
 
 
3595
 
                                        tf = 0;
3596
 
                                        for (z=0;z<g_iGesAtomCount;z++)
3597
 
                                        {
3598
 
                                                dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3599
 
 
3600
 
                //                              tf3 = dvec4.GetLength();
3601
 
                //                              tf2 = dvec2.GetLength();
3602
 
                //                              dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3603
 
 
3604
 
                                                dvec0 = CrossP(dvec4,dvec3);
3605
 
        //                                      mprintf("#  ( %g, %g, %g ) x ( %g, %g, %g ) = %g\n",g_pTempTimestep->m_vaCoords[z][0],g_pTempTimestep->m_vaCoords[z][1],g_pTempTimestep->m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],vec0.GetLength());
3606
 
                                                tf += ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass * dvec0.GetLengthSqr();
3607
 
                //                              mprintf("\n  %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f",z,vec2[0],vec2[1],vec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3608
 
                                        }
3609
 
//                                      mprintf("  Traegheitsmoment: %g\n",tf);
3610
 
                                        dvec1 /= tf;
3611
 
//                                      mprintf("Angular momentum vector: ( %g, %g, %g ) (l = %g)\n",dvec1[0],dvec1[1],dvec1[2],dvec1.GetLength());
3612
 
//                                      mprintf("  Winkelgeschw.: %g\n",dvec1.GetLength());
3613
 
//                                      dvec3 = dvec1;
3614
 
//                                      dvec3.Normalize();
3615
 
 
3616
 
//                                      mprintf("  Baue Matrix: ( %g | %g | %g ), %g\n",dvec3[0],dvec3[1],dvec3[2],-dvec1.GetLength());
3617
 
 
3618
 
//                                      tdmat.RotMat(dvec3,-dvec1.GetLength());
3619
 
 
3620
 
                                        tq.BuildRotation(dvec3,dvec1.GetLength());
3621
 
 
3622
 
//                                      mprintf("  Die Matrix:\n");
3623
 
//                                      tdmat.Dump();
3624
 
 
3625
 
//                                      tdmat2 = tdmat2 * tdmat;
3626
 
                                        tq2 = tq2 * tq;
3627
 
 
3628
 
                                        if (fabs(tq2.GetLength()-1.0) > 0.000001)
3629
 
                                        {
3630
 
                                                eprintf("\nRenormalizing rotation quaternion.\n");
3631
 
                                                tq2.Normalize();
3632
 
                                        }
3633
 
 
3634
 
//                                      g_pTempTimestep->Transform(tdmat);
3635
 
                                        g_pTempTimestep->Transform(tq);
3636
 
                                } 
3637
 
 
3638
 
                                rot_ts.CopyFrom(g_pTempTimestep);
3639
 
 
3640
 
//                              for (z=0;z<g_iGesAtomCount;z++)
3641
 
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+20.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3642
 
 
3643
 
                        } else
3644
 
                        {
3645
 
                                if (g_bFold && (!g_bSaveCoordsUnchanged))
3646
 
                                {
3647
 
                                        if (g_bFoldAtomwise)
3648
 
                                                g_pTempTimestep->FoldAtoms();
3649
 
                                                        else g_pTempTimestep->FoldMolecules();
3650
 
                                }
3651
 
                        }
3652
 
 
3653
 
                        if (!g_bCenterZero && (!g_bSaveCoordsUnchanged) && g_bPeriodic)
3654
 
                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3655
 
 
3656
 
                        ti = g_iSaveGesAtoms;
3657
 
 
3658
 
                        if (g_bUnwrapWannier)
3659
 
                        {
3660
 
                                g_pTempTimestep->ScanWannier(false);
3661
 
 
3662
 
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3663
 
                                {
3664
 
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3665
 
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3666
 
                                                ti += ((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();
3667
 
                                }
3668
 
                        }
3669
 
 
3670
 
                        mfprintf(g_fSaveJustTraj,"  %d\n",ti);
3671
 
                        if (g_pTempTimestep->m_pComment != NULL)
3672
 
                                mfprintf(g_fSaveJustTraj,"%s\n",g_pTempTimestep->m_pComment);
3673
 
                                        else mfprintf(g_fSaveJustTraj,"\n");
3674
 
 
3675
 
                        if (g_bWriteAtomwise)
3676
 
                        {
3677
 
                                for (z7=0;z7<g_oaAtoms.GetSize();z7++)
3678
 
                                {
3679
 
                                        for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3680
 
                                        {
3681
 
                                                atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3682
 
                                                for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3683
 
                                                {
3684
 
                                                        for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3685
 
                                                        {
3686
 
                                                                if (atgr->m_baRealAtomType[z4] != z7)
3687
 
                                                                        continue;
3688
 
                                                                tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3689
 
                                                                for (z5=0;z5<tla->GetSize();z5++)
3690
 
                                                                {
3691
 
                                                                        vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3692
 
                                                                        if (g_bUnwrap)
3693
 
                                                                        {
3694
 
                                                                                vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3695
 
                                                        //                      mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3696
 
                                                                        }
3697
 
                                                                        if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3698
 
                                                                        {
3699
 
                                                                                if (g_bSaveVirtAtoms)
3700
 
                                                                                        mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3701
 
                                                                        } else mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3702
 
                                                                }
3703
 
                                                        }
3704
 
                                                }
3705
 
                                        }
3706
 
                                }
3707
 
                        } else
3708
 
                        {
3709
 
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3710
 
                                {
3711
 
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3712
 
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3713
 
                                        {
3714
 
                                                for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3715
 
                                                {
3716
 
                                                        tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3717
 
                                                        for (z5=0;z5<tla->GetSize();z5++)
3718
 
                                                        {
3719
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3720
 
                                                                if (g_bUnwrap)
3721
 
                                                                {
3722
 
                                                                        vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3723
 
                                                //                      mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3724
 
                                                                }
3725
 
                                                                if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3726
 
                                                                {
3727
 
                                                                        if (g_bSaveVirtAtoms)
3728
 
                                                                                mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3729
 
                                                                } else mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3730
 
                                                        }
3731
 
                                                }
3732
 
                                        }
3733
 
                                }
3734
 
                        }
3735
 
 
3736
 
                        if (g_bUnwrapWannier)
3737
 
                        {
3738
 
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3739
 
                                {
3740
 
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3741
 
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3742
 
                                        {
3743
 
                                                for (z4=0;z4<((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();z4++)
3744
 
                                                {
3745
 
                                                        vec0 = g_pTempTimestep->m_vaCoords[((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier[z4]];
3746
 
                                                        if (g_bUnwrap)
3747
 
                                                                vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3748
 
                                                        mfprintf(g_fSaveJustTraj," X  %8.5f  %8.5f  %8.5f\n",vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3749
 
                                                }
3750
 
                                        }
3751
 
                                }       
3752
 
                        }
3753
 
                } // END IF g_bSaveJustTraj
3754
 
 
3755
 
                if (g_bBondACF)
3756
 
                {
3757
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3758
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
3759
 
                        {
3760
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
3761
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
3762
 
                                {
3763
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
3764
 
                                        bond->m_faData.Add(VecDist(g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[0]],g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[1]]));
3765
 
                                }
3766
 
                        }
3767
 
                }
3768
 
                
3769
 
                if (g_bAggregation || g_bNbExchange)
3770
 
                {
3771
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3772
 
 
3773
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3774
 
                        {
3775
 
                                o = (CObservation*)g_oaObserv[z0];
3776
 
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3777
 
                                {
3778
 
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3779
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3780
 
                                                dacfsub->m_pCondition->m_iPassCounter[z2] = 0;
3781
 
                                }
3782
 
                        }
3783
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3784
 
                        {
3785
 
                                o = (CObservation*)g_oaObserv[z0];
3786
 
 
3787
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
3788
 
                                {
3789
 
                                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
3790
 
 
3791
 
                                        o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix);
3792
 
 
3793
 
                                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3794
 
                                        {
3795
 
                                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3796
 
 
3797
 
                                                dacfsub->m_pCondition->CopyResults(o->m_pDACF->m_pCondition);
3798
 
                                                dacfsub->m_pCondition->m_bAnyPassed = false;
3799
 
                                                dacfsub->m_pCondition->ReScan(smfix);
3800
 
                                                if (dacfsub->m_pCondition->m_bAnyPassed)
3801
 
                                                        dacfsub->m_pCondition->m_iRMPassCounter[z2]++;
3802
 
        
3803
 
                                                if (g_bDACF)
3804
 
                                                        o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
3805
 
 
3806
 
                                                if (g_bNbExchange)
3807
 
                                                        o->m_pDACF->UpdateNbEx(z2,dacfsub);
3808
 
                                        } // END FOR ZS
3809
 
                                } // END FOR Z2
3810
 
                        } // END FOR Z0
3811
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3812
 
                        {
3813
 
                                o = (CObservation*)g_oaObserv[z0];
3814
 
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3815
 
                                {
3816
 
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3817
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3818
 
                                                if (dacfsub->m_pCondition->m_iPassCounter[z2] != 0)
3819
 
                                                        dacfsub->m_pCondition->m_iOMPassCounter[z2]++;
3820
 
                                }
3821
 
                        }
3822
 
                } // END IF AGGREGATION OR NBEX
3823
 
 
3824
 
                if (g_bDens)
3825
 
                {
3826
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3827
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3828
 
                        {
3829
 
                                o = (CObservation*)g_oaObserv[z0];
3830
 
                                m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
3831
 
                                for (z3=0;z3<m->m_laSingleMolIndex.GetSize();z3++)
3832
 
                                {
3833
 
                                        if (g_bRegionAnalysis)
3834
 
                                                if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[m->m_laSingleMolIndex[z3]])))
3835
 
                                                        continue;
3836
 
 
3837
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z3]];
3838
 
                                        ti = ((CxIntArray*)sm->m_oaAtomOffset[o->m_pDensityDF->m_iCenterAtomType])->GetAt(o->m_pDensityDF->m_iCenterAtom);
3839
 
                                        vec0 = g_pTempTimestep->m_vaCoords[ti];
3840
 
 
3841
 
                                        g_pTempTimestep->CenterPos(vec0);
3842
 
                                        g_pTempTimestep->FoldAtoms();
3843
 
 
3844
 
                                        for (z4=0;z4<g_oaMolecules.GetSize();z4++)
3845
 
                                        {
3846
 
                                                if (!o->m_pDensityDF->m_pDensityMolSelect[z4])
3847
 
                                                        continue;
3848
 
                                                m2 = (CMolecule*)g_oaMolecules[z4];
3849
 
                                                ag = o->m_pDensityDF->m_pDensityMolAG[z4];
3850
 
                                                for (z5=0;z5<m2->m_laSingleMolIndex.GetSize();z5++)
3851
 
                                                {
3852
 
                                                        if (g_bRegionAnalysis)
3853
 
                                                                if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[m2->m_laSingleMolIndex[z5]])))
3854
 
                                                                        continue;
3855
 
 
3856
 
                                                        sm2 = (CSingleMolecule*)g_oaSingleMolecules[m2->m_laSingleMolIndex[z5]];
3857
 
                                                        for (z6=0;z6<ag->m_baAtomType.GetSize();z6++)
3858
 
                                                        {
3859
 
                                                                if (ag->m_baRealAtomType[z6] == g_iVirtAtomType)
3860
 
                                                                        continue;
3861
 
                                                                if (o->m_pDensityDF->m_bDensityMass)
3862
 
                                                                {
3863
 
                                                                        tf2 = ((CAtom*)g_oaAtoms[ag->m_baRealAtomType[z6]])->m_pElement->m_fMass;
3864
 
                                                                        for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3865
 
                                                                        {
3866
 
                                                                                tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3867
 
                                                                                o->m_pDensityDF->m_pDensDF->AddToBin(tf,tf2);
3868
 
                                                                        }
3869
 
                                                                } else
3870
 
                                                                {
3871
 
                                                                        for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3872
 
                                                                        {
3873
 
                                                                                tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3874
 
                                                                                o->m_pDensityDF->m_pDensDF->AddToBin(tf);
3875
 
                                                                        }
3876
 
                                                                }
3877
 
                                                        }
3878
 
                                                }
3879
 
                                        }
3880
 
                                }
3881
 
                        }
3882
 
                } // END IF g_bDens
3883
 
 
3884
 
                if (g_bRDyn || g_bIRSpec)
3885
 
                {
3886
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3887
 
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
3888
 
                        {
3889
 
                                o = (CObservation*)g_oaObserv[z6];
3890
 
                                if (g_bIRSpec)
3891
 
                                        trdyn = o->m_pIRSpec;
3892
 
                                                else trdyn = o->m_pRDyn;
3893
 
                                ti = 0;
3894
 
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3895
 
                                {
3896
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3897
 
 
3898
 
                                        if (trdyn->m_iVecType == 0)
3899
 
                                        {
3900
 
                                                trdyn->BuildAtomList(sm,&templa);
3901
 
                                                for (z4=0;z4<templa.GetSize();z4+=3)
3902
 
                                                {
3903
 
                                                        if (trdyn->m_bOrtho)
3904
 
                                                        {
3905
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3906
 
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3907
 
                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3908
 
                                                                vec1 = CrossP(vec2-vec0,vec3-vec0);
3909
 
                                                        } else
3910
 
                                                        {
3911
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3912
 
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3913
 
                                                                vec1 = vec2-vec0;
3914
 
                                                        }
3915
 
                                                        vec1.Normalize();
3916
 
                                                        if (g_bRDynCacheMode)
3917
 
                                                        {
3918
 
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
3919
 
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
3920
 
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
3921
 
                                                                ti++;
3922
 
                                                        } else
3923
 
                                                        {
3924
 
                                                                for (z=0;z<trdyn->m_iDepth/trdyn->m_iStride;z++)
3925
 
                                                                {
3926
 
                                                                        g_pT2Timestep = GetTimeStep(z*trdyn->m_iStride);
3927
 
                                                                        if (g_pT2Timestep == NULL)
3928
 
                                                                                continue;
3929
 
                                                                        if (trdyn->m_bOrtho)
3930
 
                                                                        {
3931
 
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3932
 
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3933
 
                                                                                vec5 = g_pT2Timestep->m_vaCoords[templa[z4+2]];
3934
 
                                                                                vec2 = CrossP(vec3-vec4,vec5-vec4);
3935
 
                                                                        } else
3936
 
                                                                        {
3937
 
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3938
 
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3939
 
                                                                                vec2 = vec3-vec4;
3940
 
                                                                        }
3941
 
                                                                        vec2.Normalize();
3942
 
                                                                        trdyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
3943
 
                                                                        trdyn->m_pCount[z]++;
3944
 
                                                                }
3945
 
                                                        }
3946
 
                                                }
3947
 
                                        } else if (trdyn->m_iVecType == 1)
3948
 
                                        {
3949
 
                                                vec1 = sm->m_vDipole;
3950
 
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
3951
 
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
3952
 
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
3953
 
 
3954
 
        //                                      if (z3 == 0)
3955
 
        //                                              mfprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
3956
 
 
3957
 
                                                ti++;
3958
 
                                        } // END VECTYPE
3959
 
                                }
3960
 
                        }
3961
 
                } // END IF RDYN
3962
 
 
3963
 
                if (g_bVACF)
3964
 
                {
3965
 
                        g_pT2Timestep = GetTimeStep(0);
3966
 
//                      mprintf("\nStep=%d, adding.",g_iSteps);
3967
 
                        if (g_bGlobalVACF)
3968
 
                        {
3969
 
                                if (g_bVACFCacheMode)
3970
 
                                {
3971
 
                                        ti = 0;
3972
 
                                        for (z2=0;z2<g_iGesAtomCount;z2++)
3973
 
                                        {
3974
 
                                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
3975
 
                                                        continue;
3976
 
                //                              mprintf("Global: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,z2+1,g_pT2Timestep->m_vaVelocities[z2][0],g_pT2Timestep->m_vaVelocities[z2][1],g_pT2Timestep->m_vaVelocities[z2][2]);
3977
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][0]);
3978
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][1]);
3979
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][2]);
3980
 
                                                ti++;
3981
 
                                        }
3982
 
                                } else
3983
 
                                {
3984
 
                                        for (z=0;z<g_pGlobalVACF->m_iSize;z++)
3985
 
                                        {
3986
 
                                                g_pTempTimestep = GetTimeStep(z);
3987
 
                                                if (g_pTempTimestep == NULL)
3988
 
                                                        continue;
3989
 
                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
3990
 
                                                        continue;
3991
 
                                                pd = &g_pGlobalVACF->m_pData[z];
3992
 
                                                g_pGlobalVACF->m_pCounter[z] += g_iGesAtomCount;
3993
 
                                                for (z2=0;z2<g_iGesAtomCount;z2++)
3994
 
                                                        *pd += DotP(g_pTempTimestep->m_vaVelocities[z2],g_pT2Timestep->m_vaVelocities[z2]);
3995
 
                                        }
3996
 
                                }
3997
 
                        }
3998
 
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
3999
 
                        {
4000
 
                                o = (CObservation*)g_oaObserv[z6];
4001
 
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4002
 
                                {
4003
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4004
 
                                        o->m_pVACF->BuildAtomList(sm,&templa);
4005
 
                                        for (z4=0;z4<templa.GetSize();z4++)
4006
 
                                        {
4007
 
                                                if (g_bVACFCacheMode)
4008
 
                                                {
4009
 
                                                        ti = templa[z4];
4010
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][0]);
4011
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][1]);
4012
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][2]);
4013
 
                                //                      mprintf("%d*%d+%d=%d\n",z3,o->m_pVACF->m_iShowAtomGes,z4,z3*o->m_pVACF->m_iShowAtomGes+z4);
4014
 
                                //                      mprintf("Lokal: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,ti+1,g_pT2Timestep->m_vaVelocities[ti][0],g_pT2Timestep->m_vaVelocities[ti][1],g_pT2Timestep->m_vaVelocities[ti][2]);
4015
 
                                //                      mprintf("Step %d: Obs %d, Mol %d, Atom %d: Index %d.\n",g_iStepHistory,z6+1,z3+1,z4+1,ti+1);
4016
 
                                                } else
4017
 
                                                {
4018
 
                                                        for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
4019
 
                                                        {
4020
 
                                                                o->m_pVACF->m_pCounter[z5]++;
4021
 
                                                                g_pTempTimestep = GetTimeStep(z5);
4022
 
                                                                if (g_pTempTimestep == NULL)
4023
 
                                                                        continue;
4024
 
                                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
4025
 
                                                                        continue;
4026
 
                                                                o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
4027
 
                                                        }
4028
 
                                                }
4029
 
                                        }
4030
 
                                }
4031
 
                        }
4032
 
                } // END IF VACF
4033
 
 
4034
 
                if (g_bIRSpec && g_bGlobalIR)
4035
 
                {
4036
 
                        for (z3=0;z3<g_oaSingleMolecules.GetSize();z3++) // Alle anderen Molekuele durchgehen
4037
 
                        {
4038
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z3];
4039
 
                                vec1 = sm->m_vDipole;
4040
 
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[0]);
4041
 
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[1]);
4042
 
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[2]);
4043
 
                        }
4044
 
                } // END IF g_bGlobalIR
4045
 
 
4046
 
                if (g_bReact)
4047
 
                {
4048
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4049
 
                        if (ReactSecondRun)
4050
 
                        {
4051
 
                                g_pReact->WriteTrajec(g_pTempTimestep);
4052
 
                        } else
4053
 
                        {
4054
 
                                g_pReact->ScanBonds(g_pTempTimestep,false);
4055
 
                        }
4056
 
                }
4057
 
 
4058
 
                if (g_bNbAnalysis)
4059
 
                {
4060
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4061
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4062
 
                        {
4063
 
                                smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4064
 
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
4065
 
                                {
4066
 
                                        o = (CObservation*)g_oaObserv[z6];
4067
 
                                        o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep);
4068
 
                                        o->m_pNbAnalysis->AnalyzeStep();
4069
 
                                }
4070
 
                        }
4071
 
                }
4072
 
 
4073
 
                if (g_bNbExchange)
4074
 
                {
4075
 
                }
4076
 
 
4077
 
                if (g_bClusterAnalysis)
4078
 
                {
4079
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4080
 
                        g_pClusterAnalysis->Process(g_pTempTimestep);
4081
 
                }
4082
 
 
4083
 
                if (g_bFESA)
4084
 
                {
4085
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4086
 
                        g_pFESA->ProcessStep(g_pTempTimestep);
4087
 
                }
4088
 
 
4089
 
                if (g_bMicroHet)
4090
 
                {
4091
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4092
 
                        g_pTempTimestep->FoldAtomsPositive();
4093
 
                        g_pMicroHet->Process(g_pTempTimestep);
4094
 
                }
4095
 
 
4096
 
                if (g_bThermo)
4097
 
                {
4098
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4099
 
                        g_pThermoAnalysis->AnalyzeStep(g_pTempTimestep);
4100
 
                }
4101
 
 
4102
 
                if (g_bVoro)
4103
 
                {
4104
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4105
 
 
4106
 
                        if (g_pVoroWrapper->m_bVoroStat)
4107
 
                        {
4108
 
                                g_pTempTimestep->FoldAtomsPositive();
4109
 
                                g_pVoroWrapper->Build(g_pTempTimestep);
4110
 
                        }
4111
 
 
4112
 
                        if (g_pVoroWrapper->m_bWritePOV)
4113
 
                                g_pVoroWrapper->WritePOV(g_pTempTimestep);
4114
 
 
4115
 
                        if (g_pVoroWrapper->m_bSurfCover)
4116
 
                                g_pVoroWrapper->ProcessSurfCover(g_pTempTimestep);
4117
 
 
4118
 
                        if (g_pVoroWrapper->m_bVoroMetric)
4119
 
                        {
4120
 
                                if (!g_bClusterAnalysis)
4121
 
                                        g_pVoroWrapper->BuildVoroMetric(g_pTempTimestep);
4122
 
                        }
4123
 
 
4124
 
                        if (g_pVoroWrapper->m_bPOVBox)
4125
 
                        {
4126
 
                                g_pTempTimestep->FoldAtomsPositive();
4127
 
 
4128
 
                                g_pVoroWrapper->PerformChoreography(g_pTempTimestep);
4129
 
 
4130
 
                                if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
4131
 
                                        break;
4132
 
                        }
4133
 
                }
4134
 
 
4135
 
/*              if (g_bSFac)
4136
 
                {
4137
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4138
 
                        g_pSFac->ProcessStep(g_pTempTimestep);
4139
 
                }*/
4140
 
 
4141
 
                if (g_bVoid)
4142
 
                {
4143
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4144
 
                        g_pTempTimestep->FoldAtomsPositive();
4145
 
                        g_pVoroAnalysis->Step(g_pTempTimestep);
4146
 
                }
4147
 
 
4148
 
                if (g_bVDF && (g_iFixMol == -1))
4149
 
                {
4150
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4151
 
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
4152
 
                        {
4153
 
                                o = (CObservation*)g_oaObserv[z6];
4154
 
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4155
 
                                {
4156
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4157
 
                                        o->m_pVDF[0]->BuildAtomList(NULL,sm,&templa);
4158
 
 
4159
 
                                        for (z4=0;z4<templa.GetSize();z4++)
4160
 
                                                o->m_pVDF[0]->m_pVDF->AddToBin(g_pTempTimestep->m_vaVelocities[templa[z4]].GetLength());
4161
 
                                }
4162
 
                        }
4163
 
                }
4164
 
 
4165
 
                if ((!g_bCDF) && (!g_bRDF) && (!g_bSDF) && (!g_bPlDF) && (!g_bLiDF) && (!g_bVoidSDF) && (!g_bADF) && (!g_bDDF) && (!g_bVDF) && (!g_bDipDF) && (!g_bCutCluster) && (!g_bSaveRefEnv) && (!g_bVHDF) && (!g_bRevSDF) && (!g_bCond))
4166
 
                        goto _endstep;
4167
 
 
4168
 
                if (g_bVoid)
4169
 
                {
4170
 
                        if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
4171
 
                        {
4172
 
                                g_pVoroAnalysis->m_pTempSDF->Clear();
4173
 
                                g_pTempTimestep->CopyFrom(GetTimeStep(0));
4174
 
                                g_pTempTimestep->FoldAtomsPositive();
4175
 
                                for (z3=0;z3<g_iGesAtomCount;z3++)
4176
 
                                {
4177
 
                                        vec0 = g_pTempTimestep->m_vaCoords[z3];
4178
 
                                        g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
4179
 
                                }
4180
 
        //                      g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
4181
 
                        }
4182
 
                }
4183
 
 
4184
 
//              tfr = 9999.0;
4185
 
 
4186
 
                if (g_iFixMol == -1)
4187
 
                        goto _norefmol;
4188
 
 
4189
 
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
4190
 
                {
4191
 
                        o = (CObservation*)g_oaObserv[z6];
4192
 
 
4193
 
                        if (o->m_pConditions != NULL)
4194
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4195
 
                                        o->m_pConditions->m_iPassCounter[z2] = 0;
4196
 
 
4197
 
                        if (o->m_pConditionsOM2 != NULL)
4198
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4199
 
                                        o->m_pConditionsOM2->m_iPassCounter[z2] = 0;
4200
 
                }
4201
 
 
4202
 
                // Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
4203
 
                for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4204
 
                {
4205
 
                        if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
4206
 
                                continue;
4207
 
 
4208
 
                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4209
 
 
4210
 
                        if (g_bCutCluster)
4211
 
                        {
4212
 
                                if (g_iClusterPos >= g_iClusterCount)
4213
 
                                        break;
4214
 
 
4215
 
                                if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
4216
 
                                        break;
4217
 
 
4218
 
                                if (g_iaClusterMol[g_iClusterPos] != z2)
4219
 
                                        continue;
4220
 
 
4221
 
                                if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
4222
 
                                        break;
4223
 
 
4224
 
                                g_iClusterPos++;
4225
 
                        }
4226
 
 
4227
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
4228
 
 
4229
 
                        // Zentrieren/Falten der ganzen Box nur noch noetig bei den folgenden Analysen
4230
 
                        if (g_bSDF || g_bRevSDF || g_bCutCluster || g_bSaveRefEnv || g_bSaveJustTraj || g_bVoidSDF || g_bMiddleAvg)
4231
 
                        {
4232
 
                                vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4233
 
 
4234
 
                                if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
4235
 
                                {
 
1145
                                try { o->m_pPlProj->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlProj->m_baDataEnabled = NULL; }
 
1146
                                if (o->m_pPlProj->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1147
                        }
 
1148
                }
 
1149
 
 
1150
                if (g_bRDyn)
 
1151
                {
 
1152
                        mprintf("  Creating Reorientation Dynamics...\n");
 
1153
                        o->m_pRDyn->m_pRDyn->m_fMinVal = 0;
 
1154
                        o->m_pRDyn->m_pRDyn->m_fMaxVal = o->m_pRDyn->m_iDepth * g_fTimestepLength / 1000.0f;
 
1155
                        o->m_pRDyn->m_pRDyn->m_iResolution = o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;
 
1156
                        o->m_pRDyn->m_pRDyn->SetLabelX("Tau [ps]");
 
1157
                        o->m_pRDyn->m_pRDyn->SetLabelY("Vector autocorrelation");
 
1158
                        o->m_pRDyn->m_pRDyn->Create();
 
1159
                        if (g_bRDynCacheMode)
 
1160
                        {
 
1161
                                if (g_iTrajSteps != -1)
 
1162
                                        mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
 
1163
                                                else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
 
1164
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
 
1165
                                {
 
1166
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
1167
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1168
                                        
 
1169
                                        if (g_iTrajSteps != -1)
 
1170
                                        {
 
1171
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
 
1172
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
 
1173
                                        } else ptfa->SetGrow(10000);
 
1174
                                        o->m_pRDyn->m_oaCache.Add(ptfa);
 
1175
                                }
 
1176
                        } else
 
1177
                        {
 
1178
                                try { o->m_pRDyn->m_pCount = new double[o->m_pRDyn->m_pRDyn->m_iResolution]; } catch(...) { o->m_pRDyn->m_pCount = NULL; }
 
1179
                                if (o->m_pRDyn->m_pCount == NULL) NewException((double)o->m_pRDyn->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1180
                                
 
1181
                                for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
 
1182
                                        o->m_pRDyn->m_pCount[z2] = 0;
 
1183
                                if (!g_bRDynCacheMode)
 
1184
                                {
 
1185
                                        if (o->m_pRDyn->m_iDepth > g_iStepHistory)
 
1186
                                                g_iStepHistory = o->m_pRDyn->m_iDepth;
 
1187
                                }
 
1188
                        }
 
1189
                }
 
1190
 
 
1191
                if (g_bIRSpec)
 
1192
                {
 
1193
                        mprintf("  Creating IR Spectrum...\n");
 
1194
                        o->m_pIRSpec->m_pRDyn->m_fMinVal = 0;
 
1195
                        o->m_pIRSpec->m_pRDyn->m_fMaxVal = o->m_pIRSpec->m_iDepth * g_fTimestepLength / 1000.0f;
 
1196
                        o->m_pIRSpec->m_pRDyn->m_iResolution = o->m_pIRSpec->m_iDepth/o->m_pIRSpec->m_iStride;
 
1197
                        o->m_pIRSpec->m_pRDyn->SetLabelX("Tau [ps]");
 
1198
                        o->m_pIRSpec->m_pRDyn->SetLabelY("Dipole autocorrelation");
 
1199
                        o->m_pIRSpec->m_pRDyn->Create();
 
1200
                        if (g_bRDynCacheMode)
 
1201
                        {
 
1202
                                if (g_iTrajSteps != -1)
 
1203
                                        mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
 
1204
                                                else mprintf("    RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
 
1205
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations;z2++)
 
1206
                                {
 
1207
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
1208
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1209
                                        
 
1210
                                        if (g_iTrajSteps != -1)
 
1211
                                        {
 
1212
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
 
1213
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
 
1214
                                        } else ptfa->SetGrow(10000);
 
1215
                                        o->m_pIRSpec->m_oaCache.Add(ptfa);
 
1216
                                }
 
1217
                        } else
 
1218
                        {
 
1219
                                try { o->m_pIRSpec->m_pCount = new double[o->m_pIRSpec->m_pRDyn->m_iResolution]; } catch(...) { o->m_pIRSpec->m_pCount = NULL; }
 
1220
                                if (o->m_pIRSpec->m_pCount == NULL) NewException((double)o->m_pIRSpec->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1221
                                
 
1222
                                for (z2=0;z2<o->m_pIRSpec->m_pRDyn->m_iResolution;z2++)
 
1223
                                        o->m_pIRSpec->m_pCount[z2] = 0;
 
1224
                                if (!g_bRDynCacheMode)
 
1225
                                {
 
1226
                                        if (o->m_pIRSpec->m_iDepth > g_iStepHistory)
 
1227
                                                g_iStepHistory = o->m_pIRSpec->m_iDepth;
 
1228
                                }
 
1229
                        }
 
1230
                }
 
1231
 
 
1232
                if (g_bDens)
 
1233
                {
 
1234
                        mprintf("  Creating Density Distribution Function...\n");
 
1235
                        o->m_pDensityDF->m_pDensDF->m_fMinVal = o->m_pDensityDF->m_fMinDist;
 
1236
                        o->m_pDensityDF->m_pDensDF->m_fMaxVal = o->m_pDensityDF->m_fMaxDist;
 
1237
                        o->m_pDensityDF->m_pDensDF->m_iResolution = o->m_pDensityDF->m_iResolution;
 
1238
                        o->m_pDensityDF->m_pDensDF->m_iHistogramRes = o->m_pDensityDF->m_iHistogramRes;
 
1239
                        o->m_pDensityDF->m_pDensDF->SetLabelX("Distance [pm]");
 
1240
                        if (o->m_pDensityDF->m_bDensityMass)
 
1241
                                o->m_pDensityDF->m_pDensDF->SetLabelY("Mass Density [g/cm^3]");
 
1242
                                        else o->m_pDensityDF->m_pDensDF->SetLabelY("Particle Density [1/nm^3]");
 
1243
                        o->m_pDensityDF->m_pDensDF->Create();
 
1244
                }
 
1245
 
 
1246
                if (g_bVHDF)
 
1247
                {
 
1248
                        mprintf("  Creating VHCF...\n");
 
1249
                        o->m_pVHDF->m_pVHDF->m_fMinVal[1] = o->m_pVHDF->m_fMinDist;
 
1250
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[1] = o->m_pVHDF->m_fMaxDist;
 
1251
                        o->m_pVHDF->m_pVHDF->m_iRes[1] = o->m_pVHDF->m_iResolution;
 
1252
                        o->m_pVHDF->m_pVHDF->m_fMinVal[0] = 0.0;
 
1253
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[0] = o->m_pVHDF->m_iDepth * g_fTimestepLength / 1000.0f;
 
1254
                        o->m_pVHDF->m_pVHDF->m_iRes[0] = o->m_pVHDF->m_iDepth / o->m_pVHDF->m_iStride;
 
1255
                        o->m_pVHDF->m_pVHDF->Create();
 
1256
 
 
1257
                        try { o->m_pVHDF->m_pCount = new double[o->m_pVHDF->m_pVHDF->m_iRes[0]]; } catch(...) { o->m_pVHDF->m_pCount = NULL; }
 
1258
                        if (o->m_pVHDF->m_pCount == NULL) NewException((double)o->m_pVHDF->m_pVHDF->m_iRes[0]*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1259
                        
 
1260
                        for (z0=0;z0<o->m_pVHDF->m_pVHDF->m_iRes[0];z0++)
 
1261
                                o->m_pVHDF->m_pCount[z0] = 0;
 
1262
                        o->m_pVHDF->m_pVHDF->SetLabelY("Distance [pm]");
 
1263
                        o->m_pVHDF->m_pVHDF->SetLabelX("Tau [ps]");
 
1264
//                      o->m_pVHDF->m_pVHDF->m_fPlotExp = 1.0;
 
1265
                        if (o->m_pVHDF->m_iDepth > g_iStepHistory)
 
1266
                                g_iStepHistory = o->m_pVHDF->m_iDepth;
 
1267
                        mprintf("    Setting trajectory ring buffer to %s...\n",FormatBytes(g_iStepHistory*g_iGesVirtAtomCount*sizeof(float)*3));
 
1268
                } 
 
1269
 
 
1270
                if (g_bNbAnalysis)
 
1271
                {
 
1272
                        mprintf("  Creating Neighborhood Analysis...\n");
 
1273
 
 
1274
                        try { o->m_pNbAnalysis->m_pNPFCount = new CDF(); } catch(...) { o->m_pNbAnalysis->m_pNPFCount = NULL; }
 
1275
                        if (o->m_pNbAnalysis->m_pNPFCount == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1276
                        
 
1277
                        o->m_pNbAnalysis->m_pNPFCount->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
 
1278
                        o->m_pNbAnalysis->m_pNPFCount->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
 
1279
                        o->m_pNbAnalysis->m_pNPFCount->m_iResolution = o->m_pNbAnalysis->m_iResolution;
 
1280
 
 
1281
                        o->m_pNbAnalysis->m_pNPFCount->Create();
 
1282
 
 
1283
                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
 
1284
                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1285
                        
 
1286
                        tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
 
1287
                        tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
 
1288
                        tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
 
1289
                        tdf->SetLabelX("Distance [pm]");
 
1290
                        tdf->SetLabelY("Occurrence");
 
1291
                        tdf->Create();
 
1292
                        o->m_pNbAnalysis->m_oaNPF.Add(tdf);
 
1293
 
 
1294
                        for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
 
1295
                        {
 
1296
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
 
1297
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1298
                                
 
1299
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
 
1300
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
 
1301
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
 
1302
                                tdf->SetLabelX("Distance [pm]");
 
1303
                                tdf->SetLabelY("Occurrence");
 
1304
                                tdf->Create();
 
1305
                                o->m_pNbAnalysis->m_oaDF.Add(tdf);
 
1306
 
 
1307
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
 
1308
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1309
                                
 
1310
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
 
1311
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
 
1312
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
 
1313
                                tdf->SetLabelX("Distance [pm]");
 
1314
                                tdf->SetLabelY("Occurrence");
 
1315
                                tdf->Create();
 
1316
                                o->m_pNbAnalysis->m_oaNPF.Add(tdf);
 
1317
                        }
 
1318
                } 
 
1319
 
 
1320
                for (z0=0;z0<g_iCDFChannels;z0++)
 
1321
                {
 
1322
                        if (g_bRDF && (o->m_pRDF[z0] != NULL))
 
1323
                        {
 
1324
                                mprintf("  Creating RDF...\n");
 
1325
                                o->m_pRDF[z0]->m_pRDF->m_fMinVal = o->m_pRDF[z0]->m_fMinDist;
 
1326
                                o->m_pRDF[z0]->m_pRDF->m_fMaxVal = o->m_pRDF[z0]->m_fMaxDist;
 
1327
                                o->m_pRDF[z0]->m_pRDF->m_iResolution = o->m_pRDF[z0]->m_iResolution;
 
1328
                                o->m_pRDF[z0]->m_pRDF->m_iHistogramRes = o->m_pRDF[z0]->m_iHistogramRes;
 
1329
                                o->m_pRDF[z0]->m_pRDF->SetLabelX("Distance [pm]");
 
1330
                                if (o->m_pRDF[z0]->m_bProbDens)
 
1331
                                        o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r) [nm^(-3)]");
 
1332
                                                else o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r)");
 
1333
 
 
1334
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
1335
                                {
 
1336
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
 
1337
 
 
1338
                        /*              try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
 
1339
                                        if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1340
                                        
 
1341
                                        for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
 
1342
                                        {
 
1343
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
 
1344
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1345
                                        }
 
1346
                        */
 
1347
                                        for (z3=0;z3<o->m_waObsRefList.GetSize();z3++)
 
1348
                                        {
 
1349
                                                for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
 
1350
                                                {
 
1351
                                                        if ((o->m_waObsRefList.GetSize() > 1) && (o->m_waObsShowList.GetSize() > 1))
 
1352
                                                                sprintf(buf,"RM%d-OM%d",o->m_waObsRefList[z3]+1,o->m_waObsShowList[z2]+1);
 
1353
                                                        else if (o->m_waObsRefList.GetSize() > 1)
 
1354
                                                                sprintf(buf,"RM%d",o->m_waObsRefList[z3]+1);
 
1355
                                                        else 
 
1356
                                                                sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
 
1357
 
 
1358
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z3*o->m_waObsShowList.GetSize()+z2,buf);
 
1359
                                                }
 
1360
                                        }
 
1361
                                } else if (o->m_bDecompType)
 
1362
                                {
 
1363
                                        m = (CMolecule*)g_oaMolecules[g_iFixMol];
 
1364
                                        o->m_waDecompTypeRefOffs.SetSize(g_iGesVirtAtomCount);
 
1365
                                        for (z3=0;z3<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z3++)
 
1366
                                        {
 
1367
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z3*2];
 
1368
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
 
1369
                                                {
 
1370
                                                        for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
 
1371
                                                                if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
 
1372
                                                                        goto _decomptype1;
 
1373
                                                        z3 = o->m_waDecompTypeRefList.GetSize();
 
1374
                                                        o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
 
1375
_decomptype1:
 
1376
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
 
1377
                                                        {
 
1378
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
 
1379
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
 
1380
                                                                        o->m_waDecompTypeRefOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
 
1381
                                                        }
 
1382
                                                }
 
1383
                                        }
 
1384
 
 
1385
                                        if (o->m_bOthers)
 
1386
                                                m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
 
1387
                                                        else m = (CMolecule*)g_oaMolecules[g_iFixMol];
 
1388
                                        o->m_waDecompTypeObsOffs.SetSize(g_iGesVirtAtomCount);
 
1389
                                        for (z6=0;z6<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z6++)
 
1390
                                        {
 
1391
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z6*2+1];
 
1392
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
 
1393
                                                {
 
1394
                                                        for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
 
1395
                                                                if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
 
1396
                                                                        goto _decomptype2;
 
1397
                                                        z3 = o->m_waDecompTypeObsList.GetSize();
 
1398
                                                        o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
 
1399
_decomptype2:
 
1400
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
 
1401
                                                        {
 
1402
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
 
1403
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
 
1404
                                                                        o->m_waDecompTypeObsOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
 
1405
                                                        }
 
1406
                                                }
 
1407
                                        }
 
1408
 
 
1409
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
 
1410
 
 
1411
        /*                              try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
 
1412
                                        if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1413
                                        
 
1414
                                        for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
 
1415
                                        {
 
1416
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
 
1417
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1418
                                        }*/
 
1419
 
 
1420
                                        for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
 
1421
                                        {
 
1422
                                                for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
 
1423
                                                {
 
1424
                                                        sprintf(buf,"%s-%s",((CAtom*)g_oaAtoms[o->m_waDecompTypeRefList[z3]])->m_sName,((CAtom*)g_oaAtoms[o->m_waDecompTypeObsList[z2]])->m_sName);
 
1425
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waDecompTypeObsList.GetSize()+z2,buf);
 
1426
                                                }
 
1427
                                        }
 
1428
                                } else o->m_pRDF[z0]->m_pRDF->Create();
 
1429
 
 
1430
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1431
                                {
 
1432
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
 
1433
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1434
                                        
 
1435
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1436
                                        {
 
1437
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
 
1438
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1439
                                        }
 
1440
                                } else
 
1441
                                {
 
1442
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
 
1443
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1444
                                        
 
1445
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1446
                                        {
 
1447
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
 
1448
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1449
                                        }
 
1450
                                }
 
1451
                                if (o->m_bTimeDev)
 
1452
                                {
 
1453
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
1454
                                        {
 
1455
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[1]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
 
1456
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1457
                                                
 
1458
                                                sprintf(buf,"rdf_timedev_%s%s.csv",o->m_pRDF[z0]->m_sName,multibuf);
 
1459
                                                o->m_pRDF[z0]->m_fDist[0] = OpenFileWrite(buf,true);
 
1460
                                        } else
 
1461
                                        {
 
1462
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
 
1463
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1464
                                                
 
1465
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1466
                                                {
 
1467
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
1468
                                                        o->m_pRDF[z0]->m_fDist[z2] = OpenFileWrite(buf,true);
 
1469
                                                }
 
1470
                                        }
 
1471
                                        if (o->m_bCombinedPlot)
 
1472
                                        {
 
1473
//                                              mprintf("Combined: Reflist %d, Showlist %d, Combinations %d, Steps %d.\n",o->m_waSaveRefList.GetSize(),o->m_waSaveShowList.GetSize(),o->m_pRDF[z0]->m_iCombinations,g_iTrajSteps);
 
1474
 
 
1475
                                                try { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = NULL; }
 
1476
                                                if (o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1477
                                                
 
1478
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetTitle("Combined distance time development/histogram");
 
1479
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSubTitle(o->m_pRDF[z0]->m_sShortName);
 
1480
                                //              smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
 
1481
                                //              sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[0]];
 
1482
                                //              o->m_pRDF[z0]->BuildAtomList(smfix,sm,sm,&templa);
 
1483
                                                mprintf("    Trying to reserve %s of memory for combined plot...\n",FormatBytes((double)sizeof(double)*o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pRDF[z0]->m_iCombinations*g_iTrajSteps/g_iStride));
 
1484
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1485
                                                {
 
1486
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
1487
                                                        {
 
1488
                        /*                                      for (z4=0;z4<templa.GetSize()/2;z4++)
 
1489
                                                                {
 
1490
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
 
1491
                                                                        sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2]]]])->m_sName,g_waAtomMolNumber[templa[z4*2]]+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2+1]]]])->m_sName,g_waAtomMolNumber[templa[z4*2+1]]+1);
 
1492
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
 
1493
                                                                        if (g_iTrajSteps != -1)
 
1494
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *g_iTrajSteps);
 
1495
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *100);
 
1496
                                                                        if (o->m_bCombinedGreyMode)
 
1497
                                                                        {
 
1498
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1499
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_iLineColor = ti*0x10000 + ti*0x100 + ti;
 
1500
                                                                        }
 
1501
                                                                }*/
 
1502
 
 
1503
                                                                ti2 = 0;
 
1504
                                                                for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
 
1505
                                                                {
 
1506
                                                                        g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
 
1507
                                                                        for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
 
1508
                                                                        {
 
1509
                                                                                a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
 
1510
                                                                                for (z1a=0;z1a<a1->GetSize();z1a++)
 
1511
                                                                                {
 
1512
                                                                                        g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
 
1513
                                                                                        for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
 
1514
                                                                                        {
 
1515
                                                                                                a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
 
1516
                                                                                                for (z2a=0;z2a<a2->GetSize();z2a++)
 
1517
                                                                                                {
 
1518
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
 
1519
                                                                                                        if (o->m_bOthers)
 
1520
                                                                                                                sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
 
1521
                                                                                                                        else sprintf(buf,"%s[%d] %s%d - %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
 
1522
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
 
1523
                                                                                                        if (g_iTrajSteps != -1)
 
1524
                                                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *g_iTrajSteps/g_iStride);
 
1525
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *100);
 
1526
                                                                                                        if (o->m_bCombinedGreyMode)
 
1527
                                                                                                        {
 
1528
                                                                                                                ti = o->m_iCombinedGreyMin + ((ti2+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1529
                                                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
 
1530
                                                                                                        }
 
1531
                                                                                                        ti2++;
 
1532
/*                                                                                                      if (o->m_pRDF[z0]->m_iRefOrSec[0])
 
1533
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
 
1534
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
 
1535
                                                                                                        if (o->m_pRDF[z0]->m_iRefOrSec[1])
 
1536
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
 
1537
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
 
1538
*/                                                                              //                      mprintf("Vector z=%d, z1t=%d, z1a=%d, z2t=%d, z2a=%d.\n",z,z1t,z1a,z2t,z2a);
 
1539
                                                                                                }
 
1540
                                                                                        }
 
1541
                                                                                }
 
1542
                                                                        }
 
1543
                                                                }
 
1544
 
 
1545
                                                        }
 
1546
                                                }
 
1547
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelX("Time [ps] / g(r)");
 
1548
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelY("Distance [pm]");
 
1549
                                        }
 
1550
                                } // END IF TIMEDEV
 
1551
 
 
1552
                                if (o->m_bTimeDiff)
 
1553
                                        o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
 
1554
 
 
1555
                                if (g_bDeriv)
 
1556
                                        o->m_pRDF[z0]->InitDeriv();
 
1557
 
 
1558
                                if (o->m_pRDF[z0]->m_bCalcSD)
 
1559
                                {
 
1560
                                        mprintf("    Initializing Standard Deviation Engine...\n");
 
1561
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine = new CSDEngine();
 
1562
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes.SetSize(o->m_pRDF[z0]->m_iSDBlocks);
 
1563
                                        mprintf("    Using the following %d trajectory block sizes:",o->m_pRDF[z0]->m_iSDBlocks);
 
1564
                                        tf2 = 0;
 
1565
                                        tf = 3.0;
 
1566
                                        for (z4=0;z4<o->m_pRDF[z0]->m_iSDBlocks;z4++)
 
1567
                                        {
 
1568
                                                if ((z4 % 10) == 0)
 
1569
                                                        mprintf("\n      ");
 
1570
                                                o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) / (exp((o->m_pRDF[z0]->m_iSDBlocks-1.0)*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) * (o->m_pRDF[z0]->m_iSDBlockMax - o->m_pRDF[z0]->m_iSDBlockMin)) + o->m_pRDF[z0]->m_iSDBlockMin;
 
1571
                                                mprintf("%5d",o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]);
 
1572
                                                if (z4 < o->m_pRDF[z0]->m_iSDBlocks-1)
 
1573
                                                        mprintf(", ");
 
1574
                                                                else mprintf(".");
 
1575
                                                tf2 += (g_iTrajSteps/o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
 
1576
                                        }
 
1577
                                        tf2 *= o->m_pRDF[z0]->m_pRDF->m_iResolution * sizeof(double);
 
1578
                                        mprintf("\n    This requires %s of memory.\n\n",FormatBytes(tf2));
 
1579
                                        o->m_pRDF[z0]->m_pRDF->m_pSDEngine->Init(o->m_pRDF[z0]->m_pRDF->m_iResolution);
 
1580
                                }
 
1581
                        } // END IF RDF
 
1582
 
 
1583
                        if (g_bADF && (o->m_pADF[z0] != NULL))
 
1584
                        {
 
1585
                                mprintf("  Creating ADF...\n");
 
1586
                                o->m_pADF[z0]->m_pADF->m_fMinVal = o->m_pADF[z0]->m_fMinAngle;
 
1587
                                o->m_pADF[z0]->m_pADF->m_fMaxVal = o->m_pADF[z0]->m_fMaxAngle;
 
1588
                                o->m_pADF[z0]->m_pADF->m_iResolution = o->m_pADF[z0]->m_iResolution;
 
1589
                                o->m_pADF[z0]->m_pADF->m_iHistogramRes = o->m_pADF[z0]->m_iHistogramRes;
 
1590
                                if (o->m_pADF[z0]->m_bCosine)
 
1591
                                        o->m_pADF[z0]->m_pADF->SetLabelX("Cos(angle)");
 
1592
                                                else o->m_pADF[z0]->m_pADF->SetLabelX("Angle (degree)");
 
1593
                                o->m_pADF[z0]->m_pADF->SetLabelY("Occurrence");
 
1594
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
1595
                                        o->m_pADF[z0]->m_pADF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
 
1596
                                                else o->m_pADF[z0]->m_pADF->Create();
 
1597
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1598
                                {
 
1599
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
 
1600
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1601
                                        
 
1602
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1603
                                        {
 
1604
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
 
1605
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1606
                                        }
 
1607
                                } else
 
1608
                                {
 
1609
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
 
1610
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1611
                                        
 
1612
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1613
                                        {
 
1614
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
 
1615
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1616
                                        }
 
1617
                                }
 
1618
                                if (o->m_bTimeDev)
 
1619
                                {
 
1620
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
1621
                                        {
 
1622
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
 
1623
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1624
                                                
 
1625
                                                sprintf(buf,"adf_timedev_%s%s.csv",o->m_pADF[z0]->m_sName,multibuf);
 
1626
                                                o->m_pADF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
 
1627
                                        } else
 
1628
                                        {
 
1629
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
 
1630
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1631
                                                
 
1632
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1633
                                                {
 
1634
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
1635
                                                        o->m_pADF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
 
1636
                                                }
 
1637
                                        }
 
1638
                                        if (o->m_bCombinedPlot)
 
1639
                                        {
 
1640
                                                try { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = NULL; }
 
1641
                                                if (o->m_pADF[z0]->m_pADF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1642
                                                
 
1643
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetTitle("Combined angle time development/histogram");
 
1644
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSubTitle(o->m_pADF[z0]->m_sShortName);
 
1645
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1646
                                                {
 
1647
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
1648
                                                        {
 
1649
                                                                for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
 
1650
                                                                {
 
1651
                                                                        o->m_pADF[z0]->m_pADF->m_pCombinedPlot->AddDataset();
 
1652
                                                                        if (g_iTrajSteps != -1)
 
1653
                                                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*g_iTrajSteps);
 
1654
                                                                        o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*100);
 
1655
                                                                        if (o->m_bCombinedGreyMode)
 
1656
                                                                        {
 
1657
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pADF[z0]->m_iCombinations+z2*o->m_pADF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1658
                                                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
 
1659
                                                                        }
 
1660
                                        //                              o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pADF[z0]->m_iCombinations+z4,2.0f);
 
1661
                                                                }
 
1662
                                                        }
 
1663
                                                }
 
1664
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelX("Time [ps] / ADF(r)");
 
1665
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelY("Angle [Degree]");
 
1666
                                        }
 
1667
                                } // END IF TIMEDEV
 
1668
 
 
1669
                                if (o->m_bTimeDiff)
 
1670
                                        o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
 
1671
 
 
1672
                                if (g_bDeriv)
 
1673
                                        o->m_pADF[z0]->InitDeriv();
 
1674
                        } // END IF ADF
 
1675
 
 
1676
                        if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
 
1677
                        {
 
1678
                                mprintf("  Creating DipDF...\n");
 
1679
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMinVal = o->m_pDipDF[z0]->m_fDipoleMin;
 
1680
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMaxVal = o->m_pDipDF[z0]->m_fDipoleMax;
 
1681
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iResolution = o->m_pDipDF[z0]->m_iResolution;
 
1682
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iHistogramRes = o->m_pDipDF[z0]->m_iHistogramRes;
 
1683
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelX("Dipole moment (Debye)");
 
1684
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelY("Occurrence");
 
1685
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
1686
                                        o->m_pDipDF[z0]->m_pDipoleDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
 
1687
                                                else o->m_pDipDF[z0]->m_pDipoleDF->Create();
 
1688
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1689
                                {
 
1690
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
 
1691
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1692
                                        
 
1693
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1694
                                        {
 
1695
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
 
1696
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1697
                                        }
 
1698
                                } else
 
1699
                                {
 
1700
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
 
1701
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1702
                                        
 
1703
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1704
                                        {
 
1705
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
 
1706
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1707
                                        }
 
1708
                                }
 
1709
                                if (o->m_bTimeDev)
 
1710
                                {
 
1711
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
1712
                                        {
 
1713
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[1]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
 
1714
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1715
                                                
 
1716
                                                sprintf(buf,"dipole_timedev_%s%s.csv",o->m_pDipDF[z0]->m_sName,multibuf);
 
1717
                                                o->m_pDipDF[z0]->m_fDipole[0] = OpenFileWrite(buf,true);
 
1718
                                        } else
 
1719
                                        {
 
1720
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
 
1721
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1722
                                                
 
1723
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1724
                                                {
 
1725
                                                        sprintf(buf,"dipole_timedev_%s_ref%d%s.csv",o->m_pDipDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
1726
                                                        o->m_pDipDF[z0]->m_fDipole[z2] = OpenFileWrite(buf,true);
 
1727
                                                }
 
1728
                                        }
 
1729
                                        if (o->m_bCombinedPlot)
 
1730
                                        {
 
1731
                                                try { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = NULL; }
 
1732
                                                if (o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1733
                                                
 
1734
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetTitle("Combined dipole moment time development/histogram");
 
1735
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSubTitle(o->m_pDipDF[z0]->m_sShortName);
 
1736
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1737
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
1738
                                                        {
 
1739
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->AddDataset();
 
1740
                                                                if (g_iTrajSteps != -1)
 
1741
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*g_iTrajSteps);
 
1742
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*100);
 
1743
                                                                if (o->m_bCombinedGreyMode)
 
1744
                                                                {
 
1745
                                                                        ti = o->m_iCombinedGreyMin + ((z3+z2*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1746
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
 
1747
                                                                }
 
1748
                                                        }
 
1749
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelX("Time [ps] / DipDF(r)");
 
1750
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelY("Dipole moment [Debye]");
 
1751
                                        }
 
1752
                                } // END IF TIMEDEV
 
1753
 
 
1754
                                if (o->m_bTimeDiff)
 
1755
                                        o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
 
1756
 
 
1757
                                if (g_bDeriv)
 
1758
                                        o->m_pDipDF[z0]->InitDeriv();
 
1759
                        } // END IF DIPOLE
 
1760
 
 
1761
                        if (g_bVDF && (o->m_pVDF[z0] != NULL))
 
1762
                        {
 
1763
                                mprintf("  Creating VDF...\n");
 
1764
                                o->m_pVDF[z0]->m_pVDF->m_fMinVal = o->m_pVDF[z0]->m_fMinSpeed;
 
1765
                                o->m_pVDF[z0]->m_pVDF->m_fMaxVal = o->m_pVDF[z0]->m_fMaxSpeed;
 
1766
                                o->m_pVDF[z0]->m_pVDF->m_iResolution = o->m_pVDF[z0]->m_iResolution;
 
1767
                                o->m_pVDF[z0]->m_pVDF->m_iHistogramRes = o->m_pVDF[z0]->m_iHistogramRes;
 
1768
                                o->m_pVDF[z0]->m_pVDF->SetLabelX("Velocity [pm/ps]");
 
1769
                                o->m_pVDF[z0]->m_pVDF->SetLabelY("Occurrence");
 
1770
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
1771
                                        o->m_pVDF[z0]->m_pVDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
 
1772
                                                else o->m_pVDF[z0]->m_pVDF->Create();
 
1773
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1774
                                {
 
1775
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
 
1776
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1777
                                        
 
1778
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1779
                                        {
 
1780
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
 
1781
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1782
                                        }
 
1783
                                } else
 
1784
                                {
 
1785
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
 
1786
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1787
                                        
 
1788
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1789
                                        {
 
1790
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
 
1791
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1792
                                        }
 
1793
                                }
 
1794
                                if (o->m_bTimeDev)
 
1795
                                {
 
1796
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
1797
                                        {
 
1798
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[1]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
 
1799
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1800
                                                
 
1801
                                                sprintf(buf,"vdf_timedev_%s%s.csv",o->m_pVDF[z0]->m_sName,multibuf);
 
1802
                                                o->m_pVDF[z0]->m_fSpeed[0] = OpenFileWrite(buf,true);
 
1803
                                        } else
 
1804
                                        {
 
1805
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
 
1806
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1807
                                                
 
1808
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1809
                                                {
 
1810
                                                        sprintf(buf,"vdf_timedev_%s_ref%d%s.csv",o->m_pVDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
1811
                                                        o->m_pVDF[z0]->m_fSpeed[z2] = OpenFileWrite(buf,true);
 
1812
                                                }
 
1813
                                        }
 
1814
                                        if (o->m_bCombinedPlot)
 
1815
                                        {
 
1816
                                                try { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = NULL; }
 
1817
                                                if (o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1818
                                                
 
1819
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetTitle("Combined velocity time development/histogram");
 
1820
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSubTitle(o->m_pVDF[z0]->m_sShortName);
 
1821
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1822
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
1823
                                                                for (z4=0;z4<o->m_pVDF[z0]->m_iCombinations;z4++)
 
1824
                                                                {
 
1825
                                                                        o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->AddDataset();
 
1826
                                                                        if (g_iTrajSteps != -1)
 
1827
                                                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*g_iTrajSteps);
 
1828
                                                                        o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*100);
 
1829
                                                                        if (o->m_bCombinedGreyMode)
 
1830
                                                                        {
 
1831
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pVDF[z0]->m_iCombinations+z2*o->m_pVDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1832
                                                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
 
1833
                                                                        }
 
1834
//                                                                      o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
 
1835
                                                                }
 
1836
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelX("Time [ps] / VDF(r)");
 
1837
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelY("Velocity [pm/ps]");
 
1838
                                        }
 
1839
                                } // END IF TIMEDEV
 
1840
 
 
1841
                                if (o->m_bTimeDiff)
 
1842
                                        o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
 
1843
 
 
1844
                                if (g_bDeriv)
 
1845
                                        o->m_pVDF[z0]->InitDeriv();
 
1846
                        } // END IF VDF
 
1847
 
 
1848
                        if (g_bDDF && (o->m_pDDF[z0] != NULL))
 
1849
                        {
 
1850
                                mprintf("  Creating DDF...\n");
 
1851
                                o->m_pDDF[z0]->m_pDDF->m_fMinVal = o->m_pDDF[z0]->m_fMinAngle;
 
1852
                                o->m_pDDF[z0]->m_pDDF->m_fMaxVal = o->m_pDDF[z0]->m_fMaxAngle;
 
1853
                                o->m_pDDF[z0]->m_pDDF->m_iResolution = o->m_pDDF[z0]->m_iResolution;
 
1854
                                o->m_pDDF[z0]->m_pDDF->m_iHistogramRes = o->m_pDDF[z0]->m_iHistogramRes;
 
1855
                                if (o->m_pDDF[z0]->m_bCosine)
 
1856
                                        o->m_pDDF[z0]->m_pDDF->SetLabelX("Cos(Dihedral Angle)");
 
1857
                                                else o->m_pDDF[z0]->m_pDDF->SetLabelX("Dihedral Angle (Degree)");
 
1858
                                o->m_pDDF[z0]->m_pDDF->SetLabelY("Occurrence");
 
1859
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
1860
                                        o->m_pDDF[z0]->m_pDDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
 
1861
                                                else o->m_pDDF[z0]->m_pDDF->Create();
 
1862
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1863
                                {
 
1864
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
 
1865
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1866
                                        
 
1867
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1868
                                        {
 
1869
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
 
1870
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1871
                                        }
 
1872
                                } else
 
1873
                                {
 
1874
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
 
1875
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1876
                                        
 
1877
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1878
                                        {
 
1879
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
 
1880
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1881
                                        }
 
1882
                                                
 
1883
                                        if (o->m_pDDF[z0]->m_bRotate)
 
1884
                                        {
 
1885
                                                for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
 
1886
                                                {
 
1887
                                                        o->m_pDDF[z0]->m_faLastData.Add(0);
 
1888
                                                        o->m_pDDF[z0]->m_laRotation.Add(0);
 
1889
                                                }
 
1890
                                        }
 
1891
                                }
 
1892
                                if (o->m_bTimeDev)
 
1893
                                {
 
1894
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
1895
                                        {
 
1896
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
 
1897
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1898
                                                
 
1899
                                                sprintf(buf,"ddf_timedev_%s%s.csv",o->m_pDDF[z0]->m_sName,multibuf);
 
1900
                                                o->m_pDDF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
 
1901
                                        } else
 
1902
                                        {
 
1903
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
 
1904
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1905
                                                
 
1906
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1907
                                                {
 
1908
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
1909
                                                        o->m_pDDF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
 
1910
                                                }
 
1911
                                        }
 
1912
                                        if (o->m_bCombinedPlot)
 
1913
                                        {
 
1914
                                                try { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = NULL; }
 
1915
                                                if (o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1916
                                                
 
1917
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetTitle("Combined dihedral time development/histogram");
 
1918
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSubTitle(o->m_pDDF[z0]->m_sShortName);
 
1919
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
1920
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
1921
                                                                for (z4=0;z4<o->m_pDDF[z0]->m_iCombinations;z4++)
 
1922
                                                                {
 
1923
                                                                        o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->AddDataset();
 
1924
                                                                        if (g_iTrajSteps != -1)
 
1925
                                                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*g_iTrajSteps);
 
1926
                                                                        o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*100);
 
1927
                                                                        if (o->m_bCombinedGreyMode)
 
1928
                                                                        {
 
1929
                                                                                ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pDDF[z0]->m_iCombinations+z2*o->m_pDDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
 
1930
                                                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
 
1931
                                                                        }
 
1932
                                //                                      o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pDDF[z0]->m_iCombinations+z4,2.0f);
 
1933
                                                                }
 
1934
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelX("Time [ps] / DDF(r)");
 
1935
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelY("Dihedral [Degree]");
 
1936
                                        }
 
1937
                                } // END IF TIMEDEV
 
1938
 
 
1939
                                if (o->m_bTimeDiff)
 
1940
                                        o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
 
1941
 
 
1942
                                if (g_bDeriv)
 
1943
                                        o->m_pDDF[z0]->InitDeriv();
 
1944
                        } // END IF DDF
 
1945
 
 
1946
                        if (g_bPlDF && (o->m_pPlDF[z0] != NULL))
 
1947
                        {
 
1948
                                mprintf("  Creating PlDF...\n");
 
1949
                                o->m_pPlDF[z0]->m_pPlDF->m_fMinVal = o->m_pPlDF[z0]->m_fMinDist;
 
1950
                                o->m_pPlDF[z0]->m_pPlDF->m_fMaxVal = o->m_pPlDF[z0]->m_fMaxDist;
 
1951
                                o->m_pPlDF[z0]->m_pPlDF->m_iResolution = o->m_pPlDF[z0]->m_iResolution;
 
1952
                                o->m_pPlDF[z0]->m_pPlDF->m_iHistogramRes = o->m_pPlDF[z0]->m_iHistogramRes;
 
1953
                                o->m_pPlDF[z0]->m_pPlDF->SetLabelX("Distance from plane [pm]");
 
1954
                                o->m_pPlDF[z0]->m_pPlDF->SetLabelY("Occurrence");
 
1955
                                o->m_pPlDF[z0]->m_pPlDF->Create();
 
1956
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1957
                                {
 
1958
                                        try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
 
1959
                                        if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1960
                                        
 
1961
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1962
                                        {
 
1963
                                                try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
 
1964
                                                if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1965
                                        }
 
1966
                                } else
 
1967
                                {
 
1968
                                        try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
 
1969
                                        if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1970
                                        
 
1971
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1972
                                        {
 
1973
                                                try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
 
1974
                                                if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1975
                                        }
 
1976
                                }
 
1977
                        } // END IF PlDF
 
1978
 
 
1979
                        if (g_bLiDF && (o->m_pLiDF[z0] != NULL))
 
1980
                        {
 
1981
                                mprintf("  Creating LiDF...\n");
 
1982
                                o->m_pLiDF[z0]->m_pLiDF->m_fMinVal = o->m_pLiDF[z0]->m_fMinDist;
 
1983
                                o->m_pLiDF[z0]->m_pLiDF->m_fMaxVal = o->m_pLiDF[z0]->m_fMaxDist;
 
1984
                                o->m_pLiDF[z0]->m_pLiDF->m_iResolution = o->m_pLiDF[z0]->m_iResolution;
 
1985
                                o->m_pLiDF[z0]->m_pLiDF->m_iHistogramRes = o->m_pLiDF[z0]->m_iHistogramRes;
 
1986
                                o->m_pLiDF[z0]->m_pLiDF->SetLabelX("Distance from line [pm]");
 
1987
                                o->m_pLiDF[z0]->m_pLiDF->SetLabelY("Occurrence");
 
1988
                                o->m_pLiDF[z0]->m_pLiDF->Create();
 
1989
                                if (o->m_bSecondShowMol && (z0 == 1))
 
1990
                                {
 
1991
                                        try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
 
1992
                                        if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1993
                                        
 
1994
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
1995
                                        {
 
1996
                                                try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
 
1997
                                                if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
1998
                                        }
 
1999
                                } else
 
2000
                                {
 
2001
                                        try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
 
2002
                                        if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2003
                                        
 
2004
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
2005
                                        {
 
2006
                                                try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
 
2007
                                                if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2008
                                        }
 
2009
                                }
 
2010
                        } // END IF LiDF
 
2011
 
 
2012
                } // END FOR z0
 
2013
 
 
2014
                if (g_bCDF)
 
2015
                {
 
2016
                        mprintf("  Creating CDF...\n");
 
2017
                        if (g_iCDFChannels == 2)
 
2018
                        {
 
2019
                                try { o->m_pCDF->m_p2DF = new C2DF(); } catch(...) { o->m_pCDF->m_p2DF = NULL; }
 
2020
                                if (o->m_pCDF->m_p2DF == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2021
                                
 
2022
                                buf[0] = 0;
 
2023
                                for (z2=0;z2<2;z2++)
 
2024
                                {
 
2025
                                        o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
 
2026
                                        switch(g_iObsChannel[z2])
 
2027
                                        {
 
2028
                                                case 0:
 
2029
                                                        strcat(buf,"_rdf");
 
2030
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
 
2031
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
 
2032
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
 
2033
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
 
2034
                                                        break;
 
2035
 
 
2036
                                                case 1:
 
2037
                                                        strcat(buf,"_adf");
 
2038
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
 
2039
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
 
2040
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
 
2041
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
 
2042
                                                        break;
 
2043
 
 
2044
                                                case 2:
 
2045
                                                        strcat(buf,"_ddf");
 
2046
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
 
2047
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
 
2048
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
 
2049
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
 
2050
                                                        break;
 
2051
 
 
2052
                                                case 3:
 
2053
                                                        strcat(buf,"_dipole");
 
2054
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
 
2055
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
 
2056
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
 
2057
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
 
2058
                                                        break;
 
2059
 
 
2060
                                                case 4:
 
2061
                                                        strcat(buf,"_vdf");
 
2062
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
 
2063
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
 
2064
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
 
2065
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
 
2066
                                                        break;
 
2067
 
 
2068
                                                case 5:
 
2069
                                                        strcat(buf,"_pldf");
 
2070
                                                        strcat(buf,o->m_pPlDF[z2]->m_sShortName);
 
2071
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
 
2072
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
 
2073
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
 
2074
                                                        break;
 
2075
 
 
2076
                                                case 6:
 
2077
                                                        strcat(buf,"_lidf");
 
2078
                                                        strcat(buf,o->m_pLiDF[z2]->m_sShortName);
 
2079
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
 
2080
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
 
2081
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
 
2082
                                                        break;
 
2083
                                        }
 
2084
                                }
 
2085
                                o->m_pCDF->m_p2DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
 
2086
                                o->m_pCDF->m_p2DF->Create();
 
2087
                                switch(g_iObsChannel[0])
 
2088
                                {
 
2089
                                        case 0:
 
2090
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
 
2091
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2092
                                                break;
 
2093
                                        case 1:
 
2094
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
 
2095
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2096
                                                break;
 
2097
                                        case 2:
 
2098
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
 
2099
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2100
                                                break;
 
2101
                                        case 3:
 
2102
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
 
2103
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2104
                                                break;
 
2105
                                        case 4:
 
2106
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
 
2107
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2108
                                                break;
 
2109
                                        case 5:
 
2110
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
 
2111
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2112
                                                break;
 
2113
                                        case 6:
 
2114
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
 
2115
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
 
2116
                                                break;
 
2117
                                }
 
2118
                                switch(g_iObsChannel[1])
 
2119
                                {
 
2120
                                        case 0:
 
2121
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
 
2122
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2123
                                                break;
 
2124
                                        case 1:
 
2125
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
 
2126
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2127
                                                break;
 
2128
                                        case 2:
 
2129
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
 
2130
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2131
                                                break;
 
2132
                                        case 3:
 
2133
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
 
2134
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2135
                                                break;
 
2136
                                        case 4:
 
2137
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
 
2138
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2139
                                                break;
 
2140
                                        case 5:
 
2141
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
 
2142
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2143
                                                break;
 
2144
                                        case 6:
 
2145
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
 
2146
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
 
2147
                                                break;
 
2148
                                }
 
2149
                        } // END IF CHANNELS == 2
 
2150
 
 
2151
                        if (g_iCDFChannels == 3)
 
2152
                        {
 
2153
                                try { o->m_pCDF->m_p3DF = new C3DF(); } catch(...) { o->m_pCDF->m_p3DF = NULL; }
 
2154
                                if (o->m_pCDF->m_p3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2155
                                
 
2156
                                buf[0] = 0;
 
2157
                                for (z2=0;z2<g_iCDFChannels;z2++)
 
2158
                                {
 
2159
                                        o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
 
2160
                                        switch(g_iObsChannel[z2])
 
2161
                                        {
 
2162
                                                case 0:
 
2163
                                                        strcat(buf,"_rdf");
 
2164
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
 
2165
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
 
2166
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
 
2167
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
 
2168
                                                        break;
 
2169
                                                case 1:
 
2170
                                                        strcat(buf,"_adf");
 
2171
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
 
2172
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
 
2173
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
 
2174
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
 
2175
                                                        break;
 
2176
                                                case 2:
 
2177
                                                        strcat(buf,"_ddf");
 
2178
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
 
2179
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
 
2180
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
 
2181
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
 
2182
                                                        break;
 
2183
                                                case 3:
 
2184
                                                        strcat(buf,"_dipole");
 
2185
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
 
2186
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
 
2187
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
 
2188
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
 
2189
                                                        break;
 
2190
                                                case 4:
 
2191
                                                        strcat(buf,"_vdf");
 
2192
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
 
2193
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
 
2194
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
 
2195
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
 
2196
                                                        break;
 
2197
                                                case 5:
 
2198
                                                        strcat(buf,"_pldf");
 
2199
                                                        strcat(buf,o->m_pPlDF[z2]->m_sShortName);
 
2200
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
 
2201
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
 
2202
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
 
2203
                                                        break;
 
2204
                                                case 6:
 
2205
                                                        strcat(buf,"_lidf");
 
2206
                                                        strcat(buf,o->m_pLiDF[z2]->m_sShortName);
 
2207
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
 
2208
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
 
2209
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
 
2210
                                                        break;
 
2211
                                        }
 
2212
                                }
 
2213
                                o->m_pCDF->m_p3DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
 
2214
                                o->m_pCDF->m_p3DF->Create();
 
2215
                                switch(g_iObsChannel[0])
 
2216
                                {
 
2217
                                        case 0:
 
2218
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
 
2219
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2220
                                                break;
 
2221
                                        case 1:
 
2222
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
 
2223
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2224
                                                break;
 
2225
                                        case 2:
 
2226
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
 
2227
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2228
                                                break;
 
2229
                                        case 3:
 
2230
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
 
2231
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2232
                                                break;
 
2233
                                        case 4:
 
2234
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
 
2235
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2236
                                                break;
 
2237
                                        case 5:
 
2238
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
 
2239
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2240
                                                break;
 
2241
                                        case 6:
 
2242
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
 
2243
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
 
2244
                                                break;
 
2245
                                }
 
2246
                                switch(g_iObsChannel[1])
 
2247
                                {
 
2248
                                        case 0:
 
2249
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
 
2250
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2251
                                                break;
 
2252
                                        case 1:
 
2253
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
 
2254
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2255
                                                break;
 
2256
                                        case 2:
 
2257
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
 
2258
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2259
                                                break;
 
2260
                                        case 3:
 
2261
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
 
2262
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2263
                                                break;
 
2264
                                        case 4:
 
2265
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
 
2266
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2267
                                                break;
 
2268
                                        case 5:
 
2269
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
 
2270
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2271
                                                break;
 
2272
                                        case 6:
 
2273
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
 
2274
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
 
2275
                                                break;
 
2276
                                }
 
2277
                                switch(g_iObsChannel[2])
 
2278
                                {
 
2279
                                        case 0:
 
2280
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
 
2281
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2282
                                                break;
 
2283
                                        case 1:
 
2284
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
 
2285
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2286
                                                break;
 
2287
                                        case 2:
 
2288
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
 
2289
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2290
                                                break;
 
2291
                                        case 3:
 
2292
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
 
2293
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2294
                                                break;
 
2295
                                        case 4:
 
2296
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
 
2297
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2298
                                                break;
 
2299
                                        case 5:
 
2300
                                                sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[2]->m_sShortName);
 
2301
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2302
                                                break;
 
2303
                                        case 6:
 
2304
                                                sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[2]->m_sShortName);
 
2305
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
 
2306
                                                break;
 
2307
                                }
 
2308
 
 
2309
                                // Fuer jede C3DF noch die 3 C2DFs erzeugen
 
2310
                                for (z3=0;z3<3;z3++)
 
2311
                                {
 
2312
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3] = new C2DF(); } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3] = NULL; }
 
2313
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2314
                                        
 
2315
                                        buf3[0] = 0;
 
2316
                                        switch(z3)
 
2317
                                        {
 
2318
                                                case 0:
 
2319
                                                        tia[0] = 0;
 
2320
                                                        tia[1] = 1;
 
2321
                                                        break;
 
2322
                                                case 1:
 
2323
                                                        tia[0] = 0;
 
2324
                                                        tia[1] = 2;
 
2325
                                                        break;
 
2326
                                                case 2:
 
2327
                                                        tia[0] = 1;
 
2328
                                                        tia[1] = 2;
 
2329
                                                        break;
 
2330
                                        }
 
2331
                                        for (z2=0;z2<2;z2++)
 
2332
                                        {
 
2333
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iRes[z2] = o->m_pCDF->m_iResolution[tia[z2]];
 
2334
                                                switch(g_iObsChannel[tia[z2]])
 
2335
                                                {
 
2336
                                                        case 0:
 
2337
                                                                strcat(buf3,"_rdf");
 
2338
                                                                strcat(buf3,o->m_pRDF[tia[z2]]->m_sShortName);
 
2339
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pRDF[tia[z2]]->m_fMinDist;
 
2340
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pRDF[tia[z2]]->m_fMaxDist;
 
2341
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pRDF[tia[z2]]->m_pRDF;
 
2342
                                                                break;
 
2343
                                                        case 1:
 
2344
                                                                strcat(buf3,"_adf");
 
2345
                                                                strcat(buf3,o->m_pADF[tia[z2]]->m_sShortName);
 
2346
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pADF[tia[z2]]->m_fMinAngle;
 
2347
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pADF[tia[z2]]->m_fMaxAngle;
 
2348
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pADF[tia[z2]]->m_pADF;
 
2349
                                                                break;
 
2350
                                                        case 2:
 
2351
                                                                strcat(buf3,"_ddf");
 
2352
                                                                strcat(buf3,o->m_pDDF[tia[z2]]->m_sShortName);
 
2353
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDDF[tia[z2]]->m_fMinAngle;
 
2354
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDDF[tia[z2]]->m_fMaxAngle;
 
2355
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDDF[tia[z2]]->m_pDDF;
 
2356
                                                                break;
 
2357
                                                        case 3:
 
2358
                                                                strcat(buf3,"_dipole");
 
2359
                                                                strcat(buf3,o->m_pDipDF[tia[z2]]->m_sShortName);
 
2360
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMin;
 
2361
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMax;
 
2362
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDipDF[tia[z2]]->m_pDipoleDF;
 
2363
                                                                break;
 
2364
                                                        case 4:
 
2365
                                                                strcat(buf3,"_vdf");
 
2366
                                                                strcat(buf3,o->m_pVDF[tia[z2]]->m_sShortName);
 
2367
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pVDF[tia[z2]]->m_fMinSpeed;
 
2368
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pVDF[tia[z2]]->m_fMaxSpeed;
 
2369
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pVDF[tia[z2]]->m_pVDF;
 
2370
                                                                break;
 
2371
                                                        case 5:
 
2372
                                                                strcat(buf3,"_pldf");
 
2373
                                                                strcat(buf3,o->m_pPlDF[tia[z2]]->m_sShortName);
 
2374
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pPlDF[tia[z2]]->m_fMinDist;
 
2375
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pPlDF[tia[z2]]->m_fMaxDist;
 
2376
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pPlDF[tia[z2]]->m_pPlDF;
 
2377
                                                                break;
 
2378
                                                        case 6:
 
2379
                                                                strcat(buf3,"_lidf");
 
2380
                                                                strcat(buf3,o->m_pLiDF[tia[z2]]->m_sShortName);
 
2381
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pLiDF[tia[z2]]->m_fMinDist;
 
2382
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pLiDF[tia[z2]]->m_fMaxDist;
 
2383
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pLiDF[tia[z2]]->m_pLiDF;
 
2384
                                                                break;
 
2385
                                                }
 
2386
                                        }
 
2387
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
 
2388
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Create();
 
2389
                                        switch(g_iObsChannel[tia[0]])
 
2390
                                        {
 
2391
                                                case 0:
 
2392
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
 
2393
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2394
                                                        break;
 
2395
                                                case 1:
 
2396
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
 
2397
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2398
                                                        break;
 
2399
                                                case 2:
 
2400
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
 
2401
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2402
                                                        break;
 
2403
                                                case 3:
 
2404
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[0]]->m_sShortName);
 
2405
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2406
                                                        break;
 
2407
                                                case 4:
 
2408
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[0]]->m_sShortName);
 
2409
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2410
                                                        break;
 
2411
                                                case 5:
 
2412
                                                        sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[0]]->m_sShortName);
 
2413
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2414
                                                        break;
 
2415
                                                case 6:
 
2416
                                                        sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[0]]->m_sShortName);
 
2417
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
 
2418
                                                        break;
 
2419
                                        }
 
2420
                                        switch(g_iObsChannel[tia[1]])
 
2421
                                        {
 
2422
                                                case 0:
 
2423
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
 
2424
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2425
                                                        break;
 
2426
                                                case 1:
 
2427
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
 
2428
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2429
                                                        break;
 
2430
                                                case 2:
 
2431
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
 
2432
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2433
                                                        break;
 
2434
                                                case 3:
 
2435
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[1]]->m_sShortName);
 
2436
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2437
                                                        break;
 
2438
                                                case 4:
 
2439
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[1]]->m_sShortName);
 
2440
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2441
                                                        break;
 
2442
                                                case 5:
 
2443
                                                        sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[1]]->m_sShortName);
 
2444
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2445
                                                        break;
 
2446
                                                case 6:
 
2447
                                                        sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[1]]->m_sShortName);
 
2448
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
 
2449
                                                        break;
 
2450
                                        }
 
2451
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = NULL; }
 
2452
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2453
                                        
 
2454
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName,buf3);
 
2455
                                        sprintf(buf3,"cdf_2");
 
2456
                                        strcat(buf3,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName);
 
2457
 
 
2458
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = NULL; }
 
2459
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2460
                                        
 
2461
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
 
2462
                                } // END FOR z3
 
2463
                        } // END IF CHANNELS == 3
 
2464
 
 
2465
                        try { o->m_pCDF->m_sShortName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sShortName = NULL; }
 
2466
                        if (o->m_pCDF->m_sShortName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2467
                        
 
2468
                        strcpy(o->m_pCDF->m_sShortName,buf);
 
2469
                        sprintf(buf,"cdf_%d",g_iCDFChannels);
 
2470
                        strcat(buf,o->m_pCDF->m_sShortName);
 
2471
 
 
2472
                        try { o->m_pCDF->m_sName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sName = NULL; }
 
2473
                        if (o->m_pCDF->m_sName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2474
                        
 
2475
                        strcpy(o->m_pCDF->m_sName,buf);
 
2476
                        if (o->m_pCDF->m_bDumpDat)
 
2477
                        {
 
2478
                                sprintf(buf,"cdfdump_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
 
2479
                                o->m_pCDF->m_fDump = OpenFileWrite(buf,true);
 
2480
                                mfprintf(o->m_pCDF->m_fDump,"#  step;  RM;  OM1;  OM2;  channels\n");
 
2481
                        }
 
2482
                        if (o->m_bTimeDev)
 
2483
                        {
 
2484
                                if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
2485
                                {
 
2486
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[1]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
 
2487
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2488
                                        
 
2489
                                        sprintf(buf,"cdf_timedev_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
 
2490
                                        o->m_pCDF->m_fTimeDev[0] = OpenFileWrite(buf,true);
 
2491
                                } else
 
2492
                                {
 
2493
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
 
2494
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2495
                                        
 
2496
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
2497
                                        {
 
2498
                                                sprintf(buf,"cdf_timedev_%dd%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
 
2499
                                                o->m_pCDF->m_fTimeDev[z2] = OpenFileWrite(buf,true);
 
2500
                                        }
 
2501
                                }
 
2502
                                if (o->m_pCDF->m_bTDAnimation)
 
2503
                                {
 
2504
                                        try { o->m_pCDF->m_pTDAPlot = new CGrace(); } catch(...) { o->m_pCDF->m_pTDAPlot = NULL; }
 
2505
                                        if (o->m_pCDF->m_pTDAPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2506
                                        
 
2507
                                        o->m_pCDF->m_pTDAPlot->SetTitle("CDF Time Development");
 
2508
                                        o->m_pCDF->m_pTDAPlot->SetSubTitle(&o->m_pCDF->m_sShortName[1]);
 
2509
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
2510
                                        {
 
2511
                                                for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
 
2512
                                                {
 
2513
                                                        for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
 
2514
                                                        {
 
2515
                                                                o->m_pCDF->m_pTDAPlot->AddDataset();
 
2516
                                                                if (g_iTrajSteps != -1)
 
2517
                                                                        o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*g_iTrajSteps);
 
2518
                                                                o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*100);
 
2519
                                                        }
 
2520
                                                }
 
2521
                                        }
 
2522
                                        o->m_pCDF->m_pTDAPlot->SetRangeX(o->m_pCDF->m_p2DF->m_fMinVal[0],o->m_pCDF->m_p2DF->m_fMaxVal[0]);
 
2523
                                        o->m_pCDF->m_pTDAPlot->SetRangeY(o->m_pCDF->m_p2DF->m_fMinVal[1],o->m_pCDF->m_p2DF->m_fMaxVal[1]);
 
2524
                                        o->m_pCDF->m_pTDAPlot->MakeTicks();
 
2525
                                        o->m_pCDF->m_pTDAPlot->SetLabelX(o->m_pCDF->m_p2DF->m_sLabelX);
 
2526
                                        o->m_pCDF->m_pTDAPlot->SetLabelY(o->m_pCDF->m_p2DF->m_sLabelY);
 
2527
                                }
 
2528
                        }
 
2529
                } // END IF CDF
 
2530
 
 
2531
                if (g_bVACF)
 
2532
                {
 
2533
                        mprintf("  Creating VACF...\n");
 
2534
                        o->m_pVACF->Create();
 
2535
                        if (g_bVACFCacheMode)
 
2536
                        {
 
2537
                                mprintf("    VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes*g_iTrajSteps*3.1*sizeof(float)));
 
2538
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
 
2539
                                {
 
2540
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
2541
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2542
                                        
 
2543
                                        if (g_iTrajSteps != -1)
 
2544
                                        {
 
2545
                                                ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
 
2546
                                                ptfa->SetGrow((long)(g_iTrajSteps*0.1));
 
2547
                                        } else ptfa->SetGrow(1000);
 
2548
                                        o->m_pVACF->m_oaCache.Add(ptfa);
 
2549
                                }
 
2550
                        } else
 
2551
                        {
 
2552
                                if (o->m_pVACF->m_iSize > g_iStepHistory)
 
2553
                                        g_iStepHistory = o->m_pVACF->m_iSize;
 
2554
                        }
 
2555
                }
 
2556
 
 
2557
/*              if (g_bDipACF)
 
2558
                {
 
2559
                        mprintf("  Creating DipACF...\n");
 
2560
                        o->m_pDipACF->Create();
 
2561
                }*/
 
2562
 
 
2563
                if (g_bMSD)
 
2564
                {
 
2565
                        mprintf("  Creating MSD...\n");
 
2566
                        o->m_pMSD->m_pMSD->m_fMinVal = 0.0f;
 
2567
                        o->m_pMSD->m_pMSD->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength*g_iStride/1000.0;
 
2568
                        o->m_pMSD->m_pMSD->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
 
2569
                        o->m_pMSD->m_pMSD->Create();
 
2570
                        if (g_bMSDCacheMode)
 
2571
                        {
 
2572
                                mprintf("    MSD Cache: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
 
2573
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
 
2574
                                {
 
2575
                                        try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
 
2576
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2577
                                        
 
2578
                                        if (g_iTrajSteps != -1)
 
2579
                                        {
 
2580
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.1));
 
2581
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.1));
 
2582
                                        } else ptfa->SetGrow(1000);
 
2583
                                        o->m_pMSD->m_oaCache.Add(ptfa);
 
2584
                                }
 
2585
                                if (o->m_pMSD->m_bSplit)
 
2586
                                {
 
2587
                                        mprintf("    MSD Split: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride*sizeof(double)));
 
2588
                                        try { o->m_pMSD->m_pSplitMSD = new CAF*[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms]; } catch(...) { o->m_pMSD->m_pSplitMSD = NULL; }
 
2589
                                        if (o->m_pMSD->m_pSplitMSD == NULL) NewException((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*sizeof(CAF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2590
                                        
 
2591
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
 
2592
                                        {
 
2593
                                                try { o->m_pMSD->m_pSplitMSD[z2] = new CAF(); } catch(...) { o->m_pMSD->m_pSplitMSD[z2] = NULL; }
 
2594
                                                if (o->m_pMSD->m_pSplitMSD[z2] == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2595
                                                
 
2596
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMinVal = 0.0f;
 
2597
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength/1000.0;
 
2598
                                                o->m_pMSD->m_pSplitMSD[z2]->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
 
2599
                                                o->m_pMSD->m_pSplitMSD[z2]->Create();
 
2600
                                        }
 
2601
                                }
 
2602
                        } else
 
2603
                        {
 
2604
                                if (!g_bMSDCacheMode)
 
2605
                                {
 
2606
                                        if (o->m_pMSD->m_iResolution > g_iStepHistory)
 
2607
                                                g_iStepHistory = o->m_pMSD->m_iResolution;
 
2608
                                }
 
2609
                        }
 
2610
                }
 
2611
 
 
2612
                if (g_bRevSDF)
 
2613
                {
 
2614
                        mprintf("  Creating Pseudo SDF...\n");
 
2615
                        o->m_pRevSDF->m_p2DF->m_fMinVal[0] = -o->m_pRevSDF->m_fRadius;
 
2616
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[0] = o->m_pRevSDF->m_fRadius;
 
2617
                        o->m_pRevSDF->m_p2DF->m_fMinVal[1] = -o->m_pRevSDF->m_fRadius;
 
2618
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[1] = o->m_pRevSDF->m_fRadius;
 
2619
                        o->m_pRevSDF->m_p2DF->m_iRes[0] = o->m_pRevSDF->m_iResolution;
 
2620
                        o->m_pRevSDF->m_p2DF->m_iRes[1] = o->m_pRevSDF->m_iResolution;
 
2621
                        o->m_pRevSDF->m_p2DF->SetLabelX("X [pm]");
 
2622
                        o->m_pRevSDF->m_p2DF->SetLabelY("Y [pm]");
 
2623
                        o->m_pRevSDF->m_p2DF->m_iHistogramRes = o->m_pRevSDF->m_iHistogramRes;
 
2624
                        o->m_pRevSDF->m_p2DF->Create();
 
2625
 
 
2626
                        try { o->m_pRevSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pRevSDF->m_vaData = NULL; }
 
2627
                        if (o->m_pRevSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2628
                }
 
2629
        }
 
2630
 
 
2631
        if (g_bBondACF)
 
2632
        {
 
2633
                mprintf("  Creating BondACF...\n");
 
2634
                for (z=0;z<g_oaSingleMolecules.GetSize();z++)
 
2635
                {
 
2636
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z];
 
2637
                        for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
 
2638
                        {
 
2639
                                bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
 
2640
                                for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
 
2641
                                {
 
2642
                                        if (g_iTrajSteps != -1)
 
2643
                                        {
 
2644
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetMaxSize(g_iTrajSteps);
 
2645
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(g_iTrajSteps/10);
 
2646
                                        } else ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(10000);
 
2647
                                }
 
2648
                        }
 
2649
                }
 
2650
        }
 
2651
 
 
2652
        if (g_bClusterAnalysis)
 
2653
        {
 
2654
                mprintf("  Creating Cluster Analysis...\n");
 
2655
                g_pClusterAnalysis->Create();
 
2656
        }
 
2657
 
 
2658
        if (g_bFESA)
 
2659
        {
 
2660
                mprintf("  Creating FES Analysis...\n");
 
2661
                g_pFESA->Create();
 
2662
        }
 
2663
 
 
2664
        if (g_bMicroHet)
 
2665
        {
 
2666
                mprintf("  Creating Microheterogeneity Analysis...\n");
 
2667
                g_pMicroHet->Create();
 
2668
        }
 
2669
 
 
2670
        if (g_bThermo)
 
2671
        {
 
2672
                mprintf("  Creating Thermodynamic Analysis...\n");
 
2673
                g_pThermoAnalysis->Create();
 
2674
        }
 
2675
 
 
2676
        if (g_iRefSystemDim == 3) 
 
2677
                g_pRefMol.SetSize(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
 
2678
        if ((g_iRefSystemDim == 3) && !g_bMiddleAvg) // Einfach das erstbeste Molekuel als Referenz nehmen
 
2679
        {
 
2680
                mprintf("Creating reference molecule from first time step...");
 
2681
                g_TimeStep.CalcCenters();
 
2682
                smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
 
2683
                vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
 
2684
                g_TimeStep.CenterPos(vec1);
 
2685
                vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
 
2686
                vec3 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
 
2687
//              vec2 -= vec1;
 
2688
//              vec3 -= vec1;
 
2689
                mat.MatUltra(vec2,vec3);
 
2690
                cc = 0;
 
2691
                // Jeden Atomtyp des Zielmolekuels durchgehen
 
2692
                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
 
2693
                {
 
2694
                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
 
2695
                        {
 
2696
                                vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z3])->GetAt(z4)];
 
2697
                        //      vec2 -= vec1;
 
2698
                                g_pRefMol[cc] = mat * vec2;
 
2699
                                cc++;
 
2700
                        }
 
2701
                }
 
2702
                if (g_bPlProj)
 
2703
                {
 
2704
                        g_TimeStep.FoldAtoms();
 
2705
                        g_TimeStep.Transform(mat);
 
2706
                        for (z3=0;z3<g_oaObserv.GetSize();z3++)
 
2707
                        {
 
2708
                                o = (CObservation*)g_oaObserv[z3];
 
2709
                                if (!o->m_pPlProj->m_bAverageAtomPos)
 
2710
                                {
 
2711
                                        ti = 0;
 
2712
                                        for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
 
2713
                                        {
 
2714
                                                for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
 
2715
                                                {
 
2716
                                                        o->m_pPlProj->m_vaAtomPos[ti] = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[o->m_pPlProj->m_oDrawAtoms.m_baAtomType[z3]])->GetAt(((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetAt(z4))];
 
2717
                                                        ti++;
 
2718
                                                }
 
2719
                                        }
 
2720
                                }
 
2721
                        }
 
2722
                }
 
2723
                mprintf("Done.\n");
 
2724
        } // Ende Referenzbestimmung
 
2725
 
 
2726
        if (g_iSwapAtoms)
 
2727
        {
 
2728
                mprintf("Creating Reference Molecule Swap Matrix...\n");
 
2729
 
 
2730
                try { pSwapMatrix = new unsigned int[((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes]; } catch(...) { pSwapMatrix = NULL; }
 
2731
                if (pSwapMatrix == NULL) NewException((double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*sizeof(unsigned int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2732
                
 
2733
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes;z++)
 
2734
                        pSwapMatrix[z] = 0;
 
2735
        }
 
2736
 
 
2737
        g_iCurrentTimeStep = -1;
 
2738
        g_iNextTimeStep = -1;
 
2739
        g_iLastTimeStep = -1;
 
2740
 
 
2741
        try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
 
2742
        if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2743
 
 
2744
        if ((g_bSaveRefEnv) && (g_iNbhMode == 3) && (!g_bStreamInput))
 
2745
        {
 
2746
                mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
 
2747
 
 
2748
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
 
2749
                if (g_fPos == NULL)
 
2750
                {
 
2751
                        eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
 
2752
                        return 0;
 
2753
                }
 
2754
                g_iSteps = 0; // Der Zaehler der Zeitschritte
 
2755
                if (g_iScanNbhStart != 0)
 
2756
                {
 
2757
                        mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
 
2758
                        mprintf(WHITE,"  [");
 
2759
                        for (z=0;z<g_iScanNbhStart;z++)
 
2760
                        {
 
2761
                                if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
 
2762
                                        mprintf(WHITE,"#");
 
2763
                                if (!g_TimeStep.SkipTimestep(g_fPos))
 
2764
                                        break;
 
2765
                        }
 
2766
                        mprintf(WHITE,"]\n");
 
2767
                }
 
2768
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
 
2769
                {
 
2770
                        for (z=0;z<(g_iScanNbhStride-1);z++)
 
2771
                                if (!g_TimeStep.SkipTimestep(g_fPos))
 
2772
                                        goto _endnbs;
 
2773
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
 
2774
                                goto _endnbs;
 
2775
                        if (g_TimeStep.m_iGesAtomCount == 0)
 
2776
                                goto _endnbs;
 
2777
//                      g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
 
2778
//                      g_TimeStep.UniteMolecules();
 
2779
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
2780
                        g_TimeStep.CalcCenters();
 
2781
        
 
2782
                        if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
 
2783
                        {
 
2784
                                if ((g_iSteps % (200*g_iScanNbhStride)) == 0) 
 
2785
                                        mprintf("\nStep %6d...",g_iSteps);
 
2786
                                                else mprintf(".");
 
2787
                        }
 
2788
        
 
2789
                        g_iSteps+=g_iScanNbhStride;
 
2790
        
 
2791
//                      vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
 
2792
        
 
2793
//                      g_TimeStep.CenterPos(vec1);
 
2794
        
 
2795
//                      if (g_bFold)
 
2796
//                              g_TimeStep.FoldMolecules();
 
2797
 
 
2798
//                      for (z=0;z<g_oaNbSearches.GetSize();z++)
 
2799
                        g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
 
2800
 
 
2801
                        if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
 
2802
                                break;
 
2803
                }
 
2804
                _endnbs:
 
2805
 
 
2806
                fclose(g_fPos);
 
2807
                mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
 
2808
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
 
2809
                {
 
2810
                        mprintf(YELLOW,"\n*** Choose Neighbors\n");
 
2811
//                      nbset = (CNbSet*)g_oaNbSearches[z0];
 
2812
                        // Sort Neighbors after time they have been neighbors
 
2813
                        for (z=0;z<g_pNbSet->m_oaConditionGroups.GetSize();z++)
 
2814
                        {
 
2815
                                if (g_pNbSet->m_oaConditionGroups[z] == NULL)
 
2816
                                        continue;
 
2817
                                cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
 
2818
 
 
2819
                                try { tpi = new int[((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()]; } catch(...) { tpi = NULL; }
 
2820
                                if (tpi == NULL) NewException((double)((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()*sizeof(int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
2821
                                
 
2822
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
 
2823
                                {
 
2824
                                        cg->m_bAlwaysTrue[z2] = false;
 
2825
                                        tpi[z2] = -1;
 
2826
                                }
 
2827
                                ti3 = 0;
 
2828
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
 
2829
                                {
 
2830
                                        ti = 0;
 
2831
                                        for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
 
2832
                                        {
 
2833
                                                for (z4=0;z4<z2;z4++)
 
2834
                                                        if (tpi[z4] == z3)
 
2835
                                                                goto _nbhave;
 
2836
                                                if (cg->m_iPassCounter[z3] > ti)
 
2837
                                                {
 
2838
                                                        ti = cg->m_iPassCounter[z3];
 
2839
                                                        ti2 = z3;
 
2840
                                                }
 
2841
_nbhave:;
 
2842
                                        }
 
2843
                                        if (ti == 0)
 
2844
                                                break;
 
2845
                                        ti3++;
 
2846
                                        tpi[z2] = ti2;
 
2847
                                }
 
2848
                                mprintf(WHITE,"\n  Molecule type %s. %d neighbors found in total:\n",((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
 
2849
                                for (z2=0;z2<ti3;z2++)
 
2850
                                        mprintf("    %2d.) Molecule %3d (%8.4f percent of the time, %d hits)\n",z2+1,tpi[z2]+1,((double)cg->m_iPassCounter[tpi[z2]])*g_iScanNbhStride/g_iSteps*100.0,cg->m_iPassCounter[tpi[z2]]);
 
2851
 
 
2852
                                if (ti3 != 0)
 
2853
                                {
 
2854
                                        z3 = AskUnsignedInteger("\nUse how many of the frequentiest neighbors for molecule %s? [%d] ",ti3,((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
 
2855
                                        for (z2=0;z2<z3;z2++)
 
2856
                                                cg->m_bAlwaysTrue[tpi[z2]] = true;
 
2857
                                }
 
2858
 
 
2859
                                delete[] tpi;
 
2860
                                cg->m_bInactive = true;
 
2861
                        }
 
2862
                }
 
2863
                mprintf("\n");
 
2864
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
 
2865
                if (g_bSaveRefWithEnv)
 
2866
                {
 
2867
                        mprintf("Adding reference molecule to neighborhood...\n");
 
2868
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
 
2869
                }
 
2870
 
 
2871
                g_pNbSet->Reset();
 
2872
                g_pNbSet->Dump();
 
2873
        }
 
2874
 
 
2875
        if (g_bVFDF)
 
2876
        {
 
2877
                g_iVFCorrCount = 0;
 
2878
                for (z=0;z<g_oaMolecules.GetSize();z++)
 
2879
                {
 
2880
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
 
2881
                        {
 
2882
                                sprintf(buf,"vfcorr_%s_%s%s.dat",((CMolecule*)g_oaMolecules[z])->m_sName,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[z])->m_baAtomIndex[z2]])->m_sName,multibuf);
 
2883
//                              FreeFileName(buf);
 
2884
                                g_fVFCorr[g_iVFCorrCount] = OpenFileWrite(buf,true);
 
2885
                                g_iVFCorrCount++;
 
2886
                        }
 
2887
                }
 
2888
        }
 
2889
 
 
2890
        if (g_bReact)
 
2891
        {
 
2892
                g_pReact->Create();
 
2893
                g_pReact->InitMolecules(&g_TimeStep);
 
2894
        }
 
2895
 
 
2896
        if (g_bSaveRefEnv)
 
2897
        {
 
2898
                mprintf("\n");
 
2899
                sprintf(g_sRefEnv,"refenv_%s.%d.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1);
 
2900
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
 
2901
                        if (g_pNbAll->m_waMolCount[z] != 0)
 
2902
                        {
 
2903
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
 
2904
                                strcat(g_sRefEnv,buf2);
 
2905
                        }*/
 
2906
/*              if (!g_bDynamicNeighbor)
 
2907
                        strcat(g_sRefEnv,"static.");
 
2908
                if (g_bRefEnvCenter)
 
2909
                        strcat(g_sRefEnv,"center.");
 
2910
                if (g_bRefEnvFix)
 
2911
                        strcat(g_sRefEnv,"fix.");
 
2912
                if (g_bScanNeighbors)
 
2913
                        strcat(g_sRefEnv,"scannb.");*/
 
2914
                strcat(g_sRefEnv,multibuf);
 
2915
                strcat(g_sRefEnv,"xyz");
 
2916
                mprintf(">>> Saving reference environment as %s\n",g_sRefEnv);
 
2917
//              FreeFileName(g_sRefEnv);
 
2918
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
 
2919
                mprintf("\n");
 
2920
        }
 
2921
 
 
2922
        if (g_bCutCluster)
 
2923
        {
 
2924
                mprintf("\n");
 
2925
                sprintf(g_sRefEnv,"cluster_%s.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
 
2926
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
 
2927
                        if (g_pNbAll->m_waMolCount[z] != 0)
 
2928
                        {
 
2929
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
 
2930
                                strcat(g_sRefEnv,buf2);
 
2931
                        }*/
 
2932
/*              if (g_bRefEnvCenter)
 
2933
                        strcat(g_sRefEnv,"center.");
 
2934
                if (g_bRefEnvFix)
 
2935
                        strcat(g_sRefEnv,"fix.");*/
 
2936
                strcat(g_sRefEnv,multibuf);
 
2937
                strcat(g_sRefEnv,"xyz");
 
2938
                mprintf(">>> Saving cluster list as %s\n",g_sRefEnv);
 
2939
//              FreeFileName(g_sRefEnv);
 
2940
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
 
2941
                mprintf("\n");
 
2942
        }
 
2943
 
 
2944
        if (g_bSaveJustTraj)
 
2945
        {
 
2946
                strcpy(buf,g_sInputTraj);
 
2947
                p = strrchr(buf,'/');
 
2948
                q = strrchr(buf,'\\');
 
2949
                if (q > p)
 
2950
                        p = q;
 
2951
                if (p == NULL)
 
2952
                        p = buf;
 
2953
                                else p++;
 
2954
                strcpy(buf2,p);
 
2955
                p = strrchr(buf2,'.');
 
2956
                if (p != NULL)
 
2957
                        *p = 0;
 
2958
                strcat(buf2,multibuf);
 
2959
                strcat(buf2,"_out.xyz");
 
2960
//              FreeFileName(buf);
 
2961
//              sprintf(buf,"traj_out.xyz");
 
2962
                mprintf("Saving processed trajectory as %s ...\n",buf2);
 
2963
                g_fSaveJustTraj = OpenFileWrite(buf2,true);
 
2964
        }
 
2965
 
 
2966
 
 
2967
        /******* Interface *******************/
 
2968
        if (!Interface_Initialization())
 
2969
                goto _ende;
 
2970
 
 
2971
 
 
2972
        mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
 
2973
 
 
2974
_beginmain:
 
2975
        if (ReactSecondRun)
 
2976
        {
 
2977
                mprintf(WHITE,"\n### Starting Second Pass ###\n");
 
2978
        } else
 
2979
        {
 
2980
                mprintf(WHITE,"\n### Starting Main Analysis ###\n");
 
2981
                if (g_bVHDF)
 
2982
                        mprintf("\n    Please note: The VHCF analysis will become slower while it proceeds.\n");
 
2983
        }
 
2984
 
 
2985
#ifdef TARGET_LINUX
 
2986
        if (!g_bMultiInterval || (multicounter == 0))
 
2987
        {
 
2988
                mprintf(WHITE,"\nHint: ");
 
2989
                mprintf("Press CTRL+C once to softly interrupt analysis and still write the results.\n");
 
2990
                mprintf("      Creating an empty file named EXIT (\"touch EXIT\") has the same effect.\n");
 
2991
        }
 
2992
#endif
 
2993
 
 
2994
        if (!g_bStreamInput)
 
2995
        {
 
2996
                g_fPos = fopen(g_sInputTraj,"rb"); 
 
2997
                if (g_fPos == NULL)
 
2998
                {
 
2999
                        eprintf("\nCould not open position trajectory.\n");
 
3000
                        goto _ende;
 
3001
                }
 
3002
        }
 
3003
 
 
3004
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
 
3005
        {
 
3006
                g_fNPTFile = fopen(g_sNPTFile,"rt");
 
3007
                if (g_fNPTFile == NULL)
 
3008
                {
 
3009
                        eprintf("\nCould not open cell vector file.\n");
 
3010
                        goto _ende;
 
3011
                }
 
3012
        }
 
3013
 
 
3014
        if (g_bUseVelocities && (g_sInputVel[0] != 0))
 
3015
        {
 
3016
                g_fVel = fopen(g_sInputVel,"rt"); 
 
3017
                if (g_fVel == NULL)
 
3018
                {
 
3019
                        eprintf("\nCould not open velocity trajectory.\n");
 
3020
                        goto _ende;
 
3021
                }
 
3022
        }
 
3023
        if (g_bUseForces && (g_sInputForce[0] != 0))
 
3024
        {
 
3025
                g_fForce = fopen(g_sInputForce,"rt"); 
 
3026
                if (g_fForce == NULL)
 
3027
                {
 
3028
                        eprintf("\nCould not open force trajectory.\n");
 
3029
                        goto _ende;
 
3030
                }
 
3031
        }
 
3032
 
 
3033
//      fff = fopen("dipole.txt","wt");
 
3034
 
 
3035
        if (g_iBeginStep != 0)
 
3036
        {
 
3037
                mprintf("\nFast-forwarding to step %d...\n",g_iBeginStep+1);
 
3038
//              mprintf("Seek: %d.\n",g_iFastForwardPos);
 
3039
                fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
 
3040
                if ((g_fVel != NULL) || (g_fForce != NULL) || ((g_bNPT) && (g_sNPTFile[0] != 0)))
 
3041
                {
 
3042
                        mprintf(WHITE,"  [");
 
3043
                        for (z=0;z<g_iBeginStep;z++)
 
3044
                        {
 
3045
/*                              if (!g_TimeStep.SkipTimestep(g_fPos))
 
3046
                                {
 
3047
                                        eprintf("Error. Unexpected end of position trajectory.\n");
 
3048
                                        goto _endmainloop;
 
3049
                                }*/
 
3050
                                if (fmod(z,g_iBeginStep/60.0) < 1.0)
 
3051
                                        mprintf(WHITE,"#");
 
3052
                                if (g_fVel != NULL)
 
3053
                                {
 
3054
                                        if (!g_TimeStep.SkipTimestep(g_fVel))
 
3055
                                        {
 
3056
                                                eprintf("Error. Unexpected end of velocity trajectory.\n");
 
3057
                                                goto _endmainloop;
 
3058
                                        }
 
3059
                                }
 
3060
                                if (g_fForce != NULL)
 
3061
                                {
 
3062
                                        if (!g_TimeStep.SkipTimestep(g_fForce))
 
3063
                                        {
 
3064
                                                eprintf("Error. Unexpected end of force trajectory.\n");
 
3065
                                                goto _endmainloop;
 
3066
                                        }
 
3067
                                }
 
3068
                                if (((g_bNPT) && (g_sNPTFile[0] != 0)))
 
3069
                                        fgets(buf,256,g_fNPTFile);
 
3070
                        }
 
3071
                        mprintf(WHITE,"]\n");
 
3072
                }
 
3073
        }
 
3074
 
 
3075
        g_oaTimeSteps.SetSize(g_iStepHistory);
 
3076
        for (z=0;z<g_iStepHistory;z++)
 
3077
                g_oaTimeSteps[z] = NULL;
 
3078
 
 
3079
        g_iSteps = 0; // Der Zaehler der Zeitschritte
 
3080
        g_iCurrentTimeStep = 0;
 
3081
        t0 = time(NULL);
 
3082
        g_iClusterPos = 0;
 
3083
        sic = 0;
 
3084
        g_iSaveCondCount = 0;
 
3085
 
 
3086
        try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
 
3087
        if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
3088
        
 
3089
        try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
 
3090
        if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
3091
 
 
3092
        try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
 
3093
        if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
3094
 
 
3095
        if (g_bDeriv)
 
3096
        {
 
3097
                g_iDerivNext = 2;
 
3098
                g_iDerivCurr = 1;
 
3099
                g_iDerivLast = 0;
 
3100
        }
 
3101
 
 
3102
        if (g_bDipole && g_bDumpDipoleVector)
 
3103
        {
 
3104
                g_fDumpDipole = OpenFileWrite("dipole_vectors.csv",true);
 
3105
                fprintf(g_fDumpDipole,"#Step");
 
3106
                for (z=0;z<g_oaMolecules.GetSize();z++)
 
3107
                {
 
3108
                        if (g_oaDumpDipoleVector[z] == NULL)
 
3109
                                continue;
 
3110
                        for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
 
3111
                        {
 
3112
                                fprintf(g_fDumpDipole,";  %s[%d]_X;  Y;  Z",((CMolecule*)g_oaMolecules[z])->m_sName,((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)+1);
 
3113
                                if (g_bDumpDipoleAbs)
 
3114
                                        fprintf(g_fDumpDipole,";  Abs");
 
3115
                        }
 
3116
                }
 
3117
                fprintf(g_fDumpDipole,"\n");
 
3118
 
 
3119
                if (g_bDumpDipoleXYZ)
 
3120
                {
 
3121
                        g_fDumpDipoleXYZ = OpenFileWrite("dipole_vectors.xyz",true);
 
3122
 
 
3123
                        fprintf(g_fDumpDipoleXYZ,"%d\n\n",g_iDumpDipoleXYZAtoms);
 
3124
 
 
3125
                        for (z=0;z<g_oaMolecules.GetSize();z++)
 
3126
                        {
 
3127
                                if (g_oaDumpDipoleVector[z] == NULL)
 
3128
                                        continue;
 
3129
                                m = (CMolecule*)g_oaMolecules[z];
 
3130
                                for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
 
3131
                                {
 
3132
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)]];
 
3133
 
 
3134
                                        for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
 
3135
                                        {
 
3136
                                                if (m->m_baAtomIndex[z3] == g_iVirtAtomType)
 
3137
                                                        continue;
 
3138
                                                for (z4=0;z4<((CxIntArray*)sm->m_oaAtomOffset[z3])->GetSize();z4++)
 
3139
                                                {
 
3140
                                                        ti = ((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(z4);
 
3141
                                                        fprintf(g_fDumpDipoleXYZ,"%s  %12f  %12f  %12f\n",((CAtom*)g_oaAtoms[m->m_baAtomIndex[z3]])->m_sName,g_TimeStep.m_vaCoords[ti][0]/100.0,g_TimeStep.m_vaCoords[ti][1]/100.0,g_TimeStep.m_vaCoords[ti][2]/100.0);
 
3142
                                                }
 
3143
                                        }
 
3144
                                }
 
3145
                        }
 
3146
 
 
3147
                        ti2 = 0;
 
3148
                        for (z=0;z<g_oaMolecules.GetSize();z++)
 
3149
                        {
 
3150
                                if (g_oaDumpDipoleVector[z] == NULL)
 
3151
                                        continue;
 
3152
                                m = (CMolecule*)g_oaMolecules[z];
 
3153
                                for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
 
3154
                                {
 
3155
                                        fprintf(g_fDumpDipoleXYZ,"B  %12f  0    0\n",100.0+ti2*3.0);
 
3156
                                        fprintf(g_fDumpDipoleXYZ,"B  %12f  0.5  0\n",100.0+ti2*3.0);
 
3157
                                        ti2++;
 
3158
                                }
 
3159
                        }
 
3160
                }
 
3161
        }
 
3162
 
 
3163
 
 
3164
/*****************************************************************************
 
3165
*************** Beginn Hauptschleife *****************************************
 
3166
*****************************************************************************/
 
3167
 
 
3168
        g_iLastTimeStep = -1;
 
3169
        g_iDotCounter = 0;
 
3170
        g_bStepSkipped = false;
 
3171
        g_iFirstStepSkipped = -1;
 
3172
        tbs = false;
 
3173
 
 
3174
        while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
 
3175
        {
 
3176
                if (feof(g_fPos))
 
3177
                {
 
3178
                        mprintf("\nEnd of trajectory file reached.\n");
 
3179
                        break;
 
3180
                }
 
3181
                if (g_bAbortAnalysis)
 
3182
                {
 
3183
                        mprintf("\nAnalysis aborted by user.\n");
 
3184
                        break;
 
3185
                }
 
3186
                g_iCurrentTimeStep++;
 
3187
                if (g_iCurrentTimeStep >= g_iStepHistory)
 
3188
                        g_iCurrentTimeStep = 0;
 
3189
 
 
3190
                if (g_bDeriv)
 
3191
                {
 
3192
                        g_iDerivNext++;
 
3193
                        if (g_iDerivNext > 2)
 
3194
                                g_iDerivNext = 0;
 
3195
                        g_iDerivCurr++;
 
3196
                        if (g_iDerivCurr > 2)
 
3197
                                g_iDerivCurr = 0;
 
3198
                        g_iDerivLast++;
 
3199
                        if (g_iDerivLast > 2)
 
3200
                                g_iDerivLast = 0;
 
3201
                }
 
3202
 
 
3203
                for (z=0;z<(g_iStride-1);z++)
 
3204
                {
 
3205
                        if (!g_TimeStep.SkipTimestep(g_fPos))
 
3206
                        {
 
3207
                                if (!feof(g_fPos))
 
3208
                                        eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
 
3209
                                goto _endmainloop;
 
3210
                        }
 
3211
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
 
3212
                                fgets(buf,256,g_fNPTFile);
 
3213
                        if (g_fVel != NULL)
 
3214
                        {
 
3215
                                if (!g_TimeStep.SkipTimestep(g_fVel))
 
3216
                                {
 
3217
                                        eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
 
3218
                                        goto _endmainloop;
 
3219
                                }
 
3220
                        }
 
3221
                        if (g_fForce != NULL)
 
3222
                        {
 
3223
                                if (!g_TimeStep.SkipTimestep(g_fForce))
 
3224
                                {
 
3225
                                        eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
 
3226
                                        goto _endmainloop;
 
3227
                                }
 
3228
                        }
 
3229
                }
 
3230
_readagain:
 
3231
                if (g_bUseVelocities || g_bUseForces)
 
3232
                {
 
3233
                        if (GetTimeStep(-1) == NULL)
 
3234
                        {
 
3235
                                try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
 
3236
                                if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
3237
                        }
 
3238
                        if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
 
3239
                        {
 
3240
                                if (feof(g_fPos))
 
3241
                                {
 
3242
                                        mprintf("\nEnd of Trajectory File reached.\n");
 
3243
                                        break;
 
3244
                                }
 
3245
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
 
3246
                                goto _endmainloop;
 
3247
                        }
 
3248
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
 
3249
                                GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
 
3250
                        if (g_bSkipDoubleSteps)
 
3251
                        {
 
3252
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
 
3253
                                {
 
3254
                                        if (!g_bStepSkipped)
 
3255
                                        {
 
3256
                                                g_bStepSkipped = true;
 
3257
                                                g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
 
3258
                                                mprintf("\nSkipping:");
 
3259
                                        }
 
3260
                                        mprintf("*");
 
3261
                                        goto _readagain;
 
3262
                                } else if (g_iFirstStepSkipped != -1)
 
3263
                                {
 
3264
                                        if (g_iFirstStepSkipped == GetTimeStep(-1)->ExtractNumber(g_iNumberPos))
 
3265
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
 
3266
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(-1)->ExtractNumber(g_iNumberPos));
 
3267
                                        g_iDotCounter = 0;
 
3268
                                        g_iFirstStepSkipped = -1;
 
3269
                                }
 
3270
 
 
3271
                                if (g_iLastTimeStep != -1)
 
3272
                                {
 
3273
                                        if (g_iStrideDetect == -1)
 
3274
                                        {
 
3275
                                                g_iStrideDetect = GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
 
3276
                                        } else
 
3277
                                        {
 
3278
                                                if (g_iStrideDetect != (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
 
3279
                                                {
 
3280
                                                        if (!tbs)
 
3281
                                                                eprintf("\n");
 
3282
                                                        eprintf("Warning: Two successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(-1)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
 
3283
                                                        tbs = true;
 
3284
                                                } else tbs = false;
 
3285
                                        }
 
3286
                                }
 
3287
 
 
3288
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
 
3289
                                        g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
 
3290
                        } 
 
3291
                        if (GetTimeStep(-1)->m_iGesAtomCount == 0)
 
3292
                        {
 
3293
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
 
3294
                                goto _endmainloop;
 
3295
                        }
 
3296
                        GetTimeStep(-1)->UniteMolecules(false);
 
3297
                        if (g_bRemoveCOM)
 
3298
                                GetTimeStep(-1)->CenterCOM();
 
3299
                        GetTimeStep(-1)->CalcCenters();
 
3300
                        if (g_bDipole)
 
3301
                        {
 
3302
                                if (g_bWannier)
 
3303
                                        GetTimeStep(-1)->ScanWannier(false);
 
3304
                                GetTimeStep(-1)->CalcDipoles();
 
3305
                                if (g_bDumpDipoleVector)
 
3306
                                        GetTimeStep(-1)->DumpDipoles();
 
3307
                        }
 
3308
                } else
 
3309
                {
 
3310
                        if (GetTimeStep(0) == NULL)
 
3311
                        {
 
3312
                                try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
 
3313
                                if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
3314
                        }
 
3315
                        if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
 
3316
                        {
 
3317
                                if (feof(g_fPos))
 
3318
                                {
 
3319
                                        mprintf("\nEnd of trajectory file reached.\n");
 
3320
                                        break;
 
3321
                                }
 
3322
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
 
3323
                                goto _endmainloop;
 
3324
                        }
 
3325
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
 
3326
                                GetTimeStep(0)->ReadCellVector(g_fNPTFile);
 
3327
                        if (g_bSkipDoubleSteps)
 
3328
                        {
 
3329
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
 
3330
                                {
 
3331
//                                      mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
 
3332
                                        if (!g_bStepSkipped)
 
3333
                                        {
 
3334
                                                g_bStepSkipped = true;
 
3335
                                                g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
 
3336
                                                mprintf("\nSkipping:");
 
3337
                                        }
 
3338
                                        mprintf("*");
 
3339
                                        goto _readagain;
 
3340
                                } else if (g_iFirstStepSkipped != -1)
 
3341
                                {
 
3342
                                        if (g_iFirstStepSkipped == GetTimeStep(0)->ExtractNumber(g_iNumberPos))
 
3343
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
 
3344
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(0)->ExtractNumber(g_iNumberPos));
 
3345
                                        g_iDotCounter = 0;
 
3346
                                        g_iFirstStepSkipped = -1;
 
3347
                                }
 
3348
//                              mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
 
3349
 
 
3350
                                if (g_iLastTimeStep != -1)
 
3351
                                {
 
3352
                                        if (g_iStrideDetect == -1)
 
3353
                                        {
 
3354
                                                g_iStrideDetect = GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
 
3355
                                        } else
 
3356
                                        {
 
3357
                                                if (g_iStrideDetect != (GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
 
3358
                                                {
 
3359
                                                        if (!tbs)
 
3360
                                                                eprintf("\n");
 
3361
                                                        eprintf("Warning: Successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(0)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
 
3362
                                                        tbs = true;
 
3363
                                                } else tbs = false;
 
3364
                                        }
 
3365
                                }
 
3366
 
 
3367
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
 
3368
                                        g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
 
3369
                        }
 
3370
                        if (GetTimeStep(0)->m_iGesAtomCount == 0)
 
3371
                        {
 
3372
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
 
3373
                                goto _endmainloop;
 
3374
                        }
 
3375
                        if (!g_bSaveCoordsUnchanged)
 
3376
                        {
 
3377
                                GetTimeStep(0)->UniteMolecules(false);
 
3378
                                if (g_bRemoveCOM)
 
3379
                                        GetTimeStep(0)->CenterCOM();
 
3380
                        }
 
3381
                        GetTimeStep(0)->CalcCenters();
 
3382
                        if (g_bDipole)
 
3383
                        {
 
3384
                                if (g_bWannier)
 
3385
                                        GetTimeStep(0)->ScanWannier(false);
 
3386
                                GetTimeStep(0)->CalcDipoles();
 
3387
                                if (g_bDumpDipoleVector)
 
3388
                                        GetTimeStep(0)->DumpDipoles();
 
3389
                        }
 
3390
                }
 
3391
                g_bWarnUnsteady = false;
 
3392
 
 
3393
                if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
 
3394
                {
 
3395
                        if ((g_iSteps == 0) || g_bStepSkipped)
 
3396
                        {
 
3397
                                g_bStepSkipped = false;
 
3398
                                if (!g_bSilentProgress)
 
3399
                                        mprintf("\nStep %6d ",g_iSteps);
 
3400
                        }
 
3401
                        if (g_bAsciiArt && (!g_bSilentProgress))
 
3402
                        {
 
3403
                                tc = g_oAsciiArt.GetChar();
 
3404
                                if (tc == 0)
 
3405
                                {
 
3406
                                        if ((g_iSteps != 0) && (g_iTrajSteps != -1))
 
3407
                                        {
 
3408
                                                if ((time(NULL) - t0) > 5)
 
3409
                                                {
 
3410
                                                        eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),(((g_iMaxStep > 0)?g_iMaxStep:g_iTrajSteps) - ((long)g_iSteps)))));
 
3411
                                                        FormatTime(eta,buf);
 
3412
                                                        mprintf(" ETA %s",buf);
 
3413
                                                }
 
3414
                                        }
 
3415
                                        mprintf("\nStep %6d ",g_iSteps);
 
3416
                                        if (g_iSteps != 0)
 
3417
                                                g_oAsciiArt.NewLine();
 
3418
                                } else mprintf("%c",tc);
 
3419
                        } else
 
3420
                        {
 
3421
                                if (g_iDotCounter >= 50)
 
3422
                                {
 
3423
                                        g_iDotCounter = 0;
 
3424
                                        if (!g_bSilentProgress)
 
3425
                                        {
 
3426
                                                if ((g_iSteps != 0) && (g_iTrajSteps != -1))
 
3427
                                                {
 
3428
                                                        if ((time(NULL) - t0) > 5)
 
3429
                                                        {
 
3430
                                                                eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),g_iTrajSteps - ((long)g_iSteps))));
 
3431
                                                                FormatTime(eta,buf);
 
3432
                                                                mprintf(" ETA %s",buf);
 
3433
                                                        }
 
3434
                                                }
 
3435
                                                mprintf("\nStep %6d ",g_iSteps);
 
3436
                                        }
 
3437
                                }
 
3438
                                g_iDotCounter++;
 
3439
                                if (!g_bSilentProgress)
 
3440
                                        mprintf(".");
 
3441
                        }
 
3442
                        if (FileExist("EXIT"))
 
3443
                        {
 
3444
                                mprintf("\n\n*** File \"EXIT\" detected. Aborting analysis. ***\n\n");
 
3445
                                remove("EXIT");
 
3446
                                break;
 
3447
                        }
 
3448
                }
 
3449
 
 
3450
                if ((int)g_iSteps == /*showinterval**/g_iStride*50)
 
3451
                {
 
3452
                        t1 = time(NULL);
 
3453
                        if (t1 == t0)
 
3454
                                showinterval = 20;
 
3455
                                        else showinterval = (int)(20.0f/(t1-t0));
 
3456
                        if (showinterval == 0)
 
3457
                                showinterval = 1;
 
3458
                        sic = 1;
 
3459
                }
 
3460
 
 
3461
                g_iSteps += g_iStride;
 
3462
 
 
3463
                if (GetTimeStep(0)==NULL)
 
3464
                        continue;
 
3465
 
 
3466
                if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
 
3467
                        continue;
 
3468
 
 
3469
                if (g_bUseVelocities)
 
3470
                {
 
3471
                        if (g_fVel == NULL)
 
3472
                        {
 
3473
                                CalcVelocities();
 
3474
                        } else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
 
3475
                        {
 
3476
                                eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
 
3477
                                goto _endmainloop;
 
3478
                        }
 
3479
                }
 
3480
                if (g_bUseForces)
 
3481
                {
 
3482
                        if (g_fForce == NULL)
 
3483
                        {
 
3484
                                CalcForces();
 
3485
                        } else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
 
3486
                        {
 
3487
                                eprintf("\nError reading force time step %d.\n",g_iSteps+1);
 
3488
                                goto _endmainloop;
 
3489
                        }
 
3490
                }
 
3491
 
 
3492
                if (g_bCutCluster)
 
3493
                {
 
3494
                        if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
 
3495
                                break;
 
3496
 
 
3497
                        if (g_iClusterPos >= g_iClusterCount)
 
3498
                                break;
 
3499
 
 
3500
                        if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
 
3501
                                continue;
 
3502
                }
 
3503
        //      mprintf("\nStep %d for clusters.",((int)g_iSteps/g_iStride));
 
3504
 
 
3505
                if (g_bUnwrap && ((int)g_iSteps > g_iStride))
 
3506
 // Nicht im ersten Schritt
 
3507
                {
 
3508
                        for (z=0;z<g_oaMolecules.GetSize();z++)
 
3509
                        {
 
3510
                                m = (CMolecule*)g_oaMolecules[z];
 
3511
                                for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
 
3512
                                {
 
3513
                                        if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
 
3514
                                                continue;
 
3515
                                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
 
3516
                                        {
 
3517
                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
 
3518
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] > g_fBoxX/2.0f)
 
3519
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] -= g_fBoxX;
 
3520
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] < -g_fBoxX/2.0f)
 
3521
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] += g_fBoxX;
 
3522
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] > g_fBoxY/2.0f)
 
3523
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] -= g_fBoxY;
 
3524
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] < -g_fBoxY/2.0f)
 
3525
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] += g_fBoxY;
 
3526
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] > g_fBoxZ/2.0f)
 
3527
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] -= g_fBoxZ;
 
3528
                                                if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] < -g_fBoxZ/2.0f)
 
3529
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] += g_fBoxZ;
 
3530
        //                                      mprintf("\n%2d.%2d: %f, %f, %f",z,z2,g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2]);
 
3531
                                        }
 
3532
                                }
 
3533
                        }
 
3534
                }
 
3535
 
 
3536
                if (g_bKeepUnfoldedCoords)
 
3537
                        GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
 
3538
 
 
3539
                /******* Interface *********/
 
3540
                Interface_ProcessStep(GetTimeStep(0));
 
3541
 
 
3542
                if (g_bMSD)
 
3543
                {
 
3544
                        g_pT2Timestep = GetTimeStep(0);
 
3545
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
 
3546
                        {
 
3547
                                ti2 = 0;
 
3548
                                o = (CObservation*)g_oaObserv[z0];
 
3549
                                if (g_bMSDCacheMode)
 
3550
                                {
 
3551
                                        for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
 
3552
                                        {
 
3553
                                                for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
 
3554
                                                {
 
3555
                                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
 
3556
                                                        {
 
3557
                                                                ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
 
3558
                                                                ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[ti2];
 
3559
 
 
3560
                                                                if (g_bPeriodic && (ptfa->GetSize() > 0))
 
3561
                                                                {
 
3562
                                                                        ti3 = ptfa->GetSize()-3;
 
3563
                                                                        vec1[0] = ptfa->GetAt(ti3++);
 
3564
                                                                        vec1[1] = ptfa->GetAt(ti3++);
 
3565
                                                                        vec1[2] = ptfa->GetAt(ti3);
 
3566
                                                                        tf = (g_pT2Timestep->m_vaCoords[ti]-vec1).GetLength();
 
3567
                                                                        if (tf > g_fMinPeriodic/2.0)
 
3568
                                                                                eprintf("\nDiscontinuity in step %d: %s[%d] %s%d moved %.2f pm. Can't compute MSD from wrapped trajectory - unwrap first.",g_iSteps,((CMolecule*)g_oaMolecules[g_waAtomMolIndex[ti]])->m_sName,g_laAtomSMLocalIndex[ti]+1,((CAtom*)g_oaAtoms[g_waAtomRealElement[ti]])->m_sName,g_waAtomMolNumber[ti]+1,tf);
 
3569
                                                                }
 
3570
 
 
3571
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][0]);
 
3572
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][1]);
 
3573
                                                                ptfa->Add(g_pT2Timestep->m_vaCoords[ti][2]);
 
3574
 
 
3575
                                                                ti2++;
 
3576
                                                        }
 
3577
                                                }
 
3578
                                        }
 
3579
                                } else
 
3580
                                {
 
3581
                                        for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
 
3582
                                        {
 
3583
                                                g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
 
3584
                                                if (g_pTempTimestep == NULL)
 
3585
                                                        continue;
 
3586
                                                for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
 
3587
                                                {
 
3588
                                                        for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
 
3589
                                                        {
 
3590
                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
 
3591
                                                                {
 
3592
                                                                        ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
 
3593
                                                                        o->m_pMSD->m_pMSD->AddToBin_Index(z,(double)(pow(g_pTempTimestep->m_vaCoords[ti][0]-g_pT2Timestep->m_vaCoords[ti][0],2)+pow(g_pTempTimestep->m_vaCoords[ti][1]-g_pT2Timestep->m_vaCoords[ti][1],2)+pow(g_pTempTimestep->m_vaCoords[ti][2]-g_pT2Timestep->m_vaCoords[ti][2],2)));
 
3594
                                                                }
 
3595
                                                        }
 
3596
                                                }
 
3597
                                        }
 
3598
                                }
 
3599
                        }
 
3600
                } // END IF MSD 
 
3601
 
 
3602
                if (g_bSaveJustTraj)
 
3603
                {
 
3604
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
3605
 
 
3606
                        if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
 
3607
                        {
 
3608
                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iSaveJustMol])->m_laSingleMolIndex[g_iSaveJustSM]])->m_oaAtomOffset[g_iSaveJustAtomType])->GetAt(g_iSaveJustAtom)];
 
3609
                                g_pTempTimestep->CenterPos(vec0);
 
3610
                        }
 
3611
 
 
3612
                        if (g_bSaveTrajNoRot)
 
3613
                        {
 
3614
                                g_pTempTimestep->CenterCOM();
 
3615
 
 
3616
//                              mfprintf(g_fSaveJustTraj,"  %d\n\n",(int)g_iSaveGesAtoms*3);
 
3617
 
 
3618
//                              for (z=0;z<g_iGesAtomCount;z++)
 
3619
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
 
3620
 
 
3621
                //              g_pTempTimestep->Transform(tdmat2);
 
3622
                                g_pTempTimestep->Transform(tq2);
 
3623
 
 
3624
//                              for (z=0;z<g_iGesAtomCount;z++)
 
3625
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+10.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
 
3626
 
 
3627
                                if ((int)g_iSteps > g_iStride)
 
3628
                                {
 
3629
                                        dvec1 = 0;
 
3630
                                        for (z=0;z<g_iGesAtomCount;z++)
 
3631
                                        {
 
3632
                                                dvec2 = (g_pTempTimestep->m_vaCoords[z] - rot_ts.m_vaCoords[z]);
 
3633
                                                dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
 
3634
 
 
3635
                //                              tf3 = dvec4.GetLength();
 
3636
                //                              tf2 = dvec2.GetLength();
 
3637
                //                              if (4*tf3*tf3 > 0.25*tf2*tf2)
 
3638
                //                              {
 
3639
                //                                      dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
 
3640
                //                                      mprintf("\n%.10g",1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2));
 
3641
                //                              }
 
3642
 
 
3643
                                                dvec3 = CrossP(dvec4,dvec2);
 
3644
                                                dvec1 += dvec3 * ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass;
 
3645
//                                              mprintf("  %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f\n",z,dvec2[0],dvec2[1],dvec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],dvec3[0],dvec3[1],dvec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
 
3646
                                        }
 
3647
//                                      mprintf("Drehimpuls: %g ( %g, %g, %g )\n",dvec1.GetLength(),dvec1[0],dvec1[1],dvec1[2]);
 
3648
                                        dvec3 = dvec1;
 
3649
                                        dvec3.Normalize();
 
3650
        //                              mprintf("      ( %g, %g, %g )\n",vec3[0],vec3[1],vec3[2]);
 
3651
 
 
3652
                                        tf = 0;
 
3653
                                        for (z=0;z<g_iGesAtomCount;z++)
 
3654
                                        {
 
3655
                                                dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
 
3656
 
 
3657
                //                              tf3 = dvec4.GetLength();
 
3658
                //                              tf2 = dvec2.GetLength();
 
3659
                //                              dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
 
3660
 
 
3661
                                                dvec0 = CrossP(dvec4,dvec3);
 
3662
        //                                      mprintf("#  ( %g, %g, %g ) x ( %g, %g, %g ) = %g\n",g_pTempTimestep->m_vaCoords[z][0],g_pTempTimestep->m_vaCoords[z][1],g_pTempTimestep->m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],vec0.GetLength());
 
3663
                                                tf += ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass * dvec0.GetLengthSqr();
 
3664
                //                              mprintf("\n  %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f",z,vec2[0],vec2[1],vec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
 
3665
                                        }
 
3666
//                                      mprintf("  Traegheitsmoment: %g\n",tf);
 
3667
                                        dvec1 /= tf;
 
3668
//                                      mprintf("Angular momentum vector: ( %g, %g, %g ) (l = %g)\n",dvec1[0],dvec1[1],dvec1[2],dvec1.GetLength());
 
3669
//                                      mprintf("  Winkelgeschw.: %g\n",dvec1.GetLength());
 
3670
//                                      dvec3 = dvec1;
 
3671
//                                      dvec3.Normalize();
 
3672
 
 
3673
//                                      mprintf("  Baue Matrix: ( %g | %g | %g ), %g\n",dvec3[0],dvec3[1],dvec3[2],-dvec1.GetLength());
 
3674
 
 
3675
//                                      tdmat.RotMat(dvec3,-dvec1.GetLength());
 
3676
 
 
3677
                                        tq.BuildRotation(dvec3,dvec1.GetLength());
 
3678
 
 
3679
//                                      mprintf("  Die Matrix:\n");
 
3680
//                                      tdmat.Dump();
 
3681
 
 
3682
//                                      tdmat2 = tdmat2 * tdmat;
 
3683
                                        tq2 = tq2 * tq;
 
3684
 
 
3685
                                        if (fabs(tq2.GetLength()-1.0) > 0.000001)
 
3686
                                        {
 
3687
                                                eprintf("\nRenormalizing rotation quaternion.\n");
 
3688
                                                tq2.Normalize();
 
3689
                                        }
 
3690
 
 
3691
//                                      g_pTempTimestep->Transform(tdmat);
 
3692
                                        g_pTempTimestep->Transform(tq);
 
3693
                                } 
 
3694
 
 
3695
                                rot_ts.CopyFrom(g_pTempTimestep);
 
3696
 
 
3697
//                              for (z=0;z<g_iGesAtomCount;z++)
 
3698
//                                      mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+20.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
 
3699
 
 
3700
                        } else
 
3701
                        {
 
3702
                                if (g_bFold && (!g_bSaveCoordsUnchanged))
 
3703
                                {
 
3704
                                        if (g_bFoldAtomwise)
 
3705
                                                g_pTempTimestep->FoldAtoms();
 
3706
                                                        else g_pTempTimestep->FoldMolecules();
 
3707
                                }
 
3708
                        }
 
3709
 
 
3710
                        if (!g_bCenterZero && (!g_bSaveCoordsUnchanged) && g_bPeriodic)
 
3711
                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
 
3712
 
 
3713
                        ti = g_iSaveGesAtoms;
 
3714
 
 
3715
                        if (g_bUnwrapWannier)
 
3716
                        {
 
3717
                                g_pTempTimestep->ScanWannier(false);
 
3718
 
 
3719
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
 
3720
                                {
 
3721
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
 
3722
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
 
3723
                                                ti += ((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();
 
3724
                                }
 
3725
                        }
 
3726
 
 
3727
                        mfprintf(g_fSaveJustTraj,"  %d\n",ti);
 
3728
                        if (g_pTempTimestep->m_pComment != NULL)
 
3729
                                mfprintf(g_fSaveJustTraj,"%s\n",g_pTempTimestep->m_pComment);
 
3730
                                        else mfprintf(g_fSaveJustTraj,"\n");
 
3731
 
 
3732
                        if (g_bWriteInputOrder) // This implies that all non-virtual atoms are to be written
 
3733
                        {
 
3734
                                for (z7=0;z7<g_iGesAtomCount;z7++)
 
3735
                                {
 
3736
                                        z3 = g_waAtomMolIndex[z7]; // Molecule
 
3737
                                        z6 = g_laAtomSMLocalIndex[z7]; // SingleMolecule
 
3738
                                        z4 = g_waAtomElement[z7]; // AtomType
 
3739
                                        z5 = g_waAtomMolNumber[z7]; // Atom
 
3740
 
 
3741
                                        m = (CMolecule*)g_oaMolecules[z3];
 
3742
 
 
3743
                                        vec0 = g_pTempTimestep->m_vaCoords[z7];
 
3744
                                        if (g_bUnwrap)
 
3745
                                        {
 
3746
                                                vec0 += g_vaUnwrapArray[m->m_laSingleMolIndex[z6]];
 
3747
                        //                      mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
 
3748
                                        }
 
3749
                                        mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z7]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3750
                                }
 
3751
                        } else
 
3752
                        {
 
3753
                                if (g_bWriteAtomwise)
 
3754
                                {
 
3755
                                        for (z7=0;z7<g_oaAtoms.GetSize();z7++)
 
3756
                                        {
 
3757
                                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
 
3758
                                                {
 
3759
                                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
 
3760
                                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
 
3761
                                                        {
 
3762
                                                                for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
 
3763
                                                                {
 
3764
                                                                        if (atgr->m_baRealAtomType[z4] != z7)
 
3765
                                                                                continue;
 
3766
                                                                        tla = (CxIntArray*)atgr->m_oaAtoms[z4];
 
3767
                                                                        for (z5=0;z5<tla->GetSize();z5++)
 
3768
                                                                        {
 
3769
                                                                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
 
3770
                                                                                if (g_bUnwrap)
 
3771
                                                                                {
 
3772
                                                                                        vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
 
3773
                                                                //                      mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
 
3774
                                                                                }
 
3775
                                                                                if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
 
3776
                                                                                {
 
3777
                                                                                        if (g_bSaveVirtAtoms)
 
3778
                                                                                                mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3779
                                                                                } else mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3780
                                                                        }
 
3781
                                                                }
 
3782
                                                        }
 
3783
                                                }
 
3784
                                        }
 
3785
                                } else
 
3786
                                {
 
3787
                                        for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
 
3788
                                        {
 
3789
                                                atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
 
3790
                                                for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
 
3791
                                                {
 
3792
                                                        for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
 
3793
                                                        {
 
3794
                                                                tla = (CxIntArray*)atgr->m_oaAtoms[z4];
 
3795
                                                                for (z5=0;z5<tla->GetSize();z5++)
 
3796
                                                                {
 
3797
                                                                        vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
 
3798
                                                                        if (g_bUnwrap)
 
3799
                                                                        {
 
3800
                                                                                vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
 
3801
                                                        //                      mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
 
3802
                                                                        }
 
3803
                                                                        if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
 
3804
                                                                        {
 
3805
                                                                                if (g_bSaveVirtAtoms)
 
3806
                                                                                        mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3807
                                                                        } else mfprintf(g_fSaveJustTraj,"%2s  %8.5f  %8.5f  %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3808
                                                                }
 
3809
                                                        }
 
3810
                                                }
 
3811
                                        }
 
3812
                                }
 
3813
                        }
 
3814
 
 
3815
                        if (g_bUnwrapWannier)
 
3816
                        {
 
3817
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
 
3818
                                {
 
3819
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
 
3820
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
 
3821
                                        {
 
3822
                                                for (z4=0;z4<((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();z4++)
 
3823
                                                {
 
3824
                                                        vec0 = g_pTempTimestep->m_vaCoords[((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier[z4]];
 
3825
                                                        if (g_bUnwrap)
 
3826
                                                                vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
 
3827
                                                        mfprintf(g_fSaveJustTraj," X  %8.5f  %8.5f  %8.5f\n",vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
 
3828
                                                }
 
3829
                                        }
 
3830
                                }       
 
3831
                        }
 
3832
                } // END IF g_bSaveJustTraj
 
3833
 
 
3834
                if (g_bBondACF)
 
3835
                {
 
3836
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
3837
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
3838
                        {
 
3839
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
3840
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
3841
                                {
 
3842
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
 
3843
                                        bond->m_faData.Add(VecDist(g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[0]],g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[1]]));
 
3844
                                }
 
3845
                        }
 
3846
                }
 
3847
                
 
3848
                if (g_bAggregation || g_bNbExchange)
 
3849
                {
 
3850
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
3851
 
 
3852
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
 
3853
                        {
 
3854
                                o = (CObservation*)g_oaObserv[z0];
 
3855
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
 
3856
                                {
 
3857
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
 
3858
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
 
3859
                                                dacfsub->m_pCondition->m_iPassCounter[z2] = 0;
 
3860
                                }
 
3861
                        }
 
3862
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
 
3863
                        {
 
3864
                                o = (CObservation*)g_oaObserv[z0];
 
3865
 
 
3866
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
 
3867
                                {
 
3868
                                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
 
3869
 
 
3870
                                        o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix);
 
3871
 
 
3872
                                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
 
3873
                                        {
 
3874
                                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
 
3875
 
 
3876
                                                dacfsub->m_pCondition->CopyResults(o->m_pDACF->m_pCondition);
 
3877
                                                dacfsub->m_pCondition->m_bAnyPassed = false;
 
3878
                                                dacfsub->m_pCondition->ReScan(smfix);
 
3879
                                                if (dacfsub->m_pCondition->m_bAnyPassed)
 
3880
                                                        dacfsub->m_pCondition->m_iRMPassCounter[z2]++;
 
3881
        
 
3882
                                                if (g_bDACF)
 
3883
                                                        o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
 
3884
 
 
3885
                                                if (g_bNbExchange)
 
3886
                                                        o->m_pDACF->UpdateNbEx(z2,dacfsub);
 
3887
                                        } // END FOR ZS
 
3888
                                } // END FOR Z2
 
3889
                        } // END FOR Z0
 
3890
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
 
3891
                        {
 
3892
                                o = (CObservation*)g_oaObserv[z0];
 
3893
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
 
3894
                                {
 
3895
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
 
3896
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
 
3897
                                                if (dacfsub->m_pCondition->m_iPassCounter[z2] != 0)
 
3898
                                                        dacfsub->m_pCondition->m_iOMPassCounter[z2]++;
 
3899
                                }
 
3900
                        }
 
3901
                } // END IF AGGREGATION OR NBEX
 
3902
 
 
3903
                if (g_bDens)
 
3904
                {
 
3905
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
3906
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
 
3907
                        {
 
3908
                                o = (CObservation*)g_oaObserv[z0];
 
3909
                                m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
 
3910
                                for (z3=0;z3<m->m_laSingleMolIndex.GetSize();z3++)
 
3911
                                {
 
3912
                                        if (g_bRegionAnalysis)
 
3913
                                                if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[m->m_laSingleMolIndex[z3]])))
 
3914
                                                        continue;
 
3915
 
 
3916
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z3]];
 
3917
                                        ti = ((CxIntArray*)sm->m_oaAtomOffset[o->m_pDensityDF->m_iCenterAtomType])->GetAt(o->m_pDensityDF->m_iCenterAtom);
 
3918
                                        vec0 = g_pTempTimestep->m_vaCoords[ti];
 
3919
 
 
3920
                                        g_pTempTimestep->CenterPos(vec0);
 
3921
                                        g_pTempTimestep->FoldAtoms();
 
3922
 
 
3923
                                        for (z4=0;z4<g_oaMolecules.GetSize();z4++)
 
3924
                                        {
 
3925
                                                if (!o->m_pDensityDF->m_pDensityMolSelect[z4])
 
3926
                                                        continue;
 
3927
                                                m2 = (CMolecule*)g_oaMolecules[z4];
 
3928
                                                ag = o->m_pDensityDF->m_pDensityMolAG[z4];
 
3929
                                                for (z5=0;z5<m2->m_laSingleMolIndex.GetSize();z5++)
 
3930
                                                {
 
3931
                                                        if (g_bRegionAnalysis)
 
3932
                                                                if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[m2->m_laSingleMolIndex[z5]])))
 
3933
                                                                        continue;
 
3934
 
 
3935
                                                        sm2 = (CSingleMolecule*)g_oaSingleMolecules[m2->m_laSingleMolIndex[z5]];
 
3936
                                                        for (z6=0;z6<ag->m_baAtomType.GetSize();z6++)
 
3937
                                                        {
 
3938
                                                                if (ag->m_baRealAtomType[z6] == g_iVirtAtomType)
 
3939
                                                                        continue;
 
3940
                                                                if (o->m_pDensityDF->m_bDensityMass)
 
3941
                                                                {
 
3942
                                                                        tf2 = ((CAtom*)g_oaAtoms[ag->m_baRealAtomType[z6]])->m_pElement->m_fMass;
 
3943
                                                                        for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
 
3944
                                                                        {
 
3945
                                                                                tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
 
3946
                                                                                o->m_pDensityDF->m_pDensDF->AddToBin(tf,tf2);
 
3947
                                                                        }
 
3948
                                                                } else
 
3949
                                                                {
 
3950
                                                                        for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
 
3951
                                                                        {
 
3952
                                                                                tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
 
3953
                                                                                o->m_pDensityDF->m_pDensDF->AddToBin(tf);
 
3954
                                                                        }
 
3955
                                                                }
 
3956
                                                        }
 
3957
                                                }
 
3958
                                        }
 
3959
                                }
 
3960
                        }
 
3961
                } // END IF g_bDens
 
3962
 
 
3963
                if (g_bRDyn || g_bIRSpec)
 
3964
                {
 
3965
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
3966
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
3967
                        {
 
3968
                                o = (CObservation*)g_oaObserv[z6];
 
3969
                                if (g_bIRSpec)
 
3970
                                        trdyn = o->m_pIRSpec;
 
3971
                                                else trdyn = o->m_pRDyn;
 
3972
                                ti = 0;
 
3973
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
 
3974
                                {
 
3975
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
 
3976
 
 
3977
                                        if (trdyn->m_iVecType == 0)
 
3978
                                        {
 
3979
                                                trdyn->BuildAtomList(sm,&templa);
 
3980
                                                for (z4=0;z4<templa.GetSize();z4+=3)
 
3981
                                                {
 
3982
                                                        if (trdyn->m_bOrtho)
 
3983
                                                        {
 
3984
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
3985
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
3986
                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
 
3987
                                                                vec1 = CrossP(vec2-vec0,vec3-vec0);
 
3988
                                                        } else
 
3989
                                                        {
 
3990
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
3991
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
3992
                                                                vec1 = vec2-vec0;
 
3993
                                                        }
 
3994
                                                        vec1.Normalize();
 
3995
                                                        if (g_bRDynCacheMode)
 
3996
                                                        {
 
3997
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
 
3998
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
 
3999
                                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
 
4000
                                                                ti++;
 
4001
                                                        } else
 
4002
                                                        {
 
4003
                                                                for (z=0;z<trdyn->m_iDepth/trdyn->m_iStride;z++)
 
4004
                                                                {
 
4005
                                                                        g_pT2Timestep = GetTimeStep(z*trdyn->m_iStride);
 
4006
                                                                        if (g_pT2Timestep == NULL)
 
4007
                                                                                continue;
 
4008
                                                                        if (trdyn->m_bOrtho)
 
4009
                                                                        {
 
4010
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
 
4011
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
 
4012
                                                                                vec5 = g_pT2Timestep->m_vaCoords[templa[z4+2]];
 
4013
                                                                                vec2 = CrossP(vec3-vec4,vec5-vec4);
 
4014
                                                                        } else
 
4015
                                                                        {
 
4016
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
 
4017
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
 
4018
                                                                                vec2 = vec3-vec4;
 
4019
                                                                        }
 
4020
                                                                        vec2.Normalize();
 
4021
                                                                        trdyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
 
4022
                                                                        trdyn->m_pCount[z]++;
 
4023
                                                                }
 
4024
                                                        }
 
4025
                                                }
 
4026
                                        } else if (trdyn->m_iVecType == 1)
 
4027
                                        {
 
4028
                                                vec1 = sm->m_vDipole;
 
4029
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
 
4030
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
 
4031
                                                ((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
 
4032
 
 
4033
        //                                      if (z3 == 0)
 
4034
        //                                              mfprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
 
4035
 
 
4036
                                                ti++;
 
4037
                                        } // END VECTYPE
 
4038
                                }
 
4039
                        }
 
4040
                } // END IF RDYN
 
4041
 
 
4042
                if (g_bVACF)
 
4043
                {
 
4044
                        g_pT2Timestep = GetTimeStep(0);
 
4045
//                      mprintf("\nStep=%d, adding.",g_iSteps);
 
4046
                        if (g_bGlobalVACF)
 
4047
                        {
 
4048
                                if (g_bVACFCacheMode)
 
4049
                                {
 
4050
                                        ti = 0;
 
4051
                                        for (z2=0;z2<g_iGesAtomCount;z2++)
 
4052
                                        {
 
4053
                                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
 
4054
                                                        continue;
 
4055
                //                              mprintf("Global: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,z2+1,g_pT2Timestep->m_vaVelocities[z2][0],g_pT2Timestep->m_vaVelocities[z2][1],g_pT2Timestep->m_vaVelocities[z2][2]);
 
4056
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][0]);
 
4057
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][1]);
 
4058
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][2]);
 
4059
                                                ti++;
 
4060
                                        }
 
4061
                                } else
 
4062
                                {
 
4063
                                        for (z=0;z<g_pGlobalVACF->m_iSize;z++)
 
4064
                                        {
 
4065
                                                g_pTempTimestep = GetTimeStep(z);
 
4066
                                                if (g_pTempTimestep == NULL)
 
4067
                                                        continue;
 
4068
                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
 
4069
                                                        continue;
 
4070
                                                pd = &g_pGlobalVACF->m_pData[z];
 
4071
                                                g_pGlobalVACF->m_pCounter[z] += g_iGesAtomCount;
 
4072
                                                for (z2=0;z2<g_iGesAtomCount;z2++)
 
4073
                                                        *pd += DotP(g_pTempTimestep->m_vaVelocities[z2],g_pT2Timestep->m_vaVelocities[z2]);
 
4074
                                        }
 
4075
                                }
 
4076
                        }
 
4077
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
4078
                        {
 
4079
                                o = (CObservation*)g_oaObserv[z6];
 
4080
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
 
4081
                                {
 
4082
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
 
4083
                                        o->m_pVACF->BuildAtomList(sm,&templa);
 
4084
                                        for (z4=0;z4<templa.GetSize();z4++)
 
4085
                                        {
 
4086
                                                if (g_bVACFCacheMode)
 
4087
                                                {
 
4088
                                                        ti = templa[z4];
 
4089
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][0]);
 
4090
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][1]);
 
4091
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][2]);
 
4092
                                //                      mprintf("%d*%d+%d=%d\n",z3,o->m_pVACF->m_iShowAtomGes,z4,z3*o->m_pVACF->m_iShowAtomGes+z4);
 
4093
                                //                      mprintf("Lokal: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,ti+1,g_pT2Timestep->m_vaVelocities[ti][0],g_pT2Timestep->m_vaVelocities[ti][1],g_pT2Timestep->m_vaVelocities[ti][2]);
 
4094
                                //                      mprintf("Step %d: Obs %d, Mol %d, Atom %d: Index %d.\n",g_iStepHistory,z6+1,z3+1,z4+1,ti+1);
 
4095
                                                } else
 
4096
                                                {
 
4097
                                                        for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
 
4098
                                                        {
 
4099
                                                                o->m_pVACF->m_pCounter[z5]++;
 
4100
                                                                g_pTempTimestep = GetTimeStep(z5);
 
4101
                                                                if (g_pTempTimestep == NULL)
 
4102
                                                                        continue;
 
4103
                                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
 
4104
                                                                        continue;
 
4105
                                                                o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
 
4106
                                                        }
 
4107
                                                }
 
4108
                                        }
 
4109
                                }
 
4110
                        }
 
4111
                } // END IF VACF
 
4112
 
 
4113
                if (g_bIRSpec && g_bGlobalIR)
 
4114
                {
 
4115
                        for (z3=0;z3<g_oaSingleMolecules.GetSize();z3++) // Alle anderen Molekuele durchgehen
 
4116
                        {
 
4117
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z3];
 
4118
                                vec1 = sm->m_vDipole;
 
4119
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[0]);
 
4120
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[1]);
 
4121
                                ((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[2]);
 
4122
                        }
 
4123
                } // END IF g_bGlobalIR
 
4124
 
 
4125
                if (g_bReact)
 
4126
                {
 
4127
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4128
                        if (ReactSecondRun)
 
4129
                        {
 
4130
                                g_pReact->WriteTrajec(g_pTempTimestep);
 
4131
                        } else
 
4132
                        {
 
4133
                                g_pReact->ScanBonds(g_pTempTimestep,false);
 
4134
                        }
 
4135
                }
 
4136
 
 
4137
                if (g_bNbAnalysis)
 
4138
                {
 
4139
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4140
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
 
4141
                        {
 
4142
                                smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
 
4143
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
4144
                                {
 
4145
                                        o = (CObservation*)g_oaObserv[z6];
 
4146
                                        o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep);
 
4147
                                        o->m_pNbAnalysis->AnalyzeStep();
 
4148
                                }
 
4149
                        }
 
4150
                }
 
4151
 
 
4152
                if (g_bNbExchange)
 
4153
                {
 
4154
                }
 
4155
 
 
4156
                if (g_bClusterAnalysis)
 
4157
                {
 
4158
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4159
                        g_pClusterAnalysis->Process(g_pTempTimestep);
 
4160
                }
 
4161
 
 
4162
                if (g_bFESA)
 
4163
                {
 
4164
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4165
                        g_pFESA->ProcessStep(g_pTempTimestep);
 
4166
                }
 
4167
 
 
4168
                if (g_bMicroHet)
 
4169
                {
 
4170
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4171
                        g_pTempTimestep->FoldAtomsPositive();
 
4172
                        g_pMicroHet->Process(g_pTempTimestep);
 
4173
                }
 
4174
 
 
4175
                if (g_bThermo)
 
4176
                {
 
4177
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4178
                        g_pThermoAnalysis->AnalyzeStep(g_pTempTimestep);
 
4179
                }
 
4180
 
 
4181
                if (g_bVoro)
 
4182
                {
 
4183
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4184
 
 
4185
                        if (g_pVoroWrapper->m_bVoroStat)
 
4186
                        {
 
4187
                                g_pTempTimestep->FoldAtomsPositive();
 
4188
                                g_pVoroWrapper->Build(g_pTempTimestep);
 
4189
                        }
 
4190
 
 
4191
                        if (g_pVoroWrapper->m_bWritePOV)
 
4192
                        {
 
4193
//                              g_pVoroWrapper->WritePOV(g_pTempTimestep);
 
4194
//                              g_pTempTimestep->FoldAtomsPositive();
 
4195
 
 
4196
                                g_pVoroWrapper->PerformChoreography_Single(g_pTempTimestep);
 
4197
 
 
4198
                                if (g_pVoroWrapper->m_bWritePOVMovie)
 
4199
                                {
 
4200
                                        if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
 
4201
                                                break;
 
4202
                                } else break;
 
4203
                        }
 
4204
 
 
4205
                        if (g_pVoroWrapper->m_bSurfCover)
 
4206
                                g_pVoroWrapper->ProcessSurfCover(g_pTempTimestep);
 
4207
 
 
4208
                        if (g_pVoroWrapper->m_bVoroMetric)
 
4209
                        {
 
4210
                                if (!g_bClusterAnalysis)
 
4211
                                        g_pVoroWrapper->BuildVoroMetric(g_pTempTimestep);
 
4212
                        }
 
4213
 
 
4214
                        if (g_pVoroWrapper->m_bPOVBox)
 
4215
                        {
 
4216
                                g_pTempTimestep->FoldAtomsPositive();
 
4217
 
 
4218
                                g_pVoroWrapper->PerformChoreography_Box(g_pTempTimestep);
 
4219
 
 
4220
                                if (g_pVoroWrapper->m_bWritePOVMovie)
 
4221
                                {
 
4222
                                        if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
 
4223
                                                break;
 
4224
                                } else break;
 
4225
                        }
 
4226
                }
 
4227
 
 
4228
/*              if (g_bSFac)
 
4229
                {
 
4230
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4231
                        g_pSFac->ProcessStep(g_pTempTimestep);
 
4232
                }*/
 
4233
 
 
4234
                if (g_bVoid)
 
4235
                {
 
4236
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4237
                        g_pTempTimestep->FoldAtomsPositive();
 
4238
                        g_pVoroAnalysis->Step(g_pTempTimestep);
 
4239
                }
 
4240
 
 
4241
                if (g_bVDF && (g_iFixMol == -1))
 
4242
                {
 
4243
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4244
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
4245
                        {
 
4246
                                o = (CObservation*)g_oaObserv[z6];
 
4247
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
 
4248
                                {
 
4249
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
 
4250
                                        o->m_pVDF[0]->BuildAtomList(NULL,sm,&templa);
 
4251
 
 
4252
                                        for (z4=0;z4<templa.GetSize();z4++)
 
4253
                                                o->m_pVDF[0]->m_pVDF->AddToBin(g_pTempTimestep->m_vaVelocities[templa[z4]].GetLength());
 
4254
                                }
 
4255
                        }
 
4256
                }
 
4257
 
 
4258
                if ((!g_bCDF) && (!g_bRDF) && (!g_bSDF) && (!g_bPlProj) && (!g_bPlDF) && (!g_bLiDF) && (!g_bVoidSDF) && (!g_bADF) && (!g_bDDF) && (!g_bVDF) && (!g_bDipDF) && (!g_bCutCluster) && (!g_bSaveRefEnv) && (!g_bVHDF) && (!g_bRevSDF) && (!g_bCond))
 
4259
                        goto _endstep;
 
4260
 
 
4261
                if (g_bVoid)
 
4262
                {
 
4263
                        if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
 
4264
                        {
 
4265
                                g_pVoroAnalysis->m_pTempSDF->Clear();
 
4266
                                g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4267
                                g_pTempTimestep->FoldAtomsPositive();
 
4268
                                for (z3=0;z3<g_iGesAtomCount;z3++)
 
4269
                                {
 
4270
                                        vec0 = g_pTempTimestep->m_vaCoords[z3];
 
4271
                                        g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
 
4272
                                }
 
4273
        //                      g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
 
4274
                        }
 
4275
                }
 
4276
 
 
4277
//              tfr = 9999.0;
 
4278
 
 
4279
                if (g_iFixMol == -1)
 
4280
                        goto _norefmol;
 
4281
 
 
4282
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
4283
                {
 
4284
                        o = (CObservation*)g_oaObserv[z6];
 
4285
 
 
4286
                        if (o->m_pConditions != NULL)
 
4287
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
 
4288
                                        o->m_pConditions->m_iPassCounter[z2] = 0;
 
4289
 
 
4290
                        if (o->m_pConditionsOM2 != NULL)
 
4291
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
 
4292
                                        o->m_pConditionsOM2->m_iPassCounter[z2] = 0;
 
4293
                }
 
4294
 
 
4295
                // Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
 
4296
                for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
 
4297
                {
 
4298
                        if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
 
4299
                                continue;
 
4300
 
 
4301
                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
 
4302
 
 
4303
                        if (g_bCutCluster)
 
4304
                        {
 
4305
                                if (g_iClusterPos >= g_iClusterCount)
 
4306
                                        break;
 
4307
 
 
4308
                                if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
 
4309
                                        break;
 
4310
 
 
4311
                                if (g_iaClusterMol[g_iClusterPos] != z2)
 
4312
                                        continue;
 
4313
 
 
4314
                                if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
 
4315
                                        break;
 
4316
 
 
4317
                                g_iClusterPos++;
 
4318
                        }
 
4319
 
 
4320
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
 
4321
 
 
4322
                        // Zentrieren/Falten der ganzen Box nur noch noetig bei den folgenden Analysen
 
4323
                        if (g_bPlProj || g_bSDF || g_bRevSDF || g_bCutCluster || g_bSaveRefEnv || g_bSaveJustTraj || g_bVoidSDF || g_bMiddleAvg)
 
4324
                        {
 
4325
                                vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
 
4326
 
 
4327
                                if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
 
4328
                                {
 
4329
                                        if (g_bFold)
 
4330
                                        {
 
4331
                                                g_pTempTimestep->CenterPos(vecc);
 
4332
 
 
4333
                                                if (g_bFoldAtomwise)
 
4334
                                                        g_pTempTimestep->FoldAtoms();
 
4335
                                                                else g_pTempTimestep->FoldMolecules();
 
4336
 
 
4337
                                                vec2 = -1.0f * vecc;
 
4338
 
 
4339
                                                g_pTempTimestep->CenterPos(vec2);
 
4340
                                        }
 
4341
 
 
4342
                                        if (g_bCutCluster || (g_iNbhMode == 2))
 
4343
                                        {
 
4344
                                                g_pNbSet->Reset();
 
4345
 
 
4346
                                                if (g_bCutCluster)
 
4347
                                                        g_pNbSet->ResetAlwaysTrue();
 
4348
 
 
4349
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
 
4350
 
 
4351
                                                if (g_bSaveRefWithEnv)
 
4352
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
 
4353
                                        }
 
4354
 
 
4355
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
 
4356
 
 
4357
                                        if (g_bTDO)
 
4358
                                        {
 
4359
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
 
4360
                                                {
 
4361
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
 
4362
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
 
4363
                                                        tfi = OpenFileWrite(buf,true);
 
4364
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
 
4365
                                                        fclose(tfi);
 
4366
                                                }
 
4367
                                        }
 
4368
                                }
 
4369
 
 
4370
                                // Legt vecc genau in den Ursprung des Koordinatensystems
 
4371
                                g_pTempTimestep->CenterPos(vecc);
 
4372
 
 
4373
 
 
4374
                                if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
 
4375
                                {
4236
4376
                                        if (g_bFold)
4237
4377
                                        {
4238
 
                                                g_pTempTimestep->CenterPos(vecc);
4239
 
 
4240
4378
                                                if (g_bFoldAtomwise)
4241
4379
                                                        g_pTempTimestep->FoldAtoms();
4242
4380
                                                                else g_pTempTimestep->FoldMolecules();
4243
 
 
4244
 
                                                vec2 = -1.0f * vecc;
4245
 
 
4246
 
                                                g_pTempTimestep->CenterPos(vec2);
4247
 
                                        }
4248
 
 
4249
 
                                        if (g_bCutCluster || (g_iNbhMode == 2))
4250
 
                                        {
4251
 
                                                g_pNbSet->Reset();
4252
 
 
4253
 
                                                if (g_bCutCluster)
4254
 
                                                        g_pNbSet->ResetAlwaysTrue();
4255
 
 
4256
 
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
4257
 
 
4258
 
                                                if (g_bSaveRefWithEnv)
4259
 
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
4260
 
                                        }
4261
 
 
4262
 
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
4263
 
 
4264
 
                                        if (g_bTDO)
4265
 
                                        {
4266
 
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
 
4381
                                        }
 
4382
 
 
4383
                                        if (g_bCutCluster || (g_iNbhMode == 2))
 
4384
                                        {
 
4385
                                                g_pNbSet->Reset();
 
4386
 
 
4387
                                                if (g_bCutCluster)
 
4388
                                                        g_pNbSet->ResetAlwaysTrue();
 
4389
 
 
4390
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
 
4391
 
 
4392
                                                if (g_bSaveRefWithEnv)
 
4393
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
 
4394
                                        }
 
4395
 
 
4396
                                        if (!g_bCenterZero && g_bPeriodic)
 
4397
                                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
 
4398
 
 
4399
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
 
4400
 
 
4401
                                        if (g_bTDO)
 
4402
                                        {
 
4403
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
 
4404
                                                {
 
4405
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
 
4406
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
 
4407
                                                        tfi = OpenFileWrite(buf,true);
 
4408
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
 
4409
                                                        fclose(tfi);
 
4410
                                                }
 
4411
                                        }
 
4412
                                }
 
4413
 
 
4414
                                if (g_bPlProj || g_bSDF || g_bVoidSDF || g_bAvg || ((g_bSaveRefEnv || g_bCutCluster) && g_bRefEnvCenter && g_bRefEnvFix)) // Wir brauchen ein neues Koordinatensystem und eine Drehmatrix
 
4415
                                {
 
4416
                                        vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
 
4417
                                        vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
 
4418
                                        mat.MatUltra(vec2,vec3); // Dies erstellt uns die Drehmatrix
 
4419
                                        g_pTempTimestep->Transform(mat);
 
4420
 
 
4421
                                        if (g_bPlProj)
 
4422
                                        {
 
4423
                                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
4267
4424
                                                {
4268
 
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4269
 
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
4270
 
                                                        tfi = OpenFileWrite(buf,true);
4271
 
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4272
 
                                                        fclose(tfi);
 
4425
                                                        o = (CObservation*)g_oaObserv[z6];
 
4426
 
 
4427
                                                        if (o->m_pPlProj->m_bAverageAtomPos)
 
4428
                                                        {
 
4429
                                                                o->m_pPlProj->m_iAverageCounter++;
 
4430
                                                                ti = 0;
 
4431
                                                                for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
 
4432
                                                                {
 
4433
                                                                        for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
 
4434
                                                                        {
 
4435
                                                                                o->m_pPlProj->m_vaAtomPos[ti] += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[o->m_pPlProj->m_oDrawAtoms.m_baAtomType[z3]])->GetAt(((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetAt(z4))];
 
4436
                                                                                ti++;
 
4437
                                                                        }
 
4438
                                                                }
 
4439
                                                        }
4273
4440
                                                }
4274
4441
                                        }
4275
4442
                                }
4276
 
 
4277
 
                                // Legt vecc genau in den Ursprung des Koordinatensystems
4278
 
                                g_pTempTimestep->CenterPos(vecc);
4279
 
 
 
4443
 
4280
4444
                                if (g_bFold)
4281
4445
                                {
4282
4446
                                        if (g_bFoldAtomwise)
4284
4448
                                                        else g_pTempTimestep->FoldMolecules();
4285
4449
                                }
4286
4450
 
4287
 
                                if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
4288
 
                                {
4289
 
                                        if (g_bCutCluster || (g_iNbhMode == 2))
4290
 
                                        {
4291
 
                                                g_pNbSet->Reset();
4292
 
 
4293
 
                                                if (g_bCutCluster)
4294
 
                                                        g_pNbSet->ResetAlwaysTrue();
4295
 
 
4296
 
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
4297
 
 
4298
 
                                                if (g_bSaveRefWithEnv)
4299
 
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
4300
 
                                        }
4301
 
 
4302
 
                                        if (!g_bCenterZero && g_bPeriodic)
4303
 
                                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4304
 
 
4305
 
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4306
 
 
4307
 
                                        if (g_bTDO)
4308
 
                                        {
4309
 
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
4310
 
                                                {
4311
 
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4312
 
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
4313
 
                                                        tfi = OpenFileWrite(buf,true);
4314
 
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4315
 
                                                        fclose(tfi);
4316
 
                                                }
4317
 
                                        }
4318
 
                                }
4319
 
 
4320
 
                                if (g_bSDF || g_bVoidSDF || g_bAvg || ((g_bSaveRefEnv || g_bCutCluster) && g_bRefEnvCenter && g_bRefEnvFix)) // Wir brauchen ein neues Koordinatensystem und eine Drehmatrix
4321
 
                                {
4322
 
                                        vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
4323
 
                                        vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
4324
 
                                        mat.MatUltra(vec2,vec3); // Dies erstellt uns die Drehmatrix
4325
 
                                        g_pTempTimestep->Transform(mat);
4326
 
                                }
4327
 
 
4328
 
                                if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
4329
 
                                {
4330
 
                                        if (g_bCutCluster || (g_iNbhMode == 2))
4331
 
                                        {
4332
 
                                                g_pNbSet->Reset();
4333
 
                                                if (g_bCutCluster)
4334
 
                                                        g_pNbSet->ResetAlwaysTrue();
4335
 
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
4336
 
                                                if (g_bSaveRefWithEnv)
4337
 
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
4338
 
                                        }
4339
 
 
4340
 
                                        if (!g_bCenterZero && g_bPeriodic)
4341
 
                                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4342
 
 
4343
 
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4344
 
 
4345
 
                                        if (g_bTDO)
4346
 
                                        {
4347
 
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
4348
 
                                                {
4349
 
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4350
 
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
4351
 
                                                        tfi = OpenFileWrite(buf,true);
4352
 
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4353
 
                                                        fclose(tfi);
4354
 
                                                }
4355
 
                                        }
4356
 
                                }
4357
 
                        } // END IF SDF, RevEnv, ...
4358
 
 
4359
 
/***************************************************************************************************************************/
4360
 
        
4361
 
                        if (g_bVoidSDF)
4362
 
                        {
4363
 
                                if (g_pVoroAnalysis->m_bEmptySpaceSDF)
4364
 
                                {
4365
 
                                        if (!g_pVoroAnalysis->m_bNewEmptyMode)
4366
 
                                        {
4367
 
                                                g_pVoroAnalysis->m_pTempSDF->Clear();
4368
 
 
4369
 
                                                for (z3=0;z3<g_oaMolecules.GetSize();z3++)
4370
 
                                                {
4371
 
                                                        tm = (CMolecule*)g_oaMolecules[z3];
4372
 
                                                        for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
4373
 
                                                        {
4374
 
                                                                if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
4375
 
                                                                        if ((z3 == g_iFixMol) && (z4 == z2))
4376
 
                                                                                continue;
4377
 
 
4378
 
                                                                tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
4379
 
 
4380
 
                                                                for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
4381
 
                                                                {
4382
 
                                                                        if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
4383
 
                                                                                continue;
4384
 
 
4385
 
                                                                        for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
4386
 
                                                                        {
4387
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
4388
 
 
4389
 
                                                                                g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
4390
 
                                                                        }
4391
 
                                                                }
4392
 
                                                        }
4393
 
                                                }
4394
 
                                                g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
4395
 
                                        } else
4396
 
                                        {
4397
 
                                                g_pVoroAnalysis->BinEmptySDF();
4398
 
                                        }
4399
 
                                }
4400
 
 
4401
 
                                if (g_pVoroAnalysis->m_bSphereHoleSDF)
4402
 
                                {
4403
 
                                        g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
4404
 
                                }
4405
 
                        }
4406
 
 
4407
 
                        if (g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bPlDF || g_bLiDF || g_bSDF || g_bADF || g_bDDF || g_bVDF || g_bCond) 
4408
 
                        {
4409
 
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
4410
 
                                {
4411
 
                                        o = (CObservation*)g_oaObserv[z6];
4412
 
 
4413
 
                                //      mprintf("\nStep %d, z2=%d, Obs=%d, Reg=%d, ObsReg=%d.",g_iSteps,z2,z6,g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]],o->m_iaRMRegions[0]);
4414
 
 
4415
 
                                        if (g_bRegionAnalysis)
4416
 
                                                if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])))
4417
 
                                                        continue;
4418
 
 
4419
 
                                //      mprintf("\n   ...RM ist in Region.");
4420
 
 
4421
 
                                        ti2 = o->m_waSaveRefList.GetPosition(z2);
4422
 
 
4423
 
                                        if (o->m_bObsCertain)
4424
 
                                        {
4425
 
                                //              mprintf("\n    RefList: ");
4426
 
                                //              for (z7=0;z7<o->m_waObsRefList.GetSize();z7++)
4427
 
                                //                      mprintf("%d, ",o->m_waObsRefList[z7]);
4428
 
 
4429
 
                                                if (!o->m_waObsRefList.Contains(z2))
4430
 
                                                        continue;
4431
 
                                //              mprintf("\n   ...RM ist auch in RefList.");
4432
 
                                                tic_r = o->m_waObsRefList.GetPosition(z2);
4433
 
                                        }
4434
 
 
4435
 
                                        if (g_bUseVelocities)
4436
 
                                        {
4437
 
                                                tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
4438
 
                                                if (o->m_bVelocityRelToRef)
4439
 
                                                {
4440
 
                                                        vecv = g_pTempTimestep->m_vaVelocities[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4441
 
                                                        for (z3=0;z3<g_iGesVirtAtomCount;z3++)
4442
 
                                                                tempvel[z3] -= vecv;
4443
 
                                                }
4444
 
                                        }
4445
 
 
4446
 
                                        if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
4447
 
                                        {
4448
 
                                                if (o->m_bSaveSeparateFiles)
4449
 
                                                        mfprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
4450
 
                                                                else if (ti2 == 0)
4451
 
                                                                        mfprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
4452
 
                                        }
4453
 
 
4454
 
                                        for (zr=0;zr<g_iCDFChannels;zr++)
4455
 
                                        {
4456
 
                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
4457
 
                                                {
4458
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4459
 
                                                                o->m_pRDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4460
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4461
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4462
 
                                                                        o->m_pRDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4463
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4464
 
                                                        {
4465
 
                                                                if (o->m_bSaveSeparateFiles)
4466
 
                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
4467
 
                                                                                else if (ti2 == 0)
4468
 
                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
4469
 
                                                        }
4470
 
                                                }
4471
 
                                                        
4472
 
                                                if (g_bADF && (o->m_pADF[zr] != NULL))
4473
 
                                                {
4474
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4475
 
                                                                o->m_pADF[zr]->m_faData[z3].RemoveAll_KeepSize();
4476
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4477
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4478
 
                                                                        o->m_pADF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4479
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4480
 
                                                        {
4481
 
                                                                if (o->m_bSaveSeparateFiles)
4482
 
                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4483
 
                                                                                else if (ti2 == 0)
4484
 
                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4485
 
                                                        }
4486
 
                                                }
4487
 
 
4488
 
                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
4489
 
                                                {
4490
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4491
 
                                                                o->m_pDDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4492
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4493
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4494
 
                                                                        o->m_pDDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4495
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4496
 
                                                        {
4497
 
                                                                if (o->m_bSaveSeparateFiles)
4498
 
                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4499
 
                                                                                else if (ti2 == 0)
4500
 
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4501
 
                                                        }
4502
 
                                                }
4503
 
 
4504
 
                                                if (g_bPlDF && (o->m_pPlDF[zr] != NULL))
4505
 
                                                {
4506
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4507
 
                                                                o->m_pPlDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4508
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4509
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4510
 
                                                                        o->m_pPlDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4511
 
/*                                                      if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4512
 
                                                        {
4513
 
                                                                if (o->m_bSaveSeparateFiles)
4514
 
                                                                        mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4515
 
                                                                                else if (ti2 == 0)
4516
 
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4517
 
                                                        }*/
4518
 
                                                }
4519
 
 
4520
 
                                                if (g_bLiDF && (o->m_pLiDF[zr] != NULL))
4521
 
                                                {
4522
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4523
 
                                                                o->m_pLiDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4524
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4525
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4526
 
                                                                        o->m_pLiDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4527
 
/*                                                      if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4528
 
                                                        {
4529
 
                                                                if (o->m_bSaveSeparateFiles)
4530
 
                                                                        mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4531
 
                                                                                else if (ti2 == 0)
4532
 
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4533
 
                                                        }*/
4534
 
                                                }
4535
 
 
4536
 
                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
4537
 
                                                {
4538
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4539
 
                                                                o->m_pDipDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4540
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4541
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4542
 
                                                                        o->m_pDipDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4543
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4544
 
                                                        {
4545
 
                                                                if (o->m_bSaveSeparateFiles)
4546
 
                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
4547
 
                                                                                else if (ti2 == 0)
4548
 
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
4549
 
                                                        }
4550
 
                                                }
4551
 
 
4552
 
                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
4553
 
                                                {
4554
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4555
 
                                                                o->m_pVDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4556
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4557
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4558
 
                                                                        o->m_pVDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4559
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4560
 
                                                        {
4561
 
                                                                if (o->m_bSaveSeparateFiles)
4562
 
                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
4563
 
                                                                                else if (ti2 == 0)
4564
 
                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
4565
 
                                                        }
4566
 
                                                }
4567
 
                                        } // END FOR zr
4568
 
 
4569
 
                                        if (g_bSDF)
4570
 
                                        {
4571
 
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
4572
 
                                                {
4573
 
                                                        o->m_pSDF->m_vaData[z3].RemoveAll_KeepSize();
4574
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4575
 
                                                                o->m_pSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4576
 
                                                }
4577
 
                                        }
4578
 
 
4579
 
                                        if (g_bRevSDF)
4580
 
                                        {
4581
 
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
4582
 
                                                {
4583
 
                                                        o->m_pRevSDF->m_vaData[z3].RemoveAll_KeepSize();
4584
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4585
 
                                                                o->m_pRevSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4586
 
                                                }
4587
 
                                        }
4588
 
 
4589
 
                                        if (o->m_bSelf)
4590
 
                                        {
4591
 
                                                if (g_bADF)
4592
 
                                                {
4593
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4594
 
                                                        {
4595
 
                                                                if (o->m_pADF[zr] == NULL)
4596
 
                                                                        continue;
4597
 
                                                                o->m_pADF[zr]->BuildAtomList(smfix,NULL,&templa);
4598
 
                                                                for (z4=0;z4<templa.GetSize();z4+=6)
4599
 
                                                                {
4600
 
                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
4601
 
                                                                        {
4602
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4603
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4604
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4605
 
                                                                                vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4606
 
                                                                        } else
4607
 
                                                                        {
4608
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4609
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4610
 
                                                                                vec1 = FoldVector(vec2-vec0);
4611
 
                                                                        }
4612
 
                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
4613
 
                                                                        {
4614
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4615
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4616
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4617
 
                                                                                vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4618
 
                                                                        } else
4619
 
                                                                        {
4620
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4621
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4622
 
                                                                                vec2 = FoldVector(vec3-vec4);
4623
 
                                                                        }
4624
 
                                                                        tf = Angle_Deg(vec1,vec2);
4625
 
                                                                        if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
4626
 
                                                                                tf = 180.0f-tf;
4627
 
                                                                        if (o->m_pADF[zr]->m_bCosine)
4628
 
                                                                                tf = cos(tf/180.0*Pi);
4629
 
 
4630
 
                                                                        if (g_bDeriv)
4631
 
                                                                        {
4632
 
                                                                                o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) = tf;
4633
 
                                                                                switch(o->m_pADF[zr]->m_iDeriv)
4634
 
                                                                                {
4635
 
                                                                                        case 0:
4636
 
                                                                                                tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
4637
 
                                                                                                break;
4638
 
                                                                                        case 1:
4639
 
                                                                                                tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (2*g_fTimestepLength);
4640
 
                                                                                                break;
4641
 
                                                                                        case 2:
4642
 
                                                                                                tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (g_fTimestepLength * g_fTimestepLength);
4643
 
                                                                                                break;
4644
 
                                                                                }
4645
 
                                                                        }
4646
 
 
4647
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4648
 
                                                                        {
4649
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4650
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
4651
 
 
4652
 
                                                                                o->m_pADF[zr]->m_faData[0].Add(tf);
4653
 
 
4654
 
                                                                                if (o->m_pADF[zr]->m_bACF)
4655
 
                                                                                        o->m_pADF[zr]->m_pfaACFBuffer[z2*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
4656
 
 
4657
 
                                        /*                                      if (o->m_pADF[zr]->m_bMirror)
4658
 
                                                                                {
4659
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4660
 
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,180.0-tf);
4661
 
                                                                                        o->m_pADF[zr]->m_faData[0].Add(180.0-tf);
4662
 
                                                                                }*/
4663
 
 
4664
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
4665
 
                                                                                {
4666
 
                                                                                        if (o->m_bSaveSeparateFiles)
4667
 
                                                                                                mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
4668
 
                                                                                                        else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
4669
 
                                                                                        if (o->m_bCombinedPlot)
4670
 
                                                                                                o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
4671
 
                                                                                }
4672
 
                                                                                if (o->m_bTimeDiff)
4673
 
                                                                                        ((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
4674
 
                                                                        }
4675
 
                                                                } // END FOR z4
4676
 
                                                        } // END FOR zr
4677
 
                                                } // Ende IF ADF
4678
 
 
4679
 
                                                if (g_bDDF)
4680
 
                                                {
4681
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4682
 
                                                        {
4683
 
                                                                if (o->m_pDDF[zr] == NULL)
4684
 
                                                                        continue;
4685
 
                                                                o->m_pDDF[zr]->BuildAtomList(smfix,smfix,&templa);
4686
 
                                                                for (z4=0;z4<templa.GetSize();z4+=9)
4687
 
                                                                {
4688
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[0])
4689
 
                                                                        {
4690
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4691
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4692
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4693
 
                                                                                vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4694
 
                                                                        } else
4695
 
                                                                        {
4696
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4697
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4698
 
                                                                                vec1 = FoldVector(vec2-vec0);
4699
 
                                                                        }
4700
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[1])
4701
 
                                                                        {
4702
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4703
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4704
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4705
 
                                                                                vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4706
 
                                                                        } else
4707
 
                                                                        {
4708
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4709
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4710
 
                                                                                vec2 = FoldVector(vec3-vec4);
4711
 
                                                                        }
4712
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[2])
4713
 
                                                                        {
4714
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4715
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4716
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
4717
 
                                                                                vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4718
 
                                                                        } else
4719
 
                                                                        {
4720
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4721
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4722
 
                                                                                vec3 = FoldVector(vec3-vec4);
4723
 
                                                                        }
4724
 
                                                                        tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
4725
 
                                                                        if (o->m_pDDF[zr]->m_bCosine)
4726
 
                                                                                tf = cos(tf/180.0*Pi);
4727
 
                                                                                        else if (o->m_pDDF[zr]->m_bPositive)
4728
 
                                                                                                if (tf < 0)
4729
 
                                                                                                        tf += 360.0;
4730
 
                                                                        if (g_bDeriv)
4731
 
                                                                        {
4732
 
                                                                                o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) = tf;
4733
 
                                                                                switch(o->m_pDDF[zr]->m_iDeriv)
4734
 
                                                                                {
4735
 
                                                                                        case 0:
4736
 
                                                                                                tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
4737
 
                                                                                                break;
4738
 
                                                                                        case 1:
4739
 
                                                                                                tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (2*g_fTimestepLength);
4740
 
                                                                                                break;
4741
 
                                                                                        case 2:
4742
 
                                                                                                tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (g_fTimestepLength * g_fTimestepLength);
4743
 
                                                                                                break;
4744
 
                                                                                }
4745
 
                                                                        }
4746
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4747
 
                                                                        {
4748
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4749
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
4750
 
 
4751
 
                                                                                o->m_pDDF[zr]->m_faData[0].Add(tf);
4752
 
 
4753
 
                                                                                if (o->m_pDDF[zr]->m_bACF)
4754
 
                                                                                        o->m_pDDF[zr]->m_pfaACFBuffer[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
4755
 
 
4756
 
                                                                                if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
4757
 
                                                                                {
4758
 
                                                                                        o->m_pDDF[zr]->m_faData[0].Add(-tf);
4759
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4760
 
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,-tf);
4761
 
                                                                                }
4762
 
 
4763
 
                                                                                if (o->m_bTimeDiff)
4764
 
                                                                                        ((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
4765
 
 
4766
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
4767
 
                                                                                {
4768
 
                                                                                        if (o->m_pDDF[zr]->m_bRotate)
4769
 
                                                                                        {
4770
 
                                                                                                if (g_iSteps > 1)
4771
 
                                                                                                {
4772
 
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
4773
 
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
4774
 
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
4775
 
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
4776
 
                                                                                                }
4777
 
                                                                                                o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
4778
 
                                                                                                tf2 = tf + o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
4779
 
                                                                                        } else tf2 = tf;
4780
 
                                                                                        if (o->m_bSaveSeparateFiles)
4781
 
                                                                                                mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
4782
 
                                                                                                        else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
4783
 
                                                                                        if (o->m_bCombinedPlot)
4784
 
                                                                                                o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
4785
 
                                                                                }
4786
 
                                                                        }
4787
 
                                                                }
4788
 
                                                        }
4789
 
                                                } // END IF DDF
4790
 
 
4791
 
                                                if (g_bVHDF)
4792
 
                                                {
4793
 
                                                        o->m_pVHDF->BuildAtomList(smfix,smfix,&templa);
4794
 
                                                        for (z4=0;z4<templa.GetSize();z4+=2)
4795
 
                                                        {
4796
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
4797
 
                                                                for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
4798
 
                                                                {
4799
 
                                                                        g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
4800
 
                                                                        if (g_pT2Timestep == NULL)
4801
 
                                                                                continue;
4802
 
                                                                        vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4803
 
                                                                        tf = FoldedLength(vec0-vec1);
4804
 
                                                                        o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
4805
 
                                                                        o->m_pVHDF->m_pCount[z0]++;
4806
 
                                                                }
4807
 
                                                        } 
4808
 
                                                } // Ende IF VHDF
4809
 
 
4810
 
                                                if (g_bRDF)
4811
 
                                                {
4812
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4813
 
                                                        {
4814
 
                                                                if (o->m_pRDF[zr] == NULL)
4815
 
                                                                        continue;
4816
 
                                                                o->m_pRDF[zr]->BuildAtomList(smfix,smfix,&templa);
4817
 
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
4818
 
                                                                {
4819
 
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4820
 
                                                                        vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4821
 
                                                                        tf = FoldedLength(vec0-vec1);
4822
 
                                                                        if (g_bDeriv)
4823
 
                                                                        {
4824
 
                                                                                o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) = tf;
4825
 
                                                                                switch(o->m_pRDF[zr]->m_iDeriv)
4826
 
                                                                                {
4827
 
                                                                                        case 0:
4828
 
                                                                                                tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
4829
 
                                                                                                break;
4830
 
                                                                                        case 1:
4831
 
                                                                                                tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
4832
 
                                                                                                break;
4833
 
                                                                                        case 2:
4834
 
                                                                                                tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
4835
 
                                                                                                break;
4836
 
                                                                                }
4837
 
                                                                        }
4838
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4839
 
                                                                        {
4840
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4841
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
4842
 
 
4843
 
                                                                                if (o->m_bDecompType)
4844
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
4845
 
 
4846
 
                                                                                o->m_pRDF[zr]->m_faData[0].Add(tf);
4847
 
 
4848
 
                                                                                if (o->m_pRDF[zr]->m_bACF)
4849
 
                                                                                        o->m_pRDF[zr]->m_pfaACFBuffer[z2*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
4850
 
 
4851
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
4852
 
                                                                                {
4853
 
                                                                                        if (o->m_bSaveSeparateFiles)
4854
 
                                                                                                mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
4855
 
                                                                                                        else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
4856
 
                                                                                        if (o->m_bCombinedPlot)
4857
 
                                                                                                o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
4858
 
                                                                                }
4859
 
                                                                                if (o->m_bTimeDiff)
4860
 
                                                                                        ((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
4861
 
                                                                        }
4862
 
                                                                } 
4863
 
                                                        }
4864
 
                                                } // Ende IF RDF
4865
 
 
4866
 
                                                if (g_bPlDF)
4867
 
                                                {
4868
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4869
 
                                                        {
4870
 
                                                                if (o->m_pPlDF[zr] == NULL)
4871
 
                                                                        continue;
4872
 
                                                                o->m_pPlDF[zr]->BuildAtomList(smfix,smfix,&templa);
4873
 
                                                                for (z4=0;z4<templa.GetSize();z4+=4)
4874
 
                                                                {
4875
 
                                                                        if (o->m_pPlDF[zr]->m_bNormal)
4876
 
                                                                        {
4877
 
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4878
 
                                                                                vec0.Normalize();
4879
 
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4880
 
                                                                                tf = DotP(vec0,vec1);
4881
 
                                                                        } else
4882
 
                                                                        {
4883
 
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4884
 
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4885
 
                                                                                vec3 = CrossP(vec0,vec1);
4886
 
                                                                                vec3.Normalize();
4887
 
                                                                                vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4888
 
                                                                                tf = DotP(vec2,vec3);
4889
 
                                                                        }
4890
 
 
4891
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4892
 
                                                                        {
4893
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4894
 
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r,tf);
4895
 
 
4896
 
                                                                                o->m_pPlDF[zr]->m_faData[0].Add(tf);
4897
 
                                                                        }
4898
 
                                                                }
4899
 
                                                        }
4900
 
                                                } // END IF PlDF
4901
 
 
4902
 
                                                if (g_bLiDF)
4903
 
                                                {
4904
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4905
 
                                                        {
4906
 
                                                                if (o->m_pLiDF[zr] == NULL)
4907
 
                                                                        continue;
4908
 
                                                                o->m_pLiDF[zr]->BuildAtomList(smfix,smfix,&templa);
4909
 
                                                                for (z4=0;z4<templa.GetSize();z4+=4)
4910
 
                                                                {
4911
 
                                                                        if (o->m_pLiDF[zr]->m_bNormal)
4912
 
                                                                        {
4913
 
                                                                                vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4914
 
                                                                                vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4915
 
                                                                                vec0 = CrossP(vec2,vec3);
4916
 
                                                                                vec0.Normalize();
4917
 
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4918
 
                                                                                vec0 *= DotP(vec0,vec1);
4919
 
                                                                                tf = (vec1 - vec0).GetLength();
4920
 
                                                                        } else
4921
 
                                                                        {
4922
 
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4923
 
                                                                                vec0.Normalize();
4924
 
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4925
 
                                                                                vec0 *= DotP(vec0,vec1);
4926
 
                                                                                tf = (vec1 - vec0).GetLength();
4927
 
                                                                        }
4928
 
 
4929
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4930
 
                                                                        {
4931
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4932
 
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r,tf);
4933
 
 
4934
 
                                                                                o->m_pLiDF[zr]->m_faData[0].Add(tf);
4935
 
                                                                        }
4936
 
                                                                }
4937
 
                                                        }
4938
 
                                                } // END IF LiDF
4939
 
 
4940
 
                                                if (g_bDipDF)
4941
 
                                                {
4942
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4943
 
                                                        {
4944
 
                                                                if (o->m_pDipDF[zr] == NULL)
4945
 
                                                                        continue;
4946
 
                                                                tf = smfix->m_vDipole.GetLength();
4947
 
                                                                if (g_bDeriv)
4948
 
                                                                {
4949
 
                                                                        o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
4950
 
                                                                        switch(o->m_pDipDF[zr]->m_iDeriv)
4951
 
                                                                        {
4952
 
                                                                                case 0:
4953
 
                                                                                        tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
4954
 
                                                                                        break;
4955
 
                                                                                case 1:
4956
 
                                                                                        tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2)) / (2*g_fTimestepLength);
4957
 
                                                                                        break;
4958
 
                                                                                case 2:
4959
 
                                                                                        tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2)) / (g_fTimestepLength * g_fTimestepLength);
4960
 
                                                                                        break;
4961
 
                                                                        }
4962
 
                                                                }
4963
 
                                                                if (!g_bDeriv || (g_iSteps > 2))
4964
 
                                                                {
4965
 
                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4966
 
                                                                                o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
4967
 
 
4968
 
                                                                        o->m_pDipDF[zr]->m_faData[0].Add(tf);
4969
 
 
4970
 
                                                                        if (o->m_pDipDF[zr]->m_bACF)
4971
 
                                                                                o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
4972
 
 
4973
 
                                                                        if (o->m_bTimeDev && (ti2 != -1))
4974
 
                                                                        {
4975
 
                                                                                if (o->m_bSaveSeparateFiles)
4976
 
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
4977
 
                                                                                                else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
4978
 
                                                                                if (o->m_bCombinedPlot)
4979
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2,g_iSteps*g_fTimestepLength/1000.0,tf);
4980
 
                                                                        }
4981
 
                                                                        if (o->m_bTimeDiff)
4982
 
                                                                                ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
4983
 
                                                                }
4984
 
                                                        }
4985
 
                                                } // Ende IF DIPDF
4986
 
 
4987
 
                                                if (g_bVDF)
4988
 
                                                {
4989
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4990
 
                                                        {
4991
 
                                                                if (o->m_pVDF[zr] == NULL)
4992
 
                                                                        continue;
4993
 
                                                                o->m_pVDF[zr]->BuildAtomList(smfix,smfix,&templa);
4994
 
                                                                for (z4=0;z4<templa.GetSize();z4++)
4995
 
                                                                {
4996
 
                                                                        tf = tempvel[templa[z4]].GetLength();
4997
 
                                                                        if (g_bDeriv)
4998
 
                                                                        {
4999
 
                                                                                o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) = tf;
5000
 
                                                                                switch(o->m_pVDF[zr]->m_iDeriv)
5001
 
                                                                                {
5002
 
                                                                                        case 0:
5003
 
                                                                                                tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
5004
 
                                                                                                break;
5005
 
                                                                                        case 1:
5006
 
                                                                                                tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
5007
 
                                                                                                break;
5008
 
                                                                                        case 2:
5009
 
                                                                                                tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
5010
 
                                                                                                break;
5011
 
                                                                                }
5012
 
                                                                        }
5013
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
5014
 
                                                                        {
5015
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
5016
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
5017
 
 
5018
 
                                                                                o->m_pVDF[zr]->m_faData[0].Add(tf);
5019
 
 
5020
 
                                                                                if (o->m_pVDF[zr]->m_bACF)
5021
 
                                                                                        o->m_pVDF[zr]->m_pfaACFBuffer[z2*o->m_pVDF[zr]->m_iCombinations+z4]->Add((float)tf);
5022
 
 
5023
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
5024
 
                                                                                {
5025
 
                                                                                        if (o->m_bSaveSeparateFiles)
5026
 
                                                                                                mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5027
 
                                                                                                        else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5028
 
                                                                                        if (o->m_bCombinedPlot)
5029
 
                                                                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pVDF[zr]->m_iCombinations+z4,g_iSteps*g_fTimestepLength/1000.0,tf);
5030
 
                                                                                }
5031
 
                                                                                if (o->m_bTimeDiff)
5032
 
                                                                                        ((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
5033
 
                                                                        }
5034
 
                                                                }
5035
 
                                                        }
5036
 
                                                } // Ende IF VDF
5037
 
 
5038
 
                                                if (g_bSDF)
5039
 
                                                {
5040
 
                                                        o->m_pSDF->BuildAtomList(smfix,smfix,&templa);
5041
 
                                                        for (z4=0;z4<templa.GetSize();z4++)
5042
 
                                                        {
5043
 
                                                                o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5044
 
 
5045
 
                                                                if (o->m_pSDF->m_bVdWSpheres)
5046
 
                                                                        o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
5047
 
                                                        } 
5048
 
                                                } // Ende IF SDF
5049
 
 
5050
 
                                                if (g_bRevSDF)
5051
 
                                                {
5052
 
                                                        o->m_pRevSDF->BuildAtomList(smfix,smfix,&templa);
5053
 
                                                        for (z4=0;z4<templa.GetSize();z4++)
5054
 
                                                                o->m_pRevSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5055
 
                                                } // Ende IF RevSDF
5056
 
 
5057
 
                                        } // Ende IF m_bSelf  
5058
 
 
5059
 
                                        if (o->m_bOthers)
5060
 
                                        {
5061
 
                                                secondmolrun = false;
5062
 
_secondmolstart:
5063
 
                                                if ((!secondmolrun) && (o->m_pConditions != NULL))
5064
 
                                                {
5065
 
                                                        o->m_pConditions->m_bAnyPassed = false;
5066
 
                                                        o->m_pConditions->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5067
 
                                                        if (o->m_pConditions->m_bAnyPassed)
5068
 
                                                                o->m_pConditions->m_iRMPassCounter[z2]++;
5069
 
                                                }
5070
 
 
5071
 
                                                if ((secondmolrun) && (o->m_pConditionsOM2 != NULL))
5072
 
                                                {
5073
 
                                                        o->m_pConditionsOM2->m_bAnyPassed = false;
5074
 
                                                        o->m_pConditionsOM2->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5075
 
                                                        if (o->m_pConditionsOM2->m_bAnyPassed)
5076
 
                                                                o->m_pConditionsOM2->m_iRMPassCounter[z2]++;
5077
 
                                                }
5078
 
 
5079
 
                                                for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
5080
 
                                                {
5081
 
                                                        if (secondmolrun)
5082
 
                                                        {
5083
 
                                                                if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5084
 
                                                                                continue;
5085
 
                                                                if (o->m_bObsCertain)
5086
 
                                                                {
5087
 
                                                                        if (!o->m_waObsShow2List.Contains(z3))
5088
 
                                                                                continue;
5089
 
                                                                        tic_o = o->m_waObsShow2List.GetPosition(z3);
5090
 
                                                                }
5091
 
                                                        } else
5092
 
                                                        {
5093
 
                                                                if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5094
 
                                                                                continue;
5095
 
                                                                if (o->m_bObsCertain)
5096
 
                                                                {
5097
 
                                                                        if (!o->m_waObsShowList.Contains(z3))
5098
 
                                                                                continue;
5099
 
                                                                        tic_o = o->m_waObsShowList.GetPosition(z3);
5100
 
                                                                }
5101
 
                                                        }
5102
 
 
5103
 
                                                        if (g_bRegionAnalysis)
5104
 
                                                        {
5105
 
                                                                if (secondmolrun)
5106
 
                                                                {
5107
 
                                                                        if ((!o->m_iaOM2Regions.Contains(0)) && (!o->m_iaOM2Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]])))
5108
 
                                                                                continue;
5109
 
                                                                } else
5110
 
                                                                {
5111
 
                                                                        if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]])))
5112
 
                                                                                continue;
5113
 
                                                                }
5114
 
                                                        }
5115
 
                                                //      mprintf("\n   ... OM %d ist drin!",z3);
5116
 
 
5117
 
                                                        if (secondmolrun)
5118
 
                                                        {
5119
 
                                                                ti = -1;
5120
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
5121
 
                                                        } else
5122
 
                                                        {
5123
 
                                                                ti = o->m_waSaveShowList.GetPosition(z3);
5124
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
5125
 
                                                        }
5126
 
 
5127
 
                                                        if (o->m_bTimeDev && (o->m_pConditions != NULL))
5128
 
                                                        {
5129
 
                                                                if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
5130
 
                                                                {
5131
 
                                                                        for (zr=0;zr<g_iCDFChannels;zr++)
5132
 
                                                                        {
5133
 
                                                                                if (g_bADF && (o->m_pADF[zr] != NULL))
5134
 
                                                                                {
5135
 
                                                                                        if ((ti2 != -1) && (ti != -1))
5136
 
                                                                                        {
5137
 
                                                                                                if (o->m_bSaveSeparateFiles)
5138
 
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
5139
 
                                                                                                                else mfprintf(o->m_pADF[zr]->m_fAngle[0],";     -   ");
5140
 
                                                                                        }
5141
 
                                                                                }
5142
 
 
5143
 
                                                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
5144
 
                                                                                {
5145
 
                                                                                        if ((ti2 != -1) && (ti != -1))
5146
 
                                                                                        {
5147
 
                                                                                                if (o->m_bSaveSeparateFiles)
5148
 
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
5149
 
                                                                                                                else mfprintf(o->m_pDDF[zr]->m_fAngle[0],";     -   ");
5150
 
                                                                                        }
5151
 
                                                                                }
5152
 
 
5153
 
                                                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
5154
 
                                                                                {
5155
 
                                                                                        if ((ti2 != -1) && (ti != -1))
5156
 
                                                                                        {
5157
 
                                                                                                if (o->m_bSaveSeparateFiles)
5158
 
                                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],";     -   ");
5159
 
                                                                                                                else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],";     -   ");
5160
 
                                                                                        }
5161
 
                                                                                }
5162
 
 
5163
 
                                                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
5164
 
                                                                                {
5165
 
                                                                                        if ((ti2 != -1) && (ti != -1))
5166
 
                                                                                        {
5167
 
                                                                                                if (o->m_bSaveSeparateFiles)
5168
 
                                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],";     -   ");
5169
 
                                                                                                                else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],";     -   ");
5170
 
                                                                                        }
5171
 
                                                                                }
5172
 
 
5173
 
                                                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
5174
 
                                                                                {
5175
 
                                                                                        if ((ti2 != -1) && (ti != -1))
5176
 
                                                                                        {
5177
 
                                                                                                if (o->m_bSaveSeparateFiles)
5178
 
                                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],";     -   ");
5179
 
                                                                                                                else mfprintf(o->m_pRDF[zr]->m_fDist[0],";     -   ");
5180
 
                                                                                        }
5181
 
                                                                                }
5182
 
                                                                        }
5183
 
                                                                        continue;
5184
 
                                                                }
5185
 
                                                        }
5186
 
 
5187
 
                                                        if ((!secondmolrun) && (o->m_pConditions != NULL))
5188
 
                                                        {
5189
 
                                                                if (!o->m_pConditions->Contains(z3))
5190
 
                                                                        continue;
5191
 
 
5192
 
                                                                if (o->m_bBinOnlyPassedAtoms)
5193
 
                                                                        o->m_pConditions->MarkPassedAtoms(z3,true);
5194
 
 
5195
 
                                                                if (o->m_bBinOnlyNotPassedAtoms)
5196
 
                                                                        o->m_pConditions->MarkPassedAtoms(z3,false);
5197
 
 
5198
 
                                                                if (g_bSaveCondSnapshot)
5199
 
                                                                {
5200
 
                                                                        g_iSaveCondCount++;
5201
 
                                                                        if (g_bSaveCondWholeBox)
5202
 
                                                                        {
5203
 
                                                                                g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5204
 
                                                                        } else
5205
 
                                                                        {
5206
 
                                                                                mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5207
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5208
 
                                                                                {
5209
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5210
 
                                                                                                continue;
5211
 
                                                                                        for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5212
 
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5213
 
                                                                                }
5214
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5215
 
                                                                                {
5216
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5217
 
                                                                                                continue;
5218
 
                                                                                        for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5219
 
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5220
 
                                                                                }
5221
 
                                                                        }
5222
 
                                                                }
5223
 
                                                        }
5224
 
 
5225
 
                                                        if (secondmolrun && (o->m_pConditionsOM2 != NULL))
5226
 
                                                        {
5227
 
                                                                if (!o->m_pConditionsOM2->Contains(z3))
5228
 
                                                                        continue;
5229
 
 
5230
 
                                        //                      mprintf("\nStep %d: z2=%d, z3=%d passed.",g_iSteps,z2,z3);
5231
 
 
5232
 
                                                                if (o->m_bBinOnlyPassedAtoms)
5233
 
                                                                        o->m_pConditionsOM2->MarkPassedAtoms(z3,true);
5234
 
 
5235
 
                                                                if (o->m_bBinOnlyNotPassedAtoms)
5236
 
                                                                        o->m_pConditionsOM2->MarkPassedAtoms(z3,false);
5237
 
 
5238
 
                                                /*              if (g_bSaveCondSnapshot)
5239
 
                                                                {
5240
 
                                                                        g_iSaveCondCount++;
5241
 
                                                                        if (g_bSaveCondWholeBox)
5242
 
                                                                        {
5243
 
                                                                                g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5244
 
                                                                        } else
5245
 
                                                                        {
5246
 
                                                                                mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5247
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5248
 
                                                                                {
5249
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5250
 
                                                                                                continue;
5251
 
                                                                                        for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5252
 
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5253
 
                                                                                }
5254
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5255
 
                                                                                {
5256
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5257
 
                                                                                                continue;
5258
 
                                                                                        for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5259
 
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5260
 
                                                                                }
5261
 
                                                                        }
5262
 
                                                                }*/
5263
 
                                                        }
5264
 
 
5265
 
                                                        if (g_bVHDF)
5266
 
                                                        {
5267
 
                                                                o->m_pVHDF->BuildAtomList(smfix,sm,&templa);
5268
 
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
5269
 
                                                                {
5270
 
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
5271
 
                                                                        for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
5272
 
                                                                        {
5273
 
                                                                                g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
5274
 
                                                                                if (g_pT2Timestep == NULL)
5275
 
                                                                                        continue;
5276
 
                                                                                vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
5277
 
                                                                                tf = FoldedLength(vec0-vec1);
5278
 
                                                                                o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
5279
 
                                                                                o->m_pVHDF->m_pCount[z0]++;
5280
 
                                                                        }
5281
 
                                                                } 
5282
 
                                                        } // Ende IF VHDF
5283
 
 
5284
 
                                                        if (g_bADF)
5285
 
                                                        {
5286
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5287
 
                                                                {
5288
 
                                                                        if (o->m_pADF[zr] == NULL)
5289
 
                                                                                continue;
5290
 
                                                                        if (o->m_bSecondShowMol)
5291
 
                                                                        {
5292
 
                                                                                if (secondmolrun && (zr == 0))
5293
 
                                                                                        continue;
5294
 
                                                                                if (!secondmolrun && (zr == 1))
5295
 
                                                                                        continue;
5296
 
                                                                        }
5297
 
                                                                        o->m_pADF[zr]->BuildAtomList(smfix,sm,&templa);
5298
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=6)
5299
 
                                                                        {
5300
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5301
 
                                                                                {
5302
 
                                                                                        tb = true;
5303
 
                                                                                        if (g_baAtomPassedCondition[templa[z4]] == 0)
5304
 
                                                                                                tb = false;
5305
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+1]] == 0)
5306
 
                                                                                                tb = false;
5307
 
                                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
5308
 
                                                                                                if (g_baAtomPassedCondition[templa[z4+2]] == 0)
5309
 
                                                                                                        tb = false;
5310
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+3]] == 0)
5311
 
                                                                                                tb = false;
5312
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+4]] == 0)
5313
 
                                                                                                tb = false;
5314
 
                                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
5315
 
                                                                                                if (g_baAtomPassedCondition[templa[z4+5]] == 0)
5316
 
                                                                                                        tb = false;
5317
 
                                                                                        if (tb)
5318
 
                                                                                        {
5319
 
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
5320
 
                                                                                        } else
5321
 
                                                                                        {
5322
 
                                                                        //                      mprintf("Nicht bestanden; z2=%d, z3=%d; (%d,%d,%d) (%d,%d,%d).\n",z2,z3,g_baAtomPassedCondition[tempwa[z4]],g_baAtomPassedCondition[tempwa[z4+1]],g_baAtomPassedCondition[tempwa[z4+2]],g_baAtomPassedCondition[tempwa[z4+3]],g_baAtomPassedCondition[tempwa[z4+4]],g_baAtomPassedCondition[tempwa[z4+5]]);
5323
 
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(0);
5324
 
                                                                                        }
5325
 
                                                                                }
5326
 
                                                                                if (o->m_pADF[zr]->m_bOrtho[0])
5327
 
                                                                                {
5328
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5329
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5330
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5331
 
                                                                                        vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5332
 
                                                                                } else
5333
 
                                                                                {
5334
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5335
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5336
 
                                                                                        vec1 = FoldVector(vec2-vec0);
5337
 
                                                                                }
5338
 
                                                                                if (o->m_pADF[zr]->m_bOrtho[1])
5339
 
                                                                                {
5340
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5341
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5342
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5343
 
                                                                                        vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5344
 
                                                                                } else
5345
 
                                                                                {
5346
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5347
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5348
 
                                                                                        vec2 = FoldVector(vec3-vec4);
5349
 
                                                                                }
5350
 
 
5351
 
                                                                                tf = Angle_Deg(vec1,vec2);
5352
 
                                                                                if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
5353
 
                                                                                        tf = 180.0f-tf;
5354
 
                                                                                if (o->m_pADF[zr]->m_bCosine)
5355
 
                                                                                        tf = cos(tf/180.0*Pi);
5356
 
 
5357
 
                                                                                if (g_bDeriv)
5358
 
                                                                                {
5359
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6;
5360
 
                                                                                        o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5361
 
                                                                                        switch(o->m_pADF[zr]->m_iDeriv)
5362
 
                                                                                        {
5363
 
                                                                                                case 0:
5364
 
                                                                                                        tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5365
 
                                                                                                        break;
5366
 
                                                                                                case 1:
5367
 
                                                                                                        tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5368
 
                                                                                                        break;
5369
 
                                                                                                case 2:
5370
 
                                                                                                        tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5371
 
                                                                                                        break;
5372
 
                                                                                        }
5373
 
                                                                                }
5374
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5375
 
                                                                                {
5376
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5377
 
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5378
 
 
5379
 
                                                                                        o->m_pADF[zr]->m_faData[z3].Add(tf);
5380
 
 
5381
 
                                                                                        if (o->m_pADF[zr]->m_bACF)
5382
 
                                                                                                o->m_pADF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
5383
 
 
5384
 
                                                        /*                              if (o->m_pADF[zr]->m_bMirror)
5385
 
                                                                                        {
5386
 
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
5387
 
                                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,180.0-tf);
5388
 
                                                                                                o->m_pADF[zr]->m_faData[z3].Add(180.0-tf);
5389
 
                                                                                        }*/
5390
 
 
5391
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5392
 
                                                                                        {
5393
 
                                                                                //              o->m_pAngleStat->AddValue(ti2,ti,tf);
5394
 
                                                                                                if (o->m_bSaveSeparateFiles)
5395
 
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
5396
 
                                                                                                                else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
5397
 
                                                                                                if (o->m_bCombinedPlot)
5398
 
                                                                                                        o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
5399
 
                                                                                        }
5400
 
                                                                                        if (o->m_bTimeDiff)
5401
 
                                                                                                ((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
5402
 
                                                                                }
5403
 
                                                                        }
5404
 
                                                                }
5405
 
                                                        }  // Ende IF ADF
5406
 
 
5407
 
                                                        if (g_bDDF)
5408
 
                                                        {
5409
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5410
 
                                                                {
5411
 
                                                                        if (o->m_pDDF[zr] == NULL)
5412
 
                                                                                continue;
5413
 
                                                                        if (o->m_bSecondShowMol)
5414
 
                                                                        {
5415
 
                                                                                if (secondmolrun && (zr == 0))
5416
 
                                                                                        continue;
5417
 
                                                                                if (!secondmolrun && (zr == 1))
5418
 
                                                                                        continue;
5419
 
                                                                        }
5420
 
                                                                        o->m_pDDF[zr]->BuildAtomList(smfix,sm,&templa);
5421
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=9)
5422
 
                                                                        {
5423
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5424
 
                                                                                {
5425
 
                                                                                        tb = true;
5426
 
                                                                                        for (z5=z4;z5<z4+9;z5++)
5427
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
5428
 
                                                                                                        tb = false;
5429
 
                                                                                        if (tb)
5430
 
                                                                                                o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
5431
 
                                                                                                        else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
5432
 
                                                                                }
5433
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[0])
5434
 
                                                                                {
5435
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5436
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5437
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5438
 
                                                                                        vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5439
 
                                                                                } else
5440
 
                                                                                {
5441
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5442
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5443
 
                                                                                        vec1 = FoldVector(vec2-vec0);
5444
 
                                                                                }
5445
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[1])
5446
 
                                                                                {
5447
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5448
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5449
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5450
 
                                                                                        vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5451
 
                                                                                } else
5452
 
                                                                                {
5453
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5454
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5455
 
                                                                                        vec2 = FoldVector(vec3-vec4);
5456
 
                                                                                }
5457
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[2])
5458
 
                                                                                {
5459
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5460
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5461
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
5462
 
                                                                                        vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5463
 
                                                                                } else
5464
 
                                                                                {
5465
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5466
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5467
 
                                                                                        vec3 = FoldVector(vec3-vec4);
5468
 
                                                                                }
5469
 
                                                                                tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
5470
 
                                                                                if (o->m_pDDF[zr]->m_bCosine)
5471
 
                                                                                        tf = cos(tf/180.0*Pi);
5472
 
                                                                                                else if (o->m_pDDF[zr]->m_bPositive)
5473
 
                                                                                                        if (tf < 0)
5474
 
                                                                                                                tf += 360.0;
5475
 
                                                                                if (g_bDeriv)
5476
 
                                                                                {
5477
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9;
5478
 
                                                                                        o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5479
 
                                                                                        switch(o->m_pDDF[zr]->m_iDeriv)
5480
 
                                                                                        {
5481
 
                                                                                                case 0:
5482
 
                                                                                                        tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5483
 
                                                                                                        break;
5484
 
                                                                                                case 1:
5485
 
                                                                                                        tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5486
 
                                                                                                        break;
5487
 
                                                                                                case 2:
5488
 
                                                                                                        tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5489
 
                                                                                                        break;
5490
 
                                                                                        }
5491
 
                                                                                }
5492
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5493
 
                                                                                {
5494
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5495
 
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5496
 
 
5497
 
                                                                                        o->m_pDDF[zr]->m_faData[z3].Add(tf);
5498
 
 
5499
 
                                                                                        if (o->m_pDDF[zr]->m_bACF)
5500
 
                                                                                                o->m_pDDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
5501
 
 
5502
 
                                                                                        if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
5503
 
                                                                                        {
5504
 
                                                                                                o->m_pDDF[zr]->m_faData[z3].Add(-tf);
5505
 
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
5506
 
                                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,-tf);
5507
 
                                                                                        }
5508
 
 
5509
 
                                                                                        if (o->m_bTimeDiff)
5510
 
                                                                                                ((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
5511
 
 
5512
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5513
 
                                                                                        {
5514
 
                                                                                                if (o->m_pDDF[zr]->m_bRotate)
5515
 
                                                                                                {
5516
 
                                                                                                        if (g_iSteps > 1)
5517
 
                                                                                                        {
5518
 
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
5519
 
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
5520
 
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
5521
 
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
5522
 
                                                                                                        }
5523
 
                                                                                                        o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
5524
 
                                                                                                        tf2 = tf + o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
5525
 
                                                                                                } else tf2 = tf;
5526
 
                                                                                                if (o->m_bSaveSeparateFiles)
5527
 
                                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
5528
 
                                                                                                                else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
5529
 
                                                                                                if (o->m_bCombinedPlot)
5530
 
                                                                                                        o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
5531
 
                                                                                        }
5532
 
                                                                                }
5533
 
                                                                        }
5534
 
                                                                }
5535
 
                                                        }  // Ende IF DDF
5536
 
 
5537
 
                                                        if (g_bPlDF)
5538
 
                                                        {
5539
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5540
 
                                                                {
5541
 
                                                                        if (o->m_pPlDF[zr] == NULL)
5542
 
                                                                                continue;
5543
 
                                                                        if (o->m_bSecondShowMol)
5544
 
                                                                        {
5545
 
                                                                                if (secondmolrun && (zr == 0))
5546
 
                                                                                        continue;
5547
 
                                                                                if (!secondmolrun && (zr == 1))
5548
 
                                                                                        continue;
5549
 
                                                                        }
5550
 
                                                                        o->m_pPlDF[zr]->BuildAtomList(smfix,sm,&templa);
5551
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=4)
5552
 
                                                                        {
5553
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5554
 
                                                                                {
5555
 
                                                                                        tb = true;
5556
 
                                                                                        for (z5=z4;z5<z4+4;z5++)
5557
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
5558
 
                                                                                                        tb = false;
5559
 
                                                                                        if (tb)
5560
 
                                                                                                o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(1);
5561
 
                                                                                                        else o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(0);
5562
 
                                                                                }
5563
 
                                                                                if (o->m_pPlDF[zr]->m_bNormal)
5564
 
                                                                                {
5565
 
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5566
 
                                                                                        vec0.Normalize();
5567
 
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5568
 
                                                                                        tf = DotP(vec0,vec1);
5569
 
                                                                                } else
5570
 
                                                                                {
5571
 
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5572
 
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5573
 
                                                                                        vec3 = CrossP(vec0,vec1);
5574
 
                                                                                        vec3.Normalize();
5575
 
                                                                                        vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5576
 
                                                                                        tf = DotP(vec2,vec3);
5577
 
                                                                                }
5578
 
 
5579
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5580
 
                                                                                {
5581
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5582
 
                                                                                                o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5583
 
 
5584
 
                                                                                        o->m_pPlDF[zr]->m_faData[z3].Add(tf);
5585
 
                                                                                }
5586
 
                                                                        }
5587
 
                                                                }
5588
 
                                                        }  // Ende IF PlDF
5589
 
 
5590
 
                                                        if (g_bLiDF)
5591
 
                                                        {
5592
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5593
 
                                                                {
5594
 
                                                                        if (o->m_pLiDF[zr] == NULL)
5595
 
                                                                                continue;
5596
 
                                                                        if (o->m_bSecondShowMol)
5597
 
                                                                        {
5598
 
                                                                                if (secondmolrun && (zr == 0))
5599
 
                                                                                        continue;
5600
 
                                                                                if (!secondmolrun && (zr == 1))
5601
 
                                                                                        continue;
5602
 
                                                                        }
5603
 
                                                                        o->m_pLiDF[zr]->BuildAtomList(smfix,sm,&templa);
5604
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=4)
5605
 
                                                                        {
5606
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5607
 
                                                                                {
5608
 
                                                                                        tb = true;
5609
 
                                                                                        for (z5=z4;z5<z4+4;z5++)
5610
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
5611
 
                                                                                                        tb = false;
5612
 
                                                                                        if (tb)
5613
 
                                                                                                o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(1);
5614
 
                                                                                                        else o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(0);
5615
 
                                                                                }
5616
 
 
5617
 
                                                                                if (o->m_pLiDF[zr]->m_bNormal)
5618
 
                                                                                {
5619
 
                                                                                        vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5620
 
                                                                                        vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5621
 
                                                                                        vec0 = CrossP(vec2,vec3);
5622
 
                                                                                        vec0.Normalize();
5623
 
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5624
 
                                                                                        vec0 *= DotP(vec0,vec1);
5625
 
                                                                                        tf = (vec1 - vec0).GetLength();
5626
 
                                                                                } else
5627
 
                                                                                {
5628
 
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5629
 
                                                                                        vec0.Normalize();
5630
 
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5631
 
                                                                                        vec0 *= DotP(vec0,vec1);
5632
 
                                                                                        tf = (vec1 - vec0).GetLength();
5633
 
                                                                                }
5634
 
 
5635
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5636
 
                                                                                {
5637
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5638
 
                                                                                                o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5639
 
 
5640
 
                                                                                        o->m_pLiDF[zr]->m_faData[z3].Add(tf);
5641
 
                                                                                }
5642
 
                                                                        }
5643
 
                                                                }
5644
 
                                                        }  // Ende IF LilDF
5645
 
 
5646
 
                                                        if (g_bDipDF)
5647
 
                                                        {
5648
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5649
 
                                                                {
5650
 
                                                                        if (o->m_pDipDF[zr] == NULL)
5651
 
                                                                                continue;
5652
 
                                                                        if (o->m_bSecondShowMol)
5653
 
                                                                        {
5654
 
                                                                                if (secondmolrun && (zr == 0))
5655
 
                                                                                        continue;
5656
 
                                                                                if (!secondmolrun && (zr == 1))
5657
 
                                                                                        continue;
5658
 
                                                                        }
5659
 
                                                                        if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
5660
 
                                                                                tf = smfix->m_vDipole.GetLength();
5661
 
                                                                                        else tf = sm->m_vDipole.GetLength();
5662
 
                                                                        if (g_bDeriv)
5663
 
                                                                        {
5664
 
                                                                                zi = z2*o->m_iShowMolCount+z3;
5665
 
                                                                                o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5666
 
                                                                                switch(o->m_pDipDF[zr]->m_iDeriv)
5667
 
                                                                                {
5668
 
                                                                                        case 0:
5669
 
                                                                                                tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5670
 
                                                                                                break;
5671
 
                                                                                        case 1:
5672
 
                                                                                                tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5673
 
                                                                                                break;
5674
 
                                                                                        case 2:
5675
 
                                                                                                tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5676
 
                                                                                                break;
5677
 
                                                                                }
5678
 
                                                                        }
5679
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
5680
 
                                                                        {
5681
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
5682
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5683
 
 
5684
 
                                                                                o->m_pDipDF[zr]->m_faData[z3].Add(tf);
5685
 
 
5686
 
                                                                                if (o->m_pDipDF[zr]->m_bACF)
5687
 
                                                                                        o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
5688
 
 
5689
 
                                                                                if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5690
 
                                                                                {
5691
 
                                                                                        if (o->m_bSaveSeparateFiles)
5692
 
                                                                                                mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
5693
 
                                                                                                        else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
5694
 
                                                                                        if (o->m_bCombinedPlot)
5695
 
                                                                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_waSaveShowList.GetSize()+ti,g_iSteps*g_fTimestepLength/1000.0,tf);
5696
 
                                                                                }
5697
 
                                                                                if (o->m_bTimeDiff)
5698
 
                                                                                        ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
5699
 
                                                                        }
5700
 
                                                                }
5701
 
                                                        } // Ende IF DIPOLE
5702
 
 
5703
 
                                                        if (g_bVDF)
5704
 
                                                        {
5705
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5706
 
                                                                {
5707
 
                                                                        if (o->m_pVDF[zr] == NULL)
5708
 
                                                                                continue;
5709
 
                                                                        if (o->m_bSecondShowMol)
5710
 
                                                                        {
5711
 
                                                                                if (secondmolrun && (zr == 0))
5712
 
                                                                                        continue;
5713
 
                                                                                if (!secondmolrun && (zr == 1))
5714
 
                                                                                        continue;
5715
 
                                                                        }
5716
 
                                                                        o->m_pVDF[zr]->BuildAtomList(smfix,sm,&templa);
5717
 
                                                                        for (z4=0;z4<templa.GetSize();z4++)
5718
 
                                                                        {
5719
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5720
 
                                                                                {
5721
 
                                                                                        tb = true;
5722
 
                                                                                        for (z5=z4;z5<z4+2;z5++)
5723
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
5724
 
                                                                                                        tb = false;
5725
 
                                                                                        if (tb)
5726
 
                                                                                                o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
5727
 
                                                                                                        else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
5728
 
                                                                                }
5729
 
                                                                                tf = tempvel[templa[z4]].GetLength();
5730
 
                                                                                if (g_bDeriv)
5731
 
                                                                                {
5732
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2;
5733
 
                                                                                        o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5734
 
                                                                                        switch(o->m_pVDF[zr]->m_iDeriv)
5735
 
                                                                                        {
5736
 
                                                                                                case 0:
5737
 
                                                                                                        tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5738
 
                                                                                                        break;
5739
 
                                                                                                case 1:
5740
 
                                                                                                        tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5741
 
                                                                                                        break;
5742
 
                                                                                                case 2:
5743
 
                                                                                                        tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5744
 
                                                                                                        break;
5745
 
                                                                                        }
5746
 
                                                                                }
5747
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5748
 
                                                                                {
5749
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5750
 
                                                                                                o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5751
 
 
5752
 
                                                                                        o->m_pVDF[zr]->m_faData[z3].Add(tf);
5753
 
 
5754
 
                                                                                        if (o->m_pVDF[zr]->m_bACF)
5755
 
                                                                                                o->m_pVDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5756
 
 
5757
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5758
 
                                                                                        {
5759
 
                                                                                                if (o->m_bSaveSeparateFiles)
5760
 
                                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5761
 
                                                                                                                else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5762
 
                                                                                                if (o->m_bCombinedPlot)
5763
 
                                                                                                        o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pVDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5764
 
                                                                                        }
5765
 
                                                                                        if (o->m_bTimeDiff)
5766
 
                                                                                                ((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5767
 
                                                                                }
5768
 
                                                                        }
5769
 
                                                                }
5770
 
                                                        } // Ende IF VDF
5771
 
 
5772
 
                                                        if (g_bRDF)
5773
 
                                                        {
5774
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
5775
 
                                                                {
5776
 
                                                                        if (o->m_pRDF[zr] == NULL)
5777
 
                                                                                continue;
5778
 
                                                                        if (o->m_bSecondShowMol)
5779
 
                                                                        {
5780
 
                                                                                if (secondmolrun && (zr == 0))
5781
 
                                                                                        continue;
5782
 
                                                                                if (!secondmolrun && (zr == 1))
5783
 
                                                                                        continue;
5784
 
                                                                        }
5785
 
                                                                        o->m_pRDF[zr]->BuildAtomList(smfix,sm,&templa);
5786
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=2)
5787
 
                                                                        {
5788
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5789
 
                                                                                {
5790
 
                                                                                        tb = true;
5791
 
                                                                                        for (z5=z4;z5<z4+2;z5++)
5792
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
5793
 
                                                                                                        tb = false;
5794
 
                                                                                        if (tb)
5795
 
                                                                                                o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
5796
 
                                                                                                        else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
5797
 
                                                                                }
5798
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5799
 
                                                                                vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5800
 
                                                                                tf = FoldedLength(vec0-vec1);
5801
 
                                                                /*              if (tf > 2000)
5802
 
                                                                                {
5803
 
                                                                                        mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f  ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5804
 
                                                                                        mprintf("\n  vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5805
 
                                                                                }
5806
 
                                                */              //              mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f  ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5807
 
                                                                //              mprintf("\n  vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5808
 
                                                                                if (g_bDeriv)
5809
 
                                                                                {
5810
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2;
5811
 
                                                                                        o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5812
 
                                                                                        switch(o->m_pRDF[zr]->m_iDeriv)
5813
 
                                                                                        {
5814
 
                                                                                                case 0:
5815
 
                                                                                                        tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5816
 
                                                                                                        break;
5817
 
                                                                                                case 1:
5818
 
                                                                                                        tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5819
 
                                                                                                        break;
5820
 
                                                                                                case 2:
5821
 
                                                                                                        tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5822
 
                                                                                                        break;
5823
 
                                                                                        }
5824
 
                                                                                }
5825
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
5826
 
                                                                                {
5827
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
5828
 
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5829
 
 
5830
 
                                                                                        if (o->m_bDecompType)
5831
 
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
5832
 
 
5833
 
                                                                                        o->m_pRDF[zr]->m_faData[z3].Add(tf);
5834
 
 
5835
 
                                                                                        if (o->m_pRDF[zr]->m_bACF)
5836
 
                                                                                                o->m_pRDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5837
 
 
5838
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5839
 
                                                                                        {
5840
 
                                                                                                if (o->m_bSaveSeparateFiles)
5841
 
                                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
5842
 
                                                                                                                else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
5843
 
                                                                                                if (o->m_bCombinedPlot)
5844
 
                                                                                                        o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5845
 
                                                                                        }
5846
 
                                                                                        if (o->m_bTimeDiff)
5847
 
                                                                                                ((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5848
 
                                                                                }
5849
 
                                                                        } 
5850
 
                                                                }
5851
 
                                                        } // Ende IF RDF
5852
 
 
5853
 
                                                        if (g_bSDF)
5854
 
                                                        {
5855
 
                                                                o->m_pSDF->BuildAtomList(smfix,sm,&templa);
5856
 
                                                                for (z4=0;z4<templa.GetSize();z4++)
5857
 
                                                                {
5858
 
                                                                        o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5859
 
 
5860
 
                                                                        if (o->m_pSDF->m_bVdWSpheres)
5861
 
                                                                                o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
5862
 
                                                                }
 
4451
                                if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
 
4452
                                {
 
4453
                                        if (g_bCutCluster || (g_iNbhMode == 2))
 
4454
                                        {
 
4455
                                                g_pNbSet->Reset();
 
4456
                                                if (g_bCutCluster)
 
4457
                                                        g_pNbSet->ResetAlwaysTrue();
 
4458
                                                g_pNbSet->Scan(smfix,g_pTempTimestep);
 
4459
                                                if (g_bSaveRefWithEnv)
 
4460
                                                        g_pNbSet->AddMolecule(g_iFixMol,z2);
 
4461
                                        }
 
4462
 
 
4463
                                        if (!g_bCenterZero && g_bPeriodic)
 
4464
                                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
 
4465
 
 
4466
                                        g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
 
4467
 
 
4468
                                        if (g_bTDO)
 
4469
                                        {
 
4470
                                                if (g_laTDOSteps.Contains(g_iSteps-1))
 
4471
                                                {
 
4472
                                                        sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
 
4473
                                                        mprintf("\nSaving TDO step as %s.\n",buf);
 
4474
                                                        tfi = OpenFileWrite(buf,true);
 
4475
                                                        g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
 
4476
                                                        fclose(tfi);
 
4477
                                                }
 
4478
                                        }
 
4479
                                }
 
4480
                        } // END IF SDF, RevEnv, ...
 
4481
 
 
4482
/***************************************************************************************************************************/
 
4483
        
 
4484
                        if (g_bVoidSDF)
 
4485
                        {
 
4486
                                if (g_pVoroAnalysis->m_bEmptySpaceSDF)
 
4487
                                {
 
4488
                                        if (!g_pVoroAnalysis->m_bNewEmptyMode)
 
4489
                                        {
 
4490
                                                g_pVoroAnalysis->m_pTempSDF->Clear();
 
4491
 
 
4492
                                                for (z3=0;z3<g_oaMolecules.GetSize();z3++)
 
4493
                                                {
 
4494
                                                        tm = (CMolecule*)g_oaMolecules[z3];
 
4495
                                                        for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
 
4496
                                                        {
 
4497
                                                                if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
 
4498
                                                                        if ((z3 == g_iFixMol) && (z4 == z2))
 
4499
                                                                                continue;
 
4500
 
 
4501
                                                                tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
 
4502
 
 
4503
                                                                for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
 
4504
                                                                {
 
4505
                                                                        if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
 
4506
                                                                                continue;
 
4507
 
 
4508
                                                                        for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
 
4509
                                                                        {
 
4510
                                                                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
 
4511
 
 
4512
                                                                                g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
 
4513
                                                                        }
 
4514
                                                                }
 
4515
                                                        }
 
4516
                                                }
 
4517
                                                g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
 
4518
                                        } else
 
4519
                                        {
 
4520
                                                g_pVoroAnalysis->BinEmptySDF();
 
4521
                                        }
 
4522
                                }
 
4523
 
 
4524
                                if (g_pVoroAnalysis->m_bSphereHoleSDF)
 
4525
                                {
 
4526
                                        g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
 
4527
                                }
 
4528
                        }
 
4529
 
 
4530
                        if (g_bPlProj || g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bPlDF || g_bLiDF || g_bSDF || g_bADF || g_bDDF || g_bVDF || g_bCond) 
 
4531
                        {
 
4532
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
4533
                                {
 
4534
                                        o = (CObservation*)g_oaObserv[z6];
 
4535
 
 
4536
                                //      mprintf("\nStep %d, z2=%d, Obs=%d, Reg=%d, ObsReg=%d.",g_iSteps,z2,z6,g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]],o->m_iaRMRegions[0]);
 
4537
 
 
4538
                                        if (g_bRegionAnalysis)
 
4539
                                                if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])))
 
4540
                                                        continue;
 
4541
 
 
4542
                                //      mprintf("\n   ...RM ist in Region.");
 
4543
 
 
4544
                                        ti2 = o->m_waSaveRefList.GetPosition(z2);
 
4545
 
 
4546
                                        if (o->m_bObsCertain)
 
4547
                                        {
 
4548
                                //              mprintf("\n    RefList: ");
 
4549
                                //              for (z7=0;z7<o->m_waObsRefList.GetSize();z7++)
 
4550
                                //                      mprintf("%d, ",o->m_waObsRefList[z7]);
 
4551
 
 
4552
                                                if (!o->m_waObsRefList.Contains(z2))
 
4553
                                                        continue;
 
4554
                                //              mprintf("\n   ...RM ist auch in RefList.");
 
4555
                                                tic_r = o->m_waObsRefList.GetPosition(z2);
 
4556
                                        }
 
4557
 
 
4558
                                        if (g_bUseVelocities)
 
4559
                                        {
 
4560
                                                tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
 
4561
                                                if (o->m_bVelocityRelToRef)
 
4562
                                                {
 
4563
                                                        vecv = g_pTempTimestep->m_vaVelocities[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
 
4564
                                                        for (z3=0;z3<g_iGesVirtAtomCount;z3++)
 
4565
                                                                tempvel[z3] -= vecv;
 
4566
                                                }
 
4567
                                        }
 
4568
 
 
4569
                                        if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
 
4570
                                        {
 
4571
                                                if (o->m_bSaveSeparateFiles)
 
4572
                                                        mfprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
 
4573
                                                                else if (ti2 == 0)
 
4574
                                                                        mfprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
 
4575
                                        }
 
4576
 
 
4577
                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
4578
                                        {
 
4579
                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
 
4580
                                                {
 
4581
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4582
                                                                o->m_pRDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4583
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4584
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4585
                                                                        o->m_pRDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4586
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4587
                                                        {
 
4588
                                                                if (o->m_bSaveSeparateFiles)
 
4589
                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
 
4590
                                                                                else if (ti2 == 0)
 
4591
                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
 
4592
                                                        }
 
4593
                                                }
 
4594
                                                        
 
4595
                                                if (g_bADF && (o->m_pADF[zr] != NULL))
 
4596
                                                {
 
4597
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4598
                                                                o->m_pADF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4599
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4600
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4601
                                                                        o->m_pADF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4602
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4603
                                                        {
 
4604
                                                                if (o->m_bSaveSeparateFiles)
 
4605
                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
 
4606
                                                                                else if (ti2 == 0)
 
4607
                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
 
4608
                                                        }
 
4609
                                                }
 
4610
 
 
4611
                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
 
4612
                                                {
 
4613
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4614
                                                                o->m_pDDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4615
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4616
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4617
                                                                        o->m_pDDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4618
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4619
                                                        {
 
4620
                                                                if (o->m_bSaveSeparateFiles)
 
4621
                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
 
4622
                                                                                else if (ti2 == 0)
 
4623
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
 
4624
                                                        }
 
4625
                                                }
 
4626
 
 
4627
                                                if (g_bPlDF && (o->m_pPlDF[zr] != NULL))
 
4628
                                                {
 
4629
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4630
                                                                o->m_pPlDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4631
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4632
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4633
                                                                        o->m_pPlDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4634
/*                                                      if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4635
                                                        {
 
4636
                                                                if (o->m_bSaveSeparateFiles)
 
4637
                                                                        mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
 
4638
                                                                                else if (ti2 == 0)
 
4639
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
 
4640
                                                        }*/
 
4641
                                                }
 
4642
 
 
4643
                                                if (g_bLiDF && (o->m_pLiDF[zr] != NULL))
 
4644
                                                {
 
4645
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4646
                                                                o->m_pLiDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4647
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4648
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4649
                                                                        o->m_pLiDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4650
/*                                                      if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4651
                                                        {
 
4652
                                                                if (o->m_bSaveSeparateFiles)
 
4653
                                                                        mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
 
4654
                                                                                else if (ti2 == 0)
 
4655
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
 
4656
                                                        }*/
 
4657
                                                }
 
4658
 
 
4659
                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
 
4660
                                                {
 
4661
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4662
                                                                o->m_pDipDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4663
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4664
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4665
                                                                        o->m_pDipDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4666
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4667
                                                        {
 
4668
                                                                if (o->m_bSaveSeparateFiles)
 
4669
                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
 
4670
                                                                                else if (ti2 == 0)
 
4671
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
 
4672
                                                        }
 
4673
                                                }
 
4674
 
 
4675
                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
 
4676
                                                {
 
4677
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4678
                                                                o->m_pVDF[zr]->m_faData[z3].RemoveAll_KeepSize();
 
4679
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4680
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
 
4681
                                                                        o->m_pVDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4682
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
 
4683
                                                        {
 
4684
                                                                if (o->m_bSaveSeparateFiles)
 
4685
                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
 
4686
                                                                                else if (ti2 == 0)
 
4687
                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
 
4688
                                                        }
 
4689
                                                }
 
4690
                                        } // END FOR zr
 
4691
 
 
4692
                                        if (g_bSDF)
 
4693
                                        {
 
4694
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
 
4695
                                                {
 
4696
                                                        o->m_pSDF->m_vaData[z3].RemoveAll_KeepSize();
 
4697
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4698
                                                                o->m_pSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4699
                                                }
 
4700
                                        }
 
4701
 
 
4702
                                        if (g_bPlProj)
 
4703
                                        {
 
4704
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
 
4705
                                                {
 
4706
                                                        o->m_pPlProj->m_vaData[z3].RemoveAll_KeepSize();
 
4707
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4708
                                                                o->m_pPlProj->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4709
                                                }
 
4710
                                        }
 
4711
 
 
4712
                                        if (g_bRevSDF)
 
4713
                                        {
 
4714
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
 
4715
                                                {
 
4716
                                                        o->m_pRevSDF->m_vaData[z3].RemoveAll_KeepSize();
 
4717
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
4718
                                                                o->m_pRevSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
 
4719
                                                }
 
4720
                                        }
 
4721
 
 
4722
                                        if (o->m_bSelf)
 
4723
                                        {
 
4724
                                                if (g_bADF)
 
4725
                                                {
 
4726
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
4727
                                                        {
 
4728
                                                                if (o->m_pADF[zr] == NULL)
 
4729
                                                                        continue;
 
4730
                                                                o->m_pADF[zr]->BuildAtomList(smfix,NULL,&templa);
 
4731
                                                                for (z4=0;z4<templa.GetSize();z4+=6)
 
4732
                                                                {
 
4733
                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
 
4734
                                                                        {
 
4735
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
4736
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
4737
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
 
4738
                                                                                vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
 
4739
                                                                        } else
 
4740
                                                                        {
 
4741
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
4742
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
4743
                                                                                vec1 = FoldVector(vec2-vec0);
 
4744
                                                                        }
 
4745
                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
 
4746
                                                                        {
 
4747
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
4748
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
4749
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
 
4750
                                                                                vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
4751
                                                                        } else
 
4752
                                                                        {
 
4753
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
4754
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
4755
                                                                                vec2 = FoldVector(vec3-vec4);
 
4756
                                                                        }
 
4757
                                                                        tf = Angle_Deg(vec1,vec2);
 
4758
                                                                        if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
 
4759
                                                                                tf = 180.0f-tf;
 
4760
                                                                        if (o->m_pADF[zr]->m_bCosine)
 
4761
                                                                                tf = cos(tf/180.0*Pi);
 
4762
 
 
4763
                                                                        if (g_bDeriv)
 
4764
                                                                        {
 
4765
                                                                                o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) = tf;
 
4766
                                                                                switch(o->m_pADF[zr]->m_iDeriv)
 
4767
                                                                                {
 
4768
                                                                                        case 0:
 
4769
                                                                                                tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
 
4770
                                                                                                break;
 
4771
                                                                                        case 1:
 
4772
                                                                                                tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (2*g_fTimestepLength);
 
4773
                                                                                                break;
 
4774
                                                                                        case 2:
 
4775
                                                                                                tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (g_fTimestepLength * g_fTimestepLength);
 
4776
                                                                                                break;
 
4777
                                                                                }
 
4778
                                                                        }
 
4779
 
 
4780
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
4781
                                                                        {
 
4782
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
4783
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
 
4784
 
 
4785
                                                                                o->m_pADF[zr]->m_faData[0].Add(tf);
 
4786
 
 
4787
                                                                                if (o->m_pADF[zr]->m_bACF)
 
4788
                                                                                        o->m_pADF[zr]->m_pfaACFBuffer[z2*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
 
4789
 
 
4790
                                        /*                                      if (o->m_pADF[zr]->m_bMirror)
 
4791
                                                                                {
 
4792
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
4793
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,180.0-tf);
 
4794
                                                                                        o->m_pADF[zr]->m_faData[0].Add(180.0-tf);
 
4795
                                                                                }*/
 
4796
 
 
4797
                                                                                if (o->m_bTimeDev && (ti2 != -1))
 
4798
                                                                                {
 
4799
                                                                                        if (o->m_bSaveSeparateFiles)
 
4800
                                                                                                mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
 
4801
                                                                                                        else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
 
4802
                                                                                        if (o->m_bCombinedPlot)
 
4803
                                                                                                o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
 
4804
                                                                                }
 
4805
                                                                                if (o->m_bTimeDiff)
 
4806
                                                                                        ((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
 
4807
                                                                        }
 
4808
                                                                } // END FOR z4
 
4809
                                                        } // END FOR zr
 
4810
                                                } // Ende IF ADF
 
4811
 
 
4812
                                                if (g_bDDF)
 
4813
                                                {
 
4814
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
4815
                                                        {
 
4816
                                                                if (o->m_pDDF[zr] == NULL)
 
4817
                                                                        continue;
 
4818
                                                                o->m_pDDF[zr]->BuildAtomList(smfix,smfix,&templa);
 
4819
                                                                for (z4=0;z4<templa.GetSize();z4+=9)
 
4820
                                                                {
 
4821
                                                                        if (o->m_pDDF[zr]->m_bOrtho[0])
 
4822
                                                                        {
 
4823
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
4824
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
4825
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
 
4826
                                                                                vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
 
4827
                                                                        } else
 
4828
                                                                        {
 
4829
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
4830
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
4831
                                                                                vec1 = FoldVector(vec2-vec0);
 
4832
                                                                        }
 
4833
                                                                        if (o->m_pDDF[zr]->m_bOrtho[1])
 
4834
                                                                        {
 
4835
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
4836
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
4837
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
 
4838
                                                                                vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
4839
                                                                        } else
 
4840
                                                                        {
 
4841
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
4842
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
4843
                                                                                vec2 = FoldVector(vec3-vec4);
 
4844
                                                                        }
 
4845
                                                                        if (o->m_pDDF[zr]->m_bOrtho[2])
 
4846
                                                                        {
 
4847
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
 
4848
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
 
4849
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
 
4850
                                                                                vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
4851
                                                                        } else
 
4852
                                                                        {
 
4853
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
 
4854
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
 
4855
                                                                                vec3 = FoldVector(vec3-vec4);
 
4856
                                                                        }
 
4857
                                                                        tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
 
4858
                                                                        if (o->m_pDDF[zr]->m_bCosine)
 
4859
                                                                                tf = cos(tf/180.0*Pi);
 
4860
                                                                                        else if (o->m_pDDF[zr]->m_bPositive)
 
4861
                                                                                                if (tf < 0)
 
4862
                                                                                                        tf += 360.0;
 
4863
                                                                        if (g_bDeriv)
 
4864
                                                                        {
 
4865
                                                                                o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) = tf;
 
4866
                                                                                switch(o->m_pDDF[zr]->m_iDeriv)
 
4867
                                                                                {
 
4868
                                                                                        case 0:
 
4869
                                                                                                tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
 
4870
                                                                                                break;
 
4871
                                                                                        case 1:
 
4872
                                                                                                tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (2*g_fTimestepLength);
 
4873
                                                                                                break;
 
4874
                                                                                        case 2:
 
4875
                                                                                                tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (g_fTimestepLength * g_fTimestepLength);
 
4876
                                                                                                break;
 
4877
                                                                                }
 
4878
                                                                        }
 
4879
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
4880
                                                                        {
 
4881
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
4882
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
 
4883
 
 
4884
                                                                                o->m_pDDF[zr]->m_faData[0].Add(tf);
 
4885
 
 
4886
                                                                                if (o->m_pDDF[zr]->m_bACF)
 
4887
                                                                                        o->m_pDDF[zr]->m_pfaACFBuffer[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
 
4888
 
 
4889
                                                                                if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
 
4890
                                                                                {
 
4891
                                                                                        o->m_pDDF[zr]->m_faData[0].Add(-tf);
 
4892
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
4893
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,-tf);
 
4894
                                                                                }
 
4895
 
 
4896
                                                                                if (o->m_bTimeDiff)
 
4897
                                                                                        ((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
 
4898
 
 
4899
                                                                                if (o->m_bTimeDev && (ti2 != -1))
 
4900
                                                                                {
 
4901
                                                                                        if (o->m_pDDF[zr]->m_bRotate)
 
4902
                                                                                        {
 
4903
                                                                                                if (g_iSteps > 1)
 
4904
                                                                                                {
 
4905
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
 
4906
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
 
4907
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
 
4908
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
 
4909
                                                                                                }
 
4910
                                                                                                o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
 
4911
                                                                                                tf2 = tf + o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
 
4912
                                                                                        } else tf2 = tf;
 
4913
                                                                                        if (o->m_bSaveSeparateFiles)
 
4914
                                                                                                mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
 
4915
                                                                                                        else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
 
4916
                                                                                        if (o->m_bCombinedPlot)
 
4917
                                                                                                o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
 
4918
                                                                                }
 
4919
                                                                        }
 
4920
                                                                }
 
4921
                                                        }
 
4922
                                                } // END IF DDF
 
4923
 
 
4924
                                                if (g_bVHDF)
 
4925
                                                {
 
4926
                                                        o->m_pVHDF->BuildAtomList(smfix,smfix,&templa);
 
4927
                                                        for (z4=0;z4<templa.GetSize();z4+=2)
 
4928
                                                        {
 
4929
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
 
4930
                                                                for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
 
4931
                                                                {
 
4932
                                                                        g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
 
4933
                                                                        if (g_pT2Timestep == NULL)
 
4934
                                                                                continue;
 
4935
                                                                        vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
 
4936
                                                                        tf = FoldedLength(vec0-vec1);
 
4937
                                                                        o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
 
4938
                                                                        o->m_pVHDF->m_pCount[z0]++;
 
4939
                                                                }
 
4940
                                                        } 
 
4941
                                                } // Ende IF VHDF
 
4942
 
 
4943
                                                if (g_bRDF)
 
4944
                                                {
 
4945
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
4946
                                                        {
 
4947
                                                                if (o->m_pRDF[zr] == NULL)
 
4948
                                                                        continue;
 
4949
                                                                o->m_pRDF[zr]->BuildAtomList(smfix,smfix,&templa);
 
4950
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
 
4951
                                                                {
 
4952
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
4953
                                                                        vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
4954
                                                                        tf = FoldedLength(vec0-vec1);
 
4955
                                                                        if (g_bDeriv)
 
4956
                                                                        {
 
4957
                                                                                o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) = tf;
 
4958
                                                                                switch(o->m_pRDF[zr]->m_iDeriv)
 
4959
                                                                                {
 
4960
                                                                                        case 0:
 
4961
                                                                                                tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
 
4962
                                                                                                break;
 
4963
                                                                                        case 1:
 
4964
                                                                                                tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
 
4965
                                                                                                break;
 
4966
                                                                                        case 2:
 
4967
                                                                                                tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
 
4968
                                                                                                break;
 
4969
                                                                                }
 
4970
                                                                        }
 
4971
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
4972
                                                                        {
 
4973
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
4974
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
 
4975
 
 
4976
                                                                                if (o->m_bDecompType)
 
4977
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
 
4978
 
 
4979
                                                                                o->m_pRDF[zr]->m_faData[0].Add(tf);
 
4980
 
 
4981
                                                                                if (o->m_pRDF[zr]->m_bACF)
 
4982
                                                                                        o->m_pRDF[zr]->m_pfaACFBuffer[z2*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
 
4983
 
 
4984
                                                                                if (o->m_bTimeDev && (ti2 != -1))
 
4985
                                                                                {
 
4986
                                                                                        if (o->m_bSaveSeparateFiles)
 
4987
                                                                                                mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
 
4988
                                                                                                        else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
 
4989
                                                                                        if (o->m_bCombinedPlot)
 
4990
                                                                                                o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
 
4991
                                                                                }
 
4992
                                                                                if (o->m_bTimeDiff)
 
4993
                                                                                        ((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
 
4994
                                                                        }
 
4995
                                                                } 
 
4996
                                                        }
 
4997
                                                } // Ende IF RDF
 
4998
 
 
4999
                                                if (g_bPlDF)
 
5000
                                                {
 
5001
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
5002
                                                        {
 
5003
                                                                if (o->m_pPlDF[zr] == NULL)
 
5004
                                                                        continue;
 
5005
                                                                o->m_pPlDF[zr]->BuildAtomList(smfix,smfix,&templa);
 
5006
                                                                for (z4=0;z4<templa.GetSize();z4+=4)
 
5007
                                                                {
 
5008
                                                                        if (o->m_pPlDF[zr]->m_bNormal)
 
5009
                                                                        {
 
5010
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5011
                                                                                vec0.Normalize();
 
5012
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5013
                                                                                tf = DotP(vec0,vec1);
 
5014
                                                                        } else
 
5015
                                                                        {
 
5016
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5017
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5018
                                                                                vec3 = CrossP(vec0,vec1);
 
5019
                                                                                vec3.Normalize();
 
5020
                                                                                vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5021
                                                                                tf = DotP(vec2,vec3);
 
5022
                                                                        }
 
5023
 
 
5024
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
5025
                                                                        {
 
5026
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5027
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r,tf);
 
5028
 
 
5029
                                                                                o->m_pPlDF[zr]->m_faData[0].Add(tf);
 
5030
                                                                        }
 
5031
                                                                }
 
5032
                                                        }
 
5033
                                                } // END IF PlDF
 
5034
 
 
5035
                                                if (g_bLiDF)
 
5036
                                                {
 
5037
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
5038
                                                        {
 
5039
                                                                if (o->m_pLiDF[zr] == NULL)
 
5040
                                                                        continue;
 
5041
                                                                o->m_pLiDF[zr]->BuildAtomList(smfix,smfix,&templa);
 
5042
                                                                for (z4=0;z4<templa.GetSize();z4+=4)
 
5043
                                                                {
 
5044
                                                                        if (o->m_pLiDF[zr]->m_bNormal)
 
5045
                                                                        {
 
5046
                                                                                vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5047
                                                                                vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5048
                                                                                vec0 = CrossP(vec2,vec3);
 
5049
                                                                                vec0.Normalize();
 
5050
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5051
                                                                                vec0 *= DotP(vec0,vec1);
 
5052
                                                                                tf = (vec1 - vec0).GetLength();
 
5053
                                                                        } else
 
5054
                                                                        {
 
5055
                                                                                vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5056
                                                                                vec0.Normalize();
 
5057
                                                                                vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5058
                                                                                vec0 *= DotP(vec0,vec1);
 
5059
                                                                                tf = (vec1 - vec0).GetLength();
 
5060
                                                                        }
 
5061
 
 
5062
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
5063
                                                                        {
 
5064
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5065
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r,tf);
 
5066
 
 
5067
                                                                                o->m_pLiDF[zr]->m_faData[0].Add(tf);
 
5068
                                                                        }
 
5069
                                                                }
 
5070
                                                        }
 
5071
                                                } // END IF LiDF
 
5072
 
 
5073
                                                if (g_bDipDF)
 
5074
                                                {
 
5075
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
5076
                                                        {
 
5077
                                                                if (o->m_pDipDF[zr] == NULL)
 
5078
                                                                        continue;
 
5079
                                                                tf = smfix->m_vDipole.GetLength();
 
5080
                                                                if (g_bDeriv)
 
5081
                                                                {
 
5082
                                                                        o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
 
5083
                                                                        switch(o->m_pDipDF[zr]->m_iDeriv)
 
5084
                                                                        {
 
5085
                                                                                case 0:
 
5086
                                                                                        tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
 
5087
                                                                                        break;
 
5088
                                                                                case 1:
 
5089
                                                                                        tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2)) / (2*g_fTimestepLength);
 
5090
                                                                                        break;
 
5091
                                                                                case 2:
 
5092
                                                                                        tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2)) / (g_fTimestepLength * g_fTimestepLength);
 
5093
                                                                                        break;
 
5094
                                                                        }
 
5095
                                                                }
 
5096
                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5097
                                                                {
 
5098
                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5099
                                                                                o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
 
5100
 
 
5101
                                                                        o->m_pDipDF[zr]->m_faData[0].Add(tf);
 
5102
 
 
5103
                                                                        if (o->m_pDipDF[zr]->m_bACF)
 
5104
                                                                                o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
 
5105
 
 
5106
                                                                        if (o->m_bTimeDev && (ti2 != -1))
 
5107
                                                                        {
 
5108
                                                                                if (o->m_bSaveSeparateFiles)
 
5109
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
 
5110
                                                                                                else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
 
5111
                                                                                if (o->m_bCombinedPlot)
 
5112
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5113
                                                                        }
 
5114
                                                                        if (o->m_bTimeDiff)
 
5115
                                                                                ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
 
5116
                                                                }
 
5117
                                                        }
 
5118
                                                } // Ende IF DIPDF
 
5119
 
 
5120
                                                if (g_bVDF)
 
5121
                                                {
 
5122
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
5123
                                                        {
 
5124
                                                                if (o->m_pVDF[zr] == NULL)
 
5125
                                                                        continue;
 
5126
                                                                o->m_pVDF[zr]->BuildAtomList(smfix,smfix,&templa);
 
5127
                                                                for (z4=0;z4<templa.GetSize();z4++)
 
5128
                                                                {
 
5129
                                                                        tf = tempvel[templa[z4]].GetLength();
 
5130
                                                                        if (g_bDeriv)
 
5131
                                                                        {
 
5132
                                                                                o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) = tf;
 
5133
                                                                                switch(o->m_pVDF[zr]->m_iDeriv)
 
5134
                                                                                {
 
5135
                                                                                        case 0:
 
5136
                                                                                                tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
 
5137
                                                                                                break;
 
5138
                                                                                        case 1:
 
5139
                                                                                                tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
 
5140
                                                                                                break;
 
5141
                                                                                        case 2:
 
5142
                                                                                                tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
 
5143
                                                                                                break;
 
5144
                                                                                }
 
5145
                                                                        }
 
5146
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
5147
                                                                        {
 
5148
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5149
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
 
5150
 
 
5151
                                                                                o->m_pVDF[zr]->m_faData[0].Add(tf);
 
5152
 
 
5153
                                                                                if (o->m_pVDF[zr]->m_bACF)
 
5154
                                                                                        o->m_pVDF[zr]->m_pfaACFBuffer[z2*o->m_pVDF[zr]->m_iCombinations+z4]->Add((float)tf);
 
5155
 
 
5156
                                                                                if (o->m_bTimeDev && (ti2 != -1))
 
5157
                                                                                {
 
5158
                                                                                        if (o->m_bSaveSeparateFiles)
 
5159
                                                                                                mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
 
5160
                                                                                                        else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
 
5161
                                                                                        if (o->m_bCombinedPlot)
 
5162
                                                                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pVDF[zr]->m_iCombinations+z4,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5163
                                                                                }
 
5164
                                                                                if (o->m_bTimeDiff)
 
5165
                                                                                        ((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
 
5166
                                                                        }
 
5167
                                                                }
 
5168
                                                        }
 
5169
                                                } // Ende IF VDF
 
5170
 
 
5171
                                                if (g_bSDF)
 
5172
                                                {
 
5173
                                                        o->m_pSDF->BuildAtomList(smfix,smfix,&templa);
 
5174
                                                        for (z4=0;z4<templa.GetSize();z4++)
 
5175
                                                        {
 
5176
                                                                o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5177
 
 
5178
                                                                if (o->m_pSDF->m_bVdWSpheres)
 
5179
                                                                        o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
 
5180
                                                        } 
 
5181
                                                } // Ende IF SDF
 
5182
 
 
5183
                                                if (g_bPlProj)
 
5184
                                                {
 
5185
                                                        o->m_pPlProj->BuildAtomList(smfix,smfix,&templa);
 
5186
                                                        for (z4=0;z4<templa.GetSize();z4++)
 
5187
                                                                o->m_pPlProj->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5188
                                                } // Ende IF PlProj
 
5189
 
 
5190
                                                if (g_bRevSDF)
 
5191
                                                {
 
5192
                                                        o->m_pRevSDF->BuildAtomList(smfix,smfix,&templa);
 
5193
                                                        for (z4=0;z4<templa.GetSize();z4++)
 
5194
                                                                o->m_pRevSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5195
                                                } // Ende IF RevSDF
 
5196
 
 
5197
                                        } // Ende IF m_bSelf  
 
5198
 
 
5199
                                        if (o->m_bOthers)
 
5200
                                        {
 
5201
                                                secondmolrun = false;
 
5202
_secondmolstart:
 
5203
                                                if ((!secondmolrun) && (o->m_pConditions != NULL))
 
5204
                                                {
 
5205
                                                        o->m_pConditions->m_bAnyPassed = false;
 
5206
                                                        o->m_pConditions->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
 
5207
                                                        if (o->m_pConditions->m_bAnyPassed)
 
5208
                                                                o->m_pConditions->m_iRMPassCounter[z2]++;
 
5209
                                                }
 
5210
 
 
5211
                                                if ((secondmolrun) && (o->m_pConditionsOM2 != NULL))
 
5212
                                                {
 
5213
                                                        o->m_pConditionsOM2->m_bAnyPassed = false;
 
5214
                                                        o->m_pConditionsOM2->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
 
5215
                                                        if (o->m_pConditionsOM2->m_bAnyPassed)
 
5216
                                                                o->m_pConditionsOM2->m_iRMPassCounter[z2]++;
 
5217
                                                }
 
5218
 
 
5219
                                                for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
 
5220
                                                {
 
5221
                                                        if (secondmolrun)
 
5222
                                                        {
 
5223
                                                                if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
 
5224
                                                                                continue;
 
5225
                                                                if (o->m_bObsCertain)
 
5226
                                                                {
 
5227
                                                                        if (!o->m_waObsShow2List.Contains(z3))
 
5228
                                                                                continue;
 
5229
                                                                        tic_o = o->m_waObsShow2List.GetPosition(z3);
 
5230
                                                                }
 
5231
                                                        } else
 
5232
                                                        {
 
5233
                                                                if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
 
5234
                                                                                continue;
 
5235
                                                                if (o->m_bObsCertain)
 
5236
                                                                {
 
5237
                                                                        if (!o->m_waObsShowList.Contains(z3))
 
5238
                                                                                continue;
 
5239
                                                                        tic_o = o->m_waObsShowList.GetPosition(z3);
 
5240
                                                                }
 
5241
                                                        }
 
5242
 
 
5243
                                                        if (g_bRegionAnalysis)
 
5244
                                                        {
 
5245
                                                                if (secondmolrun)
 
5246
                                                                {
 
5247
                                                                        if ((!o->m_iaOM2Regions.Contains(0)) && (!o->m_iaOM2Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]])))
 
5248
                                                                                continue;
 
5249
                                                                } else
 
5250
                                                                {
 
5251
                                                                        if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]])))
 
5252
                                                                                continue;
 
5253
                                                                }
 
5254
                                                        }
 
5255
                                                //      mprintf("\n   ... OM %d ist drin!",z3);
 
5256
 
 
5257
                                                        if (secondmolrun)
 
5258
                                                        {
 
5259
                                                                ti = -1;
 
5260
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
 
5261
                                                        } else
 
5262
                                                        {
 
5263
                                                                ti = o->m_waSaveShowList.GetPosition(z3);
 
5264
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
 
5265
                                                        }
 
5266
 
 
5267
                                                        if (o->m_bTimeDev && (o->m_pConditions != NULL))
 
5268
                                                        {
 
5269
                                                                if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
 
5270
                                                                {
 
5271
                                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
5272
                                                                        {
 
5273
                                                                                if (g_bADF && (o->m_pADF[zr] != NULL))
 
5274
                                                                                {
 
5275
                                                                                        if ((ti2 != -1) && (ti != -1))
 
5276
                                                                                        {
 
5277
                                                                                                if (o->m_bSaveSeparateFiles)
 
5278
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
 
5279
                                                                                                                else mfprintf(o->m_pADF[zr]->m_fAngle[0],";     -   ");
 
5280
                                                                                        }
 
5281
                                                                                }
 
5282
 
 
5283
                                                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
 
5284
                                                                                {
 
5285
                                                                                        if ((ti2 != -1) && (ti != -1))
 
5286
                                                                                        {
 
5287
                                                                                                if (o->m_bSaveSeparateFiles)
 
5288
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
 
5289
                                                                                                                else mfprintf(o->m_pDDF[zr]->m_fAngle[0],";     -   ");
 
5290
                                                                                        }
 
5291
                                                                                }
 
5292
 
 
5293
                                                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
 
5294
                                                                                {
 
5295
                                                                                        if ((ti2 != -1) && (ti != -1))
 
5296
                                                                                        {
 
5297
                                                                                                if (o->m_bSaveSeparateFiles)
 
5298
                                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],";     -   ");
 
5299
                                                                                                                else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],";     -   ");
 
5300
                                                                                        }
 
5301
                                                                                }
 
5302
 
 
5303
                                                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
 
5304
                                                                                {
 
5305
                                                                                        if ((ti2 != -1) && (ti != -1))
 
5306
                                                                                        {
 
5307
                                                                                                if (o->m_bSaveSeparateFiles)
 
5308
                                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],";     -   ");
 
5309
                                                                                                                else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],";     -   ");
 
5310
                                                                                        }
 
5311
                                                                                }
 
5312
 
 
5313
                                                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
 
5314
                                                                                {
 
5315
                                                                                        if ((ti2 != -1) && (ti != -1))
 
5316
                                                                                        {
 
5317
                                                                                                if (o->m_bSaveSeparateFiles)
 
5318
                                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],";     -   ");
 
5319
                                                                                                                else mfprintf(o->m_pRDF[zr]->m_fDist[0],";     -   ");
 
5320
                                                                                        }
 
5321
                                                                                }
 
5322
                                                                        }
 
5323
                                                                        continue;
 
5324
                                                                }
 
5325
                                                        }
 
5326
 
 
5327
                                                        if ((!secondmolrun) && (o->m_pConditions != NULL))
 
5328
                                                        {
 
5329
                                                                if (!o->m_pConditions->Contains(z3))
 
5330
                                                                        continue;
 
5331
 
 
5332
                                                                if (o->m_bBinOnlyPassedAtoms)
 
5333
                                                                        o->m_pConditions->MarkPassedAtoms(z3,true);
 
5334
 
 
5335
                                                                if (o->m_bBinOnlyNotPassedAtoms)
 
5336
                                                                        o->m_pConditions->MarkPassedAtoms(z3,false);
 
5337
 
 
5338
                                                                if (g_bSaveCondSnapshot)
 
5339
                                                                {
 
5340
                                                                        g_iSaveCondCount++;
 
5341
                                                                        if (g_bSaveCondWholeBox)
 
5342
                                                                        {
 
5343
                                                                                g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
 
5344
                                                                        } else
 
5345
                                                                        {
 
5346
                                                                                mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
 
5347
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
 
5348
                                                                                {
 
5349
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
 
5350
                                                                                                continue;
 
5351
                                                                                        for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
 
5352
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
 
5353
                                                                                }
 
5354
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
 
5355
                                                                                {
 
5356
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
 
5357
                                                                                                continue;
 
5358
                                                                                        for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
 
5359
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
 
5360
                                                                                }
 
5361
                                                                        }
 
5362
                                                                }
 
5363
                                                        }
 
5364
 
 
5365
                                                        if (secondmolrun && (o->m_pConditionsOM2 != NULL))
 
5366
                                                        {
 
5367
                                                                if (!o->m_pConditionsOM2->Contains(z3))
 
5368
                                                                        continue;
 
5369
 
 
5370
                                        //                      mprintf("\nStep %d: z2=%d, z3=%d passed.",g_iSteps,z2,z3);
 
5371
 
 
5372
                                                                if (o->m_bBinOnlyPassedAtoms)
 
5373
                                                                        o->m_pConditionsOM2->MarkPassedAtoms(z3,true);
 
5374
 
 
5375
                                                                if (o->m_bBinOnlyNotPassedAtoms)
 
5376
                                                                        o->m_pConditionsOM2->MarkPassedAtoms(z3,false);
 
5377
 
 
5378
                                                /*              if (g_bSaveCondSnapshot)
 
5379
                                                                {
 
5380
                                                                        g_iSaveCondCount++;
 
5381
                                                                        if (g_bSaveCondWholeBox)
 
5382
                                                                        {
 
5383
                                                                                g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
 
5384
                                                                        } else
 
5385
                                                                        {
 
5386
                                                                                mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
 
5387
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
 
5388
                                                                                {
 
5389
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
 
5390
                                                                                                continue;
 
5391
                                                                                        for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
 
5392
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
 
5393
                                                                                }
 
5394
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
 
5395
                                                                                {
 
5396
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
 
5397
                                                                                                continue;
 
5398
                                                                                        for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
 
5399
                                                                                                mfprintf(g_fSaveCondFile,"%s  %f  %f  %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
 
5400
                                                                                }
 
5401
                                                                        }
 
5402
                                                                }*/
 
5403
                                                        }
 
5404
 
 
5405
                                                        if (g_bVHDF)
 
5406
                                                        {
 
5407
                                                                o->m_pVHDF->BuildAtomList(smfix,sm,&templa);
 
5408
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
 
5409
                                                                {
 
5410
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
 
5411
                                                                        for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
 
5412
                                                                        {
 
5413
                                                                                g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
 
5414
                                                                                if (g_pT2Timestep == NULL)
 
5415
                                                                                        continue;
 
5416
                                                                                vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
 
5417
                                                                                tf = FoldedLength(vec0-vec1);
 
5418
                                                                                o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
 
5419
                                                                                o->m_pVHDF->m_pCount[z0]++;
 
5420
                                                                        }
 
5421
                                                                } 
 
5422
                                                        } // Ende IF VHDF
 
5423
 
 
5424
                                                        if (g_bADF)
 
5425
                                                        {
 
5426
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5427
                                                                {
 
5428
                                                                        if (o->m_pADF[zr] == NULL)
 
5429
                                                                                continue;
 
5430
                                                                        if (o->m_bSecondShowMol)
 
5431
                                                                        {
 
5432
                                                                                if (secondmolrun && (zr == 0))
 
5433
                                                                                        continue;
 
5434
                                                                                if (!secondmolrun && (zr == 1))
 
5435
                                                                                        continue;
 
5436
                                                                        }
 
5437
                                                                        o->m_pADF[zr]->BuildAtomList(smfix,sm,&templa);
 
5438
                                                                        for (z4=0;z4<templa.GetSize();z4+=6)
 
5439
                                                                        {
 
5440
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5441
                                                                                {
 
5442
                                                                                        tb = true;
 
5443
                                                                                        if (g_baAtomPassedCondition[templa[z4]] == 0)
 
5444
                                                                                                tb = false;
 
5445
                                                                                        if (g_baAtomPassedCondition[templa[z4+1]] == 0)
 
5446
                                                                                                tb = false;
 
5447
                                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
 
5448
                                                                                                if (g_baAtomPassedCondition[templa[z4+2]] == 0)
 
5449
                                                                                                        tb = false;
 
5450
                                                                                        if (g_baAtomPassedCondition[templa[z4+3]] == 0)
 
5451
                                                                                                tb = false;
 
5452
                                                                                        if (g_baAtomPassedCondition[templa[z4+4]] == 0)
 
5453
                                                                                                tb = false;
 
5454
                                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
 
5455
                                                                                                if (g_baAtomPassedCondition[templa[z4+5]] == 0)
 
5456
                                                                                                        tb = false;
 
5457
                                                                                        if (tb)
 
5458
                                                                                        {
 
5459
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
 
5460
                                                                                        } else
 
5461
                                                                                        {
 
5462
                                                                        //                      mprintf("Nicht bestanden; z2=%d, z3=%d; (%d,%d,%d) (%d,%d,%d).\n",z2,z3,g_baAtomPassedCondition[tempwa[z4]],g_baAtomPassedCondition[tempwa[z4+1]],g_baAtomPassedCondition[tempwa[z4+2]],g_baAtomPassedCondition[tempwa[z4+3]],g_baAtomPassedCondition[tempwa[z4+4]],g_baAtomPassedCondition[tempwa[z4+5]]);
 
5463
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(0);
 
5464
                                                                                        }
 
5465
                                                                                }
 
5466
                                                                                if (o->m_pADF[zr]->m_bOrtho[0])
 
5467
                                                                                {
 
5468
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
5469
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
5470
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
 
5471
                                                                                        vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
 
5472
                                                                                } else
 
5473
                                                                                {
 
5474
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
5475
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
5476
                                                                                        vec1 = FoldVector(vec2-vec0);
 
5477
                                                                                }
 
5478
                                                                                if (o->m_pADF[zr]->m_bOrtho[1])
 
5479
                                                                                {
 
5480
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
5481
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
5482
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
 
5483
                                                                                        vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
5484
                                                                                } else
 
5485
                                                                                {
 
5486
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
5487
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
5488
                                                                                        vec2 = FoldVector(vec3-vec4);
 
5489
                                                                                }
 
5490
 
 
5491
                                                                                tf = Angle_Deg(vec1,vec2);
 
5492
                                                                                if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
 
5493
                                                                                        tf = 180.0f-tf;
 
5494
                                                                                if (o->m_pADF[zr]->m_bCosine)
 
5495
                                                                                        tf = cos(tf/180.0*Pi);
 
5496
 
 
5497
                                                                                if (g_bDeriv)
 
5498
                                                                                {
 
5499
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6;
 
5500
                                                                                        o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
 
5501
                                                                                        switch(o->m_pADF[zr]->m_iDeriv)
 
5502
                                                                                        {
 
5503
                                                                                                case 0:
 
5504
                                                                                                        tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
 
5505
                                                                                                        break;
 
5506
                                                                                                case 1:
 
5507
                                                                                                        tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
 
5508
                                                                                                        break;
 
5509
                                                                                                case 2:
 
5510
                                                                                                        tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
 
5511
                                                                                                        break;
 
5512
                                                                                        }
 
5513
                                                                                }
 
5514
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5515
                                                                                {
 
5516
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5517
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5518
 
 
5519
                                                                                        o->m_pADF[zr]->m_faData[z3].Add(tf);
 
5520
 
 
5521
                                                                                        if (o->m_pADF[zr]->m_bACF)
 
5522
                                                                                                o->m_pADF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
 
5523
 
 
5524
                                                        /*                              if (o->m_pADF[zr]->m_bMirror)
 
5525
                                                                                        {
 
5526
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5527
                                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,180.0-tf);
 
5528
                                                                                                o->m_pADF[zr]->m_faData[z3].Add(180.0-tf);
 
5529
                                                                                        }*/
 
5530
 
 
5531
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
 
5532
                                                                                        {
 
5533
                                                                                //              o->m_pAngleStat->AddValue(ti2,ti,tf);
 
5534
                                                                                                if (o->m_bSaveSeparateFiles)
 
5535
                                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
 
5536
                                                                                                                else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
 
5537
                                                                                                if (o->m_bCombinedPlot)
 
5538
                                                                                                        o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5539
                                                                                        }
 
5540
                                                                                        if (o->m_bTimeDiff)
 
5541
                                                                                                ((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
 
5542
                                                                                }
 
5543
                                                                        }
 
5544
                                                                }
 
5545
                                                        }  // Ende IF ADF
 
5546
 
 
5547
                                                        if (g_bDDF)
 
5548
                                                        {
 
5549
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5550
                                                                {
 
5551
                                                                        if (o->m_pDDF[zr] == NULL)
 
5552
                                                                                continue;
 
5553
                                                                        if (o->m_bSecondShowMol)
 
5554
                                                                        {
 
5555
                                                                                if (secondmolrun && (zr == 0))
 
5556
                                                                                        continue;
 
5557
                                                                                if (!secondmolrun && (zr == 1))
 
5558
                                                                                        continue;
 
5559
                                                                        }
 
5560
                                                                        o->m_pDDF[zr]->BuildAtomList(smfix,sm,&templa);
 
5561
                                                                        for (z4=0;z4<templa.GetSize();z4+=9)
 
5562
                                                                        {
 
5563
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5564
                                                                                {
 
5565
                                                                                        tb = true;
 
5566
                                                                                        for (z5=z4;z5<z4+9;z5++)
 
5567
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
 
5568
                                                                                                        tb = false;
 
5569
                                                                                        if (tb)
 
5570
                                                                                                o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
 
5571
                                                                                                        else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
 
5572
                                                                                }
 
5573
                                                                                if (o->m_pDDF[zr]->m_bOrtho[0])
 
5574
                                                                                {
 
5575
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
5576
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
5577
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
 
5578
                                                                                        vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
 
5579
                                                                                } else
 
5580
                                                                                {
 
5581
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
5582
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
5583
                                                                                        vec1 = FoldVector(vec2-vec0);
 
5584
                                                                                }
 
5585
                                                                                if (o->m_pDDF[zr]->m_bOrtho[1])
 
5586
                                                                                {
 
5587
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
5588
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
5589
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
 
5590
                                                                                        vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
5591
                                                                                } else
 
5592
                                                                                {
 
5593
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
 
5594
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
 
5595
                                                                                        vec2 = FoldVector(vec3-vec4);
 
5596
                                                                                }
 
5597
                                                                                if (o->m_pDDF[zr]->m_bOrtho[2])
 
5598
                                                                                {
 
5599
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
 
5600
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
 
5601
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
 
5602
                                                                                        vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
 
5603
                                                                                } else
 
5604
                                                                                {
 
5605
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
 
5606
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
 
5607
                                                                                        vec3 = FoldVector(vec3-vec4);
 
5608
                                                                                }
 
5609
                                                                                tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
 
5610
                                                                                if (o->m_pDDF[zr]->m_bCosine)
 
5611
                                                                                        tf = cos(tf/180.0*Pi);
 
5612
                                                                                                else if (o->m_pDDF[zr]->m_bPositive)
 
5613
                                                                                                        if (tf < 0)
 
5614
                                                                                                                tf += 360.0;
 
5615
                                                                                if (g_bDeriv)
 
5616
                                                                                {
 
5617
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9;
 
5618
                                                                                        o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
 
5619
                                                                                        switch(o->m_pDDF[zr]->m_iDeriv)
 
5620
                                                                                        {
 
5621
                                                                                                case 0:
 
5622
                                                                                                        tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
 
5623
                                                                                                        break;
 
5624
                                                                                                case 1:
 
5625
                                                                                                        tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
 
5626
                                                                                                        break;
 
5627
                                                                                                case 2:
 
5628
                                                                                                        tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
 
5629
                                                                                                        break;
 
5630
                                                                                        }
 
5631
                                                                                }
 
5632
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5633
                                                                                {
 
5634
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5635
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5636
 
 
5637
                                                                                        o->m_pDDF[zr]->m_faData[z3].Add(tf);
 
5638
 
 
5639
                                                                                        if (o->m_pDDF[zr]->m_bACF)
 
5640
                                                                                                o->m_pDDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
 
5641
 
 
5642
                                                                                        if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
 
5643
                                                                                        {
 
5644
                                                                                                o->m_pDDF[zr]->m_faData[z3].Add(-tf);
 
5645
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5646
                                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,-tf);
 
5647
                                                                                        }
 
5648
 
 
5649
                                                                                        if (o->m_bTimeDiff)
 
5650
                                                                                                ((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
 
5651
 
 
5652
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
 
5653
                                                                                        {
 
5654
                                                                                                if (o->m_pDDF[zr]->m_bRotate)
 
5655
                                                                                                {
 
5656
                                                                                                        if (g_iSteps > 1)
 
5657
                                                                                                        {
 
5658
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
 
5659
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
 
5660
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
 
5661
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
 
5662
                                                                                                        }
 
5663
                                                                                                        o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
 
5664
                                                                                                        tf2 = tf + o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
 
5665
                                                                                                } else tf2 = tf;
 
5666
                                                                                                if (o->m_bSaveSeparateFiles)
 
5667
                                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
 
5668
                                                                                                                else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
 
5669
                                                                                                if (o->m_bCombinedPlot)
 
5670
                                                                                                        o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5671
                                                                                        }
 
5672
                                                                                }
 
5673
                                                                        }
 
5674
                                                                }
 
5675
                                                        }  // Ende IF DDF
 
5676
 
 
5677
                                                        if (g_bPlDF)
 
5678
                                                        {
 
5679
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5680
                                                                {
 
5681
                                                                        if (o->m_pPlDF[zr] == NULL)
 
5682
                                                                                continue;
 
5683
                                                                        if (o->m_bSecondShowMol)
 
5684
                                                                        {
 
5685
                                                                                if (secondmolrun && (zr == 0))
 
5686
                                                                                        continue;
 
5687
                                                                                if (!secondmolrun && (zr == 1))
 
5688
                                                                                        continue;
 
5689
                                                                        }
 
5690
                                                                        o->m_pPlDF[zr]->BuildAtomList(smfix,sm,&templa);
 
5691
                                                                        for (z4=0;z4<templa.GetSize();z4+=4)
 
5692
                                                                        {
 
5693
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5694
                                                                                {
 
5695
                                                                                        tb = true;
 
5696
                                                                                        for (z5=z4;z5<z4+4;z5++)
 
5697
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
 
5698
                                                                                                        tb = false;
 
5699
                                                                                        if (tb)
 
5700
                                                                                                o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(1);
 
5701
                                                                                                        else o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(0);
 
5702
                                                                                }
 
5703
                                                                                if (o->m_pPlDF[zr]->m_bNormal)
 
5704
                                                                                {
 
5705
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5706
                                                                                        vec0.Normalize();
 
5707
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5708
                                                                                        tf = DotP(vec0,vec1);
 
5709
                                                                                } else
 
5710
                                                                                {
 
5711
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5712
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5713
                                                                                        vec3 = CrossP(vec0,vec1);
 
5714
                                                                                        vec3.Normalize();
 
5715
                                                                                        vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5716
                                                                                        tf = DotP(vec2,vec3);
 
5717
                                                                                }
 
5718
 
 
5719
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5720
                                                                                {
 
5721
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5722
                                                                                                o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5723
 
 
5724
                                                                                        o->m_pPlDF[zr]->m_faData[z3].Add(tf);
 
5725
                                                                                }
 
5726
                                                                        }
 
5727
                                                                }
 
5728
                                                        }  // Ende IF PlDF
 
5729
 
 
5730
                                                        if (g_bLiDF)
 
5731
                                                        {
 
5732
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5733
                                                                {
 
5734
                                                                        if (o->m_pLiDF[zr] == NULL)
 
5735
                                                                                continue;
 
5736
                                                                        if (o->m_bSecondShowMol)
 
5737
                                                                        {
 
5738
                                                                                if (secondmolrun && (zr == 0))
 
5739
                                                                                        continue;
 
5740
                                                                                if (!secondmolrun && (zr == 1))
 
5741
                                                                                        continue;
 
5742
                                                                        }
 
5743
                                                                        o->m_pLiDF[zr]->BuildAtomList(smfix,sm,&templa);
 
5744
                                                                        for (z4=0;z4<templa.GetSize();z4+=4)
 
5745
                                                                        {
 
5746
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5747
                                                                                {
 
5748
                                                                                        tb = true;
 
5749
                                                                                        for (z5=z4;z5<z4+4;z5++)
 
5750
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
 
5751
                                                                                                        tb = false;
 
5752
                                                                                        if (tb)
 
5753
                                                                                                o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(1);
 
5754
                                                                                                        else o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(0);
 
5755
                                                                                }
 
5756
 
 
5757
                                                                                if (o->m_pLiDF[zr]->m_bNormal)
 
5758
                                                                                {
 
5759
                                                                                        vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5760
                                                                                        vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5761
                                                                                        vec0 = CrossP(vec2,vec3);
 
5762
                                                                                        vec0.Normalize();
 
5763
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5764
                                                                                        vec0 *= DotP(vec0,vec1);
 
5765
                                                                                        tf = (vec1 - vec0).GetLength();
 
5766
                                                                                } else
 
5767
                                                                                {
 
5768
                                                                                        vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5769
                                                                                        vec0.Normalize();
 
5770
                                                                                        vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5771
                                                                                        vec0 *= DotP(vec0,vec1);
 
5772
                                                                                        tf = (vec1 - vec0).GetLength();
 
5773
                                                                                }
 
5774
 
 
5775
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5776
                                                                                {
 
5777
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5778
                                                                                                o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5779
 
 
5780
                                                                                        o->m_pLiDF[zr]->m_faData[z3].Add(tf);
 
5781
                                                                                }
 
5782
                                                                        }
 
5783
                                                                }
 
5784
                                                        }  // Ende IF LilDF
 
5785
 
 
5786
                                                        if (g_bDipDF)
 
5787
                                                        {
 
5788
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5789
                                                                {
 
5790
                                                                        if (o->m_pDipDF[zr] == NULL)
 
5791
                                                                                continue;
 
5792
                                                                        if (o->m_bSecondShowMol)
 
5793
                                                                        {
 
5794
                                                                                if (secondmolrun && (zr == 0))
 
5795
                                                                                        continue;
 
5796
                                                                                if (!secondmolrun && (zr == 1))
 
5797
                                                                                        continue;
 
5798
                                                                        }
 
5799
                                                                        if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
 
5800
                                                                                tf = smfix->m_vDipole.GetLength();
 
5801
                                                                                        else tf = sm->m_vDipole.GetLength();
 
5802
                                                                        if (g_bDeriv)
 
5803
                                                                        {
 
5804
                                                                                zi = z2*o->m_iShowMolCount+z3;
 
5805
                                                                                o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
 
5806
                                                                                switch(o->m_pDipDF[zr]->m_iDeriv)
 
5807
                                                                                {
 
5808
                                                                                        case 0:
 
5809
                                                                                                tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
 
5810
                                                                                                break;
 
5811
                                                                                        case 1:
 
5812
                                                                                                tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
 
5813
                                                                                                break;
 
5814
                                                                                        case 2:
 
5815
                                                                                                tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
 
5816
                                                                                                break;
 
5817
                                                                                }
 
5818
                                                                        }
 
5819
                                                                        if (!g_bDeriv || (g_iSteps > 2))
 
5820
                                                                        {
 
5821
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
 
5822
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5823
 
 
5824
                                                                                o->m_pDipDF[zr]->m_faData[z3].Add(tf);
 
5825
 
 
5826
                                                                                if (o->m_pDipDF[zr]->m_bACF)
 
5827
                                                                                        o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
 
5828
 
 
5829
                                                                                if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
 
5830
                                                                                {
 
5831
                                                                                        if (o->m_bSaveSeparateFiles)
 
5832
                                                                                                mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
 
5833
                                                                                                        else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
 
5834
                                                                                        if (o->m_bCombinedPlot)
 
5835
                                                                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_waSaveShowList.GetSize()+ti,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5836
                                                                                }
 
5837
                                                                                if (o->m_bTimeDiff)
 
5838
                                                                                        ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
 
5839
                                                                        }
 
5840
                                                                }
 
5841
                                                        } // Ende IF DIPOLE
 
5842
 
 
5843
                                                        if (g_bVDF)
 
5844
                                                        {
 
5845
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5846
                                                                {
 
5847
                                                                        if (o->m_pVDF[zr] == NULL)
 
5848
                                                                                continue;
 
5849
                                                                        if (o->m_bSecondShowMol)
 
5850
                                                                        {
 
5851
                                                                                if (secondmolrun && (zr == 0))
 
5852
                                                                                        continue;
 
5853
                                                                                if (!secondmolrun && (zr == 1))
 
5854
                                                                                        continue;
 
5855
                                                                        }
 
5856
                                                                        o->m_pVDF[zr]->BuildAtomList(smfix,sm,&templa);
 
5857
                                                                        for (z4=0;z4<templa.GetSize();z4++)
 
5858
                                                                        {
 
5859
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5860
                                                                                {
 
5861
                                                                                        tb = true;
 
5862
                                                                                        for (z5=z4;z5<z4+2;z5++)
 
5863
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
 
5864
                                                                                                        tb = false;
 
5865
                                                                                        if (tb)
 
5866
                                                                                                o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
 
5867
                                                                                                        else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
 
5868
                                                                                }
 
5869
                                                                                tf = tempvel[templa[z4]].GetLength();
 
5870
                                                                                if (g_bDeriv)
 
5871
                                                                                {
 
5872
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2;
 
5873
                                                                                        o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
 
5874
                                                                                        switch(o->m_pVDF[zr]->m_iDeriv)
 
5875
                                                                                        {
 
5876
                                                                                                case 0:
 
5877
                                                                                                        tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
 
5878
                                                                                                        break;
 
5879
                                                                                                case 1:
 
5880
                                                                                                        tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
 
5881
                                                                                                        break;
 
5882
                                                                                                case 2:
 
5883
                                                                                                        tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
 
5884
                                                                                                        break;
 
5885
                                                                                        }
 
5886
                                                                                }
 
5887
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5888
                                                                                {
 
5889
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5890
                                                                                                o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5891
 
 
5892
                                                                                        o->m_pVDF[zr]->m_faData[z3].Add(tf);
 
5893
 
 
5894
                                                                                        if (o->m_pVDF[zr]->m_bACF)
 
5895
                                                                                                o->m_pVDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
 
5896
 
 
5897
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
 
5898
                                                                                        {
 
5899
                                                                                                if (o->m_bSaveSeparateFiles)
 
5900
                                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
 
5901
                                                                                                                else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
 
5902
                                                                                                if (o->m_bCombinedPlot)
 
5903
                                                                                                        o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pVDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5904
                                                                                        }
 
5905
                                                                                        if (o->m_bTimeDiff)
 
5906
                                                                                                ((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
 
5907
                                                                                }
 
5908
                                                                        }
 
5909
                                                                }
 
5910
                                                        } // Ende IF VDF
 
5911
 
 
5912
                                                        if (g_bRDF)
 
5913
                                                        {
 
5914
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
 
5915
                                                                {
 
5916
                                                                        if (o->m_pRDF[zr] == NULL)
 
5917
                                                                                continue;
 
5918
                                                                        if (o->m_bSecondShowMol)
 
5919
                                                                        {
 
5920
                                                                                if (secondmolrun && (zr == 0))
 
5921
                                                                                        continue;
 
5922
                                                                                if (!secondmolrun && (zr == 1))
 
5923
                                                                                        continue;
 
5924
                                                                        }
 
5925
                                                                        o->m_pRDF[zr]->BuildAtomList(smfix,sm,&templa);
 
5926
                                                                        for (z4=0;z4<templa.GetSize();z4+=2)
 
5927
                                                                        {
 
5928
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
 
5929
                                                                                {
 
5930
                                                                                        tb = true;
 
5931
                                                                                        for (z5=z4;z5<z4+2;z5++)
 
5932
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
 
5933
                                                                                                        tb = false;
 
5934
                                                                                        if (tb)
 
5935
                                                                                                o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
 
5936
                                                                                                        else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
 
5937
                                                                                }
 
5938
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
 
5939
                                                                                vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
 
5940
                                                                                tf = FoldedLength(vec0-vec1);
 
5941
                                                                /*              if (tf > 2000)
 
5942
                                                                                {
 
5943
                                                                                        mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f  ",z2,z3,z4,templa[z4],templa[z4+1],tf);
 
5944
                                                                                        mprintf("\n  vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
 
5945
                                                                                }
 
5946
                                                */              //              mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f  ",z2,z3,z4,templa[z4],templa[z4+1],tf);
 
5947
                                                                //              mprintf("\n  vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
 
5948
                                                                                if (g_bDeriv)
 
5949
                                                                                {
 
5950
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2;
 
5951
                                                                                        o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
 
5952
                                                                                        switch(o->m_pRDF[zr]->m_iDeriv)
 
5953
                                                                                        {
 
5954
                                                                                                case 0:
 
5955
                                                                                                        tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
 
5956
                                                                                                        break;
 
5957
                                                                                                case 1:
 
5958
                                                                                                        tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
 
5959
                                                                                                        break;
 
5960
                                                                                                case 2:
 
5961
                                                                                                        tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
 
5962
                                                                                                        break;
 
5963
                                                                                        }
 
5964
                                                                                }
 
5965
                                                                                if (!g_bDeriv || (g_iSteps > 2))
 
5966
                                                                                {
 
5967
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
5968
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
 
5969
 
 
5970
                                                                                        if (o->m_bDecompType)
 
5971
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
 
5972
 
 
5973
                                                                                        o->m_pRDF[zr]->m_faData[z3].Add(tf);
 
5974
 
 
5975
                                                                                        if (o->m_pRDF[zr]->m_bACF)
 
5976
                                                                                                o->m_pRDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
 
5977
 
 
5978
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
 
5979
                                                                                        {
 
5980
                                                                                                if (o->m_bSaveSeparateFiles)
 
5981
                                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
 
5982
                                                                                                                else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
 
5983
                                                                                                if (o->m_bCombinedPlot)
 
5984
                                                                                                        o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
 
5985
                                                                                        }
 
5986
                                                                                        if (o->m_bTimeDiff)
 
5987
                                                                                                ((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
 
5988
                                                                                }
 
5989
                                                                        } 
 
5990
                                                                }
 
5991
                                                        } // Ende IF RDF
 
5992
 
 
5993
                                                        if (g_bSDF)
 
5994
                                                        {
 
5995
                                                                o->m_pSDF->BuildAtomList(smfix,sm,&templa);
 
5996
                                                                for (z4=0;z4<templa.GetSize();z4++)
 
5997
                                                                {
 
5998
                                                                        o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
5999
 
 
6000
                                                                        if (o->m_pSDF->m_bVdWSpheres)
 
6001
                                                                                o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
 
6002
                                                                }
5863
6003
                                                        } // Ende IF SDF
5864
 
 
5865
 
                                                        if (g_bRevSDF)
 
6004
 
 
6005
                                                        if (g_bPlProj)
5866
6006
                                                        {
5867
 
                                                                o->m_pRevSDF->BuildAtomList(smfix,sm,&templa);
 
6007
                                                                o->m_pPlProj->BuildAtomList(smfix,sm,&templa);
5868
6008
                                                                for (z4=0;z4<templa.GetSize();z4++)
5869
 
                                                                        o->m_pRevSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5870
 
                                                        } // Ende IF RevSDF
5871
 
 
5872
 
                                                } // Ende FOR Alle anderen Molekuele durchgehen
5873
 
                                                if (o->m_bSecondShowMol && (!secondmolrun))
5874
 
                                                {
5875
 
                                                        secondmolrun = true;
5876
 
                                                        goto _secondmolstart;
5877
 
                                                }
5878
 
                                        } // Ende IF m_bOthers
5879
 
 
5880
 
                                        if (g_bSDF)
5881
 
                                        {
5882
 
                                                if (o->m_pSDF->m_bSDFMirrorBisect)
5883
 
                                                {
5884
 
                                                        vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
5885
 
                                                        vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
5886
 
                                                        vec1 = CrossP(vec2,vec3);
5887
 
                                                        vec2 += vec3;
5888
 
                                                }
5889
 
 
5890
 
                                                if (o->m_pSDF->m_bCutPlane)
5891
 
                                                {
5892
 
                                                        o->m_pSDF->m_fAtom2PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])][0];
5893
 
                                                        o->m_pSDF->m_fAtom3PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][0];
5894
 
                                                        o->m_pSDF->m_fAtom3PosY += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][1];
5895
 
                                                        o->m_pSDF->m_fPosCounter++;
5896
 
                                                }
5897
 
 
5898
 
                                                if (o->m_bSelf)
5899
 
                                                {
5900
 
                                                        for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
5901
 
                                                        {
5902
 
                                                                vec0 = o->m_pSDF->m_vaData[0][z5];
5903
 
 
5904
 
                                                                if (o->m_pSDF->m_bVdWSpheres)
5905
 
                                                                        o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[0][z5]);
5906
 
                                                                                else o->m_pSDF->m_pSDF->AddToBin(vec0);
5907
 
 
5908
 
                                                                if (o->m_pSDF->m_bSDFMirrorXY)
5909
 
                                                                {
5910
 
                                                                        vec0[2] = -vec0[2];
5911
 
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
5912
 
                                                                }
5913
 
 
5914
 
                                                                if (o->m_pSDF->m_bSDFMirrorBisect)
5915
 
                                                                {
5916
 
                                                                        vec3.PointRoot(vec1,vec2,vec0);
5917
 
                                                                        vec3 -= vec0;
5918
 
                                                                        vec3 *= 2.0f;
5919
 
                                                                        vec0 += vec3;
5920
 
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
5921
 
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
5922
 
                                                                        {
5923
 
                                                                                vec0[2] = -vec0[2];
5924
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
5925
 
                                                                        }
5926
 
                                                                }
5927
 
                                                        }
5928
 
                                                } else
5929
 
                                                {
5930
 
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5931
 
                                                        {
5932
 
                                                                for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
5933
 
                                                                {
5934
 
                                                                        vec0 = o->m_pSDF->m_vaData[z4][z5];
5935
 
 
5936
 
                                                                        if (o->m_pSDF->m_bVdWSpheres)
5937
 
                                                                                o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[z4][z5]);
5938
 
                                                                                        else o->m_pSDF->m_pSDF->AddToBin(vec0);
5939
 
 
5940
 
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
5941
 
                                                                        {
5942
 
                                                                                vec0[2] = -vec0[2];
5943
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
5944
 
                                                                        }
5945
 
 
5946
 
                                                                        if (o->m_pSDF->m_bSDFMirrorBisect)
5947
 
                                                                        {
5948
 
                                                                                vec3.PointRoot(vec1,vec2,vec0);
5949
 
                                                                                vec3 -= vec0;
5950
 
                                                                                vec3 *= 2.0f;
5951
 
                                                                                vec0 += vec3;
5952
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
5953
 
                                                                                if (o->m_pSDF->m_bSDFMirrorXY)
5954
 
                                                                                {
5955
 
                                                                                        vec0[2] = -vec0[2];
5956
 
                                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
5957
 
                                                                                }
5958
 
                                                                        }
5959
 
                                                                }
5960
 
                                                        }
5961
 
                                                }
5962
 
                                        }
5963
 
 
5964
 
                                        if (g_bRevSDF)
5965
 
                                        {
5966
 
                                                vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
5967
 
                                                tf4 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])].GetLength();
5968
 
                                                o->m_pRevSDF->m_fSecondAtomPosX += tf4;
5969
 
                                                o->m_pRevSDF->m_fSecondAtomCount++;
5970
 
                                                if (o->m_bSelf)
5971
 
                                                {
5972
 
                                                        for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
5973
 
                                                        {
5974
 
                                                                vec0 = o->m_pRevSDF->m_vaData[0][z5];
5975
 
                                                                tf = fabs(Angle(vec2,vec0));
5976
 
                                                                tf2 = vec0.GetLength();
5977
 
                                                                tf3 = 1.0;
5978
 
                                                                if (o->m_pRevSDF->m_bCorrectAngle)
5979
 
                                                                {
5980
 
                                                                        if ((tf < 0.001) || (tf > Pi-0.001))
5981
 
                                                                                tf3 /= 0.001;
5982
 
                                                                                        else tf3 /= sin(tf);
5983
 
                                                                }
5984
 
                                                                if (o->m_pRevSDF->m_bCorrectRadial)
5985
 
                                                                        tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
5986
 
                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
5987
 
                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
5988
 
                                                                if (o->m_pRevSDF->m_bMirrorY)
5989
 
                                                                {
5990
 
                                                                        if (o->m_pRevSDF->m_bMirrorBond)
5991
 
                                                                        {
5992
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
5993
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
5994
 
                                                                        } else
5995
 
                                                                        {
5996
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
5997
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
5998
 
                                                                        }
5999
 
                                                                }
6000
 
                                                        }
6001
 
                                                } else
6002
 
                                                {
6003
 
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6004
 
                                                        {
6005
 
                                                                for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
6006
 
                                                                {
6007
 
                                                                        vec0 = o->m_pRevSDF->m_vaData[z4][z5];
6008
 
                                                                        tf = fabs(Angle(vec2,vec0));
6009
 
                                                                        tf2 = vec0.GetLength();
6010
 
                                                                        tf3 = 1.0;
6011
 
                                                                        if (o->m_pRevSDF->m_bCorrectAngle)
6012
 
                                                                        {
6013
 
                                                                                if ((tf < 0.001) || (tf > Pi-0.001))
6014
 
                                                                                        tf3 /= 0.001;
6015
 
                                                                                                else tf3 /= sin(tf);
6016
 
                                                                        }
6017
 
                                                                        if (o->m_pRevSDF->m_bCorrectRadial)
6018
 
                                                                                tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
6019
 
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
6020
 
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
6021
 
                                                                        if (o->m_pRevSDF->m_bMirrorY)
6022
 
                                                                        {
6023
 
                                                                                if (o->m_pRevSDF->m_bMirrorBond)
6024
 
                                                                                {
6025
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6026
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6027
 
                                                                                } else
6028
 
                                                                                {
6029
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
6030
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
6031
 
                                                                                }
6032
 
                                                                        }
6033
 
                                                                }
6034
 
                                                        }
6035
 
                                                }
6036
 
                                        } // END IF REVSDF
6037
 
 
6038
 
                                        if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
6039
 
                                        {
6040
 
                                                if (o->m_bSecondShowMol)
6041
 
                                                {
6042
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
6043
 
                                                        {
6044
 
                                                                switch(g_iObsChannel[zr])
6045
 
                                                                {
6046
 
                                                                        case 0: 
6047
 
                                                                                apfa[zr] = o->m_pRDF[zr]->m_faData; 
6048
 
                                                                                apba[zr] = o->m_pRDF[zr]->m_baDataEnabled; 
6049
 
                                                                                break;
6050
 
                                                                        case 1: 
6051
 
                                                                                apfa[zr] = o->m_pADF[zr]->m_faData; 
6052
 
                                                                                apba[zr] = o->m_pADF[zr]->m_baDataEnabled; 
6053
 
                                                                                break;
6054
 
                                                                        case 2: 
6055
 
                                                                                apfa[zr] = o->m_pDDF[zr]->m_faData; 
6056
 
                                                                                apba[zr] = o->m_pDDF[zr]->m_baDataEnabled; 
6057
 
                                                                                break;
6058
 
                                                                        case 3: 
6059
 
                                                                                apfa[zr] = o->m_pDipDF[zr]->m_faData; 
6060
 
                                                                                apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled; 
6061
 
                                                                                break;
6062
 
                                                                        case 4: 
6063
 
                                                                                apfa[zr] = o->m_pVDF[zr]->m_faData; 
6064
 
                                                                                apba[zr] = o->m_pVDF[zr]->m_baDataEnabled; 
6065
 
                                                                                break;
6066
 
                                                                        case 5: 
6067
 
                                                                                apfa[zr] = o->m_pPlDF[zr]->m_faData; 
6068
 
                                                                                apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled; 
6069
 
                                                                                break;
6070
 
                                                                        case 6: 
6071
 
                                                                                apfa[zr] = o->m_pLiDF[zr]->m_faData; 
6072
 
                                                                                apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled; 
6073
 
                                                                                break;
6074
 
                                                                }
6075
 
                                                        }
6076
 
 
6077
 
                                                        if (g_iCDFChannels == 2)
6078
 
                                                        {
6079
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
6080
 
                                                                {
6081
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6082
 
                                                                        {
6083
 
                                                                                for (z8=0;z8<o->m_iShowMol2Count;z8++)
6084
 
                                                                                {
6085
 
                                                                                        if (o->m_bExclude1eq2 && (z4 == z8))
6086
 
                                                                                                continue;
6087
 
 
6088
 
                                                                                        for (z7=0;z7<apfa[1][z8].GetSize();z7++)
6089
 
                                                                                        {
6090
 
                                                                                                if (o->m_bBinOnlyPassedAtoms)
6091
 
                                                                                                {
6092
 
                                                                                                        if ((apba[0][z4][z5] == 0) || (apba[1][z8][z7] == 0))
6093
 
                                                                                                                goto _nocdfbin2;
6094
 
                                                                                                }
6095
 
                                                                                                if (o->m_bBinOnlyNotPassedAtoms)
6096
 
                                                                                                {
6097
 
                                                                                                        if ((apba[0][z4][z5] != 0) && (apba[1][z8][z7] != 0))
6098
 
                                                                                                                goto _nocdfbin2;
6099
 
                                                                                                }
6100
 
 
6101
 
                                                                                                o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z8][z7]);
6102
 
_nocdfbin2:
6103
 
 
6104
 
                                                                                                if (o->m_pCDF->m_bDumpDat)
6105
 
                                                                                                        mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  %d;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,z5+1,apfa[0][z4][z5],apfa[1][z8][z7]);
6106
 
                                                                                        }
6107
 
                                                                                }
6108
 
                                                                        }
6109
 
                                                                }
6110
 
                                                        }
6111
 
                                                } else // IF NOT SECOND_OM
6112
 
                                                {
6113
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
6114
 
                                                        {
6115
 
                                                                switch(g_iObsChannel[zr])
6116
 
                                                                {
6117
 
                                                                        case 0: 
6118
 
                                                                                apfa[zr] = o->m_pRDF[zr]->m_faData; 
6119
 
                                                                                apba[zr] = o->m_pRDF[zr]->m_baDataEnabled; 
6120
 
                                                                                break;
6121
 
                                                                        case 1: 
6122
 
                                                                                apfa[zr] = o->m_pADF[zr]->m_faData; 
6123
 
                                                                                apba[zr] = o->m_pADF[zr]->m_baDataEnabled; 
6124
 
                                                                                break;
6125
 
                                                                        case 2: 
6126
 
                                                                                apfa[zr] = o->m_pDDF[zr]->m_faData; 
6127
 
                                                                                apba[zr] = o->m_pDDF[zr]->m_baDataEnabled; 
6128
 
                                                                                break;
6129
 
                                                                        case 3: 
6130
 
                                                                                apfa[zr] = o->m_pDipDF[zr]->m_faData; 
6131
 
                                                                                apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled; 
6132
 
                                                                                break;
6133
 
                                                                        case 4: 
6134
 
                                                                                apfa[zr] = o->m_pVDF[zr]->m_faData; 
6135
 
                                                                                apba[zr] = o->m_pVDF[zr]->m_baDataEnabled; 
6136
 
                                                                                break;
6137
 
                                                                        case 5: 
6138
 
                                                                                apfa[zr] = o->m_pPlDF[zr]->m_faData; 
6139
 
                                                                                apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled; 
6140
 
                                                                                break;
6141
 
                                                                        case 6: 
6142
 
                                                                                apfa[zr] = o->m_pLiDF[zr]->m_faData; 
6143
 
                                                                                apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled; 
6144
 
                                                                                break;
6145
 
                                                                }
6146
 
                                                        }
6147
 
 
6148
 
                                                        if (g_iCDFChannels == 2)
6149
 
                                                        {
6150
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
6151
 
                                                                {
6152
 
                                                                        ticomb = 0;
6153
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6154
 
                                                                        {
6155
 
                                                                                for (z7=0;z7<apfa[1][z4].GetSize();z7++)
6156
 
                                                                                {
6157
 
 
6158
 
                                                                                        /* Workaround for symmetrical DDFs (double data amount) */
6159
 
                                                                                        if (g_iObsChannel[0] == 2)
6160
 
                                                                                        {
6161
 
                                                                                                if (o->m_pDDF[0]->m_bSymm)
6162
 
                                                                                                {
6163
 
                                                                                                        if (g_iObsChannel[1] == 2)
6164
 
                                                                                                        {
6165
 
                                                                                                                if (o->m_pDDF[1]->m_bSymm)
6166
 
                                                                                                                {
6167
 
                                                                                                                        if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6168
 
                                                                                                                                continue;
6169
 
                                                                                                                        goto _ddfsymmdone;
6170
 
                                                                                                                }
6171
 
                                                                                                        }
6172
 
                                                                                                }
6173
 
                                                                                                if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6174
 
                                                                                                        continue;
6175
 
                                                                                        } else
6176
 
                                                                                        {
6177
 
                                                                                                if (g_iObsChannel[1] == 2)
6178
 
                                                                                                {
6179
 
                                                                                                        if (o->m_pDDF[1]->m_bSymm)
6180
 
                                                                                                        {
6181
 
                                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6182
 
                                                                                                                        continue;
6183
 
                                                                                                                goto _ddfsymmdone;
6184
 
                                                                                                        }
6185
 
                                                                                                }
6186
 
                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6187
 
                                                                                                        continue;
6188
 
                                                                                        }
6189
 
_ddfsymmdone:
6190
 
 
6191
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6192
 
                                                                                        {
6193
 
                                                                                                if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
6194
 
                                                                                                        goto _nocdfbin;
6195
 
                                                                                        }
6196
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6197
 
                                                                                        {
6198
 
                                                                                                if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
6199
 
                                                                                                        goto _nocdfbin;
6200
 
                                                                                        }
6201
 
                                                                                        o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
6202
 
_nocdfbin:;
6203
 
                                                                                        if (o->m_pCDF->m_bDumpDat)
6204
 
                                                                                                mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z7]);
6205
 
                                                                                        if (o->m_bTimeDev)
6206
 
                                                                                        {
6207
 
                                                                                                ti = o->m_waSaveShowList.GetPosition(z4);
6208
 
                                                                                                if ((ti2 != -1) && (ti != -1))
6209
 
                                                                                                {
6210
 
                                                                                                        if (o->m_bSaveSeparateFiles)
6211
 
                                                                                                                mfprintf(o->m_pCDF->m_fTimeDev[ti2],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6212
 
                                                                                                                        else mfprintf(o->m_pCDF->m_fTimeDev[0],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6213
 
                                                                                                        if (o->m_pCDF->m_bTDAnimation)
6214
 
                                                                                                                o->m_pCDF->m_pTDAPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pCDF->m_iCombinationsEnabled+ticomb,apfa[0][z4][z5],apfa[1][z4][z7]);
6215
 
                                                                                                }
6216
 
                                                                                                ticomb++;
6217
 
                                                                                        }
6218
 
                                                                                }
6219
 
                                                                        }
6220
 
                                                                }
6221
 
                                                                if (o->m_bTimeDev && (ti2 != -1))
6222
 
                                                                {
6223
 
                                                                        if (o->m_bSaveSeparateFiles)
6224
 
                                                                                mfprintf(o->m_pCDF->m_fTimeDev[ti2],"\n");
6225
 
                                                                                        else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6226
 
                                                                                                mfprintf(o->m_pCDF->m_fTimeDev[0],"\n");
6227
 
                                                                }
6228
 
                                                        } // END IF CHANNELS == 2
6229
 
 
6230
 
                                                        if (g_iCDFChannels == 3)
6231
 
                                                        {
6232
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
6233
 
                                                                {
6234
 
                                                                        ticomb = 0;
6235
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6236
 
                                                                        {
6237
 
                                                                                for (z8=0;z8<apfa[1][z4].GetSize();z8++)
6238
 
                                                                                {
6239
 
                                                                                        for (z7=0;z7<apfa[2][z4].GetSize();z7++)
6240
 
                                                                                        {
6241
 
                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]*o->m_pCDF->m_iCombinations[2]+z8*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6242
 
                                                                                                        continue;
6243
 
                                                                                                if (o->m_bBinOnlyPassedAtoms)
6244
 
                                                                                                {
6245
 
                                                                                                        if ((apba[0][z4][z5] == 0) || (apba[1][z4][z8] == 0) || (apba[2][z4][z7] == 0))
6246
 
                                                                                                                goto _3nocdfbin;
6247
 
                                                                                                }
6248
 
                                                                                                if (o->m_bBinOnlyNotPassedAtoms)
6249
 
                                                                                                {
6250
 
                                                                                                        if ((apba[0][z4][z5] != 0) && (apba[1][z4][z8] != 0) && (apba[2][z4][z7] != 0))
6251
 
                                                                                                                goto _3nocdfbin;
6252
 
                                                                                                }
6253
 
                                                                                                o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6254
 
 
6255
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[0]->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8]);
6256
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[1]->AddToBin(apfa[0][z4][z5],apfa[2][z4][z7]);
6257
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[2]->AddToBin(apfa[1][z4][z8],apfa[2][z4][z7]);
6258
 
_3nocdfbin:;
6259
 
                                                                                                if (o->m_pCDF->m_bDumpDat)
6260
 
                                                                                                        mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6261
 
                                                                                        }
6262
 
                                                                                }
6263
 
                                                                        }
6264
 
                                                                }
6265
 
                                                        } // END IF CHANNELS == 3
6266
 
                                                } // IF NOT SECOND_OM
6267
 
                                        } // IF CDF
6268
 
 
6269
 
                                        for (zr=0;zr<g_iCDFChannels;zr++)
6270
 
                                        {
6271
 
                                                if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6272
 
                                                {
6273
 
                                                        if (o->m_bOthers)
6274
 
                                                        {
6275
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6276
 
                                                                {
6277
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6278
 
                                                                        {
6279
 
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6280
 
                                                                                {
6281
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6282
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6283
 
                                                                                                        continue;
6284
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6285
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6286
 
                                                                                                        continue;
6287
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6288
 
                                                                                }
6289
 
                                                                        }
6290
 
                                                                } else
6291
 
                                                                {
6292
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6293
 
                                                                        {
6294
 
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6295
 
                                                                                {
6296
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6297
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6298
 
                                                                                                        continue;
6299
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6300
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6301
 
                                                                                                        continue;
6302
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6303
 
                                                                                }
6304
 
                                                                        }
6305
 
                                                                }
6306
 
                                                        } else
6307
 
                                                        {
6308
 
                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[0].GetSize();z5++)
6309
 
                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[0][z5]);
6310
 
                                                        }
6311
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
6312
 
                                                        {
6313
 
                                                                if (o->m_bSaveSeparateFiles)
6314
 
                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"\n");
6315
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6316
 
                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[0],"\n");
6317
 
                                                        }
6318
 
                                                }
6319
 
 
6320
 
                                                if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6321
 
                                                {
6322
 
                                                        if (o->m_bOthers)
6323
 
                                                        {
6324
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6325
 
                                                                {
6326
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6327
 
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6328
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6329
 
                                                                } else
6330
 
                                                                {
6331
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6332
 
                                                                        {
6333
 
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6334
 
                                                                                {
6335
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6336
 
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
6337
 
                                                                                                        continue;
6338
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6339
 
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
6340
 
                                                                                                        continue;
6341
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6342
 
                                                                                }
6343
 
                                                                        }
6344
 
                                                                }
6345
 
                                                        } else
6346
 
                                                        {
6347
 
                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[0].GetSize();z5++)
6348
 
                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[0][z5]);
6349
 
                                                        }
6350
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
6351
 
                                                        {
6352
 
                                                                if (o->m_bSaveSeparateFiles)
6353
 
                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"\n");
6354
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6355
 
                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"\n");
6356
 
                                                        }
6357
 
                                                }
6358
 
 
6359
 
                                                if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6360
 
                                                {
6361
 
                                                        if (o->m_bOthers)
6362
 
                                                        {
6363
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6364
 
                                                                {
6365
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6366
 
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6367
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6368
 
                                                                } else
6369
 
                                                                {
6370
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6371
 
                                                                        {
6372
 
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6373
 
                                                                                {
6374
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6375
 
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
6376
 
                                                                                                        continue;
6377
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6378
 
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
6379
 
                                                                                                        continue;
6380
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6381
 
                                                                                }
6382
 
                                                                        }
6383
 
                                                                }
6384
 
                                                        } else
6385
 
                                                        {
6386
 
                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[0].GetSize();z5++)
6387
 
                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[0][z5]);
6388
 
                                                        }
6389
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
6390
 
                                                        {
6391
 
                                                                if (o->m_bSaveSeparateFiles)
6392
 
                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"\n");
6393
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6394
 
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"\n");
6395
 
                                                        }
6396
 
                                                }
6397
 
 
6398
 
                                                if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6399
 
                                                {
6400
 
                                                        if (o->m_bOthers)
6401
 
                                                        {
6402
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6403
 
                                                                {
6404
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6405
 
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6406
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6407
 
                                                                } else
6408
 
                                                                {
6409
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6410
 
                                                                        {
6411
 
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6412
 
                                                                                {
6413
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6414
 
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
6415
 
                                                                                                        continue;
6416
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6417
 
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
6418
 
                                                                                                        continue;
6419
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6420
 
                                                                                }
6421
 
                                                                        }
6422
 
                                                                }
6423
 
                                                        } else
6424
 
                                                        {
6425
 
                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[0].GetSize();z5++)
6426
 
                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[0][z5]);
6427
 
                                                        }
6428
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
6429
 
                                                        {
6430
 
                                                                if (o->m_bSaveSeparateFiles)
6431
 
                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"\n");
6432
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6433
 
                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[0],"\n");
6434
 
                                                        }
6435
 
                                                }
6436
 
 
6437
 
                                                if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6438
 
                                                {
6439
 
                                                        if (o->m_bOthers)
6440
 
                                                        {
6441
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6442
 
                                                                {
6443
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6444
 
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6445
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6446
 
                                                                } else
6447
 
                                                                {
6448
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6449
 
                                                                        {
6450
 
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6451
 
                                                                                {
6452
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6453
 
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
6454
 
                                                                                                        continue;
6455
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6456
 
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
6457
 
                                                                                                        continue;
6458
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6459
 
                                                                                }
6460
 
                                                                        }
6461
 
                                                                }
6462
 
                                                        } else
6463
 
                                                        {
6464
 
                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[0].GetSize();z5++)
6465
 
                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[0][z5]);
6466
 
                                                        }
6467
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
6468
 
                                                        {
6469
 
                                                                if (o->m_bSaveSeparateFiles)
6470
 
                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"\n");
6471
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6472
 
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"\n");
6473
 
                                                        }
6474
 
                                                } // End IF DDF
6475
 
 
6476
 
                                                if (g_bPlDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pPlDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6477
 
                                                {
6478
 
                                                        if (o->m_bOthers)
6479
 
                                                        {
6480
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6481
 
                                                                {
6482
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6483
 
                                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6484
 
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6485
 
                                                                } else
6486
 
                                                                {
6487
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6488
 
                                                                        {
6489
 
                                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6490
 
                                                                                {
6491
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6492
 
                                                                                                if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] == 0)
6493
 
                                                                                                        continue;
6494
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6495
 
                                                                                                if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] != 0)
6496
 
                                                                                                        continue;
6497
 
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6498
 
                                                                                }
6499
 
                                                                        }
6500
 
                                                                }
6501
 
                                                        } else
6502
 
                                                        {
6503
 
                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[0].GetSize();z5++)
6504
 
                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[0][z5]);
6505
 
                                                        }
6506
 
                                                } // End IF PlDF
6507
 
 
6508
 
                                                if (g_bLiDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pLiDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6509
 
                                                {
6510
 
                                                        if (o->m_bOthers)
6511
 
                                                        {
6512
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
6513
 
                                                                {
6514
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
6515
 
                                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6516
 
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6517
 
                                                                } else
6518
 
                                                                {
6519
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
6520
 
                                                                        {
6521
 
                                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6522
 
                                                                                {
6523
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
6524
 
                                                                                                if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] == 0)
6525
 
                                                                                                        continue;
6526
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
6527
 
                                                                                                if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] != 0)
6528
 
                                                                                                        continue;
6529
 
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6530
 
                                                                                }
6531
 
                                                                        }
6532
 
                                                                }
6533
 
                                                        } else
6534
 
                                                        {
6535
 
                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[0].GetSize();z5++)
6536
 
                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[0][z5]);
6537
 
                                                        }
6538
 
                                                } // End IF LiDF
6539
 
 
6540
 
                                        } // FOR CDFChannels
6541
 
 
6542
 
                                } // Ende FOR g_oaObserv.GetSize
6543
 
                        } // Ende IF [blabla]   
6544
 
        
6545
 
                        if (g_bMiddleAvg) // Referenzmolekuel mitteln
6546
 
                        {
6547
 
                                cc = 0;
6548
 
                                ti2 = (g_iSteps-2)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()+z2;
6549
 
                                // Jeden Atomtyp des Zielmolekuels durchgehen
6550
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
6551
 
                                {
6552
 
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
6553
 
                                        {
6554
 
                                                // Atome vertauschen, aber nicht im allerersten Durchgang hier, und nur wenn mehr als 1 Atom dieser Sorte
6555
 
                                                if ((g_iSwapAtoms) && (ti2 != 0) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3]>1))
6556
 
                                                {
6557
 
                                                        vec4 = g_pRefMol[cc];
6558
 
                                                        vec4 /= (float)ti2; // der bisherige Mittelwert des Referenzmolekuels
6559
 
                                                        tf = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],vec4); // der Abstand dieses Atoms von seinem Aequivalent im Referenzmolekuel
6560
 
                                                        ti3 = -1;
6561
 
                                                        for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
6562
 
                                                        {
6563
 
                                                                tf2 = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z5)],vec4);
6564
 
                                                                if (tf2 < tf) // Das andere Atom ist naeher am Platz im Referenzmolekuel als das eigentlich vorgesehene
6565
 
                                                                {
6566
 
                                                                        ti3 = z5;
6567
 
                                                                        tf = tf2;
6568
 
                                                                }
6569
 
                                                        }
6570
 
                                                        if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
6571
 
                                                        {
6572
 
                                                                Swap(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(ti3)]);
6573
 
                                                                pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+(cc-z4+ti3)] += 1;
6574
 
                                                                pSwapMatrix[(cc-z4+ti3)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc] += 1;
6575
 
                                                        }
6576
 
                                                } // Ende IF SwapAtoms
6577
 
                                                g_pRefMol[cc] += g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)];
6578
 
                                                cc++;
6579
 
                                        } // Ende FOR Atom des Referenzmolekuels
6580
 
                                } // Ende FOR Atomtyp des Referenzmolekuels
6581
 
                        } // Ende IF Referenzmolekuel mitteln
6582
 
                } // Ende FOR RefMol (z2)
6583
 
 
6584
 
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
6585
 
                {
6586
 
                        o = (CObservation*)g_oaObserv[z6];
6587
 
 
6588
 
                        if (o->m_pConditions != NULL)
6589
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6590
 
                                        if (o->m_pConditions->m_iPassCounter[z2] != 0)
6591
 
                                                o->m_pConditions->m_iOMPassCounter[z2]++;
6592
 
 
6593
 
                        if (o->m_pConditionsOM2 != NULL)
6594
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6595
 
                                        if (o->m_pConditionsOM2->m_iPassCounter[z2] != 0)
6596
 
                                                o->m_pConditionsOM2->m_iOMPassCounter[z2]++;
6597
 
 
6598
 
                        if (g_bRDF)
6599
 
                        {
6600
 
                                for (zr=0;zr<g_iCDFChannels;zr++)
6601
 
                                {
6602
 
                                        if (o->m_pRDF[zr] != NULL)
6603
 
                                                if (o->m_pRDF[zr]->m_bCalcSD)
6604
 
                                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishStep();
6605
 
                                }
6606
 
                        }
6607
 
                }
6608
 
 
6609
 
 
6610
 
//_end:;
6611
 
_endstep:
6612
 
_norefmol:
6613
 
                if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
6614
 
                {
6615
 
                        mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
6616
 
                        break;
6617
 
                }
6618
 
        } // Ende while
6619
 
 
6620
 
/*************************************************************************
6621
 
*************** Ende Hauptschleife ***************************************
6622
 
*************************************************************************/
6623
 
 
6624
 
//      fclose(fff);
6625
 
 
6626
 
_endmainloop:
6627
 
        if (g_bUseVelocities)
6628
 
                g_iSteps -= 2;
6629
 
 
6630
 
        mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
6631
 
 
6632
 
        if (g_iStride != 1)
6633
 
                mprintf("\n%d time steps processed (every %dth from %d).\n\n",g_iSteps/g_iStride,g_iStride,g_iSteps);
6634
 
                        else mprintf("\n%d time steps processed.\n\n",g_iSteps);
6635
 
 
6636
 
        fclose(g_fPos);
6637
 
        if (g_fVel != NULL)
6638
 
                fclose(g_fVel);
6639
 
        if (g_fForce != NULL)
6640
 
                fclose(g_fForce);
6641
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
6642
 
                fclose(g_fNPTFile);
6643
 
 
6644
 
        if (g_bDipole && g_bDumpDipoleVector)
6645
 
        {
6646
 
                fclose(g_fDumpDipole);
6647
 
                mprintf("    Dipole vectors written to file \"dipole_vectors.csv\".\n");
6648
 
                if (g_bDumpDipoleXYZ)
6649
 
                {
6650
 
                        fclose(g_fDumpDipoleXYZ);
6651
 
                        mprintf("    Dipole XYZ trajectory written to file \"dipole_vectors.xyz\".\n");
6652
 
                }
6653
 
                mprintf("\n");
6654
 
        }
6655
 
 
6656
 
 
6657
 
        /************ Interface **************/
6658
 
        Interface_AfterAnalysis();
6659
 
 
6660
 
 
6661
 
        if (g_bVoro)
6662
 
        {
6663
 
                g_pVoroWrapper->Finish();
6664
 
        }
6665
 
 
6666
 
        if (g_bVoid)
6667
 
        {
6668
 
                g_pVoroAnalysis->Finish();
6669
 
        }
6670
 
 
6671
 
        if (g_bReact)
6672
 
        {
6673
 
                if (!ReactSecondRun)
6674
 
                {
6675
 
                        g_pReact->Finish();
6676
 
                        g_pReact->DumpMolecules();
6677
 
                        g_pReact->CreateOutput();
6678
 
                }
6679
 
                if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
6680
 
                {
6681
 
                        if (!ReactSecondRun)
6682
 
                        {
6683
 
                                mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
6684
 
                                ReactSecondRun = true;
6685
 
                                goto _beginmain;
6686
 
                        } else
6687
 
                        {
6688
 
                                mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
6689
 
                        }
6690
 
                }
6691
 
        }
6692
 
        g_bAbortAnalysis = true;
6693
 
 
6694
 
        if (g_bSaveCondSnapshot)
6695
 
        {
6696
 
                fclose(g_fSaveCondFile);
6697
 
                mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
6698
 
        }
6699
 
 
6700
 
        if (g_bMicroHet)
6701
 
        {
6702
 
                mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
6703
 
                for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
6704
 
                {
6705
 
                        mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
6706
 
                        mprintf(WHITE,"  * Observation %d: %s\n",z+1,mho->m_sName);
6707
 
 
6708
 
                        if (mho->m_bCSV)
6709
 
                        {
6710
 
        /*                      mprintf("      Creating Microheterogeneity plot...\n");
6711
 
                                sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
6712
 
                                mho->BuildSlices(buf);*/
6713
 
 
6714
 
                                mprintf("      Creating entry plot...\n");
6715
 
                                sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
6716
 
                                mho->BuildZeroPlot(buf,true);
6717
 
                        }
6718
 
 
6719
 
                        if (mho->m_bCDF)
6720
 
                        {
6721
 
                                if (mho->m_bCDF_Dens)
6722
 
                                        mho->BuildCDF(0,z,multibuf);
6723
 
 
6724
 
                                if (mho->m_bCDF_Tot)
6725
 
                                        mho->BuildCDF(1,z,multibuf);
6726
 
 
6727
 
                                if (mho->m_bCDF_Mode3)
6728
 
                                        mho->BuildCDF(2,z,multibuf);
6729
 
                        }
6730
 
                }
6731
 
                mprintf("\n");
6732
 
        }
6733
 
 
6734
 
        if (g_bClusterAnalysis)
6735
 
        {
6736
 
                mprintf(WHITE,"*** Cluster Analysis\n\n");
6737
 
                g_pClusterAnalysis->BuildClusterDistribution();
6738
 
                g_pClusterAnalysis->WriteOutput(multibuf);
6739
 
        }
6740
 
 
6741
 
        if (g_bFESA)
6742
 
        {
6743
 
                mprintf(WHITE,"*** FES Analysis\n\n");
6744
 
                g_pFESA->Finish();
6745
 
        }
6746
 
 
6747
 
/*      if (g_bSFac)
6748
 
        {
6749
 
                g_pSFac->Finish();
6750
 
        }*/
6751
 
 
6752
 
        if (g_bBondACF)
6753
 
        {
6754
 
                mprintf(WHITE,"*** Bond autocorrelation function\n");
6755
 
                if (g_bBondACFDebug)
6756
 
                {
6757
 
                        mprintf("    Writing \"bondacf.agr\"...\n");
6758
 
 
6759
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
6760
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6761
 
                        
6762
 
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6763
 
                        gc->SetRangeY(0,250);
6764
 
                        gc->MakeTicks();
6765
 
                        gc->SetLabelX("Time [ps]");
6766
 
                        gc->SetLabelY("Bond length [pm]");
6767
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6768
 
                        {
6769
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6770
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6771
 
                                {
6772
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
6773
 
                                        gc->AddDataset();
6774
 
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
6775
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6776
 
                                }
6777
 
                        }
6778
 
                        gc->WriteAgr("bondacf.agr",false);
6779
 
                        delete gc;
6780
 
                }
6781
 
                mprintf("    Differentiating bond length developments...\n");
6782
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6783
 
                {
6784
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6785
 
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6786
 
                        {
6787
 
                                bond = (CMolBond*)sm->m_oaBonds[z3];
6788
 
                                for (z4=0;z4<bond->m_faData.GetSize()-1;z4++)
6789
 
                                        bond->m_faData[z4] = bond->m_faData[z4+1] - bond->m_faData[z4];
6790
 
                        }
6791
 
                }
6792
 
                if (g_bBondACFDebug)
6793
 
                {
6794
 
                        mprintf("    Writing \"bondacf_diff.agr\"...\n");
6795
 
 
6796
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
6797
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6798
 
                        
6799
 
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6800
 
                        gc->SetRangeY(-15,15);
6801
 
                        gc->MakeTicks();
6802
 
                        gc->SetLabelX("Time [ps]");
6803
 
                        gc->SetLabelY("Bond length change rate");
6804
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6805
 
                        {
6806
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6807
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6808
 
                                {
6809
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
6810
 
                                        gc->AddDataset();
6811
 
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
6812
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6813
 
                                }
6814
 
                        }
6815
 
                        gc->WriteAgr("bondacf_diff.agr",false);
6816
 
                        delete gc;
6817
 
                }
6818
 
                mprintf("    Autocorrelating bond length developments...\n");
6819
 
                mprintf(WHITE,"      [");
6820
 
                tfs = 0;
6821
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6822
 
                {
6823
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6824
 
                        tfs += sm->m_oaBonds.GetSize();
6825
 
                }
6826
 
                tfs /= 60.0;
6827
 
                ti2 = 0;
6828
 
/*              fft = new CFFT();
6829
 
                fft->PrepareFFT_C2C(g_iSteps*2);
6830
 
                fft2 = new CFFT();
6831
 
                fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
6832
 
 
6833
 
                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6834
 
                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6835
 
                
6836
 
                ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
6837
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6838
 
                {
6839
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6840
 
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6841
 
                        {
6842
 
                                if (fmod(ti2,tfs) < 1.0)
6843
 
                                        mprintf(WHITE,"#");
6844
 
                                bond = (CMolBond*)sm->m_oaBonds[z3];
6845
 
                                ac->AutoCorrelate(&bond->m_faData,&tempfa);
6846
 
                                bond->m_faData.CopyFrom(&tempfa);
6847
 
                                ti2++;
6848
 
                        }
6849
 
                }
6850
 
                delete ac;
6851
 
                mprintf(WHITE,"]\n");
6852
 
                if (g_bBondACFDebug)
6853
 
                {
6854
 
                        mprintf("    Writing \"bondacf_autocorr.agr\"...\n");
6855
 
 
6856
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
6857
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6858
 
                        
6859
 
                        gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
6860
 
                        gc->SetRangeY(-25,25);
6861
 
                        gc->MakeTicks();
6862
 
                        gc->SetLabelX("Time [ps]");
6863
 
                        gc->SetLabelY("ACF(Bond length change rate)");
6864
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6865
 
                        {
6866
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6867
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6868
 
                                {
6869
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
6870
 
                                        gc->AddDataset();
6871
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6872
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6873
 
                                }
6874
 
                        }
6875
 
                        gc->WriteAgr("bondacf_autocorr.agr",false);
6876
 
                        delete gc;
6877
 
                }
6878
 
                mprintf("    Merging equivalent Bonds...\n");
6879
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6880
 
                {
6881
 
                        m = (CMolecule*)g_oaMolecules[z0];
6882
 
                        sm2 = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6883
 
                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
6884
 
                        {
6885
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
6886
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6887
 
                                {
6888
 
                                        bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
6889
 
                                        for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
6890
 
                                        {
6891
 
                                                bond = (CMolBond*)bg->m_oaBonds[z4];
6892
 
                                                for (z5=0;z5<g_iBondACFDepth;z5++)
6893
 
                                                        ((CMolBond*)((CMolBondGroup*)sm2->m_oaBondGroups[z3])->m_oaBonds[0])->m_faData[z5] += bond->m_faData[z5];
6894
 
                                        }
6895
 
                                }
6896
 
                        }
6897
 
                }
6898
 
                if (g_bBondACFSymmetrize)
6899
 
                {
6900
 
                        mprintf("    Symmetrizing bond ACFs...\n");
6901
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6902
 
                        {
6903
 
                                m = (CMolecule*)g_oaMolecules[z0];
6904
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6905
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6906
 
                                {
6907
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6908
 
                                        bond->m_faData.SetSize(2*g_iBondACFDepth);
6909
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6910
 
                                                bond->m_faData[z4+g_iBondACFDepth] = bond->m_faData[z4];
6911
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6912
 
                                                bond->m_faData[z4] = bond->m_faData[2*g_iBondACFDepth-z4-1];
6913
 
                                }
6914
 
                        }
6915
 
                        g_iBondACFDepth *= 2;
6916
 
                }
6917
 
                if (g_bBondACFWindow)
6918
 
                {
6919
 
                        mprintf("    Applying Window Function...\n");
6920
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6921
 
                        {
6922
 
                                m = (CMolecule*)g_oaMolecules[z0];
6923
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6924
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6925
 
                                {
6926
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6927
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6928
 
                                                bond->m_faData[z4] *= (float)pow(sin(z4*Pi/(bond->m_faData.GetSize()-1)),2);
6929
 
                                }
6930
 
                        }
6931
 
                }
6932
 
                if (g_bBondACFNormalize)
6933
 
                {
6934
 
                        mprintf("    Normalizing bond ACFs...\n");
6935
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6936
 
                        {
6937
 
                                m = (CMolecule*)g_oaMolecules[z0];
6938
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6939
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6940
 
                                {
6941
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6942
 
                                        tf = 0;
6943
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6944
 
                                                if (tf < bond->m_faData[z4])
6945
 
                                                        tf = bond->m_faData[z4];
6946
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
6947
 
                                                bond->m_faData[z4] /= (float)tf;
6948
 
                                }
6949
 
                        }
6950
 
                }
6951
 
                mprintf("    Writing \"bondacf_ac_merged.agr\"...\n");
6952
 
 
6953
 
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
6954
 
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6955
 
                
6956
 
                gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
6957
 
                gc->SetRangeY(-200,200);
6958
 
                gc->MakeTicks();
6959
 
                gc->SetLabelX("Time [ps]");
6960
 
                gc->SetLabelY("Sum ACF(Bond length change rate)");
6961
 
                gc->CurrentGraph()->m_bLegend = true;
6962
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6963
 
                {
6964
 
                        m = (CMolecule*)g_oaMolecules[z0];
6965
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6966
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6967
 
                        {
6968
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6969
 
                                gc->AddDataset();
6970
 
                                sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
6971
 
                                gc->SetDatasetName(buf);
6972
 
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
6973
 
                                for (z4=0;z4<g_iBondACFDepth;z4++)
6974
 
                                        gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6975
 
                        }
6976
 
                }
6977
 
                gc->WriteAgr("bondacf_ac_merged.agr",false);
6978
 
                delete gc;
6979
 
                mprintf("    Applying Fourier Transformation...\n");
6980
 
 
6981
 
                try { fft = new CFFT(); } catch(...) { fft = NULL; }
6982
 
                if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6983
 
                
6984
 
                fft->PrepareFFT_C2C(g_iBondACFDepth);
6985
 
                tf3 = 0;
6986
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6987
 
                {
6988
 
                        m = (CMolecule*)g_oaMolecules[z0];
6989
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6990
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6991
 
                        {
6992
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6993
 
                                for (z4=0;z4<g_iBondACFDepth;z4++)
6994
 
                                {
6995
 
                                        fft->m_pInput[z4*2] = bond->m_faData[z4];
6996
 
                                        fft->m_pInput[z4*2+1] = 0;
6997
 
                                }
6998
 
                                fft->DoFFT();
6999
 
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
7000
 
                                {
7001
 
                                        bond->m_faData[z4] = (float)(pow(fft->m_pOutput[z4*2],2) + pow(fft->m_pOutput[z4*2+1],2)) / g_iBondACFDepth;
7002
 
                                        if (bond->m_faData[z4] > tf3)
7003
 
                                                tf3 = bond->m_faData[z4];
7004
 
                                }
7005
 
                        }
7006
 
                }
7007
 
                delete fft;
7008
 
                mprintf("    Writing \"bond_spectrum.agr\"...\n");
7009
 
 
7010
 
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
7011
 
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7012
 
                
7013
 
                gc->SetRangeX(0,4000.0);
7014
 
                gc->SetRangeY(0,tf3*1.1);
7015
 
                gc->MakeTicks();
7016
 
                gc->SetLabelX("Wave number [1/cm]");
7017
 
                gc->SetLabelY("Intensity");
7018
 
                gc->CurrentGraph()->m_bInvertXAxis = true;
7019
 
                gc->CurrentGraph()->m_bLegend = true;
7020
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7021
 
                {
7022
 
                        m = (CMolecule*)g_oaMolecules[z0];
7023
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7024
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7025
 
                        {
7026
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7027
 
                                gc->AddDataset();
7028
 
                                sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7029
 
                                gc->SetDatasetName(buf);
7030
 
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
7031
 
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
7032
 
                                        gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,bond->m_faData[z4]);
7033
 
                        }
7034
 
                }
7035
 
                gc->WriteAgr("bond_spectrum.agr",false);
7036
 
                delete gc;
7037
 
                for (z5=1;z5<5;z5++)
7038
 
                {
7039
 
                        mprintf("    Smoothing spectrum, degree %d...\n",z5);
7040
 
                        mprintf("    Writing \"bond_spectrum_s%d.agr\"...\n",z5);
7041
 
 
7042
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
7043
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7044
 
                        
7045
 
                        gc->SetRangeX(0,4000.0);
7046
 
                        gc->SetRangeY(0,tf3*1.1);
7047
 
                        gc->MakeTicks();
7048
 
                        gc->SetLabelX("Wave number [1/cm]");
7049
 
                        gc->SetLabelY("Intensity");
7050
 
                        gc->CurrentGraph()->m_bInvertXAxis = true;
7051
 
                        gc->CurrentGraph()->m_bLegend = true;
7052
 
 
7053
 
                        try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
7054
 
                        if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7055
 
                        
7056
 
                        gc2->SetRangeX(0,4000.0);
7057
 
                        gc2->SetRangeY(0,tf3*1.1);
7058
 
                        gc2->MakeTicks();
7059
 
                        gc2->SetLabelX("Wave number [1/cm]");
7060
 
                        gc2->SetLabelY("Intensity");
7061
 
                        gc2->CurrentGraph()->m_bInvertXAxis = true;
7062
 
                        gc2->CurrentGraph()->m_bLegend = true;
7063
 
                        
7064
 
                        tempfa.SetSize(g_iBondACFDepth/2);
7065
 
                        tempfa2.SetSize(g_iBondACFDepth/2);
7066
 
 
7067
 
                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
7068
 
                                tempfa2[z4] = 0;
7069
 
 
7070
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7071
 
                        {
7072
 
                                m = (CMolecule*)g_oaMolecules[z0];
7073
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7074
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7075
 
                                {
7076
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7077
 
 
7078
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
7079
 
                                        {
7080
 
                                                tf = 0;
7081
 
                                                tf2 = 0;
7082
 
                                                for (z6=-z5;z6<=z5;z6++)
7083
 
                                                {
7084
 
                                                        if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
7085
 
                                                                continue;
7086
 
                                                        tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
7087
 
                                                        tf2 += 1.0 / (pow((double)z6,2)+1.0);
7088
 
                                                }
7089
 
                                                tempfa[z4] = (float)(tf / tf2);
7090
 
                                                tempfa2[z4] += tempfa[z4];
7091
 
                                        }
7092
 
 
7093
 
                                        gc->AddDataset();
7094
 
                                        gc2->AddDataset();
7095
 
                                        sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7096
 
                                        gc->SetDatasetName(buf);
7097
 
                                        gc2->SetDatasetName(buf);
7098
 
                                        ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7099
 
                                        ((CGraceDataset*)gc2->CurrentGraph()->m_oaDatasets[gc2->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7100
 
 
7101
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
7102
 
                                                gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa[z4]);
7103
 
 
7104
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
7105
 
                                                gc2->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa2[z4]);
7106
 
                                }
7107
 
                        }
7108
 
        
7109
 
                        sprintf(buf,"bond_spectrum_s%d.agr",z5);
7110
 
                        gc->WriteAgr(buf,false);
7111
 
                        delete gc;
7112
 
 
7113
 
                        mprintf("    Writing \"bond_spectrum_cumulative_s%d.agr\"...\n",z5);
7114
 
                        sprintf(buf,"bond_spectrum_cumulative_s%d.agr",z5);
7115
 
                        gc2->WriteAgr(buf,false);
7116
 
                        delete gc2;
7117
 
                }
7118
 
        }
7119
 
 
7120
 
        if (g_bSaveRefEnv)
7121
 
        {
7122
 
                fclose(g_fRefEnv);
7123
 
                mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
7124
 
                if (g_bTDO)
7125
 
                {
7126
 
#ifdef TARGET_WINDOWS
7127
 
                        sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7128
 
#else
7129
 
                        sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7130
 
#endif
7131
 
                        mprintf("Saving TDO PyMol script as %s.\n",buf);
7132
 
                        tfi = OpenFileWrite(buf,true);
7133
 
#ifdef TARGET_WINDOWS
7134
 
                        mfprintf(tfi,"pymolwin ");
7135
 
#else
7136
 
                        mfprintf(tfi,"pymol ");
7137
 
#endif
7138
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
7139
 
                                mfprintf(tfi,"tdo_%s_%d_%06d%s.xyz ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],multibuf);
7140
 
                        mfprintf(tfi,"-d \"set sphere_scale,0.25\" ");
7141
 
                        mfprintf(tfi,"-d \"set stick_radius,0.17\" ");
7142
 
                        mfprintf(tfi,"-d \"set ray_trace_mode,1\" ");
7143
 
                        mfprintf(tfi,"-d \"set fog,0\" ");
7144
 
                        mfprintf(tfi,"-d \"set ray_trace_fog,0\" ");
7145
 
                        mfprintf(tfi,"-d \"set bg_rgb,(1,1,1)\" ");
7146
 
                        mfprintf(tfi,"-d \"set ray_shadow,0\" ");
7147
 
                        mfprintf(tfi,"-d \"set ray_shadows,0\" ");
7148
 
                        mfprintf(tfi,"-d \"set ray_interior_shadows,0\" ");
7149
 
                        mfprintf(tfi,"-d \"show sticks; show spheres\" ");
7150
 
                        
7151
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
7152
 
                        {
7153
 
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7154
 
                                {
7155
 
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7156
 
                                                continue;
7157
 
                                        mfprintf(tfi,"-d \"set_color mol_%s_%d, [%d,%d,%d]\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CAtom*)g_oaAtoms[z2])->m_pElement->ColorR((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorG((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorB((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching));
7158
 
                                }
7159
 
                        }
7160
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
7161
 
                        {
7162
 
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7163
 
                                {
7164
 
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7165
 
                                                continue;
7166
 
                                        mfprintf(tfi,"-d \"color mol_%s_%d, tdo_%s_%d_%06d and name %s\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],((CAtom*)g_oaAtoms[z2])->m_sName);
7167
 
                                }
7168
 
                        }
7169
 
                        mfprintf(tfi,"\n");
7170
 
                        fclose(tfi);
7171
 
#ifdef TARGET_LINUX
7172
 
                        sprintf(buf,"chmod 755 tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7173
 
                        mprintf("Executing \"%s\"...\n",buf);
7174
 
                        system(buf);
7175
 
#endif
7176
 
                }
7177
 
        }
7178
 
        if (g_bCutCluster)
7179
 
        {
7180
 
                fclose(g_fRefEnv);
7181
 
                mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
7182
 
        }
7183
 
 
7184
 
        if (g_bSaveJustTraj)
7185
 
        {
7186
 
                fclose(g_fSaveJustTraj);
7187
 
/*              strcpy(buf,g_sInputTraj);
7188
 
                p = strrchr(buf,'.');
7189
 
                *p = 0;
7190
 
                strcat(buf,multibuf);
7191
 
                strcat(buf,".out.xyz");*/
7192
 
//              mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
7193
 
        }
7194
 
 
7195
 
        if (g_bIRSpec && g_bGlobalIR)
7196
 
        {
7197
 
                mprintf(WHITE,"\n*** Global IR Spectrum\n");
7198
 
                g_pGlobalIR->Finish(multibuf);
7199
 
        }
7200
 
 
7201
 
        if (g_bVACF && g_bGlobalVACF)
7202
 
        {
7203
 
                mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
7204
 
                if (g_pGlobalVACF->m_bDerivative)
7205
 
                {
7206
 
                        mprintf("    Deriving velocities...\n");
7207
 
                        mprintf(WHITE,"      [");
7208
 
                        tfs = g_iGesAtomCount/60.0;
7209
 
                        ti = 0;
7210
 
                        for (z2=0;z2<g_iGesAtomCount;z2++)
7211
 
                        {
7212
 
                                if (fmod(z2,tfs) < 1)
7213
 
                                        mprintf(WHITE,"#");
7214
 
 
7215
 
                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7216
 
                                        continue;
7217
 
 
7218
 
                                ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7219
 
 
7220
 
                                for (z3=0;z3<(int)g_iSteps*3-3;z3++)
7221
 
                                        (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
7222
 
 
7223
 
                                ti++;
7224
 
                        }
7225
 
                        mprintf(WHITE,"]\n");
7226
 
                }
7227
 
                if (g_bVACFCacheMode)
7228
 
                {
7229
 
                        tfs = g_iGesAtomCount/60.0;
7230
 
/*                      if (g_bACFFFT)
7231
 
                        {*/
7232
 
                                mprintf("    Autocorrelating cached vectors...\n");
7233
 
                                mprintf(WHITE,"      [");
7234
 
/*                              fft = new CFFT();
7235
 
                                fft->PrepareFFT_C2C(2*g_iSteps);
7236
 
                                fft2 = new CFFT();
7237
 
                                fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
7238
 
 
7239
 
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7240
 
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7241
 
                                
7242
 
                                ptfa2->SetSize(g_iSteps);
7243
 
 
7244
 
                                try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
7245
 
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7246
 
                                
7247
 
                                ptfa3->SetSize(g_iSteps);
7248
 
 
7249
 
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7250
 
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7251
 
                                
7252
 
                                ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
7253
 
                                ti = 0;
7254
 
                                for (z2=0;z2<g_iGesAtomCount;z2++)
7255
 
                                {
7256
 
                                        if (fmod(z2,tfs) < 1.0)
7257
 
                                                mprintf(WHITE,"#");
7258
 
 
7259
 
                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7260
 
                                                continue;
7261
 
 
7262
 
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7263
 
 
7264
 
                                        if (g_pGlobalVACF->m_bMassWeight)
7265
 
                                                tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
7266
 
                                                        else tf = 1.0f;
7267
 
 
7268
 
                                        /* X */
7269
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
7270
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3];
7271
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
7272
 
                //                      mprintf("Global Atom %d X: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7273
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7274
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7275
 
 
7276
 
                                        /* Y */
7277
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
7278
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+1];
7279
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
7280
 
                //                      mprintf("Global Atom %d Y: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7281
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7282
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7283
 
 
7284
 
                                        /* Z */
7285
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
7286
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+2];
7287
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
7288
 
                //                      mprintf("Global Atom %d Z: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7289
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7290
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7291
 
 
7292
 
                                        ti++;
7293
 
                                }
7294
 
                                delete ac;
7295
 
                                delete ptfa2;
7296
 
                                delete ptfa3;
7297
 
        /*                      delete fft2;
7298
 
                                delete fft;*/
7299
 
/*                      } else
7300
 
                        {
7301
 
                                mprintf("    Autocorrelating cached vectors...\n");
7302
 
                                mprintf(WHITE,"      [");
7303
 
                                for (z2=0;z2<g_iGesAtomCount;z2++)
7304
 
                                {
7305
 
                                        if (fmod(z2,tfs) < 1.0)
7306
 
                                                mprintf(WHITE,"#");
7307
 
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
7308
 
                                        for (z3=0;z3<g_pGlobalVACF->m_iSize;z3+=g_pGlobalVACF->m_iStride) // Das ist das Tau
7309
 
                                        {
7310
 
                                                tf = 0;
7311
 
                                                for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
7312
 
                                                        tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
7313
 
                                                g_pGlobalVACF->m_pData[z3/g_pGlobalVACF->m_iStride] += tf/(g_iSteps-z3);
7314
 
                                        }
7315
 
                                }
7316
 
                        }*/
7317
 
                        mprintf(WHITE,"]\n");
7318
 
                        mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
7319
 
                        g_pGlobalVACF->MultiplyCached(1.0/g_iGesAtomCount);
7320
 
 
7321
 
                        if (g_pGlobalVACF->m_bDecomposeModes)                                                                                                                                                                                                                               
7322
 
                        {                                                                                                                                                                                                                                                                   
7323
 
                                tfs = g_iGesAtomCount*g_iGesAtomCount*3/60.0;                                                                                                                                                                                                               
7324
 
                                                                                                                                                                                                                                                                                           
7325
 
                                mprintf("    Allocating cross-correlation matrix (%s)...\n",FormatBytes((double)sizeof(float)*g_pGlobalVACF->m_iSize*g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3));                                                                         
7326
 
                                                                                                                                                                                                                                                                                           
7327
 
                                g_pGlobalVACF->m_oaCCRMatrix.SetMaxSize(g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);                                                                                                                                                       
7328
 
                                for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)                                                                                                                                                                                                            
7329
 
                                {                                                                                                                                                                                                                                                           
7330
 
                                        for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)                                                                                                                                                                                                    
7331
 
                                        {                                                                                                                                                                                                                                                   
7332
 
                        //                      mprintf("X: %X\n",g_pGlobalVACF);                                                                                                                                                                                                           
7333
 
                        //                      mprintf("%d - %d -->\n",z2,z3);                                                                                                                                                                                                             
7334
 
                                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }                                                                                                                                                                              
7335
 
                                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                         
7336
 
                                                                                                                                                                                                                                                                                           
7337
 
                        //                      mprintf("A\n");                                                                                                                                                                                                                             
7338
 
                                                ptfa->SetSize(g_pGlobalVACF->m_iSize);                                                                                                                                                                                                      
7339
 
                        //                      mprintf("B\n");                                                                                                                                                                                                                             
7340
 
                        //                      mprintf("X2: %X\n",g_pGlobalVACF);                                                                                                                                                                                                          
7341
 
                                                g_pGlobalVACF->m_oaCCRMatrix.Add(ptfa);                                                                                                                                                                                                     
7342
 
                        //                      mprintf("%d - %d <--\n",z2,z3);                                                                                                                                                                                                             
7343
 
                                        }                                                                                                                                                                                                                                                   
7344
 
                                }                                                                                                                                                                                                                                                           
7345
 
                                                                                                                                                                                                                                                                                           
7346
 
                                mprintf("    Computing %d cross-correlations...\n",g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);                                                                                                                                            
7347
 
                                mprintf(WHITE,"      [");                                                                                                                                                                                                                                   
7348
 
                                                                                                                                                                                                                                                                                           
7349
 
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }                                                                                                                                                                                            
7350
 
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                        
7351
 
                                                                                                                                                                                                                                                                                            
7352
 
                                ptfa2->SetSize(g_iSteps);                                                                                                                                                                                                                                   
7353
 
                                                                                                                                                                                                                                                                                           
7354
 
                                try { ptfa2b = new CxFloatArray("main():ptfa2b"); } catch(...) { ptfa2b = NULL; }                                                                                                                                                                                          
7355
 
                                if (ptfa2b == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                       
7356
 
                                                                                                                                                                                                                                                                                            
7357
 
                                ptfa2b->SetSize(g_iSteps);                                                                                                                                                                                                                                  
7358
 
                                                                                                                                                                                                                                                                                           
7359
 
                                try { ccr = new CCrossCorrelation(); } catch(...) { ccr = NULL; }                                                                                                                                                                                           
7360
 
                                if (ccr == NULL) NewException((double)sizeof(CCrossCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                     
7361
 
                                                                                                                                                                                                                                                                                            
7362
 
                                ccr->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);                                                                                                                                                                                                       
7363
 
                                                                                                                                                                                                                                                                                           
7364
 
                                ti = 0;                                                                                                                                                                                                                                                     
7365
 
                                                                                                                                                                                                                                                                                           
7366
 
                                for (z2=0;z2<g_iGesAtomCount;z2++)                                                                                                                                                                                                                          
7367
 
                                {                                                                                                                                                                                                                                                           
7368
 
                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))                                                                                                                                                                                
7369
 
                                                continue;                                                                                                                                                                                                                                   
7370
 
                                                                                                                                                                                                                                                                                           
7371
 
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];                                                                                                                                                                                                 
7372
 
                                                                                                                                                                                                                                                                                           
7373
 
                                        for (z2b=0;z2b<3;z2b++)                                                                                                                                                                                                                             
7374
 
                                        {                                                                                                                                                                                                                                                   
7375
 
                                                ti2 = 0;                                                                                                                                                                                                                                    
7376
 
                                                for (z3=0;z3<g_iGesAtomCount;z3++)                                                                                                                                                                                                          
7377
 
                                                {                                                                                                                                                                                                                                           
7378
 
                                                        if (fmod(z2*g_iGesAtomCount*3+z2b*g_iGesAtomCount+z3,tfs) < 1.0)                                                                                                                                                                    
7379
 
                                                                mprintf(WHITE,"#");                                                                                                                                                                                                         
7380
 
                                                                                                                                                                                                                                                                                           
7381
 
                                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z3] > 1000))                                                                                                                                                                
7382
 
                                                                continue;                                                                                                                                                                                                                   
7383
 
                                                                                                                                                                                                                                                                                           
7384
 
                                                        ptfab = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti2];                                                                                                                                                                               
7385
 
                                                                                                                                                                                                                                                                                           
7386
 
                                                        if (g_pGlobalVACF->m_bMassWeight)                                                                                                                                                                                                   
7387
 
                                                                tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;                                                                                                                                                     
7388
 
                                                                        else tf = 1.0f;                                                                                                                                                                                                     
7389
 
                                                                                                                                                                                                                                                                                           
7390
 
                                                        for (z3b=0;z3b<3;z3b++)                                                                                                                                                                                                             
7391
 
                                                        {                                                                                                                                                                                                                                   
7392
 
                                                                for (z4=0;z4<(int)g_iSteps;z4++)                                                                                                                                                                                            
7393
 
                                                                {                                                                                                                                                                                                                           
7394
 
                                                                        (*ptfa2)[z4] = (*ptfa)[z4*3+z2b];                                                                                                                                                                                   
7395
 
                                                                        (*ptfa2b)[z4] = (*ptfab)[z4*3+z3b];                                                                                                                                                                                 
7396
 
                                                                }                                                                                                                                                                                                                           
7397
 
                                                                ccr->CrossCorrelate(ptfa2,ptfa2b,(CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b]);                                                          
7398
 
                                        //                      mprintf("z2=%d, z2b=%d, z3=%d, z3b=%d, I=%d\n",z2,z2b,z3,z3b,ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b);                                                                           
7399
 
                                                        }                                                                                                                                                                                                                                   
7400
 
                                                                                                                                                                                                                                                                                           
7401
 
                                                        ti2++;                                                                                                                                                                                                                              
7402
 
                                                }                                                                                                                                                                                                                                           
7403
 
                                        }                                                                                                                                                                                                                                                   
7404
 
                                        ti++;                                                                                                                                                                                                                                               
7405
 
                                }                                                                                                                                                                                                                                                           
7406
 
                                delete ccr;                                                                                                                                                                                                                                                 
7407
 
                                delete ptfa2;                                                                                                                                                                                                                                               
7408
 
                                delete ptfa2b;                                                                                                                                                                                                                                              
7409
 
                                                                                                                                                                                                                                                                                           
7410
 
                                mprintf(WHITE,"]\n");                                                                                                                                                                                                                                       
7411
 
                                                                                                                                                                                                                                                                                           
7412
 
                /*              for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)                                                                                                                                                                                                            
7413
 
                                {                                                                                                                                                                                                                                                           
7414
 
                                        for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)                                                                                                                                                                                                    
7415
 
                                                mprintf("%6G  ",((CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[z2*g_pGlobalVACF->m_iParticles*3+z3])->GetAt(0));                                                                                                                              
7416
 
                                        mprintf("\n");                                                                                                                                                                                                                                      
7417
 
                                }*/                                                                                                                                                                                                                                                         
7418
 
                                                                                                                                                                                                                                                                                           
7419
 
                                Interface_DecomposeModes(g_pGlobalVACF->m_iParticles*3, &g_pGlobalVACF->m_oaCCRMatrix);                                                                                                                                                                     
7420
 
                                                                                                                                                                                                                                                                                           
7421
 
                        } // END IF m_bDecomposeModes                                                                                                                                                                                                                                       
7422
 
                                                                                                                                                                                                                                                                                           
7423
 
                } else g_pGlobalVACF->Multiply(1.0/g_iGesAtomCount);
7424
 
 
7425
 
                mprintf("    Saving global VACF as acf_global%s.csv ...\n",multibuf);
7426
 
                g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
7427
 
 
7428
 
                if (g_pGlobalVACF->m_iMirror != 0)
7429
 
                {
7430
 
                        mprintf("    Mirroring global VACF...\n");
7431
 
                        g_pGlobalVACF->Mirror(g_pGlobalVACF->m_iMirror);
7432
 
                        mprintf("    Saving mirrored global VACF as acf_global.m%s.csv ...\n",multibuf);
7433
 
                        g_pGlobalVACF->WriteACF("acf_global.m",multibuf,".csv");
7434
 
                }
7435
 
 
7436
 
                if (g_pGlobalVACF->m_bWindowFunction)
7437
 
                {
7438
 
                        mprintf("    Applying window function...\n");
7439
 
                        g_pGlobalVACF->Window();
7440
 
                        mprintf("    Saving windowed global VACF as acf_global.w%s.csv ...\n",multibuf);
7441
 
                        g_pGlobalVACF->WriteACF("acf_global.w",multibuf,".csv");
7442
 
                }
7443
 
 
7444
 
                if (g_pGlobalVACF->m_bSpectrum)
7445
 
                {
7446
 
                        mprintf("    Performing Fourier transformation...\n");
7447
 
 
7448
 
                        try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
7449
 
                        if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7450
 
                        
7451
 
                        g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
7452
 
                        g_pGlobalVACF->Transform(g_pFFT);
7453
 
                        delete g_pFFT;
7454
 
                        g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
7455
 
                        if (g_pGlobalVACF->m_bACF_DB)
7456
 
                        {
7457
 
                                mprintf("    Normalising spectrum to decibel...\n");
7458
 
                                g_pGlobalVACF->m_pSpectrum->MakeDB();
7459
 
                        }/* else
7460
 
                        {
7461
 
                                mprintf("    Normalising integral of spectrum...\n");
7462
 
                                g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
7463
 
                        }*/
7464
 
                        if (g_pGlobalVACF->m_bWindowFunction)
7465
 
                        {
7466
 
                                mprintf("    Saving spectrum as power_global_w%s.csv ...\n",multibuf);
7467
 
                                g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
7468
 
                        } else
7469
 
                        {
7470
 
                                mprintf("    Saving spectrum as power_global%s.csv ...\n",multibuf);
7471
 
                                g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
7472
 
                        }
7473
 
                }
7474
 
                mprintf("\n");
7475
 
        }
7476
 
 
7477
 
        if (g_bVFDF)
7478
 
        {
7479
 
                for (z=0;z<g_iVFCorrCount;z++)
7480
 
                        fclose(g_fVFCorr[z]);
7481
 
        }
7482
 
 
7483
 
 
7484
 
//      fclose(ff);
7485
 
 
7486
 
        for (z=0;z<g_oaObserv.GetSize();z++)
7487
 
        {
7488
 
                o = (CObservation*)g_oaObserv[z];
7489
 
                mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
7490
 
 
7491
 
                if (o->m_pConditions != NULL)
7492
 
                {
7493
 
                        if (o->m_bSecondShowMol)
7494
 
                                mprintf(WHITE,"\n#### Condition between RM and 1st OM ####\n");
7495
 
 
7496
 
                        o->m_pConditions->PrintData();
7497
 
                        if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
7498
 
                                o->m_pConditions->PrintTable();
7499
 
                }
7500
 
 
7501
 
                if ((o->m_bSecondShowMol) && (o->m_pConditionsOM2 != NULL))
7502
 
                {
7503
 
                        mprintf(WHITE,"\n\n#### Condition between RM and 2nd OM ####\n");
7504
 
                        o->m_pConditionsOM2->PrintData();
7505
 
                        if (o->m_pConditionsOM2->m_oaConditionSubGroups.GetSize()==2)
7506
 
                                o->m_pConditionsOM2->PrintTable();
7507
 
                }
7508
 
 
7509
 
                if (g_bAggregation)
7510
 
                {
7511
 
                        mprintf(WHITE,"* Aggregation Functions\n");
7512
 
                        if ((g_iMaxStep > 0) && (((int)g_iSteps*g_iStride) >= g_iMaxStep))
7513
 
                                g_pTempTimestep->CopyFrom(GetTimeStep(0)); // Max. Schrittzahl
7514
 
                                        else g_pTempTimestep->CopyFrom(GetTimeStep(1)); // End Of File
7515
 
                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
7516
 
                        {
7517
 
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
7518
 
                                mprintf(WHITE,"\n  > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
7519
 
 
7520
 
                                o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
7521
 
 
7522
 
                                sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
7523
 
                                dacfsub->m_pCondition->PrintData(buf);
7524
 
 
7525
 
                                mprintf(WHITE,"Neighbour Count Distribution\n");
7526
 
                                mprintf("    %.0f Bin entries have been made.\n",dacfsub->m_pNDF->m_fBinEntries);
7527
 
                                sprintf(buf,"ncd_%s%s.csv",dacfsub->m_sName,multibuf);
7528
 
                                mprintf("    Writing Neighbor Count Distribution File \"%s\"...\n",buf);
7529
 
                                dacfsub->m_pNDF->Write_Int("",buf,"");
7530
 
 
7531
 
                                if (g_bDDisp)
7532
 
                                {
7533
 
                                        mprintf(WHITE,"\nDimer Displacement Distribution Function\n");
7534
 
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDDisp->m_fBinEntries,dacfsub->m_pDDisp->m_fSkipEntries,dacfsub->m_pDDisp->m_fBinEntries+dacfsub->m_pDDisp->m_fSkipEntries);
7535
 
                                        sprintf(buf,"ddisp_%s%s.csv",dacfsub->m_sName,multibuf);
7536
 
                                        mprintf("    Saving DDisp File as \"%s\"...\n",buf);
7537
 
                                        dacfsub->m_pDDisp->Write("",buf,"",false);
7538
 
                                        sprintf(buf,"ddisp_%s%s.agr",dacfsub->m_sName,multibuf);
7539
 
                                        mprintf("    Saving DDisp Agr File as \"%s\"...\n",buf);
7540
 
                                        dacfsub->m_pDDisp->WriteAgr("",buf,"","",false);
7541
 
                                }
7542
 
 
7543
 
                                if (g_bDACF)
7544
 
                                {
7545
 
                                        mprintf(WHITE,"\nDimer Existence Autocorrelation Function\n");
7546
 
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDACF->m_fBinEntries,dacfsub->m_pDACF->m_fSkipEntries,dacfsub->m_pDACF->m_fBinEntries+dacfsub->m_pDACF->m_fSkipEntries);
7547
 
 
7548
 
                                        if (dacfsub->m_bBorderMode)
7549
 
                                        {
7550
 
                                                mprintf("    *** New Border Mode ***\n");
7551
 
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7552
 
                                                        dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps-z2;
7553
 
                                        } else
7554
 
                                        {
7555
 
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7556
 
                                                        dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps;
7557
 
                                        }
7558
 
 
7559
 
                                        if (dacfsub->m_bNewMode)
7560
 
                                        {
7561
 
                                                mprintf("    *** New Mode Processing ***\n");
7562
 
                                                mprintf(WHITE,"      [");
7563
 
                                                tfs = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize() * ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize() / 60.0;
7564
 
                                                ptfa = new CxFloatArray();
7565
 
                                                ptfa2 = new CxFloatArray();
7566
 
                                                ac = new CAutoCorrelation();
7567
 
                                                ac->Init(g_iSteps,o->m_pDACF->m_iDACFRes,true);
7568
 
 
7569
 
                                                ptfa->SetSize(g_iSteps);
7570
 
                                                ptfa2->SetSize(o->m_pDACF->m_iDACFRes);
7571
 
 
7572
 
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7573
 
                                                        dacfsub->m_pDACF->m_pBin[z2] = 0;
7574
 
 
7575
 
                                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
7576
 
                                                {
7577
 
                                                        for (z3=0;z3<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z3++)
7578
 
                                                        {
7579
 
                                                                if (fmod(z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3,tfs) < 1.0)
7580
 
                                                                        mprintf(WHITE,"#");
7581
 
 
7582
 
                                                                for (z5=0;z5<(int)g_iSteps;z5++)
7583
 
                                                                        (*ptfa)[z5] = 0;
7584
 
 
7585
 
                                                                for (z4=0;z4<dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize();z4+=2)
7586
 
                                                                {
7587
 
                                                                        for (z5=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4);z5<=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4+1);z5++)
7588
 
                                                                                (*ptfa)[z5-1] = 1;
7589
 
                                                                }
7590
 
 
7591
 
                                                //              if (dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize() != 0)
7592
 
                                                //                      mprintf("\n%d-%d: %d ",z2,z3,dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize()/2);
7593
 
 
7594
 
                                                                ac->AutoCorrelate(ptfa,ptfa2);
7595
 
 
7596
 
                                                /*              if ((z2==0) && (z3==28))
7597
 
                                                                {
7598
 
                                                                        FILE *tfia;
7599
 
 
7600
 
                                                                        sprintf(buf,"condfunc_%d_%d.csv",z2,z3);
7601
 
                                                                        tfia = fopen(buf,"wt");
7602
 
                                                                        for (z4=0;z4<(int)g_iSteps;z4++)
7603
 
                                                                                fprintf(tfia,"%d;  %f\n",z4,(*ptfa)[z4]);
7604
 
                                                                        fclose(tfia);
7605
 
 
7606
 
                                                                        sprintf(buf,"condacf_%d_%d.csv",z2,z3);
7607
 
                                                                        tfia = fopen(buf,"wt");
7608
 
                                                                        for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7609
 
                                                                                fprintf(tfia,"%d;  %f\n",z4,(*ptfa2)[z4]);
7610
 
                                                                        fclose(tfia);
7611
 
                                                                }*/
7612
 
                        
7613
 
                                                                for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7614
 
                                                                        dacfsub->m_pDACF->m_pBin[z4] += (*ptfa2)[z4];
7615
 
                                                        }
7616
 
                                                }
7617
 
                                                mprintf(WHITE,"]\n");
7618
 
                                        }
7619
 
 
7620
 
                                        if (dacfsub->m_bCorrectEq)
7621
 
                                        {
7622
 
                                                if (dacfsub->m_iRefMol == dacfsub->m_iShowMol)
7623
 
                                                {
7624
 
                                                        tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7625
 
                                                        mprintf("    Ensemble Average is %.6f%c.\n",tf,'%');
7626
 
 
7627
 
                                                        tf = 1.0/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7628
 
                                                        dacfsub->m_pDACF->MultiplyBin(tf);
7629
 
 
7630
 
                                                        tf = dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7631
 
                                                        tf = tf*tf;
7632
 
                                                        mprintf("    Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7633
 
                                                        dacfsub->m_pDACF->SubtractBin(tf);
7634
 
                                                } else
7635
 
                                                {
7636
 
                                                        tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7637
 
                                                        mprintf("    Ensemble Average is %.6f%c.\n",tf,'%');
7638
 
 
7639
 
                                                        tf = 1.0/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7640
 
                                                        dacfsub->m_pDACF->MultiplyBin(tf);
7641
 
 
7642
 
                                                        tf = dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7643
 
                                                        tf = tf*tf;
7644
 
                                                        mprintf("    Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7645
 
                                                        dacfsub->m_pDACF->SubtractBin(tf);
7646
 
                                                }
7647
 
                                        }
7648
 
 
7649
 
                                        if (dacfsub->m_pDACF->m_pBin[0] != 0)
7650
 
                                        {
7651
 
                                                mprintf("    Normalizing DACF with factor 1/%G ...\n",dacfsub->m_pDACF->m_pBin[0]);
7652
 
                                                dacfsub->m_pDACF->MultiplyBin(1.0/dacfsub->m_pDACF->m_pBin[0]);
7653
 
                                        } else mprintf("    Not normalizing this DACF, first entry is 0.\n");
7654
 
 
7655
 
                                        if (o->m_pDACF->m_bFitDACF)
7656
 
                                        {
7657
 
                                                mprintf("\n");
7658
 
 
7659
 
                                                try { dacfsub->m_pDACF->m_pParameters = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pParameters = NULL; }
7660
 
                                                if (dacfsub->m_pDACF->m_pParameters == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7661
 
                                                
7662
 
                                                try { dacfsub->m_pDACF->m_pFitIntegral = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pFitIntegral = NULL; }
7663
 
                                                if (dacfsub->m_pDACF->m_pFitIntegral == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7664
 
                                                
7665
 
                                                try { dacfsub->m_pDACF->m_pCorrCoeff = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pCorrCoeff = NULL; }
7666
 
                                                if (dacfsub->m_pDACF->m_pCorrCoeff == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7667
 
                                                
7668
 
                                                try { dacfsub->m_pDACF->m_pAdditionalSets = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSets = NULL; }
7669
 
                                                if (dacfsub->m_pDACF->m_pAdditionalSets == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7670
 
                                                
7671
 
                                                try { dacfsub->m_pDACF->m_pAdditionalSetLabels = new char*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSetLabels = NULL; }
7672
 
                                                if (dacfsub->m_pDACF->m_pAdditionalSetLabels == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7673
 
                                                
7674
 
                                                dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
7675
 
 
7676
 
                                                for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7677
 
                                                {
7678
 
                                                        dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
7679
 
                                                        dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
7680
 
                                                }
7681
 
 
7682
 
                                                mprintf(YELLOW,"    Please note: ");
7683
 
                                                mprintf("The lifetime is two times the integral value!\n\n");
7684
 
 
7685
 
                                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7686
 
                                                        dacfsub->m_pDACF->Fit_PolyExp(z2,5000);
7687
 
 
7688
 
                                                if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
7689
 
                                                {
7690
 
                                                        mprintf(YELLOW,"    DACF fit integral overview:\n");
7691
 
                                                        mprintf("      (use the row with the highest R value)\n\n");
7692
 
                                                        mprintf(WHITE,"      Degree  R             Integral [ps]     Lifetime [ps]\n");
7693
 
                                                        for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7694
 
                                                        {
7695
 
                                                                if (dacfsub->m_pDACF->m_pFitIntegral[z2] >= 0)
7696
 
                                                                        mprintf("      %d       %10.8f    %-10G        %-10G\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2],dacfsub->m_pDACF->m_pFitIntegral[z2],dacfsub->m_pDACF->m_pFitIntegral[z2]*2.0);
7697
 
                                                                                else mprintf("      %d       %10.8f             -             -\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2]);
7698
 
                                                        }
7699
 
                                                        mprintf("\n");
7700
 
                                                }
7701
 
                                        }
7702
 
                                        sprintf(buf,"dacf_%s%s.csv",dacfsub->m_sName,multibuf);
7703
 
                                        mprintf("    Saving DACF File as \"%s\"...\n",buf);
7704
 
                                        dacfsub->m_pDACF->Write("",buf,"",false);
7705
 
                                        sprintf(buf,"dacf_%s%s.agr",dacfsub->m_sName,multibuf);
7706
 
                                        mprintf("    Saving DACF Agr File as \"%s\"...\n",buf);
7707
 
                                        dacfsub->m_pDACF->WriteAgr("",buf,"","",false);
7708
 
 
7709
 
                                        if (o->m_pDACF->m_bLifetimeSpectrum)
7710
 
                                        {
7711
 
                                                for (z2=0;z2<o->m_pDACF->m_oaLTSpectra.GetSize();z2++)
7712
 
                                                {
7713
 
                                                        mprintf(WHITE,"\n  * Lifetime Spectrum %d\n\n",z2+1);
7714
 
                                                        ((CLTSpec*)o->m_pDACF->m_oaLTSpectra[z2])->ComputeSpectrum("dacf",dacfsub->m_sName,multibuf,"",dacfsub->m_pDACF);
7715
 
                                                }
7716
 
                                /*              sprintf(buf,"dacf_lspectrum_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7717
 
                                                mprintf("    Saving DACF lifetime spectrum as \"%s\"...\n",buf);
7718
 
                                                dacfsub->m_pDACF->Fit_ExpSpectrum(o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_fLSpecMinExp,o->m_pDACF->m_fLSpecMaxExp,buf,o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iMaxLMIter,false,true);
7719
 
 
7720
 
                                                sprintf(buf,"dacf_lsfit_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7721
 
                                                mprintf("    Saving DACF lifetime spectrum fit as \"%s\"...\n",buf);
7722
 
                                                dacfsub->m_pDACF->Write("",buf,"",false);*/
7723
 
                                        }
7724
 
                                }
7725
 
 
7726
 
                                if (g_bDLDF)
7727
 
                                {
7728
 
                                        mprintf(WHITE,"\nDimer Lifetime Distribution Function\n");
7729
 
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDF->m_fBinEntries,dacfsub->m_pDLDF->m_fSkipEntries,dacfsub->m_pDLDF->m_fBinEntries+dacfsub->m_pDLDF->m_fSkipEntries);
7730
 
                                        sprintf(buf,"dldf_%s%s.csv",dacfsub->m_sName,multibuf);
7731
 
                                        mprintf("    Saving DLDF File as \"%s\"...\n",buf);
7732
 
                                        dacfsub->m_pDLDF->Write("",buf,"",false);
7733
 
                                        sprintf(buf,"dldf_%s%s.agr",dacfsub->m_sName,multibuf);
7734
 
                                        mprintf("    Saving DLDF Agr File as \"%s\"...\n",buf);
7735
 
                                        dacfsub->m_pDLDF->WriteAgr("",buf,"","",false);
7736
 
                                }
7737
 
 
7738
 
                                if (g_bDLDisp)
7739
 
                                {
7740
 
                                        mprintf(WHITE,"\nDimer Lifetime Displacement Distribution Function\n");
7741
 
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDisp->m_fBinEntries,dacfsub->m_pDLDisp->m_fSkipEntries,dacfsub->m_pDLDisp->m_fBinEntries+dacfsub->m_pDLDisp->m_fSkipEntries);
7742
 
                                        mprintf("    Normalizing bin integral to 1000000...\n");
7743
 
                                        dacfsub->m_pDLDisp->NormalizeBinIntegral(1000000.0);
7744
 
                                        sprintf(buf,"dldisp_%s%s",dacfsub->m_sName,multibuf);
7745
 
                                        mprintf("    Saving DLDisp triples as \"%s_triples.csv\"...\n",buf);
7746
 
                                        dacfsub->m_pDLDisp->Write("",buf,"_triples.csv");
7747
 
                                        mprintf("    Saving DLDisp matrix as \"%s_matrix.csv\"...\n",buf);
7748
 
                                        dacfsub->m_pDLDisp->WriteCSV("",buf,"_matrix.csv");
7749
 
                                        mprintf("    Saving DLDisp Mathematica Notebook \"%s.nb\"...\n",buf);
7750
 
                                        dacfsub->m_pDLDisp->WriteMathematicaNb("",buf,".nb",false);
7751
 
                                        mprintf("    Saving DLDisp Gnuplot Input \"%s.gp\"...\n",buf);
7752
 
                                        dacfsub->m_pDLDisp->WriteGnuplotInput("",buf,"",false);
7753
 
                                }
7754
 
 
7755
 
                                if (g_bPairMSD)
7756
 
                                {
7757
 
                                        mprintf(WHITE,"\nPair Mean Square Displacement\n");
7758
 
                                        mprintf("    %.0f Bin entries have been made.\n",dacfsub->m_pPairMSD->m_fBinEntries);
7759
 
                                        mprintf("    Calculating average values...\n");
7760
 
                                        dacfsub->m_pPairMSD->BuildAverage();
7761
 
                                        sprintf(buf,"pairmsd_%s%s",dacfsub->m_sName,multibuf);
7762
 
                                        mprintf("    Saving Pair MSD as \"%s.csv\"...\n",buf);
7763
 
                                        dacfsub->m_pPairMSD->Write("",buf,".csv");
7764
 
                                }
7765
 
                        }
7766
 
                        if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
7767
 
                        {
7768
 
                                mprintf(WHITE,"\n*** Condition Grid fitting overview:\n\n");
7769
 
                                mprintf("      Degree    R(min)        R(avg)        R(max)\n");
7770
 
                                o->m_pDACF->CalcGridFitParms();
7771
 
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7772
 
                                        mprintf("      %d         %10.8f    %10.8f    %10.8f\n",z2,o->m_pDACF->m_pFitRMin[z2],o->m_pDACF->m_pFitRAvg[z2],o->m_pDACF->m_pFitRMax[z2]);
7773
 
                                mprintf("\n");
7774
 
 
7775
 
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7776
 
                                {
7777
 
                                        if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
7778
 
                                        {
7779
 
                                                if (o->m_pDACF->m_bGridCon)
7780
 
                                                {
7781
 
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7782
 
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7783
 
                                                        
7784
 
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,false);
7785
 
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp",o->m_pDACF->m_sName,multibuf,z2);
7786
 
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7787
 
                                                        temp2df->Write("",buf,"_triples.csv");
7788
 
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7789
 
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
7790
 
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7791
 
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
7792
 
                                                        mprintf("    Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7793
 
                                                        temp2df->WriteGnuplotInput("",buf,"",false);
7794
 
                                                        delete temp2df;
7795
 
                                                }
7796
 
                                                if (o->m_pDACF->m_bGridInt)
7797
 
                                                {
7798
 
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7799
 
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7800
 
                                                        
7801
 
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,true);
7802
 
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp_int%.2f",o->m_pDACF->m_sName,multibuf,z2,o->m_pDACF->m_fGridIntGap);
7803
 
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7804
 
                                                        temp2df->Write("",buf,"_triples.csv");
7805
 
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7806
 
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
7807
 
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7808
 
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
7809
 
                                                        mprintf("    Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7810
 
                                                        temp2df->WriteGnuplotInput("",buf,"",false);
7811
 
                                                        delete temp2df;
7812
 
                                                }
7813
 
                                        } else
7814
 
                                        {
7815
 
                                                if (o->m_pDACF->m_bGridCon)
7816
 
                                                {
7817
 
                                                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
7818
 
                                                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7819
 
                                                        
7820
 
//                                                      o->m_pDACF->CreateGridFitDF(tdf,z2,false);
7821
 
                                                        abort();
7822
 
                                                        delete tdf;
7823
 
                                                }
7824
 
                                        }
7825
 
                                }
7826
 
                        }
7827
 
                } // END IF AGGREGATION
7828
 
 
7829
 
                if (g_bDens)
7830
 
                {
7831
 
                        mprintf(WHITE,"* Density Distribution Function\n");
7832
 
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDensityDF->m_pDensDF->m_fBinEntries,o->m_pDensityDF->m_pDensDF->m_fSkipEntries,ZeroDivide(o->m_pDensityDF->m_pDensDF->m_fSkipEntries,o->m_pDensityDF->m_pDensDF->m_fBinEntries+o->m_pDensityDF->m_pDensDF->m_fSkipEntries)*100.0);
7833
 
 
7834
 
                        mprintf("    Correcting radial distribution...\n");
7835
 
                        o->m_pDensityDF->m_pDensDF->CorrectRadialDist();
7836
 
 
7837
 
                        mprintf("    Scaling values to match final density...\n");
7838
 
 
7839
 
                        if (o->m_pDensityDF->m_bDensityMass)
7840
 
                        {
7841
 
                                o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7842
 
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(1.66054e6 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7843
 
                        } else
7844
 
                        {
7845
 
                                o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7846
 
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(1.0e9 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7847
 
                        }
7848
 
 
7849
 
        /*              if (g_bDoubleBox)
7850
 
                        {
7851
 
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(g_iDoubleBoxFactor);
7852
 
                                o->m_pDensityDF->m_pDensDF->MultiplyIntegral(g_iDoubleBoxFactor);
7853
 
                        }*/
7854
 
 
7855
 
                        sprintf(buf,"density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
7856
 
                        mprintf("    Saving Density DF as \"%s\"...\n",buf);
7857
 
                        o->m_pDensityDF->m_pDensDF->Write("",buf,"",true);
7858
 
                        sprintf(buf,"density_df_%s%s.agr",o->m_pDensityDF->m_sName,multibuf);
7859
 
                        mprintf("    Saving Density DF AGR file as \"%s\"...\n",buf);
7860
 
                        o->m_pDensityDF->m_pDensDF->WriteAgr("",buf,"",o->m_pDensityDF->m_sName,true);
7861
 
                        if (o->m_pDensityDF->m_iHistogramRes != 0)
7862
 
                        {
7863
 
                                mprintf("    Calculating Histogram...\n");
7864
 
                                o->m_pDensityDF->m_pDensDF->CalcHistogram();
7865
 
                                sprintf(buf,"his_density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
7866
 
                                mprintf("    Saving Histogram as \"%s\"...\n",buf);
7867
 
                                o->m_pDensityDF->m_pDensDF->WriteHistogram("",buf,"");
7868
 
                        }
7869
 
                } // END IF g_bDens
7870
 
 
7871
 
                if (g_bRDyn)
7872
 
                {
7873
 
                        mprintf(WHITE,"* Vector Reorientation Dynamics\n");
7874
 
                        o->m_pRDyn->Finish(multibuf);
7875
 
                }
7876
 
 
7877
 
                if (g_bIRSpec)
7878
 
                {
7879
 
                        mprintf(WHITE,"* IR Spectrum\n");
7880
 
                        o->m_pIRSpec->Finish(multibuf);
7881
 
                }
7882
 
 
7883
 
                if (g_bVACF)
7884
 
                {
7885
 
                        mprintf(WHITE,"* Velocity Autocorrelation Function\n");
7886
 
                        if (o->m_pVACF->m_bDerivative)
7887
 
                        {
7888
 
                                mprintf("    Deriving velocities...\n");
7889
 
                                mprintf(WHITE,"      [");
7890
 
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
7891
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
7892
 
                                {
7893
 
                                        if (fmod(z2,tfs) < 1)
7894
 
                                                mprintf(WHITE,"#");
7895
 
                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
7896
 
 
7897
 
                                        for (z3=0;z3<(int)g_iSteps*3-3;z3++)
7898
 
                                                (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
7899
 
                                }
7900
 
                                mprintf(WHITE,"]\n");
7901
 
                        }
7902
 
                        if (g_bVACFCacheMode)
7903
 
                        {
7904
 
                                mprintf("    Autocorrelating cached vectors...\n");
7905
 
                                mprintf(WHITE,"      [");
7906
 
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
7907
 
 
7908
 
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7909
 
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7910
 
                                
7911
 
                                ptfa2->SetSize(g_iSteps);
7912
 
 
7913
 
                                try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
7914
 
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7915
 
                                
7916
 
                                ptfa3->SetSize(g_iSteps);
7917
 
 
7918
 
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7919
 
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7920
 
                                
7921
 
                                ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
7922
 
                                ti = 0;
7923
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
7924
 
                                {
7925
 
                                        for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
7926
 
                                        {
7927
 
                                                if (o->m_pVACF->m_bMassWeight)
7928
 
                                                        tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
7929
 
                                                                else tf = 1.0;
7930
 
                                                for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
7931
 
                                                {
7932
 
                                                        if (fmod(ti,tfs) < 1)
7933
 
                                                                mprintf(WHITE,"#");
7934
 
                                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
7935
 
 
7936
 
                                                        /* X */
7937
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
7938
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3];
7939
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
7940
 
                        //                              mprintf("Lokal Atom %d X: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7941
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7942
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7943
 
 
7944
 
                                                        /* Y */
7945
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
7946
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+1];
7947
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
7948
 
                        //                              mprintf("Lokal Atom %d Y: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7949
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7950
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7951
 
 
7952
 
                                                        /* Z */
7953
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
7954
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+2];
7955
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
7956
 
                        //                              mprintf("Lokal Atom %d Z: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7957
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7958
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7959
 
 
7960
 
                                                        ti++;
7961
 
                                                }
7962
 
                                        }
7963
 
                                }
7964
 
                                delete ac;
7965
 
                                delete ptfa2;
7966
 
                                delete ptfa3;
7967
 
 
7968
 
                        /*      } else
7969
 
                                {
7970
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
7971
 
                                        {
7972
 
                                                if (fmod(z2,tfs) < 1)
7973
 
                                                        mprintf(WHITE,"#");
7974
 
                                                ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
7975
 
                                                for (z3=0;z3<o->m_pVACF->m_iSize;z3+=o->m_pVACF->m_iStride) // Das ist das Tau
7976
 
                                                {
7977
 
                                                        tf = 0;
7978
 
                                                        for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
7979
 
                                                                tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
7980
 
                                                        o->m_pVACF->m_pData[z3/o->m_pVACF->m_iStride] += tf/(g_iSteps-z3);
7981
 
                                                }
7982
 
                                        }
7983
 
                                }*/
7984
 
                                mprintf(WHITE,"]\n");
7985
 
//                              mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
7986
 
                                mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",ti,g_iSteps,o->m_pVACF->m_iSize);
7987
 
                                o->m_pVACF->MultiplyCached(1.0/g_iGesAtomCount);
7988
 
                        } else o->m_pVACF->Multiply(1.0/g_iGesAtomCount);
7989
 
/*                      sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
7990
 
                        mprintf("    Saving ACF as %s ...\n",buf);
7991
 
                        o->m_pVACF->WriteACF("",buf,"");*/
7992
 
 
7993
 
                        sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
7994
 
                        mprintf("    Saving ACF as %s ...\n",buf);
7995
 
                        o->m_pVACF->WriteACF("",buf,"");
7996
 
 
7997
 
                        if (o->m_pVACF->m_iMirror != 0)
7998
 
                        {
7999
 
                                mprintf("    Mirroring ACF...\n");
8000
 
                                o->m_pVACF->Mirror(o->m_pVACF->m_iMirror);
8001
 
                                sprintf(buf,"acf_%s%s.m.csv",o->m_pVACF->m_sName,multibuf);
8002
 
                                mprintf("    Saving mirrored ACF as %s ...\n",buf);
8003
 
                                o->m_pVACF->WriteACF("",buf,"");
8004
 
                        }
8005
 
 
8006
 
                        if (o->m_pVACF->m_bWindowFunction)
8007
 
                        {
8008
 
                                mprintf("    Applying window function to ACF...\n");
8009
 
                                o->m_pVACF->Window();
8010
 
                                sprintf(buf,"acf_%s%s.w.csv",o->m_pVACF->m_sName,multibuf);
8011
 
                                mprintf("    Saving windowed ACF as %s ...\n",buf);
8012
 
                                o->m_pVACF->WriteACF("",buf,"");
8013
 
                        }
8014
 
 
8015
 
                        if (o->m_pVACF->m_bSpectrum)
8016
 
                        {
8017
 
                                mprintf("    Performing fourier transformation...\n");
8018
 
 
8019
 
                                try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
8020
 
                                if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8021
 
                                
8022
 
/*                              if (o->m_pVACF->m_bMirror)
8023
 
                                        g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
8024
 
                                                else */g_pFFT->PrepareFFT_C2C(o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding);
8025
 
                                o->m_pVACF->Transform(g_pFFT);
8026
 
                                delete g_pFFT;
8027
 
                                o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
8028
 
                                if (o->m_pVACF->m_bACF_DB)
8029
 
                                {
8030
 
                                        mprintf("    Normalising spectrum to decibel...\n");
8031
 
                                        o->m_pVACF->m_pSpectrum->MakeDB();
8032
 
                                }/* else
8033
 
                                {
8034
 
                                        mprintf("    Normalising integral of spectrum...\n");
8035
 
                                        o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
8036
 
                                }*/
8037
 
/*                              if (o->m_pVACF->m_bWindowFunction)
8038
 
                                {
8039
 
                                        sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
8040
 
                                        mprintf("    Saving spectrum as %s ...\n",buf);
8041
 
                                        o->m_pVACF->m_pSpectrum->Write("",buf,"");
8042
 
                                } else
8043
 
                                {*/
8044
 
                                sprintf(buf,"power_%s%s.csv",o->m_pVACF->m_sName,multibuf);
8045
 
                                mprintf("    Saving spectrum as %s ...\n",buf);
8046
 
                                o->m_pVACF->m_pSpectrum->Write("",buf,"");
8047
 
//                              }
8048
 
                        }
8049
 
                } // End IF VACF
8050
 
 
8051
 
                if (g_bMSD)
8052
 
                {
8053
 
                        mprintf(WHITE,"* Mean Square Displacement\n");
8054
 
                        if (g_bMSDCacheMode)
8055
 
                        {
8056
 
                                mprintf("    Autocorrelating cached vectors...\n");
8057
 
//                              mprintf(WHITE,"      [");
8058
 
//                              tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms)/60.0;
8059
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
8060
 
                                {
8061
 
//                                      if (fmod(z2,tfs) < 1.0)
8062
 
//                                              mprintf(WHITE,"#");
8063
 
                                        mprintf("      %4d/%d:  [",z2+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms);
8064
 
                                        tfs = o->m_pMSD->m_iResolution/50.0;
8065
 
                                        ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[z2];
8066
 
                                        for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8067
 
                                        {
8068
 
                                                if (fmod(z3,tfs) < 1.0)
8069
 
                                                        mprintf(WHITE,"#");
8070
 
                                                tf = 0;
8071
 
 
8072
 
                                                if (o->m_pMSD->m_bTakeX && o->m_pMSD->m_bTakeY && o->m_pMSD->m_bTakeZ)
8073
 
                                                {
8074
 
                                                        for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8075
 
                                                                tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2) + pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2) + pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8076
 
                                                } else
8077
 
                                                {
8078
 
                                                        for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8079
 
                                                        {
8080
 
                                                                if (o->m_pMSD->m_bTakeX)
8081
 
                                                                        tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2);
8082
 
                                                                if (o->m_pMSD->m_bTakeY)
8083
 
                                                                        tf += pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2);
8084
 
                                                                if (o->m_pMSD->m_bTakeZ)
8085
 
                                                                        tf += pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8086
 
                                                        }
8087
 
                                                }
8088
 
 
8089
 
                                                o->m_pMSD->m_pMSD->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8090
 
                                                o->m_pMSD->m_pMSD->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8091
 
                                                if (o->m_pMSD->m_bSplit)
8092
 
                                                {
8093
 
                                                        o->m_pMSD->m_pSplitMSD[z2]->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8094
 
                                                        o->m_pMSD->m_pSplitMSD[z2]->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8095
 
                                                }
8096
 
                                        }
8097
 
                                        mprintf("]\n");
8098
 
                                }
8099
 
                                for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8100
 
                                        o->m_pMSD->m_pMSD->m_pBin[z3/o->m_pMSD->m_iStride] /= ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;
8101
 
//                              mprintf(WHITE,"]\n");
8102
 
                        } else
8103
 
                        {
8104
 
                                o->m_pMSD->m_pMSD->BuildAverage();
8105
 
                        }
8106
 
                        mprintf("    %.0f bin entries.\n",o->m_pMSD->m_pMSD->m_fBinEntries);
8107
 
                        o->m_pMSD->m_pMSD->CalcDeriv(1.0f);
8108
 
                        sprintf(buf,"msd_%s%s.csv",o->m_pMSD->m_sName,multibuf);
8109
 
                        mprintf("    Saving result as %s ...\n",buf);
8110
 
                        if (o->m_pMSD->m_bSplit)
8111
 
                        {
8112
 
                                o->m_pMSD->WriteSplit(buf);
8113
 
                        } else o->m_pMSD->m_pMSD->Write("",buf,"");
8114
 
                        mprintf(WHITE,"\n    Performing linear regression on interval %.2f - %.2f ps...\n",o->m_pMSD->m_pMSD->m_fMinVal+0.5*(o->m_pMSD->m_pMSD->m_fMaxVal-o->m_pMSD->m_pMSD->m_fMinVal),o->m_pMSD->m_pMSD->m_fMaxVal);
8115
 
                        o->m_pMSD->m_pMSD->LinReg(o->m_pMSD->m_pMSD->m_iResolution/2,o->m_pMSD->m_pMSD->m_iResolution-1,&c0,&c1,&r);
8116
 
                        mprintf("      MSD(t) = %.6f + %.6f * t   (units: [MSD] = pm^2, [t] = ps).\n",c0,c1);
8117
 
                        mprintf("           R = %.6f\n",r);
8118
 
                        ti = 0;
8119
 
                        if (o->m_pMSD->m_bTakeX)
8120
 
                                ti++;
8121
 
                        if (o->m_pMSD->m_bTakeY)
8122
 
                                ti++;
8123
 
                        if (o->m_pMSD->m_bTakeZ)
8124
 
                                ti++;
8125
 
                        if (ti != 3)
8126
 
                                mprintf("     Please note: Dimensionality of the system is %d here.\n",ti);
8127
 
                        mprintf("      Diffusion coefficient D = %.6f pm^2/ps  =  %G m^2/s.\n",c1/2.0/ti,c1/2.0e12/ti);
8128
 
                        mprintf("        (assuming <x^2> = %d * D * t)\n\n",2*ti);
8129
 
                } // END IF MSD
8130
 
 
8131
 
                if (g_bNbAnalysis)
8132
 
                {
8133
 
                        mprintf(WHITE,"* Neighborhood Analysis\n");
8134
 
                        mprintf("    %.0f bin entries.\n",o->m_pNbAnalysis->m_fBinEntries);
8135
 
/*                      for (z2=0;z2<o->m_pNbAnalysis->m_iMaxNbCount-o->m_pNbAnalysis->m_iMinNbCount;z2++)
8136
 
                                mprintf("    - %d: %.0f bin entries, %.0f skipped.\n",z2+1,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fBinEntries,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fSkipEntries);
8137
 
*/                      
8138
 
 
8139
 
                        try { pf = new float[o->m_pNbAnalysis->m_iNbCount]; } catch(...) { pf = NULL; }
8140
 
                        if (pf == NULL) NewException((double)o->m_pNbAnalysis->m_iNbCount*sizeof(float),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8141
 
                        
8142
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8143
 
                                pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
8144
 
 
8145
 
                        sprintf(buf,"nbh_ncf_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8146
 
                        mprintf("    Saving neighbor count function as %s ...\n",buf);
8147
 
                        a = OpenFileWrite(buf,true);
8148
 
                        mfprintf(a,"# distance [pm]; ");
8149
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8150
 
                        {
8151
 
                                mfprintf(a,"%d neighbors",z3);
8152
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount)
8153
 
                                        mfprintf(a,";  ");
8154
 
                        }
8155
 
                        mfprintf(a,"\n");
8156
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8157
 
                        {
8158
 
                                mfprintf(a,"%.4f;  ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8159
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8160
 
                                {
8161
 
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaNPF[z3])->m_pBin[z2]/o->m_pNbAnalysis->m_pNPFCount->m_pBin[z2]*100.0f);
8162
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount)
8163
 
                                                mfprintf(a,";  ");
8164
 
                                }
8165
 
                                mfprintf(a,"\n");
8166
 
                        }
8167
 
                        fclose(a);
8168
 
 
8169
 
                        sprintf(buf,"nbh_dist_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8170
 
                        mprintf("    Calculating mean values and standard deviation...\n");
8171
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8172
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CalcMeanSD();
8173
 
                        mprintf("    Saving neighborhood distribution as %s ...\n",buf);
8174
 
                        a = OpenFileWrite(buf,true);
8175
 
                        mfprintf(a,"# distance [pm]; ");
8176
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8177
 
                        {
8178
 
                                mfprintf(a,"%d. neighbor",z3+1);
8179
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8180
 
                                        mfprintf(a,";  ");
8181
 
                        }
8182
 
                        mfprintf(a,"\n");
8183
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8184
 
                        {
8185
 
                                mfprintf(a,"%.4f;  ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8186
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8187
 
                                {
8188
 
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8189
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8190
 
                                                mfprintf(a,";  ");
8191
 
                                }
8192
 
                                mfprintf(a,"\n");
8193
 
                        }
8194
 
                        fclose(a);
8195
 
 
8196
 
                        sprintf(buf,"nbh_minmaxavgsd_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8197
 
                        mprintf("    Saving neighborhood min/max/avg/sd as %s ...\n",buf);
8198
 
                        a = OpenFileWrite(buf,true);
8199
 
                        mfprintf(a,"# n-th neighbor;  min. dist [pm]; max. dist [pm]; avg. dist [pm]; standard deviation [pm]\n");
8200
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iNbCount;z2++)
8201
 
                        {
8202
 
                                mfprintf(a,"%d;  %.4f;  %.4f;  %.4f;  %.4f",z2+1,o->m_pNbAnalysis->m_pDistMin[z2],o->m_pNbAnalysis->m_pDistMax[z2],((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fMean,((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_fSD);
8203
 
                                mfprintf(a,"\n");
8204
 
                        }
8205
 
                        fclose(a);
8206
 
 
8207
 
                        sprintf(buf,"nbh_rdf_decomp_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8208
 
                        mprintf("    Saving neighborhood RDF decomposition as %s ...\n",buf);
8209
 
                        a = OpenFileWrite(buf,true);
8210
 
                        mfprintf(a,"# distance [pm]; ");
8211
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8212
 
                        {
8213
 
                                mfprintf(a,"%d. neighbor",z3+1);
8214
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8215
 
                                        mfprintf(a,";  ");
8216
 
                        }
8217
 
                        mfprintf(a,"\n");
8218
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8219
 
                        {
8220
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
8221
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
8222
 
                        }
8223
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8224
 
                        {
8225
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8226
 
                                if (g_bDoubleBox)
8227
 
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
8228
 
                        }
8229
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8230
 
                        {
8231
 
                                mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8232
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8233
 
                                {
8234
 
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8235
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8236
 
                                                mfprintf(a,";  ");
8237
 
                                }
8238
 
                                mfprintf(a,"\n");
8239
 
                        }
8240
 
                        fclose(a);
8241
 
 
8242
 
                        sprintf(buf,"nbh_rdf_decomp_cumulative_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8243
 
                        mprintf("    Saving cumulative neighborhood RDF decomposition as %s ...\n",buf);
8244
 
                        a = OpenFileWrite(buf,true);
8245
 
                        mfprintf(a,"# distance [pm]; ");
8246
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8247
 
                        {
8248
 
                                mfprintf(a,"%d. neighbor",z3+1);
8249
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8250
 
                                        mfprintf(a,";  ");
8251
 
                        }
8252
 
                        mfprintf(a,"\n");
8253
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8254
 
                                for (z3=1;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8255
 
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2] += ((CDF*)o->m_pNbAnalysis->m_oaDF[z3-1])->m_pBin[z2];
8256
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8257
 
                        {
8258
 
                                mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8259
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8260
 
                                {
8261
 
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8262
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8263
 
                                                mfprintf(a,";  ");
8264
 
                                }
8265
 
                                mfprintf(a,"\n");
8266
 
                        }
8267
 
                        fclose(a);
8268
 
                        delete[] pf;
8269
 
                }
8270
 
 
8271
 
                if (g_bDipDF)
8272
 
                {
8273
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8274
 
                        {
8275
 
                                if (o->m_pDipDF[zr] == NULL)
8276
 
                                        continue;
8277
 
                                mprintf(WHITE,"* Dipole Distribution Function\n");
8278
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,ZeroDivide(o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries+o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries)*100.0);
8279
 
                                o->m_pDipDF[zr]->m_pDipoleDF->CalcMeanSD();
8280
 
                                mprintf("    Mean value: %10G Debye    Standard deviation: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMean,o->m_pDipDF[zr]->m_pDipoleDF->m_fSD);
8281
 
                                mprintf("    Min. value: %10G Debye    Max. value:         %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMinInput,o->m_pDipDF[zr]->m_pDipoleDF->m_fMaxInput);
8282
 
                                o->m_pDipDF[zr]->m_pDipoleDF->NormBinIntegral();
8283
 
                                sprintf(buf,"dipole_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8284
 
                                mprintf("    Saving dipole distribution as %s ...\n",buf);
8285
 
                                o->m_pDipDF[zr]->m_pDipoleDF->Write("",buf,"",false);
8286
 
                                sprintf(buf,"dipole_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8287
 
                                mprintf("    Saving dipole distribution AGR file as \"%s\"...\n",buf);
8288
 
                                o->m_pDipDF[zr]->m_pDipoleDF->WriteAgr("",buf,"",o->m_pDipDF[zr]->m_sName,false);
8289
 
                                if (o->m_pDipDF[zr]->m_iHistogramRes != 0)
8290
 
                                {
8291
 
                                        mprintf("    Calculating Histogram...\n");
8292
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->CalcHistogram();
8293
 
                                        sprintf(buf,"his_dipdf_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8294
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8295
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteHistogram("",buf,"");
8296
 
                                }
8297
 
                                if (o->m_bTimeDev)
8298
 
                                {
8299
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8300
 
                                        {
8301
 
                                                fclose(o->m_pDipDF[zr]->m_fDipole[0]);
8302
 
                                                mprintf("    Saving temporal development as dipole_timedev_%s%s.csv\n",o->m_pDipDF[zr]->m_sName,multibuf);
8303
 
                                        } else
8304
 
                                        {
8305
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8306
 
                                                {
8307
 
                                                        fclose(o->m_pDipDF[zr]->m_fDipole[z2]);
8308
 
                                                        mprintf("    Saving temporal development as dipole_timedev_%s_ref%d%s.csv\n",o->m_pDipDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8309
 
                                                }
8310
 
                                        }
8311
 
                                        if (o->m_bCombinedPlot)
8312
 
                                        {
8313
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8314
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
8315
 
                                                o->m_pDipDF[zr]->m_pDipoleDF->CreateCombinedPlot(false);
8316
 
                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->WriteAgr(buf,false);
8317
 
                                        }
8318
 
                                } // END IF TIMEDEV
8319
 
 
8320
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
8321
 
                                {
8322
 
                                        sprintf(buf,"dipdf_decomp_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8323
 
                                        mprintf("    Saving DipDF decomposition as \"%s\"...\n",buf);
8324
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti("",buf,"");
8325
 
                                        sprintf(buf,"dipdf_decomp_%s%s_cumulative.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8326
 
                                        mprintf("    Saving cumulative DipoleDF decomposition as \"%s\"...\n",buf);
8327
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti_Cumulative("",buf,"");
8328
 
                                }
8329
 
 
8330
 
                                if (o->m_bTimeDiff)
8331
 
                                        o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
8332
 
                        }
8333
 
                } // END IF DIPOLE
8334
 
 
8335
 
                if (g_bVDF)
8336
 
                {
8337
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8338
 
                        {
8339
 
                                if (o->m_pVDF[zr] == NULL)
8340
 
                                        continue;
8341
 
                                mprintf(WHITE,"* Velocity Distribution Function\n");
8342
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVDF[zr]->m_pVDF->m_fBinEntries,o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,ZeroDivide(o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,o->m_pVDF[zr]->m_pVDF->m_fBinEntries+o->m_pVDF[zr]->m_pVDF->m_fSkipEntries)*100.0);
8343
 
                                o->m_pVDF[zr]->m_pVDF->CalcMeanSD();
8344
 
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMean,o->m_pVDF[zr]->m_pVDF->m_fSD);
8345
 
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMinInput,o->m_pVDF[zr]->m_pVDF->m_fMaxInput);
8346
 
                                o->m_pVDF[zr]->m_pVDF->NormBinIntegral();
8347
 
                                sprintf(buf,"vdf_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8348
 
                                mprintf("    Saving velocity distribution as %s ...\n",buf);
8349
 
                                o->m_pVDF[zr]->m_pVDF->Write("",buf,"",false);
8350
 
                                sprintf(buf,"vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8351
 
                                mprintf("    Saving velocity distribution AGR file as \"%s\"...\n",buf);
8352
 
                                o->m_pVDF[zr]->m_pVDF->WriteAgr("",buf,"",o->m_pVDF[zr]->m_sName,false);
8353
 
                                if (o->m_pVDF[zr]->m_iHistogramRes != 0)
8354
 
                                {
8355
 
                                        mprintf("    Calculating Histogram...\n");
8356
 
                                        o->m_pVDF[zr]->m_pVDF->CalcHistogram();
8357
 
                                        sprintf(buf,"his_vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8358
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8359
 
                                        o->m_pVDF[zr]->m_pVDF->WriteHistogram("",buf,"");
8360
 
                                }
8361
 
                                if (o->m_bTimeDev)
8362
 
                                {
8363
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8364
 
                                        {
8365
 
                                                fclose(o->m_pVDF[zr]->m_fSpeed[0]);
8366
 
                                                mprintf("    Saving temporal development as vdf_timedev_%s%s.csv\n",o->m_pVDF[zr]->m_sName,multibuf);
8367
 
                                        } else
8368
 
                                        {
8369
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8370
 
                                                {
8371
 
                                                        fclose(o->m_pVDF[zr]->m_fSpeed[z2]);
8372
 
                                                        mprintf("    Saving temporal development as vdf_timedev_%s_ref%d%s.csv\n",o->m_pVDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8373
 
                                                }
8374
 
                                        }
8375
 
                                        if (o->m_bCombinedPlot)
8376
 
                                        {
8377
 
                                                sprintf(buf,"combined_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8378
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
8379
 
                                                o->m_pVDF[zr]->m_pVDF->CreateCombinedPlot(false);
8380
 
                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->WriteAgr(buf,false);
8381
 
                                        }
8382
 
                                } // END IF TIMEDEV
8383
 
 
8384
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
8385
 
                                {
8386
 
                                        sprintf(buf,"vdf_decomp_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8387
 
                                        mprintf("    Saving VDF decomposition as \"%s\"...\n",buf);
8388
 
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti("",buf,"");
8389
 
                                        sprintf(buf,"vdf_decomp_%s%s_cumulative.csv",o->m_pVDF[zr]->m_sName,multibuf);
8390
 
                                        mprintf("    Saving cumulative VDF decomposition as \"%s\"...\n",buf);
8391
 
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti_Cumulative("",buf,"");
8392
 
                                }
8393
 
 
8394
 
                                if (o->m_bTimeDiff)
8395
 
                                        o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
8396
 
                        }
8397
 
                } // END IF VDF
8398
 
 
8399
 
                if (g_bPlDF)
8400
 
                {
8401
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8402
 
                        {
8403
 
                                if (o->m_pPlDF[zr] == NULL)
8404
 
                                        continue;
8405
 
                                mprintf(WHITE,"* Plane Distance Distribution Function\n");
8406
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries,o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,ZeroDivide(o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries+o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries)*100.0);
8407
 
                                o->m_pPlDF[zr]->m_pPlDF->CalcMeanSD();
8408
 
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMean,o->m_pPlDF[zr]->m_pPlDF->m_fSD);
8409
 
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMinInput,o->m_pPlDF[zr]->m_pPlDF->m_fMaxInput);
8410
 
                                o->m_pPlDF[zr]->m_pPlDF->NormBinIntegral();
8411
 
                                sprintf(buf,"pldf_%s%s.csv",o->m_pPlDF[zr]->m_sName,multibuf);
8412
 
                                mprintf("    Saving plane distance distribution as %s ...\n",buf);
8413
 
                                o->m_pPlDF[zr]->m_pPlDF->Write("",buf,"",false);
8414
 
                                sprintf(buf,"pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8415
 
                                mprintf("    Saving plane distance distribution AGR file as \"%s\"...\n",buf);
8416
 
                                o->m_pPlDF[zr]->m_pPlDF->WriteAgr("",buf,"",o->m_pPlDF[zr]->m_sName,false);
8417
 
                                if (o->m_pPlDF[zr]->m_iHistogramRes != 0)
8418
 
                                {
8419
 
                                        mprintf("    Calculating Histogram...\n");
8420
 
                                        o->m_pPlDF[zr]->m_pPlDF->CalcHistogram();
8421
 
                                        sprintf(buf,"his_pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8422
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8423
 
                                        o->m_pPlDF[zr]->m_pPlDF->WriteHistogram("",buf,"");
8424
 
                                }
8425
 
                        }
8426
 
                } // END IF PlDF
8427
 
 
8428
 
                if (g_bLiDF)
8429
 
                {
8430
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8431
 
                        {
8432
 
                                if (o->m_pLiDF[zr] == NULL)
8433
 
                                        continue;
8434
 
                                mprintf(WHITE,"* Line Distance Distribution Function\n");
8435
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries,o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,ZeroDivide(o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries+o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries)*100.0);
8436
 
                                o->m_pLiDF[zr]->m_pLiDF->CalcMeanSD();
8437
 
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMean,o->m_pLiDF[zr]->m_pLiDF->m_fSD);
8438
 
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMinInput,o->m_pLiDF[zr]->m_pLiDF->m_fMaxInput);
8439
 
        
8440
 
                                if (o->m_pLiDF[zr]->m_bRadialCorrect)
8441
 
                                {
8442
 
                                        mprintf("    Correcting radial distribution...\n");
8443
 
                                        o->m_pLiDF[zr]->m_pLiDF->CorrectLiRadialDist();
8444
 
                                }
8445
 
                                if (o->m_bOthers && o->m_pLiDF[zr]->m_bRadialCorrect)
8446
 
                                {
8447
 
                                        mprintf("    Scaling LiDF to uniform density...\n");
8448
 
                                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8449
 
                                        {
8450
 
                                                if (o->m_bObsCertain)
8451
 
                                                {
8452
 
                                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / o->m_waObsRefList.GetSize());
8453
 
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / o->m_waObsRefList.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8454
 
                                                } else
8455
 
                                                {
8456
 
                                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8457
 
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8458
 
                                                }
8459
 
                                                if (g_bDoubleBox)
8460
 
                                                {
8461
 
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_iDoubleBoxFactor);
8462
 
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyIntegral(g_iDoubleBoxFactor);
8463
 
                                                }
8464
 
                                        } else
8465
 
                                        {
8466
 
                                                eprintf("    Uniform density not defined if box is not XYZ-periodic!\n");
8467
 
                                                goto _lidfint1;
8468
 
                                        }
8469
 
                                } else
8470
 
                                {
8471
 
_lidfint1:
8472
 
                                        mprintf("    Scaling LiDF to integral value 1000 ...\n");
8473
 
                                        o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral(1000.0);
8474
 
                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(false,1000.0);
8475
 
                                }
8476
 
                                
8477
 
                                
8478
 
                                o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral();
8479
 
                                sprintf(buf,"lidf_%s%s.csv",o->m_pLiDF[zr]->m_sName,multibuf);
8480
 
                                mprintf("    Saving line distance distribution as %s ...\n",buf);
8481
 
                                o->m_pLiDF[zr]->m_pLiDF->Write("",buf,"",false);
8482
 
                                sprintf(buf,"lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8483
 
                                mprintf("    Saving line distance distribution AGR file as \"%s\"...\n",buf);
8484
 
                                o->m_pLiDF[zr]->m_pLiDF->WriteAgr("",buf,"",o->m_pLiDF[zr]->m_sName,false);
8485
 
                                if (o->m_pLiDF[zr]->m_iHistogramRes != 0)
8486
 
                                {
8487
 
                                        mprintf("    Calculating Histogram...\n");
8488
 
                                        o->m_pLiDF[zr]->m_pLiDF->CalcHistogram();
8489
 
                                        sprintf(buf,"his_lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8490
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8491
 
                                        o->m_pLiDF[zr]->m_pLiDF->WriteHistogram("",buf,"");
8492
 
                                }
8493
 
                        }
8494
 
                } // END IF LiDF
8495
 
 
8496
 
                if (g_bADF)
8497
 
                {
8498
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8499
 
                        {
8500
 
                                if (o->m_pADF[zr] == NULL)
8501
 
                                        continue;
8502
 
                                mprintf(WHITE,"* Angular Distribution Function\n");
8503
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pADF[zr]->m_pADF->m_fBinEntries,o->m_pADF[zr]->m_pADF->m_fSkipEntries,ZeroDivide(o->m_pADF[zr]->m_pADF->m_fSkipEntries,o->m_pADF[zr]->m_pADF->m_fBinEntries+o->m_pADF[zr]->m_pADF->m_fSkipEntries)*100.0);
8504
 
                                o->m_pADF[zr]->m_pADF->CalcMeanSD();
8505
 
                                if (o->m_pADF[zr]->m_bCosine)
8506
 
                                {
8507
 
                                        mprintf("    Mean value: %10G    Standard deviation: %10G\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8508
 
                                        mprintf("    Min. value: %10G    Max. value:         %10G\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8509
 
                                } else
8510
 
                                {
8511
 
                                        mprintf("    Mean value: %10G degree    Standard deviation: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8512
 
                                        mprintf("    Min. value: %10G degree    Max. value:         %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8513
 
                                }
8514
 
                                if (o->m_pADF[zr]->m_bStat)
8515
 
                                {
8516
 
                                        mprintf("    Applying cone correction...\n");
8517
 
                                        o->m_pADF[zr]->m_pADF->AngleCorrect();
8518
 
                                }
8519
 
                        /*      if (o->m_pADF[zr]->m_bMirror)
8520
 
                                {
8521
 
                                        mprintf("    Making ADF mirror-symmetric...\n");
8522
 
                                        if (o->m_pADF[zr]->m_bCosine)
8523
 
                                                o->m_pADF[zr]->m_pADF->Mirror(0.0f);
8524
 
                                                        else o->m_pADF[zr]->m_pADF->Mirror(90.0f);
8525
 
                                }*/
8526
 
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
8527
 
                                if (o->m_bTimeDev)
8528
 
                                {
8529
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8530
 
                                        {
8531
 
                                                fclose(o->m_pADF[zr]->m_fAngle[0]);
8532
 
                                                mprintf("    Saving temporal development as adf_timedev_%s%s.csv\n",o->m_pADF[zr]->m_sName,multibuf);
8533
 
                                        } else
8534
 
                                        {
8535
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8536
 
                                                {
8537
 
                                                        fclose(o->m_pADF[zr]->m_fAngle[z2]);
8538
 
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8539
 
                                                        mprintf("    Saving temporal development as %s\n",buf);
8540
 
                                                }
8541
 
                                        }
8542
 
        //                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_pADF->m_sName);
8543
 
        //                              FreeFileName("",o->m_pADF->m_sName,"_angle_stat.txt");
8544
 
        //                              o->m_pADF->m_pAngleStat->Evaluate();
8545
 
        //                              o->m_pADF->m_pAngleStat->Write("",o->m_pADF->m_sName,"_angle_stat.txt");
8546
 
        //                              delete o->m_pAngleStat;
8547
 
                                        delete[] o->m_pADF[zr]->m_fAngle;
8548
 
                                        o->m_pADF[zr]->m_fAngle = NULL;
8549
 
                                        if (o->m_bCombinedPlot)
8550
 
                                        {
8551
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8552
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
8553
 
                                                o->m_pADF[zr]->m_pADF->CreateCombinedPlot(false);
8554
 
                                                o->m_pADF[zr]->m_pADF->m_pCombinedPlot->WriteAgr(buf,false);
8555
 
                                        }
8556
 
                                } // END IF TIMEDEV
8557
 
                                sprintf(buf,"adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8558
 
                                mprintf("    Saving ADF as %s ...\n",buf);
8559
 
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
8560
 
                                o->m_pADF[zr]->m_pADF->Write("",buf,"",false);
8561
 
                                sprintf(buf,"adf_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8562
 
                                mprintf("    Saving ADF AGR file as \"%s\"...\n",buf);
8563
 
                                if (o->m_pADF[zr]->m_bCosine)
8564
 
                                        o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8565
 
                                                else o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8566
 
                                if (o->m_pADF[zr]->m_iHistogramRes != 0)
8567
 
                                {
8568
 
                                        mprintf("    Calculating Histogram...\n");
8569
 
                                        o->m_pADF[zr]->m_pADF->CalcHistogram();
8570
 
                                        sprintf(buf,"his_adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8571
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8572
 
                                        o->m_pADF[zr]->m_pADF->WriteHistogram("",buf,"");
8573
 
                                }
8574
 
 
8575
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
8576
 
                                {
8577
 
                                        sprintf(buf,"adf_decomp_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8578
 
                                        mprintf("    Saving ADF decomposition as \"%s\"...\n",buf);
8579
 
                                        o->m_pADF[zr]->m_pADF->WriteMulti("",buf,"");
8580
 
                                        sprintf(buf,"adf_decomp_%s%s_cumulative.csv",o->m_pADF[zr]->m_sName,multibuf);
8581
 
                                        mprintf("    Saving cumulative ADF decomposition as \"%s\"...\n",buf);
8582
 
                                        o->m_pADF[zr]->m_pADF->WriteMulti_Cumulative("",buf,"");
8583
 
                                }
8584
 
 
8585
 
                                if (o->m_bTimeDiff)
8586
 
                                        o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
8587
 
                        }
8588
 
                } // END IF ADF
8589
 
 
8590
 
                if (g_bDDF)
8591
 
                {
8592
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8593
 
                        {
8594
 
                                if (o->m_pDDF[zr] == NULL)
8595
 
                                        continue;
8596
 
                                mprintf(WHITE,"* Dihedral Distribution Function\n");
8597
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDDF[zr]->m_pDDF->m_fBinEntries,o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,ZeroDivide(o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,o->m_pDDF[zr]->m_pDDF->m_fBinEntries+o->m_pDDF[zr]->m_pDDF->m_fSkipEntries)*100.0);
8598
 
                                o->m_pDDF[zr]->m_pDDF->CalcMeanSD();
8599
 
                                if (o->m_pDDF[zr]->m_bCosine)
8600
 
                                {
8601
 
                                        mprintf("    Mean value: %10G    Standard deviation: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8602
 
                                        mprintf("    Min. value: %10G    Max.value:          %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8603
 
                                } else
8604
 
                                {
8605
 
                                        mprintf("    Mean value: %10G degree    Standard deviation: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8606
 
                                        mprintf("    Min. value: %10G degree    Max.value:          %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8607
 
                                }
8608
 
                                if (o->m_bTimeDev)
8609
 
                                {
8610
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8611
 
                                        {
8612
 
                                                fclose(o->m_pDDF[zr]->m_fAngle[0]);
8613
 
                                                mprintf("    Saving temporal development as ddf_timedev_%s%s.csv\n",o->m_pDDF[zr]->m_sName,multibuf);
8614
 
                                        } else
8615
 
                                        {
8616
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8617
 
                                                {
8618
 
                                                        fclose(o->m_pDDF[zr]->m_fAngle[z2]);
8619
 
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8620
 
                                                        mprintf("    Saving temporal development as %s\n",buf);
8621
 
                                                }
8622
 
                                        }
8623
 
        /*                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_sName);
8624
 
                                        FreeFileName("",o->m_sName,"_angle_stat.txt");
8625
 
                                        o->m_pAngleStat->Evaluate();
8626
 
                                        o->m_pAngleStat->Write("",o->m_sName,"_angle_stat.txt");
8627
 
        //                              delete o->m_pAngleStat;*/
8628
 
                                        delete[] o->m_pDDF[zr]->m_fAngle;
8629
 
                                        o->m_pDDF[zr]->m_fAngle = NULL;
8630
 
                                        if (o->m_bCombinedPlot)
8631
 
                                        {
8632
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8633
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
8634
 
                                                o->m_pDDF[zr]->m_pDDF->CreateCombinedPlot(false);
8635
 
                                                o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->WriteAgr(buf,false);
8636
 
                                        }
8637
 
                                } // END IF TIMEDEV
8638
 
        /*                      if (o->m_pDDF->m_iStat != 0)
8639
 
                                {
8640
 
                                        mprintf("        Korrigiere statistische Verteilung...\n");
8641
 
                                        o->m_pDDF->m_pDDF->AngleCorrect();
8642
 
                                }*/
8643
 
                                sprintf(buf,"ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8644
 
                                mprintf("    Saving DDF as %s ...\n",buf);
8645
 
                                o->m_pDDF[zr]->m_pDDF->NormBinIntegral();
8646
 
                                o->m_pDDF[zr]->m_pDDF->Write("",buf,"",false);
8647
 
                                sprintf(buf,"ddf_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8648
 
                                mprintf("    Saving DDF AGR file as \"%s\"...\n",buf);
8649
 
                                if (o->m_pDDF[zr]->m_bCosine)
8650
 
                                        o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8651
 
                                                else o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8652
 
                                if (o->m_pDDF[zr]->m_iHistogramRes != 0)
8653
 
                                {
8654
 
                                        mprintf("    Calculating Histogram...\n");
8655
 
                                        o->m_pDDF[zr]->m_pDDF->CalcHistogram();
8656
 
                                        sprintf(buf,"his_ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8657
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
8658
 
                                        o->m_pDDF[zr]->m_pDDF->WriteHistogram("",buf,"");
8659
 
                                }
8660
 
 
8661
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
8662
 
                                {
8663
 
                                        sprintf(buf,"ddf_decomp_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8664
 
                                        mprintf("    Saving DDF decomposition as \"%s\"...\n",buf);
8665
 
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti("",buf,"");
8666
 
                                        sprintf(buf,"ddf_decomp_%s%s_cumulative.csv",o->m_pDDF[zr]->m_sName,multibuf);
8667
 
                                        mprintf("    Saving cumulative DDF decomposition as \"%s\"...\n",buf);
8668
 
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti_Cumulative("",buf,"");
8669
 
                                }
8670
 
 
8671
 
                                if (o->m_bTimeDiff)
8672
 
                                        o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
8673
 
                        }
8674
 
                } // END IF DDF
8675
 
 
8676
 
                if (g_bSDF)
 
6009
                                                                        o->m_pPlProj->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
6010
                                                        } // Ende IF PlProj
 
6011
 
 
6012
                                                        if (g_bRevSDF)
 
6013
                                                        {
 
6014
                                                                o->m_pRevSDF->BuildAtomList(smfix,sm,&templa);
 
6015
                                                                for (z4=0;z4<templa.GetSize();z4++)
 
6016
                                                                        o->m_pRevSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
 
6017
                                                        } // Ende IF RevSDF
 
6018
 
 
6019
                                                } // Ende FOR Alle anderen Molekuele durchgehen
 
6020
                                                if (o->m_bSecondShowMol && (!secondmolrun))
 
6021
                                                {
 
6022
                                                        secondmolrun = true;
 
6023
                                                        goto _secondmolstart;
 
6024
                                                }
 
6025
                                        } // Ende IF m_bOthers
 
6026
 
 
6027
                                        if (g_bSDF)
 
6028
                                        {
 
6029
                                                if (o->m_pSDF->m_bSDFMirrorBisect)
 
6030
                                                {
 
6031
                                                        vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
 
6032
                                                        vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
 
6033
                                                        vec1 = CrossP(vec2,vec3);
 
6034
                                                        vec2 += vec3;
 
6035
                                                }
 
6036
 
 
6037
                                                if (o->m_pSDF->m_bCutPlane)
 
6038
                                                {
 
6039
                                                        o->m_pSDF->m_fAtom2PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])][0];
 
6040
                                                        o->m_pSDF->m_fAtom3PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][0];
 
6041
                                                        o->m_pSDF->m_fAtom3PosY += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][1];
 
6042
                                                        o->m_pSDF->m_fPosCounter++;
 
6043
                                                }
 
6044
 
 
6045
                                                if (o->m_bSelf)
 
6046
                                                {
 
6047
                                                        for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
 
6048
                                                        {
 
6049
                                                                vec0 = o->m_pSDF->m_vaData[0][z5];
 
6050
 
 
6051
                                                                if (o->m_pSDF->m_bVdWSpheres)
 
6052
                                                                        o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[0][z5]);
 
6053
                                                                                else o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6054
 
 
6055
                                                                if (o->m_pSDF->m_bSDFMirrorXY)
 
6056
                                                                {
 
6057
                                                                        vec0[2] = -vec0[2];
 
6058
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6059
                                                                }
 
6060
 
 
6061
                                                                if (o->m_pSDF->m_bSDFMirrorBisect)
 
6062
                                                                {
 
6063
                                                                        vec3.PointRoot(vec1,vec2,vec0);
 
6064
                                                                        vec3 -= vec0;
 
6065
                                                                        vec3 *= 2.0f;
 
6066
                                                                        vec0 += vec3;
 
6067
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6068
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
 
6069
                                                                        {
 
6070
                                                                                vec0[2] = -vec0[2];
 
6071
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6072
                                                                        }
 
6073
                                                                }
 
6074
                                                        }
 
6075
                                                } else
 
6076
                                                {
 
6077
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6078
                                                        {
 
6079
                                                                for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
 
6080
                                                                {
 
6081
                                                                        vec0 = o->m_pSDF->m_vaData[z4][z5];
 
6082
 
 
6083
                                                                        if (o->m_pSDF->m_bVdWSpheres)
 
6084
                                                                                o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[z4][z5]);
 
6085
                                                                                        else o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6086
 
 
6087
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
 
6088
                                                                        {
 
6089
                                                                                vec0[2] = -vec0[2];
 
6090
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6091
                                                                        }
 
6092
 
 
6093
                                                                        if (o->m_pSDF->m_bSDFMirrorBisect)
 
6094
                                                                        {
 
6095
                                                                                vec3.PointRoot(vec1,vec2,vec0);
 
6096
                                                                                vec3 -= vec0;
 
6097
                                                                                vec3 *= 2.0f;
 
6098
                                                                                vec0 += vec3;
 
6099
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6100
                                                                                if (o->m_pSDF->m_bSDFMirrorXY)
 
6101
                                                                                {
 
6102
                                                                                        vec0[2] = -vec0[2];
 
6103
                                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
 
6104
                                                                                }
 
6105
                                                                        }
 
6106
                                                                }
 
6107
                                                        }
 
6108
                                                }
 
6109
                                        } // END IF SDF
 
6110
 
 
6111
                                        if (g_bPlProj)
 
6112
                                        {
 
6113
                                                if (o->m_bSelf)
 
6114
                                                {
 
6115
                                                        for (z5=0;z5<o->m_pPlProj->m_vaData[0].GetSize();z5++)
 
6116
                                                        {
 
6117
                                                                vec0 = o->m_pPlProj->m_vaData[0][z5];
 
6118
 
 
6119
                                                                if ((vec0[2] >= o->m_pPlProj->m_fSliceBorder[0]) && (vec0[2] <= o->m_pPlProj->m_fSliceBorder[1]))
 
6120
                                                                        o->m_pPlProj->m_p2DF->AddToBin(vec0[0],vec0[1]);
 
6121
                                                        }
 
6122
                                                } else
 
6123
                                                {
 
6124
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6125
                                                        {
 
6126
                                                                for (z5=0;z5<o->m_pPlProj->m_vaData[z4].GetSize();z5++)
 
6127
                                                                {
 
6128
                                                                        vec0 = o->m_pPlProj->m_vaData[z4][z5];
 
6129
 
 
6130
                                                                        if ((vec0[2] >= o->m_pPlProj->m_fSliceBorder[0]) && (vec0[2] <= o->m_pPlProj->m_fSliceBorder[1]))
 
6131
                                                                                o->m_pPlProj->m_p2DF->AddToBin(vec0[0],vec0[1]);
 
6132
                                                                }
 
6133
                                                        }
 
6134
                                                }
 
6135
                                        } // END IF PlProj
 
6136
 
 
6137
                                        if (g_bRevSDF)
 
6138
                                        {
 
6139
                                                vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
 
6140
                                                tf4 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])].GetLength();
 
6141
                                                o->m_pRevSDF->m_fSecondAtomPosX += tf4;
 
6142
                                                o->m_pRevSDF->m_fSecondAtomCount++;
 
6143
                                                if (o->m_bSelf)
 
6144
                                                {
 
6145
                                                        for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
 
6146
                                                        {
 
6147
                                                                vec0 = o->m_pRevSDF->m_vaData[0][z5];
 
6148
                                                                tf = fabs(Angle(vec2,vec0));
 
6149
                                                                tf2 = vec0.GetLength();
 
6150
                                                                tf3 = 1.0;
 
6151
                                                                if (o->m_pRevSDF->m_bCorrectAngle)
 
6152
                                                                {
 
6153
                                                                        if ((tf < 0.001) || (tf > Pi-0.001))
 
6154
                                                                                tf3 /= 0.001;
 
6155
                                                                                        else tf3 /= sin(tf);
 
6156
                                                                }
 
6157
                                                                if (o->m_pRevSDF->m_bCorrectRadial)
 
6158
                                                                        tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
 
6159
                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
 
6160
                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
 
6161
                                                                if (o->m_pRevSDF->m_bMirrorY)
 
6162
                                                                {
 
6163
                                                                        if (o->m_pRevSDF->m_bMirrorBond)
 
6164
                                                                        {
 
6165
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
 
6166
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
 
6167
                                                                        } else
 
6168
                                                                        {
 
6169
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
 
6170
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
 
6171
                                                                        }
 
6172
                                                                }
 
6173
                                                        }
 
6174
                                                } else
 
6175
                                                {
 
6176
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6177
                                                        {
 
6178
                                                                for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
 
6179
                                                                {
 
6180
                                                                        vec0 = o->m_pRevSDF->m_vaData[z4][z5];
 
6181
                                                                        tf = fabs(Angle(vec2,vec0));
 
6182
                                                                        tf2 = vec0.GetLength();
 
6183
                                                                        tf3 = 1.0;
 
6184
                                                                        if (o->m_pRevSDF->m_bCorrectAngle)
 
6185
                                                                        {
 
6186
                                                                                if ((tf < 0.001) || (tf > Pi-0.001))
 
6187
                                                                                        tf3 /= 0.001;
 
6188
                                                                                                else tf3 /= sin(tf);
 
6189
                                                                        }
 
6190
                                                                        if (o->m_pRevSDF->m_bCorrectRadial)
 
6191
                                                                                tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
 
6192
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
 
6193
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
 
6194
                                                                        if (o->m_pRevSDF->m_bMirrorY)
 
6195
                                                                        {
 
6196
                                                                                if (o->m_pRevSDF->m_bMirrorBond)
 
6197
                                                                                {
 
6198
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
 
6199
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
 
6200
                                                                                } else
 
6201
                                                                                {
 
6202
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
 
6203
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
 
6204
                                                                                }
 
6205
                                                                        }
 
6206
                                                                }
 
6207
                                                        }
 
6208
                                                }
 
6209
                                        } // END IF REVSDF
 
6210
 
 
6211
                                        if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
 
6212
                                        {
 
6213
                                                if (o->m_bSecondShowMol)
 
6214
                                                {
 
6215
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
6216
                                                        {
 
6217
                                                                switch(g_iObsChannel[zr])
 
6218
                                                                {
 
6219
                                                                        case 0: 
 
6220
                                                                                apfa[zr] = o->m_pRDF[zr]->m_faData; 
 
6221
                                                                                apba[zr] = o->m_pRDF[zr]->m_baDataEnabled; 
 
6222
                                                                                break;
 
6223
                                                                        case 1: 
 
6224
                                                                                apfa[zr] = o->m_pADF[zr]->m_faData; 
 
6225
                                                                                apba[zr] = o->m_pADF[zr]->m_baDataEnabled; 
 
6226
                                                                                break;
 
6227
                                                                        case 2: 
 
6228
                                                                                apfa[zr] = o->m_pDDF[zr]->m_faData; 
 
6229
                                                                                apba[zr] = o->m_pDDF[zr]->m_baDataEnabled; 
 
6230
                                                                                break;
 
6231
                                                                        case 3: 
 
6232
                                                                                apfa[zr] = o->m_pDipDF[zr]->m_faData; 
 
6233
                                                                                apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled; 
 
6234
                                                                                break;
 
6235
                                                                        case 4: 
 
6236
                                                                                apfa[zr] = o->m_pVDF[zr]->m_faData; 
 
6237
                                                                                apba[zr] = o->m_pVDF[zr]->m_baDataEnabled; 
 
6238
                                                                                break;
 
6239
                                                                        case 5: 
 
6240
                                                                                apfa[zr] = o->m_pPlDF[zr]->m_faData; 
 
6241
                                                                                apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled; 
 
6242
                                                                                break;
 
6243
                                                                        case 6: 
 
6244
                                                                                apfa[zr] = o->m_pLiDF[zr]->m_faData; 
 
6245
                                                                                apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled; 
 
6246
                                                                                break;
 
6247
                                                                }
 
6248
                                                        }
 
6249
 
 
6250
                                                        if (g_iCDFChannels == 2)
 
6251
                                                        {
 
6252
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6253
                                                                {
 
6254
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
 
6255
                                                                        {
 
6256
                                                                                for (z8=0;z8<o->m_iShowMol2Count;z8++)
 
6257
                                                                                {
 
6258
                                                                                        if (o->m_bExclude1eq2 && (z4 == z8))
 
6259
                                                                                                continue;
 
6260
 
 
6261
                                                                                        for (z7=0;z7<apfa[1][z8].GetSize();z7++)
 
6262
                                                                                        {
 
6263
                                                                                                if (o->m_bBinOnlyPassedAtoms)
 
6264
                                                                                                {
 
6265
                                                                                                        if ((apba[0][z4][z5] == 0) || (apba[1][z8][z7] == 0))
 
6266
                                                                                                                goto _nocdfbin2;
 
6267
                                                                                                }
 
6268
                                                                                                if (o->m_bBinOnlyNotPassedAtoms)
 
6269
                                                                                                {
 
6270
                                                                                                        if ((apba[0][z4][z5] != 0) && (apba[1][z8][z7] != 0))
 
6271
                                                                                                                goto _nocdfbin2;
 
6272
                                                                                                }
 
6273
 
 
6274
                                                                                                o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z8][z7]);
 
6275
_nocdfbin2:
 
6276
 
 
6277
                                                                                                if (o->m_pCDF->m_bDumpDat)
 
6278
                                                                                                        mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  %d;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,z5+1,apfa[0][z4][z5],apfa[1][z8][z7]);
 
6279
                                                                                        }
 
6280
                                                                                }
 
6281
                                                                        }
 
6282
                                                                }
 
6283
                                                        }
 
6284
                                                } else // IF NOT SECOND_OM
 
6285
                                                {
 
6286
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
6287
                                                        {
 
6288
                                                                switch(g_iObsChannel[zr])
 
6289
                                                                {
 
6290
                                                                        case 0: 
 
6291
                                                                                apfa[zr] = o->m_pRDF[zr]->m_faData; 
 
6292
                                                                                apba[zr] = o->m_pRDF[zr]->m_baDataEnabled; 
 
6293
                                                                                break;
 
6294
                                                                        case 1: 
 
6295
                                                                                apfa[zr] = o->m_pADF[zr]->m_faData; 
 
6296
                                                                                apba[zr] = o->m_pADF[zr]->m_baDataEnabled; 
 
6297
                                                                                break;
 
6298
                                                                        case 2: 
 
6299
                                                                                apfa[zr] = o->m_pDDF[zr]->m_faData; 
 
6300
                                                                                apba[zr] = o->m_pDDF[zr]->m_baDataEnabled; 
 
6301
                                                                                break;
 
6302
                                                                        case 3: 
 
6303
                                                                                apfa[zr] = o->m_pDipDF[zr]->m_faData; 
 
6304
                                                                                apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled; 
 
6305
                                                                                break;
 
6306
                                                                        case 4: 
 
6307
                                                                                apfa[zr] = o->m_pVDF[zr]->m_faData; 
 
6308
                                                                                apba[zr] = o->m_pVDF[zr]->m_baDataEnabled; 
 
6309
                                                                                break;
 
6310
                                                                        case 5: 
 
6311
                                                                                apfa[zr] = o->m_pPlDF[zr]->m_faData; 
 
6312
                                                                                apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled; 
 
6313
                                                                                break;
 
6314
                                                                        case 6: 
 
6315
                                                                                apfa[zr] = o->m_pLiDF[zr]->m_faData; 
 
6316
                                                                                apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled; 
 
6317
                                                                                break;
 
6318
                                                                }
 
6319
                                                        }
 
6320
 
 
6321
                                                        if (g_iCDFChannels == 2)
 
6322
                                                        {
 
6323
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6324
                                                                {
 
6325
                                                                        ticomb = 0;
 
6326
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
 
6327
                                                                        {
 
6328
                                                                                for (z7=0;z7<apfa[1][z4].GetSize();z7++)
 
6329
                                                                                {
 
6330
 
 
6331
                                                                                        /* Workaround for symmetrical DDFs (double data amount) */
 
6332
                                                                                        if (g_iObsChannel[0] == 2)
 
6333
                                                                                        {
 
6334
                                                                                                if (o->m_pDDF[0]->m_bSymm)
 
6335
                                                                                                {
 
6336
                                                                                                        if (g_iObsChannel[1] == 2)
 
6337
                                                                                                        {
 
6338
                                                                                                                if (o->m_pDDF[1]->m_bSymm)
 
6339
                                                                                                                {
 
6340
                                                                                                                        if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
 
6341
                                                                                                                                continue;
 
6342
                                                                                                                        goto _ddfsymmdone;
 
6343
                                                                                                                }
 
6344
                                                                                                        }
 
6345
                                                                                                }
 
6346
                                                                                                if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+z7] == 0)
 
6347
                                                                                                        continue;
 
6348
                                                                                        } else
 
6349
                                                                                        {
 
6350
                                                                                                if (g_iObsChannel[1] == 2)
 
6351
                                                                                                {
 
6352
                                                                                                        if (o->m_pDDF[1]->m_bSymm)
 
6353
                                                                                                        {
 
6354
                                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
 
6355
                                                                                                                        continue;
 
6356
                                                                                                                goto _ddfsymmdone;
 
6357
                                                                                                        }
 
6358
                                                                                                }
 
6359
                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
 
6360
                                                                                                        continue;
 
6361
                                                                                        }
 
6362
_ddfsymmdone:
 
6363
 
 
6364
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6365
                                                                                        {
 
6366
                                                                                                if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
 
6367
                                                                                                        goto _nocdfbin;
 
6368
                                                                                        }
 
6369
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6370
                                                                                        {
 
6371
                                                                                                if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
 
6372
                                                                                                        goto _nocdfbin;
 
6373
                                                                                        }
 
6374
                                                                                        o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
 
6375
_nocdfbin:;
 
6376
                                                                                        if (o->m_pCDF->m_bDumpDat)
 
6377
                                                                                                mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z7]);
 
6378
                                                                                        if (o->m_bTimeDev)
 
6379
                                                                                        {
 
6380
                                                                                                ti = o->m_waSaveShowList.GetPosition(z4);
 
6381
                                                                                                if ((ti2 != -1) && (ti != -1))
 
6382
                                                                                                {
 
6383
                                                                                                        if (o->m_bSaveSeparateFiles)
 
6384
                                                                                                                mfprintf(o->m_pCDF->m_fTimeDev[ti2],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
 
6385
                                                                                                                        else mfprintf(o->m_pCDF->m_fTimeDev[0],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
 
6386
                                                                                                        if (o->m_pCDF->m_bTDAnimation)
 
6387
                                                                                                                o->m_pCDF->m_pTDAPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pCDF->m_iCombinationsEnabled+ticomb,apfa[0][z4][z5],apfa[1][z4][z7]);
 
6388
                                                                                                }
 
6389
                                                                                                ticomb++;
 
6390
                                                                                        }
 
6391
                                                                                }
 
6392
                                                                        }
 
6393
                                                                }
 
6394
                                                                if (o->m_bTimeDev && (ti2 != -1))
 
6395
                                                                {
 
6396
                                                                        if (o->m_bSaveSeparateFiles)
 
6397
                                                                                mfprintf(o->m_pCDF->m_fTimeDev[ti2],"\n");
 
6398
                                                                                        else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6399
                                                                                                mfprintf(o->m_pCDF->m_fTimeDev[0],"\n");
 
6400
                                                                }
 
6401
                                                        } // END IF CHANNELS == 2
 
6402
 
 
6403
                                                        if (g_iCDFChannels == 3)
 
6404
                                                        {
 
6405
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6406
                                                                {
 
6407
                                                                        ticomb = 0;
 
6408
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
 
6409
                                                                        {
 
6410
                                                                                for (z8=0;z8<apfa[1][z4].GetSize();z8++)
 
6411
                                                                                {
 
6412
                                                                                        for (z7=0;z7<apfa[2][z4].GetSize();z7++)
 
6413
                                                                                        {
 
6414
                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]*o->m_pCDF->m_iCombinations[2]+z8*o->m_pCDF->m_iCombinations[1]+z7] == 0)
 
6415
                                                                                                        continue;
 
6416
                                                                                                if (o->m_bBinOnlyPassedAtoms)
 
6417
                                                                                                {
 
6418
                                                                                                        if ((apba[0][z4][z5] == 0) || (apba[1][z4][z8] == 0) || (apba[2][z4][z7] == 0))
 
6419
                                                                                                                goto _3nocdfbin;
 
6420
                                                                                                }
 
6421
                                                                                                if (o->m_bBinOnlyNotPassedAtoms)
 
6422
                                                                                                {
 
6423
                                                                                                        if ((apba[0][z4][z5] != 0) && (apba[1][z4][z8] != 0) && (apba[2][z4][z7] != 0))
 
6424
                                                                                                                goto _3nocdfbin;
 
6425
                                                                                                }
 
6426
                                                                                                o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
 
6427
 
 
6428
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[0]->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8]);
 
6429
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[1]->AddToBin(apfa[0][z4][z5],apfa[2][z4][z7]);
 
6430
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[2]->AddToBin(apfa[1][z4][z8],apfa[2][z4][z7]);
 
6431
_3nocdfbin:;
 
6432
                                                                                                if (o->m_pCDF->m_bDumpDat)
 
6433
                                                                                                        mfprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f;  %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
 
6434
                                                                                        }
 
6435
                                                                                }
 
6436
                                                                        }
 
6437
                                                                }
 
6438
                                                        } // END IF CHANNELS == 3
 
6439
                                                } // IF NOT SECOND_OM
 
6440
                                        } // IF CDF
 
6441
 
 
6442
                                        for (zr=0;zr<g_iCDFChannels;zr++)
 
6443
                                        {
 
6444
                                                if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6445
                                                {
 
6446
                                                        if (o->m_bOthers)
 
6447
                                                        {
 
6448
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6449
                                                                {
 
6450
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6451
                                                                        {
 
6452
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
 
6453
                                                                                {
 
6454
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6455
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6456
                                                                                                        continue;
 
6457
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6458
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6459
                                                                                                        continue;
 
6460
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
 
6461
                                                                                }
 
6462
                                                                        }
 
6463
                                                                } else
 
6464
                                                                {
 
6465
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6466
                                                                        {
 
6467
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
 
6468
                                                                                {
 
6469
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6470
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6471
                                                                                                        continue;
 
6472
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6473
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6474
                                                                                                        continue;
 
6475
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
 
6476
                                                                                }
 
6477
                                                                        }
 
6478
                                                                }
 
6479
                                                        } else
 
6480
                                                        {
 
6481
                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[0].GetSize();z5++)
 
6482
                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[0][z5]);
 
6483
                                                        }
 
6484
                                                        if (o->m_bTimeDev && (ti2 != -1))
 
6485
                                                        {
 
6486
                                                                if (o->m_bSaveSeparateFiles)
 
6487
                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"\n");
 
6488
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6489
                                                                                        mfprintf(o->m_pRDF[zr]->m_fDist[0],"\n");
 
6490
                                                        }
 
6491
                                                }
 
6492
 
 
6493
                                                if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6494
                                                {
 
6495
                                                        if (o->m_bOthers)
 
6496
                                                        {
 
6497
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6498
                                                                {
 
6499
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6500
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
 
6501
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
 
6502
                                                                } else
 
6503
                                                                {
 
6504
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6505
                                                                        {
 
6506
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
 
6507
                                                                                {
 
6508
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6509
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6510
                                                                                                        continue;
 
6511
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6512
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6513
                                                                                                        continue;
 
6514
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
 
6515
                                                                                }
 
6516
                                                                        }
 
6517
                                                                }
 
6518
                                                        } else
 
6519
                                                        {
 
6520
                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[0].GetSize();z5++)
 
6521
                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[0][z5]);
 
6522
                                                        }
 
6523
                                                        if (o->m_bTimeDev && (ti2 != -1))
 
6524
                                                        {
 
6525
                                                                if (o->m_bSaveSeparateFiles)
 
6526
                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"\n");
 
6527
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6528
                                                                                        mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"\n");
 
6529
                                                        }
 
6530
                                                }
 
6531
 
 
6532
                                                if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6533
                                                {
 
6534
                                                        if (o->m_bOthers)
 
6535
                                                        {
 
6536
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6537
                                                                {
 
6538
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6539
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
 
6540
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
 
6541
                                                                } else
 
6542
                                                                {
 
6543
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6544
                                                                        {
 
6545
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
 
6546
                                                                                {
 
6547
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6548
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6549
                                                                                                        continue;
 
6550
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6551
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6552
                                                                                                        continue;
 
6553
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
 
6554
                                                                                }
 
6555
                                                                        }
 
6556
                                                                }
 
6557
                                                        } else
 
6558
                                                        {
 
6559
                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[0].GetSize();z5++)
 
6560
                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[0][z5]);
 
6561
                                                        }
 
6562
                                                        if (o->m_bTimeDev && (ti2 != -1))
 
6563
                                                        {
 
6564
                                                                if (o->m_bSaveSeparateFiles)
 
6565
                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"\n");
 
6566
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6567
                                                                                        mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"\n");
 
6568
                                                        }
 
6569
                                                }
 
6570
 
 
6571
                                                if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6572
                                                {
 
6573
                                                        if (o->m_bOthers)
 
6574
                                                        {
 
6575
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6576
                                                                {
 
6577
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6578
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
 
6579
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
 
6580
                                                                } else
 
6581
                                                                {
 
6582
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6583
                                                                        {
 
6584
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
 
6585
                                                                                {
 
6586
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6587
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6588
                                                                                                        continue;
 
6589
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6590
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6591
                                                                                                        continue;
 
6592
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
 
6593
                                                                                }
 
6594
                                                                        }
 
6595
                                                                }
 
6596
                                                        } else
 
6597
                                                        {
 
6598
                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[0].GetSize();z5++)
 
6599
                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[0][z5]);
 
6600
                                                        }
 
6601
                                                        if (o->m_bTimeDev && (ti2 != -1))
 
6602
                                                        {
 
6603
                                                                if (o->m_bSaveSeparateFiles)
 
6604
                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"\n");
 
6605
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6606
                                                                                        mfprintf(o->m_pADF[zr]->m_fAngle[0],"\n");
 
6607
                                                        }
 
6608
                                                }
 
6609
 
 
6610
                                                if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6611
                                                {
 
6612
                                                        if (o->m_bOthers)
 
6613
                                                        {
 
6614
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6615
                                                                {
 
6616
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6617
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
 
6618
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
 
6619
                                                                } else
 
6620
                                                                {
 
6621
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6622
                                                                        {
 
6623
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
 
6624
                                                                                {
 
6625
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6626
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6627
                                                                                                        continue;
 
6628
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6629
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6630
                                                                                                        continue;
 
6631
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
 
6632
                                                                                }
 
6633
                                                                        }
 
6634
                                                                }
 
6635
                                                        } else
 
6636
                                                        {
 
6637
                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[0].GetSize();z5++)
 
6638
                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[0][z5]);
 
6639
                                                        }
 
6640
                                                        if (o->m_bTimeDev && (ti2 != -1))
 
6641
                                                        {
 
6642
                                                                if (o->m_bSaveSeparateFiles)
 
6643
                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"\n");
 
6644
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
 
6645
                                                                                        mfprintf(o->m_pDDF[zr]->m_fAngle[0],"\n");
 
6646
                                                        }
 
6647
                                                } // End IF DDF
 
6648
 
 
6649
                                                if (g_bPlDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pPlDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6650
                                                {
 
6651
                                                        if (o->m_bOthers)
 
6652
                                                        {
 
6653
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6654
                                                                {
 
6655
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6656
                                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
 
6657
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
 
6658
                                                                } else
 
6659
                                                                {
 
6660
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6661
                                                                        {
 
6662
                                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
 
6663
                                                                                {
 
6664
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6665
                                                                                                if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6666
                                                                                                        continue;
 
6667
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6668
                                                                                                if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6669
                                                                                                        continue;
 
6670
                                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
 
6671
                                                                                }
 
6672
                                                                        }
 
6673
                                                                }
 
6674
                                                        } else
 
6675
                                                        {
 
6676
                                                                for (z5=0;z5<o->m_pPlDF[zr]->m_faData[0].GetSize();z5++)
 
6677
                                                                        o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[0][z5]);
 
6678
                                                        }
 
6679
                                                } // End IF PlDF
 
6680
 
 
6681
                                                if (g_bLiDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pLiDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
 
6682
                                                {
 
6683
                                                        if (o->m_bOthers)
 
6684
                                                        {
 
6685
                                                                if (o->m_bSecondShowMol && (zr == 1))
 
6686
                                                                {
 
6687
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
 
6688
                                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
 
6689
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
 
6690
                                                                } else
 
6691
                                                                {
 
6692
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
 
6693
                                                                        {
 
6694
                                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
 
6695
                                                                                {
 
6696
                                                                                        if (o->m_bBinOnlyPassedAtoms)
 
6697
                                                                                                if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] == 0)
 
6698
                                                                                                        continue;
 
6699
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
 
6700
                                                                                                if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] != 0)
 
6701
                                                                                                        continue;
 
6702
                                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
 
6703
                                                                                }
 
6704
                                                                        }
 
6705
                                                                }
 
6706
                                                        } else
 
6707
                                                        {
 
6708
                                                                for (z5=0;z5<o->m_pLiDF[zr]->m_faData[0].GetSize();z5++)
 
6709
                                                                        o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[0][z5]);
 
6710
                                                        }
 
6711
                                                } // End IF LiDF
 
6712
 
 
6713
                                        } // FOR CDFChannels
 
6714
 
 
6715
                                } // Ende FOR g_oaObserv.GetSize
 
6716
                        } // Ende IF [blabla]   
 
6717
        
 
6718
                        if (g_bMiddleAvg) // Referenzmolekuel mitteln
 
6719
                        {
 
6720
                                cc = 0;
 
6721
                                ti2 = (g_iSteps-2)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()+z2;
 
6722
                                // Jeden Atomtyp des Zielmolekuels durchgehen
 
6723
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
 
6724
                                {
 
6725
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
 
6726
                                        {
 
6727
                                                // Atome vertauschen, aber nicht im allerersten Durchgang hier, und nur wenn mehr als 1 Atom dieser Sorte
 
6728
                                                if ((g_iSwapAtoms) && (ti2 != 0) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3]>1))
 
6729
                                                {
 
6730
                                                        vec4 = g_pRefMol[cc];
 
6731
                                                        vec4 /= (float)ti2; // der bisherige Mittelwert des Referenzmolekuels
 
6732
                                                        tf = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],vec4); // der Abstand dieses Atoms von seinem Aequivalent im Referenzmolekuel
 
6733
                                                        ti3 = -1;
 
6734
                                                        for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
 
6735
                                                        {
 
6736
                                                                tf2 = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z5)],vec4);
 
6737
                                                                if (tf2 < tf) // Das andere Atom ist naeher am Platz im Referenzmolekuel als das eigentlich vorgesehene
 
6738
                                                                {
 
6739
                                                                        ti3 = z5;
 
6740
                                                                        tf = tf2;
 
6741
                                                                }
 
6742
                                                        }
 
6743
                                                        if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
 
6744
                                                        {
 
6745
                                                                Swap(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(ti3)]);
 
6746
                                                                pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+(cc-z4+ti3)] += 1;
 
6747
                                                                pSwapMatrix[(cc-z4+ti3)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc] += 1;
 
6748
                                                        }
 
6749
                                                } // Ende IF SwapAtoms
 
6750
                                                g_pRefMol[cc] += g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)];
 
6751
                                                cc++;
 
6752
                                        } // Ende FOR Atom des Referenzmolekuels
 
6753
                                } // Ende FOR Atomtyp des Referenzmolekuels
 
6754
                        } // Ende IF Referenzmolekuel mitteln
 
6755
                } // Ende FOR RefMol (z2)
 
6756
 
 
6757
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
 
6758
                {
 
6759
                        o = (CObservation*)g_oaObserv[z6];
 
6760
 
 
6761
                        if (o->m_pConditions != NULL)
 
6762
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
 
6763
                                        if (o->m_pConditions->m_iPassCounter[z2] != 0)
 
6764
                                                o->m_pConditions->m_iOMPassCounter[z2]++;
 
6765
 
 
6766
                        if (o->m_pConditionsOM2 != NULL)
 
6767
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
 
6768
                                        if (o->m_pConditionsOM2->m_iPassCounter[z2] != 0)
 
6769
                                                o->m_pConditionsOM2->m_iOMPassCounter[z2]++;
 
6770
 
 
6771
                        if (g_bRDF)
 
6772
                        {
 
6773
                                for (zr=0;zr<g_iCDFChannels;zr++)
 
6774
                                {
 
6775
                                        if (o->m_pRDF[zr] != NULL)
 
6776
                                                if (o->m_pRDF[zr]->m_bCalcSD)
 
6777
                                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishStep();
 
6778
                                }
 
6779
                        }
 
6780
                }
 
6781
 
 
6782
 
 
6783
//_end:;
 
6784
_endstep:
 
6785
_norefmol:
 
6786
                if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
 
6787
                {
 
6788
                        mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
 
6789
                        break;
 
6790
                }
 
6791
        } // Ende while
 
6792
 
 
6793
/*************************************************************************
 
6794
*************** Ende Hauptschleife ***************************************
 
6795
*************************************************************************/
 
6796
 
 
6797
//      fclose(fff);
 
6798
 
 
6799
_endmainloop:
 
6800
        if (g_bUseVelocities)
 
6801
                g_iSteps -= 2;
 
6802
 
 
6803
        mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
 
6804
 
 
6805
        if (g_iStride != 1)
 
6806
                mprintf("\n%d time steps processed (every %dth from %d).\n\n",g_iSteps/g_iStride,g_iStride,g_iSteps);
 
6807
                        else mprintf("\n%d time steps processed.\n\n",g_iSteps);
 
6808
 
 
6809
        fclose(g_fPos);
 
6810
        if (g_fVel != NULL)
 
6811
                fclose(g_fVel);
 
6812
        if (g_fForce != NULL)
 
6813
                fclose(g_fForce);
 
6814
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
 
6815
                fclose(g_fNPTFile);
 
6816
 
 
6817
        if (g_bDipole && g_bDumpDipoleVector)
 
6818
        {
 
6819
                fclose(g_fDumpDipole);
 
6820
                mprintf("    Dipole vectors written to file \"dipole_vectors.csv\".\n");
 
6821
                if (g_bDumpDipoleXYZ)
 
6822
                {
 
6823
                        fclose(g_fDumpDipoleXYZ);
 
6824
                        mprintf("    Dipole XYZ trajectory written to file \"dipole_vectors.xyz\".\n");
 
6825
                }
 
6826
                mprintf("\n");
 
6827
        }
 
6828
 
 
6829
 
 
6830
        /************ Interface **************/
 
6831
        Interface_AfterAnalysis();
 
6832
 
 
6833
 
 
6834
        if (g_bVoro)
 
6835
        {
 
6836
                g_pVoroWrapper->Finish();
 
6837
        }
 
6838
 
 
6839
        if (g_bVoid)
 
6840
        {
 
6841
                g_pVoroAnalysis->Finish();
 
6842
        }
 
6843
 
 
6844
        if (g_bReact)
 
6845
        {
 
6846
                if (!ReactSecondRun)
 
6847
                {
 
6848
                        g_pReact->Finish();
 
6849
                        g_pReact->DumpMolecules();
 
6850
                        g_pReact->CreateOutput();
 
6851
                }
 
6852
                if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
 
6853
                {
 
6854
                        if (!ReactSecondRun)
 
6855
                        {
 
6856
                                mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
 
6857
                                ReactSecondRun = true;
 
6858
                                goto _beginmain;
 
6859
                        } else
 
6860
                        {
 
6861
                                mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
 
6862
                        }
 
6863
                }
 
6864
        }
 
6865
        g_bAbortAnalysis = true;
 
6866
 
 
6867
        if (g_bSaveCondSnapshot)
 
6868
        {
 
6869
                fclose(g_fSaveCondFile);
 
6870
                mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
 
6871
        }
 
6872
 
 
6873
        if (g_bMicroHet)
 
6874
        {
 
6875
                mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
 
6876
                for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
 
6877
                {
 
6878
                        mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
 
6879
                        mprintf(WHITE,"  * Observation %d: %s\n",z+1,mho->m_sName);
 
6880
 
 
6881
                        if (mho->m_bCSV)
 
6882
                        {
 
6883
        /*                      mprintf("      Creating Microheterogeneity plot...\n");
 
6884
                                sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
 
6885
                                mho->BuildSlices(buf);*/
 
6886
 
 
6887
                                mprintf("      Creating entry plot...\n");
 
6888
                                sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
 
6889
                                mho->BuildZeroPlot(buf,true);
 
6890
                        }
 
6891
 
 
6892
                        if (mho->m_bCDF)
 
6893
                        {
 
6894
                                if (mho->m_bCDF_Dens)
 
6895
                                        mho->BuildCDF(0,z,multibuf);
 
6896
 
 
6897
                                if (mho->m_bCDF_Tot)
 
6898
                                        mho->BuildCDF(1,z,multibuf);
 
6899
 
 
6900
                                if (mho->m_bCDF_Mode3)
 
6901
                                        mho->BuildCDF(2,z,multibuf);
 
6902
                        }
 
6903
                }
 
6904
                mprintf("\n");
 
6905
        }
 
6906
 
 
6907
        if (g_bClusterAnalysis)
 
6908
        {
 
6909
                mprintf(WHITE,"*** Cluster Analysis\n\n");
 
6910
                g_pClusterAnalysis->BuildClusterDistribution();
 
6911
                g_pClusterAnalysis->WriteOutput(multibuf);
 
6912
        }
 
6913
 
 
6914
        if (g_bFESA)
 
6915
        {
 
6916
                mprintf(WHITE,"*** FES Analysis\n\n");
 
6917
                g_pFESA->Finish();
 
6918
        }
 
6919
 
 
6920
/*      if (g_bSFac)
 
6921
        {
 
6922
                g_pSFac->Finish();
 
6923
        }*/
 
6924
 
 
6925
        if (g_bBondACF)
 
6926
        {
 
6927
                mprintf(WHITE,"*** Bond autocorrelation function\n");
 
6928
                if (g_bBondACFDebug)
 
6929
                {
 
6930
                        mprintf("    Writing \"bondacf.agr\"...\n");
 
6931
 
 
6932
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
6933
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
6934
                        
 
6935
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
 
6936
                        gc->SetRangeY(0,250);
 
6937
                        gc->MakeTicks();
 
6938
                        gc->SetLabelX("Time [ps]");
 
6939
                        gc->SetLabelY("Bond length [pm]");
 
6940
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
6941
                        {
 
6942
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
6943
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
6944
                                {
 
6945
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
 
6946
                                        gc->AddDataset();
 
6947
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
 
6948
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
 
6949
                                }
 
6950
                        }
 
6951
                        gc->WriteAgr("bondacf.agr",false);
 
6952
                        delete gc;
 
6953
                }
 
6954
                mprintf("    Differentiating bond length developments...\n");
 
6955
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
6956
                {
 
6957
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
6958
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
6959
                        {
 
6960
                                bond = (CMolBond*)sm->m_oaBonds[z3];
 
6961
                                for (z4=0;z4<bond->m_faData.GetSize()-1;z4++)
 
6962
                                        bond->m_faData[z4] = bond->m_faData[z4+1] - bond->m_faData[z4];
 
6963
                        }
 
6964
                }
 
6965
                if (g_bBondACFDebug)
 
6966
                {
 
6967
                        mprintf("    Writing \"bondacf_diff.agr\"...\n");
 
6968
 
 
6969
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
6970
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
6971
                        
 
6972
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
 
6973
                        gc->SetRangeY(-15,15);
 
6974
                        gc->MakeTicks();
 
6975
                        gc->SetLabelX("Time [ps]");
 
6976
                        gc->SetLabelY("Bond length change rate");
 
6977
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
6978
                        {
 
6979
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
6980
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
6981
                                {
 
6982
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
 
6983
                                        gc->AddDataset();
 
6984
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
 
6985
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
 
6986
                                }
 
6987
                        }
 
6988
                        gc->WriteAgr("bondacf_diff.agr",false);
 
6989
                        delete gc;
 
6990
                }
 
6991
                mprintf("    Autocorrelating bond length developments...\n");
 
6992
                mprintf(WHITE,"      [");
 
6993
                tfs = 0;
 
6994
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
6995
                {
 
6996
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
6997
                        tfs += sm->m_oaBonds.GetSize();
 
6998
                }
 
6999
                tfs /= 60.0;
 
7000
                ti2 = 0;
 
7001
/*              fft = new CFFT();
 
7002
                fft->PrepareFFT_C2C(g_iSteps*2);
 
7003
                fft2 = new CFFT();
 
7004
                fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
 
7005
 
 
7006
                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
 
7007
                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7008
                
 
7009
                ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
 
7010
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
7011
                {
 
7012
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
7013
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
7014
                        {
 
7015
                                if (fmod(ti2,tfs) < 1.0)
 
7016
                                        mprintf(WHITE,"#");
 
7017
                                bond = (CMolBond*)sm->m_oaBonds[z3];
 
7018
                                ac->AutoCorrelate(&bond->m_faData,&tempfa);
 
7019
                                bond->m_faData.CopyFrom(&tempfa);
 
7020
                                ti2++;
 
7021
                        }
 
7022
                }
 
7023
                delete ac;
 
7024
                mprintf(WHITE,"]\n");
 
7025
                if (g_bBondACFDebug)
 
7026
                {
 
7027
                        mprintf("    Writing \"bondacf_autocorr.agr\"...\n");
 
7028
 
 
7029
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
7030
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7031
                        
 
7032
                        gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
 
7033
                        gc->SetRangeY(-25,25);
 
7034
                        gc->MakeTicks();
 
7035
                        gc->SetLabelX("Time [ps]");
 
7036
                        gc->SetLabelY("ACF(Bond length change rate)");
 
7037
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
 
7038
                        {
 
7039
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
 
7040
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
 
7041
                                {
 
7042
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
 
7043
                                        gc->AddDataset();
 
7044
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7045
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
 
7046
                                }
 
7047
                        }
 
7048
                        gc->WriteAgr("bondacf_autocorr.agr",false);
 
7049
                        delete gc;
 
7050
                }
 
7051
                mprintf("    Merging equivalent Bonds...\n");
 
7052
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7053
                {
 
7054
                        m = (CMolecule*)g_oaMolecules[z0];
 
7055
                        sm2 = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7056
                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
 
7057
                        {
 
7058
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
 
7059
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7060
                                {
 
7061
                                        bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
 
7062
                                        for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
 
7063
                                        {
 
7064
                                                bond = (CMolBond*)bg->m_oaBonds[z4];
 
7065
                                                for (z5=0;z5<g_iBondACFDepth;z5++)
 
7066
                                                        ((CMolBond*)((CMolBondGroup*)sm2->m_oaBondGroups[z3])->m_oaBonds[0])->m_faData[z5] += bond->m_faData[z5];
 
7067
                                        }
 
7068
                                }
 
7069
                        }
 
7070
                }
 
7071
                if (g_bBondACFSymmetrize)
 
7072
                {
 
7073
                        mprintf("    Symmetrizing bond ACFs...\n");
 
7074
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7075
                        {
 
7076
                                m = (CMolecule*)g_oaMolecules[z0];
 
7077
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7078
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7079
                                {
 
7080
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7081
                                        bond->m_faData.SetSize(2*g_iBondACFDepth);
 
7082
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7083
                                                bond->m_faData[z4+g_iBondACFDepth] = bond->m_faData[z4];
 
7084
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7085
                                                bond->m_faData[z4] = bond->m_faData[2*g_iBondACFDepth-z4-1];
 
7086
                                }
 
7087
                        }
 
7088
                        g_iBondACFDepth *= 2;
 
7089
                }
 
7090
                if (g_bBondACFWindow)
 
7091
                {
 
7092
                        mprintf("    Applying Window Function...\n");
 
7093
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7094
                        {
 
7095
                                m = (CMolecule*)g_oaMolecules[z0];
 
7096
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7097
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7098
                                {
 
7099
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7100
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7101
                                                bond->m_faData[z4] *= (float)pow(sin(z4*Pi/(bond->m_faData.GetSize()-1)),2);
 
7102
                                }
 
7103
                        }
 
7104
                }
 
7105
                if (g_bBondACFNormalize)
 
7106
                {
 
7107
                        mprintf("    Normalizing bond ACFs...\n");
 
7108
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7109
                        {
 
7110
                                m = (CMolecule*)g_oaMolecules[z0];
 
7111
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7112
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7113
                                {
 
7114
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7115
                                        tf = 0;
 
7116
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7117
                                                if (tf < bond->m_faData[z4])
 
7118
                                                        tf = bond->m_faData[z4];
 
7119
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
 
7120
                                                bond->m_faData[z4] /= (float)tf;
 
7121
                                }
 
7122
                        }
 
7123
                }
 
7124
                mprintf("    Writing \"bondacf_ac_merged.agr\"...\n");
 
7125
 
 
7126
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
7127
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7128
                
 
7129
                gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
 
7130
                gc->SetRangeY(-200,200);
 
7131
                gc->MakeTicks();
 
7132
                gc->SetLabelX("Time [ps]");
 
7133
                gc->SetLabelY("Sum ACF(Bond length change rate)");
 
7134
                gc->CurrentGraph()->m_bLegend = true;
 
7135
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7136
                {
 
7137
                        m = (CMolecule*)g_oaMolecules[z0];
 
7138
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7139
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7140
                        {
 
7141
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7142
                                gc->AddDataset();
 
7143
                                sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
 
7144
                                gc->SetDatasetName(buf);
 
7145
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
 
7146
                                for (z4=0;z4<g_iBondACFDepth;z4++)
 
7147
                                        gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
 
7148
                        }
 
7149
                }
 
7150
                gc->WriteAgr("bondacf_ac_merged.agr",false);
 
7151
                delete gc;
 
7152
                mprintf("    Applying Fourier Transformation...\n");
 
7153
 
 
7154
                try { fft = new CFFT(); } catch(...) { fft = NULL; }
 
7155
                if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7156
                
 
7157
                fft->PrepareFFT_C2C(g_iBondACFDepth);
 
7158
                tf3 = 0;
 
7159
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7160
                {
 
7161
                        m = (CMolecule*)g_oaMolecules[z0];
 
7162
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7163
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7164
                        {
 
7165
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7166
                                for (z4=0;z4<g_iBondACFDepth;z4++)
 
7167
                                {
 
7168
                                        fft->m_pInput[z4*2] = bond->m_faData[z4];
 
7169
                                        fft->m_pInput[z4*2+1] = 0;
 
7170
                                }
 
7171
                                fft->DoFFT();
 
7172
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7173
                                {
 
7174
                                        bond->m_faData[z4] = (float)(pow(fft->m_pOutput[z4*2],2) + pow(fft->m_pOutput[z4*2+1],2)) / g_iBondACFDepth;
 
7175
                                        if (bond->m_faData[z4] > tf3)
 
7176
                                                tf3 = bond->m_faData[z4];
 
7177
                                }
 
7178
                        }
 
7179
                }
 
7180
                delete fft;
 
7181
                mprintf("    Writing \"bond_spectrum.agr\"...\n");
 
7182
 
 
7183
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
7184
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7185
                
 
7186
                gc->SetRangeX(0,4000.0);
 
7187
                gc->SetRangeY(0,tf3*1.1);
 
7188
                gc->MakeTicks();
 
7189
                gc->SetLabelX("Wave number [1/cm]");
 
7190
                gc->SetLabelY("Intensity");
 
7191
                gc->CurrentGraph()->m_bInvertXAxis = true;
 
7192
                gc->CurrentGraph()->m_bLegend = true;
 
7193
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7194
                {
 
7195
                        m = (CMolecule*)g_oaMolecules[z0];
 
7196
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7197
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7198
                        {
 
7199
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7200
                                gc->AddDataset();
 
7201
                                sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
 
7202
                                gc->SetDatasetName(buf);
 
7203
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
 
7204
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7205
                                        gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,bond->m_faData[z4]);
 
7206
                        }
 
7207
                }
 
7208
                gc->WriteAgr("bond_spectrum.agr",false);
 
7209
                delete gc;
 
7210
                for (z5=1;z5<5;z5++)
 
7211
                {
 
7212
                        mprintf("    Smoothing spectrum, degree %d...\n",z5);
 
7213
                        mprintf("    Writing \"bond_spectrum_s%d.agr\"...\n",z5);
 
7214
 
 
7215
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
 
7216
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7217
                        
 
7218
                        gc->SetRangeX(0,4000.0);
 
7219
                        gc->SetRangeY(0,tf3*1.1);
 
7220
                        gc->MakeTicks();
 
7221
                        gc->SetLabelX("Wave number [1/cm]");
 
7222
                        gc->SetLabelY("Intensity");
 
7223
                        gc->CurrentGraph()->m_bInvertXAxis = true;
 
7224
                        gc->CurrentGraph()->m_bLegend = true;
 
7225
 
 
7226
                        try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
 
7227
                        if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7228
                        
 
7229
                        gc2->SetRangeX(0,4000.0);
 
7230
                        gc2->SetRangeY(0,tf3*1.1);
 
7231
                        gc2->MakeTicks();
 
7232
                        gc2->SetLabelX("Wave number [1/cm]");
 
7233
                        gc2->SetLabelY("Intensity");
 
7234
                        gc2->CurrentGraph()->m_bInvertXAxis = true;
 
7235
                        gc2->CurrentGraph()->m_bLegend = true;
 
7236
                        
 
7237
                        tempfa.SetSize(g_iBondACFDepth/2);
 
7238
                        tempfa2.SetSize(g_iBondACFDepth/2);
 
7239
 
 
7240
                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7241
                                tempfa2[z4] = 0;
 
7242
 
 
7243
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
 
7244
                        {
 
7245
                                m = (CMolecule*)g_oaMolecules[z0];
 
7246
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
 
7247
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
 
7248
                                {
 
7249
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
 
7250
 
 
7251
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7252
                                        {
 
7253
                                                tf = 0;
 
7254
                                                tf2 = 0;
 
7255
                                                for (z6=-z5;z6<=z5;z6++)
 
7256
                                                {
 
7257
                                                        if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
 
7258
                                                                continue;
 
7259
                                                        tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
 
7260
                                                        tf2 += 1.0 / (pow((double)z6,2)+1.0);
 
7261
                                                }
 
7262
                                                tempfa[z4] = (float)(tf / tf2);
 
7263
                                                tempfa2[z4] += tempfa[z4];
 
7264
                                        }
 
7265
 
 
7266
                                        gc->AddDataset();
 
7267
                                        gc2->AddDataset();
 
7268
                                        sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
 
7269
                                        gc->SetDatasetName(buf);
 
7270
                                        gc2->SetDatasetName(buf);
 
7271
                                        ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
 
7272
                                        ((CGraceDataset*)gc2->CurrentGraph()->m_oaDatasets[gc2->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
 
7273
 
 
7274
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7275
                                                gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa[z4]);
 
7276
 
 
7277
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
 
7278
                                                gc2->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa2[z4]);
 
7279
                                }
 
7280
                        }
 
7281
        
 
7282
                        sprintf(buf,"bond_spectrum_s%d.agr",z5);
 
7283
                        gc->WriteAgr(buf,false);
 
7284
                        delete gc;
 
7285
 
 
7286
                        mprintf("    Writing \"bond_spectrum_cumulative_s%d.agr\"...\n",z5);
 
7287
                        sprintf(buf,"bond_spectrum_cumulative_s%d.agr",z5);
 
7288
                        gc2->WriteAgr(buf,false);
 
7289
                        delete gc2;
 
7290
                }
 
7291
        }
 
7292
 
 
7293
        if (g_bSaveRefEnv)
 
7294
        {
 
7295
                fclose(g_fRefEnv);
 
7296
                mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
 
7297
                if (g_bTDO)
 
7298
                {
 
7299
#ifdef TARGET_WINDOWS
 
7300
                        sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
 
7301
#else
 
7302
                        sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
 
7303
#endif
 
7304
                        mprintf("Saving TDO PyMol script as %s.\n",buf);
 
7305
                        tfi = OpenFileWrite(buf,true);
 
7306
#ifdef TARGET_WINDOWS
 
7307
                        mfprintf(tfi,"pymolwin ");
 
7308
#else
 
7309
                        mfprintf(tfi,"pymol ");
 
7310
#endif
 
7311
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
 
7312
                                mfprintf(tfi,"tdo_%s_%d_%06d%s.xyz ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],multibuf);
 
7313
                        mfprintf(tfi,"-d \"set sphere_scale,0.25\" ");
 
7314
                        mfprintf(tfi,"-d \"set stick_radius,0.17\" ");
 
7315
                        mfprintf(tfi,"-d \"set ray_trace_mode,1\" ");
 
7316
                        mfprintf(tfi,"-d \"set fog,0\" ");
 
7317
                        mfprintf(tfi,"-d \"set ray_trace_fog,0\" ");
 
7318
                        mfprintf(tfi,"-d \"set bg_rgb,(1,1,1)\" ");
 
7319
                        mfprintf(tfi,"-d \"set ray_shadow,0\" ");
 
7320
                        mfprintf(tfi,"-d \"set ray_shadows,0\" ");
 
7321
                        mfprintf(tfi,"-d \"set ray_interior_shadows,0\" ");
 
7322
                        mfprintf(tfi,"-d \"show sticks; show spheres\" ");
 
7323
                        
 
7324
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
 
7325
                        {
 
7326
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
 
7327
                                {
 
7328
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
 
7329
                                                continue;
 
7330
                                        mfprintf(tfi,"-d \"set_color mol_%s_%d, [%d,%d,%d]\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CAtom*)g_oaAtoms[z2])->m_pElement->ColorR((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorG((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorB((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching));
 
7331
                                }
 
7332
                        }
 
7333
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
 
7334
                        {
 
7335
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
 
7336
                                {
 
7337
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
 
7338
                                                continue;
 
7339
                                        mfprintf(tfi,"-d \"color mol_%s_%d, tdo_%s_%d_%06d and name %s\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],((CAtom*)g_oaAtoms[z2])->m_sName);
 
7340
                                }
 
7341
                        }
 
7342
                        mfprintf(tfi,"\n");
 
7343
                        fclose(tfi);
 
7344
#ifdef TARGET_LINUX
 
7345
                        sprintf(buf,"chmod 755 tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
 
7346
                        mprintf("Executing \"%s\"...\n",buf);
 
7347
                        system(buf);
 
7348
#endif
 
7349
                }
 
7350
        }
 
7351
        if (g_bCutCluster)
 
7352
        {
 
7353
                fclose(g_fRefEnv);
 
7354
                mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
 
7355
        }
 
7356
 
 
7357
        if (g_bSaveJustTraj)
 
7358
        {
 
7359
                fclose(g_fSaveJustTraj);
 
7360
/*              strcpy(buf,g_sInputTraj);
 
7361
                p = strrchr(buf,'.');
 
7362
                *p = 0;
 
7363
                strcat(buf,multibuf);
 
7364
                strcat(buf,".out.xyz");*/
 
7365
//              mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
 
7366
        }
 
7367
 
 
7368
        if (g_bIRSpec && g_bGlobalIR)
 
7369
        {
 
7370
                mprintf(WHITE,"\n*** Global IR Spectrum\n");
 
7371
                g_pGlobalIR->Finish(multibuf);
 
7372
        }
 
7373
 
 
7374
        if (g_bVACF && g_bGlobalVACF)
 
7375
        {
 
7376
                mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
 
7377
                if (g_pGlobalVACF->m_bDerivative)
 
7378
                {
 
7379
                        mprintf("    Deriving velocities...\n");
 
7380
                        mprintf(WHITE,"      [");
 
7381
                        tfs = g_iGesAtomCount/60.0;
 
7382
                        ti = 0;
 
7383
                        for (z2=0;z2<g_iGesAtomCount;z2++)
 
7384
                        {
 
7385
                                if (fmod(z2,tfs) < 1)
 
7386
                                        mprintf(WHITE,"#");
 
7387
 
 
7388
                                if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
 
7389
                                        continue;
 
7390
 
 
7391
                                ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
 
7392
 
 
7393
                                for (z3=0;z3<(int)g_iSteps*3-3;z3++)
 
7394
                                        (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
 
7395
 
 
7396
                                ti++;
 
7397
                        }
 
7398
                        mprintf(WHITE,"]\n");
 
7399
                }
 
7400
                if (g_bVACFCacheMode)
 
7401
                {
 
7402
                        tfs = g_iGesAtomCount/60.0;
 
7403
/*                      if (g_bACFFFT)
 
7404
                        {*/
 
7405
                                mprintf("    Autocorrelating cached vectors...\n");
 
7406
                                mprintf(WHITE,"      [");
 
7407
/*                              fft = new CFFT();
 
7408
                                fft->PrepareFFT_C2C(2*g_iSteps);
 
7409
                                fft2 = new CFFT();
 
7410
                                fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
 
7411
 
 
7412
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
 
7413
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7414
                                
 
7415
                                ptfa2->SetSize(g_iSteps);
 
7416
 
 
7417
                                try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
 
7418
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7419
                                
 
7420
                                ptfa3->SetSize(g_iSteps);
 
7421
 
 
7422
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
 
7423
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7424
                                
 
7425
                                ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
 
7426
                                ti = 0;
 
7427
                                for (z2=0;z2<g_iGesAtomCount;z2++)
 
7428
                                {
 
7429
                                        if (fmod(z2,tfs) < 1.0)
 
7430
                                                mprintf(WHITE,"#");
 
7431
 
 
7432
                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
 
7433
                                                continue;
 
7434
 
 
7435
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
 
7436
 
 
7437
                                        if (g_pGlobalVACF->m_bMassWeight)
 
7438
                                                tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
 
7439
                                                        else tf = 1.0f;
 
7440
 
 
7441
                                        /* X */
 
7442
                                        for (z3=0;z3<(int)g_iSteps;z3++)
 
7443
                                                (*ptfa2)[z3] = (*ptfa)[z3*3];
 
7444
                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
7445
                //                      mprintf("Global Atom %d X: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
7446
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
 
7447
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
 
7448
 
 
7449
                                        /* Y */
 
7450
                                        for (z3=0;z3<(int)g_iSteps;z3++)
 
7451
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+1];
 
7452
                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
7453
                //                      mprintf("Global Atom %d Y: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
7454
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
 
7455
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
 
7456
 
 
7457
                                        /* Z */
 
7458
                                        for (z3=0;z3<(int)g_iSteps;z3++)
 
7459
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+2];
 
7460
                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
7461
                //                      mprintf("Global Atom %d Z: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
7462
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
 
7463
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
 
7464
 
 
7465
                                        ti++;
 
7466
                                }
 
7467
                                delete ac;
 
7468
                                delete ptfa2;
 
7469
                                delete ptfa3;
 
7470
        /*                      delete fft2;
 
7471
                                delete fft;*/
 
7472
/*                      } else
 
7473
                        {
 
7474
                                mprintf("    Autocorrelating cached vectors...\n");
 
7475
                                mprintf(WHITE,"      [");
 
7476
                                for (z2=0;z2<g_iGesAtomCount;z2++)
 
7477
                                {
 
7478
                                        if (fmod(z2,tfs) < 1.0)
 
7479
                                                mprintf(WHITE,"#");
 
7480
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
 
7481
                                        for (z3=0;z3<g_pGlobalVACF->m_iSize;z3+=g_pGlobalVACF->m_iStride) // Das ist das Tau
 
7482
                                        {
 
7483
                                                tf = 0;
 
7484
                                                for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
 
7485
                                                        tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
 
7486
                                                g_pGlobalVACF->m_pData[z3/g_pGlobalVACF->m_iStride] += tf/(g_iSteps-z3);
 
7487
                                        }
 
7488
                                }
 
7489
                        }*/
 
7490
                        mprintf(WHITE,"]\n");
 
7491
                        mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
 
7492
                        g_pGlobalVACF->MultiplyCached(1.0/g_iGesAtomCount);
 
7493
 
 
7494
                        if (g_pGlobalVACF->m_bDecomposeModes)                                                                                                                                                                                                                               
 
7495
                        {                                                                                                                                                                                                                                                                   
 
7496
                                tfs = g_iGesAtomCount*g_iGesAtomCount*3/60.0;                                                                                                                                                                                                               
 
7497
                                                                                                                                                                                                                                                                                           
 
7498
                                mprintf("    Allocating cross-correlation matrix (%s)...\n",FormatBytes((double)sizeof(float)*g_pGlobalVACF->m_iSize*g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3));                                                                         
 
7499
                                                                                                                                                                                                                                                                                           
 
7500
                                g_pGlobalVACF->m_oaCCRMatrix.SetMaxSize(g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);                                                                                                                                                       
 
7501
                                for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)                                                                                                                                                                                                            
 
7502
                                {                                                                                                                                                                                                                                                           
 
7503
                                        for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)                                                                                                                                                                                                    
 
7504
                                        {                                                                                                                                                                                                                                                   
 
7505
                        //                      mprintf("X: %X\n",g_pGlobalVACF);                                                                                                                                                                                                           
 
7506
                        //                      mprintf("%d - %d -->\n",z2,z3);                                                                                                                                                                                                             
 
7507
                                                try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }                                                                                                                                                                              
 
7508
                                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                         
 
7509
                                                                                                                                                                                                                                                                                           
 
7510
                        //                      mprintf("A\n");                                                                                                                                                                                                                             
 
7511
                                                ptfa->SetSize(g_pGlobalVACF->m_iSize);                                                                                                                                                                                                      
 
7512
                        //                      mprintf("B\n");                                                                                                                                                                                                                             
 
7513
                        //                      mprintf("X2: %X\n",g_pGlobalVACF);                                                                                                                                                                                                          
 
7514
                                                g_pGlobalVACF->m_oaCCRMatrix.Add(ptfa);                                                                                                                                                                                                     
 
7515
                        //                      mprintf("%d - %d <--\n",z2,z3);                                                                                                                                                                                                             
 
7516
                                        }                                                                                                                                                                                                                                                   
 
7517
                                }                                                                                                                                                                                                                                                           
 
7518
                                                                                                                                                                                                                                                                                           
 
7519
                                mprintf("    Computing %d cross-correlations...\n",g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);                                                                                                                                            
 
7520
                                mprintf(WHITE,"      [");                                                                                                                                                                                                                                   
 
7521
                                                                                                                                                                                                                                                                                           
 
7522
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }                                                                                                                                                                                            
 
7523
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                        
 
7524
                                                                                                                                                                                                                                                                                            
 
7525
                                ptfa2->SetSize(g_iSteps);                                                                                                                                                                                                                                   
 
7526
                                                                                                                                                                                                                                                                                           
 
7527
                                try { ptfa2b = new CxFloatArray("main():ptfa2b"); } catch(...) { ptfa2b = NULL; }                                                                                                                                                                                          
 
7528
                                if (ptfa2b == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                       
 
7529
                                                                                                                                                                                                                                                                                            
 
7530
                                ptfa2b->SetSize(g_iSteps);                                                                                                                                                                                                                                  
 
7531
                                                                                                                                                                                                                                                                                           
 
7532
                                try { ccr = new CCrossCorrelation(); } catch(...) { ccr = NULL; }                                                                                                                                                                                           
 
7533
                                if (ccr == NULL) NewException((double)sizeof(CCrossCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);                                                                                                                                                     
 
7534
                                                                                                                                                                                                                                                                                            
 
7535
                                ccr->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);                                                                                                                                                                                                       
 
7536
                                                                                                                                                                                                                                                                                           
 
7537
                                ti = 0;                                                                                                                                                                                                                                                     
 
7538
                                                                                                                                                                                                                                                                                           
 
7539
                                for (z2=0;z2<g_iGesAtomCount;z2++)                                                                                                                                                                                                                          
 
7540
                                {                                                                                                                                                                                                                                                           
 
7541
                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))                                                                                                                                                                                
 
7542
                                                continue;                                                                                                                                                                                                                                   
 
7543
                                                                                                                                                                                                                                                                                           
 
7544
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];                                                                                                                                                                                                 
 
7545
                                                                                                                                                                                                                                                                                           
 
7546
                                        for (z2b=0;z2b<3;z2b++)                                                                                                                                                                                                                             
 
7547
                                        {                                                                                                                                                                                                                                                   
 
7548
                                                ti2 = 0;                                                                                                                                                                                                                                    
 
7549
                                                for (z3=0;z3<g_iGesAtomCount;z3++)                                                                                                                                                                                                          
 
7550
                                                {                                                                                                                                                                                                                                           
 
7551
                                                        if (fmod(z2*g_iGesAtomCount*3+z2b*g_iGesAtomCount+z3,tfs) < 1.0)                                                                                                                                                                    
 
7552
                                                                mprintf(WHITE,"#");                                                                                                                                                                                                         
 
7553
                                                                                                                                                                                                                                                                                           
 
7554
                                                        if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z3] > 1000))                                                                                                                                                                
 
7555
                                                                continue;                                                                                                                                                                                                                   
 
7556
                                                                                                                                                                                                                                                                                           
 
7557
                                                        ptfab = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti2];                                                                                                                                                                               
 
7558
                                                                                                                                                                                                                                                                                           
 
7559
                                                        if (g_pGlobalVACF->m_bMassWeight)                                                                                                                                                                                                   
 
7560
                                                                tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;                                                                                                                                                     
 
7561
                                                                        else tf = 1.0f;                                                                                                                                                                                                     
 
7562
                                                                                                                                                                                                                                                                                           
 
7563
                                                        for (z3b=0;z3b<3;z3b++)                                                                                                                                                                                                             
 
7564
                                                        {                                                                                                                                                                                                                                   
 
7565
                                                                for (z4=0;z4<(int)g_iSteps;z4++)                                                                                                                                                                                            
 
7566
                                                                {                                                                                                                                                                                                                           
 
7567
                                                                        (*ptfa2)[z4] = (*ptfa)[z4*3+z2b];                                                                                                                                                                                   
 
7568
                                                                        (*ptfa2b)[z4] = (*ptfab)[z4*3+z3b];                                                                                                                                                                                 
 
7569
                                                                }                                                                                                                                                                                                                           
 
7570
                                                                ccr->CrossCorrelate(ptfa2,ptfa2b,(CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b]);                                                          
 
7571
                                        //                      mprintf("z2=%d, z2b=%d, z3=%d, z3b=%d, I=%d\n",z2,z2b,z3,z3b,ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b);                                                                           
 
7572
                                                        }                                                                                                                                                                                                                                   
 
7573
                                                                                                                                                                                                                                                                                           
 
7574
                                                        ti2++;                                                                                                                                                                                                                              
 
7575
                                                }                                                                                                                                                                                                                                           
 
7576
                                        }                                                                                                                                                                                                                                                   
 
7577
                                        ti++;                                                                                                                                                                                                                                               
 
7578
                                }                                                                                                                                                                                                                                                           
 
7579
                                delete ccr;                                                                                                                                                                                                                                                 
 
7580
                                delete ptfa2;                                                                                                                                                                                                                                               
 
7581
                                delete ptfa2b;                                                                                                                                                                                                                                              
 
7582
                                                                                                                                                                                                                                                                                           
 
7583
                                mprintf(WHITE,"]\n");                                                                                                                                                                                                                                       
 
7584
                                                                                                                                                                                                                                                                                           
 
7585
                /*              for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)                                                                                                                                                                                                            
 
7586
                                {                                                                                                                                                                                                                                                           
 
7587
                                        for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)                                                                                                                                                                                                    
 
7588
                                                mprintf("%6G  ",((CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[z2*g_pGlobalVACF->m_iParticles*3+z3])->GetAt(0));                                                                                                                              
 
7589
                                        mprintf("\n");                                                                                                                                                                                                                                      
 
7590
                                }*/                                                                                                                                                                                                                                                         
 
7591
                                                                                                                                                                                                                                                                                           
 
7592
                                Interface_DecomposeModes(g_pGlobalVACF->m_iParticles*3, &g_pGlobalVACF->m_oaCCRMatrix);                                                                                                                                                                     
 
7593
                                                                                                                                                                                                                                                                                           
 
7594
                        } // END IF m_bDecomposeModes                                                                                                                                                                                                                                       
 
7595
                                                                                                                                                                                                                                                                                           
 
7596
                } else g_pGlobalVACF->Multiply(1.0/g_iGesAtomCount);
 
7597
 
 
7598
                mprintf("    Saving global VACF as acf_global%s.csv ...\n",multibuf);
 
7599
                g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
 
7600
 
 
7601
                if (g_pGlobalVACF->m_iMirror != 0)
 
7602
                {
 
7603
                        mprintf("    Mirroring global VACF...\n");
 
7604
                        g_pGlobalVACF->Mirror(g_pGlobalVACF->m_iMirror);
 
7605
                        mprintf("    Saving mirrored global VACF as acf_global.m%s.csv ...\n",multibuf);
 
7606
                        g_pGlobalVACF->WriteACF("acf_global.m",multibuf,".csv");
 
7607
                }
 
7608
 
 
7609
                if (g_pGlobalVACF->m_bWindowFunction)
 
7610
                {
 
7611
                        mprintf("    Applying window function...\n");
 
7612
                        g_pGlobalVACF->Window();
 
7613
                        mprintf("    Saving windowed global VACF as acf_global.w%s.csv ...\n",multibuf);
 
7614
                        g_pGlobalVACF->WriteACF("acf_global.w",multibuf,".csv");
 
7615
                }
 
7616
 
 
7617
                if (g_pGlobalVACF->m_bSpectrum)
 
7618
                {
 
7619
                        mprintf("    Performing Fourier transformation...\n");
 
7620
 
 
7621
                        try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
 
7622
                        if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7623
                        
 
7624
                        g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
 
7625
                        g_pGlobalVACF->Transform(g_pFFT);
 
7626
                        delete g_pFFT;
 
7627
                        g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
 
7628
                        if (g_pGlobalVACF->m_bACF_DB)
 
7629
                        {
 
7630
                                mprintf("    Normalising spectrum to decibel...\n");
 
7631
                                g_pGlobalVACF->m_pSpectrum->MakeDB();
 
7632
                        }/* else
 
7633
                        {
 
7634
                                mprintf("    Normalising integral of spectrum...\n");
 
7635
                                g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
 
7636
                        }*/
 
7637
                        if (g_pGlobalVACF->m_bWindowFunction)
 
7638
                        {
 
7639
                                mprintf("    Saving spectrum as power_global_w%s.csv ...\n",multibuf);
 
7640
                                g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
 
7641
                        } else
 
7642
                        {
 
7643
                                mprintf("    Saving spectrum as power_global%s.csv ...\n",multibuf);
 
7644
                                g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
 
7645
                        }
 
7646
                }
 
7647
                mprintf("\n");
 
7648
        }
 
7649
 
 
7650
        if (g_bVFDF)
 
7651
        {
 
7652
                for (z=0;z<g_iVFCorrCount;z++)
 
7653
                        fclose(g_fVFCorr[z]);
 
7654
        }
 
7655
 
 
7656
 
 
7657
//      fclose(ff);
 
7658
 
 
7659
        for (z=0;z<g_oaObserv.GetSize();z++)
 
7660
        {
 
7661
                o = (CObservation*)g_oaObserv[z];
 
7662
                mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
 
7663
 
 
7664
                if (o->m_pConditions != NULL)
 
7665
                {
 
7666
                        if (o->m_bSecondShowMol)
 
7667
                                mprintf(WHITE,"\n#### Condition between RM and 1st OM ####\n");
 
7668
 
 
7669
                        o->m_pConditions->PrintData();
 
7670
                        if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
 
7671
                                o->m_pConditions->PrintTable();
 
7672
                }
 
7673
 
 
7674
                if ((o->m_bSecondShowMol) && (o->m_pConditionsOM2 != NULL))
 
7675
                {
 
7676
                        mprintf(WHITE,"\n\n#### Condition between RM and 2nd OM ####\n");
 
7677
                        o->m_pConditionsOM2->PrintData();
 
7678
                        if (o->m_pConditionsOM2->m_oaConditionSubGroups.GetSize()==2)
 
7679
                                o->m_pConditionsOM2->PrintTable();
 
7680
                }
 
7681
 
 
7682
                if (g_bAggregation)
 
7683
                {
 
7684
                        mprintf(WHITE,"* Aggregation Functions\n");
 
7685
                        if ((g_iMaxStep > 0) && (((int)g_iSteps*g_iStride) >= g_iMaxStep))
 
7686
                                g_pTempTimestep->CopyFrom(GetTimeStep(0)); // Max. Schrittzahl
 
7687
                                        else g_pTempTimestep->CopyFrom(GetTimeStep(1)); // End Of File
 
7688
                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
 
7689
                        {
 
7690
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
 
7691
                                mprintf(WHITE,"\n  > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
 
7692
 
 
7693
                                o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
 
7694
 
 
7695
                                sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
 
7696
                                dacfsub->m_pCondition->PrintData(buf);
 
7697
 
 
7698
                                mprintf(WHITE,"Neighbour Count Distribution\n");
 
7699
                                mprintf("    %.0f Bin entries have been made.\n",dacfsub->m_pNDF->m_fBinEntries);
 
7700
                                sprintf(buf,"ncd_%s%s.csv",dacfsub->m_sName,multibuf);
 
7701
                                mprintf("    Writing Neighbor Count Distribution File \"%s\"...\n",buf);
 
7702
                                dacfsub->m_pNDF->Write_Int("",buf,"");
 
7703
 
 
7704
                                if (g_bDDisp)
 
7705
                                {
 
7706
                                        mprintf(WHITE,"\nDimer Displacement Distribution Function\n");
 
7707
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDDisp->m_fBinEntries,dacfsub->m_pDDisp->m_fSkipEntries,dacfsub->m_pDDisp->m_fBinEntries+dacfsub->m_pDDisp->m_fSkipEntries);
 
7708
                                        sprintf(buf,"ddisp_%s%s.csv",dacfsub->m_sName,multibuf);
 
7709
                                        mprintf("    Saving DDisp File as \"%s\"...\n",buf);
 
7710
                                        dacfsub->m_pDDisp->Write("",buf,"",false);
 
7711
                                        sprintf(buf,"ddisp_%s%s.agr",dacfsub->m_sName,multibuf);
 
7712
                                        mprintf("    Saving DDisp Agr File as \"%s\"...\n",buf);
 
7713
                                        dacfsub->m_pDDisp->WriteAgr("",buf,"","",false);
 
7714
                                }
 
7715
 
 
7716
                                if (g_bDACF)
 
7717
                                {
 
7718
                                        mprintf(WHITE,"\nDimer Existence Autocorrelation Function\n");
 
7719
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDACF->m_fBinEntries,dacfsub->m_pDACF->m_fSkipEntries,dacfsub->m_pDACF->m_fBinEntries+dacfsub->m_pDACF->m_fSkipEntries);
 
7720
 
 
7721
                                        if (dacfsub->m_bBorderMode)
 
7722
                                        {
 
7723
                                                mprintf("    *** New Border Mode ***\n");
 
7724
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
 
7725
                                                        dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps-z2;
 
7726
                                        } else
 
7727
                                        {
 
7728
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
 
7729
                                                        dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps;
 
7730
                                        }
 
7731
 
 
7732
                                        if (dacfsub->m_bNewMode)
 
7733
                                        {
 
7734
                                                mprintf("    *** New Mode Processing ***\n");
 
7735
                                                mprintf(WHITE,"      [");
 
7736
                                                tfs = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize() * ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize() / 60.0;
 
7737
                                                ptfa = new CxFloatArray();
 
7738
                                                ptfa2 = new CxFloatArray();
 
7739
                                                ac = new CAutoCorrelation();
 
7740
                                                ac->Init(g_iSteps,o->m_pDACF->m_iDACFRes,true);
 
7741
 
 
7742
                                                ptfa->SetSize(g_iSteps);
 
7743
                                                ptfa2->SetSize(o->m_pDACF->m_iDACFRes);
 
7744
 
 
7745
                                                for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
 
7746
                                                        dacfsub->m_pDACF->m_pBin[z2] = 0;
 
7747
 
 
7748
                                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
 
7749
                                                {
 
7750
                                                        for (z3=0;z3<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z3++)
 
7751
                                                        {
 
7752
                                                                if (fmod(z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3,tfs) < 1.0)
 
7753
                                                                        mprintf(WHITE,"#");
 
7754
 
 
7755
                                                                for (z5=0;z5<(int)g_iSteps;z5++)
 
7756
                                                                        (*ptfa)[z5] = 0;
 
7757
 
 
7758
                                                                for (z4=0;z4<dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize();z4+=2)
 
7759
                                                                {
 
7760
                                                                        for (z5=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4);z5<=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4+1);z5++)
 
7761
                                                                                (*ptfa)[z5-1] = 1;
 
7762
                                                                }
 
7763
 
 
7764
                                                //              if (dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize() != 0)
 
7765
                                                //                      mprintf("\n%d-%d: %d ",z2,z3,dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize()/2);
 
7766
 
 
7767
                                                                ac->AutoCorrelate(ptfa,ptfa2);
 
7768
 
 
7769
                                                /*              if ((z2==0) && (z3==28))
 
7770
                                                                {
 
7771
                                                                        FILE *tfia;
 
7772
 
 
7773
                                                                        sprintf(buf,"condfunc_%d_%d.csv",z2,z3);
 
7774
                                                                        tfia = fopen(buf,"wt");
 
7775
                                                                        for (z4=0;z4<(int)g_iSteps;z4++)
 
7776
                                                                                fprintf(tfia,"%d;  %f\n",z4,(*ptfa)[z4]);
 
7777
                                                                        fclose(tfia);
 
7778
 
 
7779
                                                                        sprintf(buf,"condacf_%d_%d.csv",z2,z3);
 
7780
                                                                        tfia = fopen(buf,"wt");
 
7781
                                                                        for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
 
7782
                                                                                fprintf(tfia,"%d;  %f\n",z4,(*ptfa2)[z4]);
 
7783
                                                                        fclose(tfia);
 
7784
                                                                }*/
 
7785
                        
 
7786
                                                                for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
 
7787
                                                                        dacfsub->m_pDACF->m_pBin[z4] += (*ptfa2)[z4];
 
7788
                                                        }
 
7789
                                                }
 
7790
                                                mprintf(WHITE,"]\n");
 
7791
                                        }
 
7792
 
 
7793
                                        if (dacfsub->m_bCorrectEq)
 
7794
                                        {
 
7795
                                                if (dacfsub->m_iRefMol == dacfsub->m_iShowMol)
 
7796
                                                {
 
7797
                                                        tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
 
7798
                                                        mprintf("    Ensemble Average is %.6f%c.\n",tf,'%');
 
7799
 
 
7800
                                                        tf = 1.0/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
 
7801
                                                        dacfsub->m_pDACF->MultiplyBin(tf);
 
7802
 
 
7803
                                                        tf = dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
 
7804
                                                        tf = tf*tf;
 
7805
                                                        mprintf("    Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
 
7806
                                                        dacfsub->m_pDACF->SubtractBin(tf);
 
7807
                                                } else
 
7808
                                                {
 
7809
                                                        tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
 
7810
                                                        mprintf("    Ensemble Average is %.6f%c.\n",tf,'%');
 
7811
 
 
7812
                                                        tf = 1.0/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
 
7813
                                                        dacfsub->m_pDACF->MultiplyBin(tf);
 
7814
 
 
7815
                                                        tf = dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
 
7816
                                                        tf = tf*tf;
 
7817
                                                        mprintf("    Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
 
7818
                                                        dacfsub->m_pDACF->SubtractBin(tf);
 
7819
                                                }
 
7820
                                        }
 
7821
 
 
7822
                                        if (dacfsub->m_pDACF->m_pBin[0] != 0)
 
7823
                                        {
 
7824
                                                mprintf("    Normalizing DACF with factor 1/%G ...\n",dacfsub->m_pDACF->m_pBin[0]);
 
7825
                                                dacfsub->m_pDACF->MultiplyBin(1.0/dacfsub->m_pDACF->m_pBin[0]);
 
7826
                                        } else mprintf("    Not normalizing this DACF, first entry is 0.\n");
 
7827
 
 
7828
                                        if (o->m_pDACF->m_bFitDACF)
 
7829
                                        {
 
7830
                                                mprintf("\n");
 
7831
 
 
7832
                                                try { dacfsub->m_pDACF->m_pParameters = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pParameters = NULL; }
 
7833
                                                if (dacfsub->m_pDACF->m_pParameters == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7834
                                                
 
7835
                                                try { dacfsub->m_pDACF->m_pFitIntegral = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pFitIntegral = NULL; }
 
7836
                                                if (dacfsub->m_pDACF->m_pFitIntegral == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7837
                                                
 
7838
                                                try { dacfsub->m_pDACF->m_pCorrCoeff = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pCorrCoeff = NULL; }
 
7839
                                                if (dacfsub->m_pDACF->m_pCorrCoeff == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7840
                                                
 
7841
                                                try { dacfsub->m_pDACF->m_pAdditionalSets = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSets = NULL; }
 
7842
                                                if (dacfsub->m_pDACF->m_pAdditionalSets == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7843
                                                
 
7844
                                                try { dacfsub->m_pDACF->m_pAdditionalSetLabels = new char*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSetLabels = NULL; }
 
7845
                                                if (dacfsub->m_pDACF->m_pAdditionalSetLabels == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7846
                                                
 
7847
                                                dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
 
7848
 
 
7849
                                                for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
 
7850
                                                {
 
7851
                                                        dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
 
7852
                                                        dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
 
7853
                                                }
 
7854
 
 
7855
                                                mprintf(YELLOW,"    Please note: ");
 
7856
                                                mprintf("The lifetime is two times the integral value!\n\n");
 
7857
 
 
7858
                                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
 
7859
                                                        dacfsub->m_pDACF->Fit_PolyExp(z2,5000);
 
7860
 
 
7861
                                                if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
 
7862
                                                {
 
7863
                                                        mprintf(YELLOW,"    DACF fit integral overview:\n");
 
7864
                                                        mprintf("      (use the row with the highest R value)\n\n");
 
7865
                                                        mprintf(WHITE,"      Degree  R             Integral [ps]     Lifetime [ps]\n");
 
7866
                                                        for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
 
7867
                                                        {
 
7868
                                                                if (dacfsub->m_pDACF->m_pFitIntegral[z2] >= 0)
 
7869
                                                                        mprintf("      %d       %10.8f    %-10G        %-10G\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2],dacfsub->m_pDACF->m_pFitIntegral[z2],dacfsub->m_pDACF->m_pFitIntegral[z2]*2.0);
 
7870
                                                                                else mprintf("      %d       %10.8f             -             -\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2]);
 
7871
                                                        }
 
7872
                                                        mprintf("\n");
 
7873
                                                }
 
7874
                                        }
 
7875
                                        sprintf(buf,"dacf_%s%s.csv",dacfsub->m_sName,multibuf);
 
7876
                                        mprintf("    Saving DACF File as \"%s\"...\n",buf);
 
7877
                                        dacfsub->m_pDACF->Write("",buf,"",false);
 
7878
                                        sprintf(buf,"dacf_%s%s.agr",dacfsub->m_sName,multibuf);
 
7879
                                        mprintf("    Saving DACF Agr File as \"%s\"...\n",buf);
 
7880
                                        dacfsub->m_pDACF->WriteAgr("",buf,"","",false);
 
7881
 
 
7882
                                        if (o->m_pDACF->m_bLifetimeSpectrum)
 
7883
                                        {
 
7884
                                                for (z2=0;z2<o->m_pDACF->m_oaLTSpectra.GetSize();z2++)
 
7885
                                                {
 
7886
                                                        mprintf(WHITE,"\n  * Lifetime Spectrum %d\n\n",z2+1);
 
7887
                                                        ((CLTSpec*)o->m_pDACF->m_oaLTSpectra[z2])->ComputeSpectrum("dacf",dacfsub->m_sName,multibuf,"",dacfsub->m_pDACF);
 
7888
                                                }
 
7889
                                /*              sprintf(buf,"dacf_lspectrum_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
 
7890
                                                mprintf("    Saving DACF lifetime spectrum as \"%s\"...\n",buf);
 
7891
                                                dacfsub->m_pDACF->Fit_ExpSpectrum(o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_fLSpecMinExp,o->m_pDACF->m_fLSpecMaxExp,buf,o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iMaxLMIter,false,true);
 
7892
 
 
7893
                                                sprintf(buf,"dacf_lsfit_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
 
7894
                                                mprintf("    Saving DACF lifetime spectrum fit as \"%s\"...\n",buf);
 
7895
                                                dacfsub->m_pDACF->Write("",buf,"",false);*/
 
7896
                                        }
 
7897
                                }
 
7898
 
 
7899
                                if (g_bDLDF)
 
7900
                                {
 
7901
                                        mprintf(WHITE,"\nDimer Lifetime Distribution Function\n");
 
7902
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDF->m_fBinEntries,dacfsub->m_pDLDF->m_fSkipEntries,dacfsub->m_pDLDF->m_fBinEntries+dacfsub->m_pDLDF->m_fSkipEntries);
 
7903
                                        sprintf(buf,"dldf_%s%s.csv",dacfsub->m_sName,multibuf);
 
7904
                                        mprintf("    Saving DLDF File as \"%s\"...\n",buf);
 
7905
                                        dacfsub->m_pDLDF->Write("",buf,"",false);
 
7906
                                        sprintf(buf,"dldf_%s%s.agr",dacfsub->m_sName,multibuf);
 
7907
                                        mprintf("    Saving DLDF Agr File as \"%s\"...\n",buf);
 
7908
                                        dacfsub->m_pDLDF->WriteAgr("",buf,"","",false);
 
7909
                                }
 
7910
 
 
7911
                                if (g_bDLDisp)
 
7912
                                {
 
7913
                                        mprintf(WHITE,"\nDimer Lifetime Displacement Distribution Function\n");
 
7914
                                        mprintf("    %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDisp->m_fBinEntries,dacfsub->m_pDLDisp->m_fSkipEntries,dacfsub->m_pDLDisp->m_fBinEntries+dacfsub->m_pDLDisp->m_fSkipEntries);
 
7915
                                        mprintf("    Normalizing bin integral to 1000000...\n");
 
7916
                                        dacfsub->m_pDLDisp->NormalizeBinIntegral(1000000.0);
 
7917
                                        sprintf(buf,"dldisp_%s%s",dacfsub->m_sName,multibuf);
 
7918
                                        mprintf("    Saving DLDisp triples as \"%s_triples.csv\"...\n",buf);
 
7919
                                        dacfsub->m_pDLDisp->Write("",buf,"_triples.csv");
 
7920
                                        mprintf("    Saving DLDisp matrix as \"%s_matrix.csv\"...\n",buf);
 
7921
                                        dacfsub->m_pDLDisp->WriteCSV("",buf,"_matrix.csv");
 
7922
                                        mprintf("    Saving DLDisp Mathematica Notebook \"%s.nb\"...\n",buf);
 
7923
                                        dacfsub->m_pDLDisp->WriteMathematicaNb("",buf,".nb",false);
 
7924
                                        mprintf("    Saving DLDisp Gnuplot Input \"%s.gp\"...\n",buf);
 
7925
                                        dacfsub->m_pDLDisp->WriteGnuplotInput("",buf,"",false);
 
7926
                                }
 
7927
 
 
7928
                                if (g_bPairMSD)
 
7929
                                {
 
7930
                                        mprintf(WHITE,"\nPair Mean Square Displacement\n");
 
7931
                                        mprintf("    %.0f Bin entries have been made.\n",dacfsub->m_pPairMSD->m_fBinEntries);
 
7932
                                        mprintf("    Calculating average values...\n");
 
7933
                                        dacfsub->m_pPairMSD->BuildAverage();
 
7934
                                        sprintf(buf,"pairmsd_%s%s",dacfsub->m_sName,multibuf);
 
7935
                                        mprintf("    Saving Pair MSD as \"%s.csv\"...\n",buf);
 
7936
                                        dacfsub->m_pPairMSD->Write("",buf,".csv");
 
7937
                                }
 
7938
                        }
 
7939
                        if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
 
7940
                        {
 
7941
                                mprintf(WHITE,"\n*** Condition Grid fitting overview:\n\n");
 
7942
                                mprintf("      Degree    R(min)        R(avg)        R(max)\n");
 
7943
                                o->m_pDACF->CalcGridFitParms();
 
7944
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
 
7945
                                        mprintf("      %d         %10.8f    %10.8f    %10.8f\n",z2,o->m_pDACF->m_pFitRMin[z2],o->m_pDACF->m_pFitRAvg[z2],o->m_pDACF->m_pFitRMax[z2]);
 
7946
                                mprintf("\n");
 
7947
 
 
7948
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
 
7949
                                {
 
7950
                                        if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
 
7951
                                        {
 
7952
                                                if (o->m_pDACF->m_bGridCon)
 
7953
                                                {
 
7954
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
 
7955
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7956
                                                        
 
7957
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,false);
 
7958
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp",o->m_pDACF->m_sName,multibuf,z2);
 
7959
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
 
7960
                                                        temp2df->Write("",buf,"_triples.csv");
 
7961
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
 
7962
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
 
7963
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
 
7964
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
 
7965
                                                        mprintf("    Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
 
7966
                                                        temp2df->WriteGnuplotInput("",buf,"",false);
 
7967
                                                        delete temp2df;
 
7968
                                                }
 
7969
                                                if (o->m_pDACF->m_bGridInt)
 
7970
                                                {
 
7971
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
 
7972
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7973
                                                        
 
7974
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,true);
 
7975
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp_int%.2f",o->m_pDACF->m_sName,multibuf,z2,o->m_pDACF->m_fGridIntGap);
 
7976
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
 
7977
                                                        temp2df->Write("",buf,"_triples.csv");
 
7978
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
 
7979
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
 
7980
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
 
7981
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
 
7982
                                                        mprintf("    Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
 
7983
                                                        temp2df->WriteGnuplotInput("",buf,"",false);
 
7984
                                                        delete temp2df;
 
7985
                                                }
 
7986
                                        } else
 
7987
                                        {
 
7988
                                                if (o->m_pDACF->m_bGridCon)
 
7989
                                                {
 
7990
                                                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
 
7991
                                                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
7992
                                                        
 
7993
//                                                      o->m_pDACF->CreateGridFitDF(tdf,z2,false);
 
7994
                                                        abort();
 
7995
                                                        delete tdf;
 
7996
                                                }
 
7997
                                        }
 
7998
                                }
 
7999
                        }
 
8000
                } // END IF AGGREGATION
 
8001
 
 
8002
                if (g_bDens)
 
8003
                {
 
8004
                        mprintf(WHITE,"* Density Distribution Function\n");
 
8005
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDensityDF->m_pDensDF->m_fBinEntries,o->m_pDensityDF->m_pDensDF->m_fSkipEntries,ZeroDivide(o->m_pDensityDF->m_pDensDF->m_fSkipEntries,o->m_pDensityDF->m_pDensDF->m_fBinEntries+o->m_pDensityDF->m_pDensDF->m_fSkipEntries)*100.0);
 
8006
 
 
8007
                        mprintf("    Correcting radial distribution...\n");
 
8008
                        o->m_pDensityDF->m_pDensDF->CorrectRadialDist();
 
8009
 
 
8010
                        mprintf("    Scaling values to match final density...\n");
 
8011
 
 
8012
                        if (o->m_pDensityDF->m_bDensityMass)
 
8013
                        {
 
8014
                                o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
8015
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(1.66054e6 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
8016
                        } else
 
8017
                        {
 
8018
                                o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
8019
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(1.0e9 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
8020
                        }
 
8021
 
 
8022
        /*              if (g_bDoubleBox)
 
8023
                        {
 
8024
                                o->m_pDensityDF->m_pDensDF->MultiplyBin(g_iDoubleBoxFactor);
 
8025
                                o->m_pDensityDF->m_pDensDF->MultiplyIntegral(g_iDoubleBoxFactor);
 
8026
                        }*/
 
8027
 
 
8028
                        sprintf(buf,"density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
 
8029
                        mprintf("    Saving Density DF as \"%s\"...\n",buf);
 
8030
                        o->m_pDensityDF->m_pDensDF->Write("",buf,"",true);
 
8031
                        sprintf(buf,"density_df_%s%s.agr",o->m_pDensityDF->m_sName,multibuf);
 
8032
                        mprintf("    Saving Density DF AGR file as \"%s\"...\n",buf);
 
8033
                        o->m_pDensityDF->m_pDensDF->WriteAgr("",buf,"",o->m_pDensityDF->m_sName,true);
 
8034
                        if (o->m_pDensityDF->m_iHistogramRes != 0)
 
8035
                        {
 
8036
                                mprintf("    Calculating Histogram...\n");
 
8037
                                o->m_pDensityDF->m_pDensDF->CalcHistogram();
 
8038
                                sprintf(buf,"his_density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
 
8039
                                mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8040
                                o->m_pDensityDF->m_pDensDF->WriteHistogram("",buf,"");
 
8041
                        }
 
8042
                } // END IF g_bDens
 
8043
 
 
8044
                if (g_bRDyn)
 
8045
                {
 
8046
                        mprintf(WHITE,"* Vector Reorientation Dynamics\n");
 
8047
                        o->m_pRDyn->Finish(multibuf);
 
8048
                }
 
8049
 
 
8050
                if (g_bIRSpec)
 
8051
                {
 
8052
                        mprintf(WHITE,"* IR Spectrum\n");
 
8053
                        o->m_pIRSpec->Finish(multibuf);
 
8054
                }
 
8055
 
 
8056
                if (g_bVACF)
 
8057
                {
 
8058
                        mprintf(WHITE,"* Velocity Autocorrelation Function\n");
 
8059
                        if (o->m_pVACF->m_bDerivative)
 
8060
                        {
 
8061
                                mprintf("    Deriving velocities...\n");
 
8062
                                mprintf(WHITE,"      [");
 
8063
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
 
8064
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
 
8065
                                {
 
8066
                                        if (fmod(z2,tfs) < 1)
 
8067
                                                mprintf(WHITE,"#");
 
8068
                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
 
8069
 
 
8070
                                        for (z3=0;z3<(int)g_iSteps*3-3;z3++)
 
8071
                                                (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
 
8072
                                }
 
8073
                                mprintf(WHITE,"]\n");
 
8074
                        }
 
8075
                        if (g_bVACFCacheMode)
 
8076
                        {
 
8077
                                mprintf("    Autocorrelating cached vectors...\n");
 
8078
                                mprintf(WHITE,"      [");
 
8079
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
 
8080
 
 
8081
                                try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
 
8082
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8083
                                
 
8084
                                ptfa2->SetSize(g_iSteps);
 
8085
 
 
8086
                                try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
 
8087
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8088
                                
 
8089
                                ptfa3->SetSize(g_iSteps);
 
8090
 
 
8091
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
 
8092
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8093
                                
 
8094
                                ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
 
8095
                                ti = 0;
 
8096
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
 
8097
                                {
 
8098
                                        for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
 
8099
                                        {
 
8100
                                                if (o->m_pVACF->m_bMassWeight)
 
8101
                                                        tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
 
8102
                                                                else tf = 1.0;
 
8103
                                                for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
 
8104
                                                {
 
8105
                                                        if (fmod(ti,tfs) < 1)
 
8106
                                                                mprintf(WHITE,"#");
 
8107
                                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
 
8108
 
 
8109
                                                        /* X */
 
8110
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
 
8111
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3];
 
8112
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
8113
                        //                              mprintf("Lokal Atom %d X: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
8114
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
 
8115
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
 
8116
 
 
8117
                                                        /* Y */
 
8118
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
 
8119
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+1];
 
8120
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
8121
                        //                              mprintf("Lokal Atom %d Y: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
8122
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
 
8123
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
 
8124
 
 
8125
                                                        /* Z */
 
8126
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
 
8127
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+2];
 
8128
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
 
8129
                        //                              mprintf("Lokal Atom %d Z: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
 
8130
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
 
8131
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
 
8132
 
 
8133
                                                        ti++;
 
8134
                                                }
 
8135
                                        }
 
8136
                                }
 
8137
                                delete ac;
 
8138
                                delete ptfa2;
 
8139
                                delete ptfa3;
 
8140
 
 
8141
                        /*      } else
 
8142
                                {
 
8143
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
 
8144
                                        {
 
8145
                                                if (fmod(z2,tfs) < 1)
 
8146
                                                        mprintf(WHITE,"#");
 
8147
                                                ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
 
8148
                                                for (z3=0;z3<o->m_pVACF->m_iSize;z3+=o->m_pVACF->m_iStride) // Das ist das Tau
 
8149
                                                {
 
8150
                                                        tf = 0;
 
8151
                                                        for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
 
8152
                                                                tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
 
8153
                                                        o->m_pVACF->m_pData[z3/o->m_pVACF->m_iStride] += tf/(g_iSteps-z3);
 
8154
                                                }
 
8155
                                        }
 
8156
                                }*/
 
8157
                                mprintf(WHITE,"]\n");
 
8158
//                              mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
 
8159
                                mprintf("      %d atoms, %d time steps and %d correlation depths processed.\n",ti,g_iSteps,o->m_pVACF->m_iSize);
 
8160
                                o->m_pVACF->MultiplyCached(1.0/g_iGesAtomCount);
 
8161
                        } else o->m_pVACF->Multiply(1.0/g_iGesAtomCount);
 
8162
/*                      sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
 
8163
                        mprintf("    Saving ACF as %s ...\n",buf);
 
8164
                        o->m_pVACF->WriteACF("",buf,"");*/
 
8165
 
 
8166
                        sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
 
8167
                        mprintf("    Saving ACF as %s ...\n",buf);
 
8168
                        o->m_pVACF->WriteACF("",buf,"");
 
8169
 
 
8170
                        if (o->m_pVACF->m_iMirror != 0)
 
8171
                        {
 
8172
                                mprintf("    Mirroring ACF...\n");
 
8173
                                o->m_pVACF->Mirror(o->m_pVACF->m_iMirror);
 
8174
                                sprintf(buf,"acf_%s%s.m.csv",o->m_pVACF->m_sName,multibuf);
 
8175
                                mprintf("    Saving mirrored ACF as %s ...\n",buf);
 
8176
                                o->m_pVACF->WriteACF("",buf,"");
 
8177
                        }
 
8178
 
 
8179
                        if (o->m_pVACF->m_bWindowFunction)
 
8180
                        {
 
8181
                                mprintf("    Applying window function to ACF...\n");
 
8182
                                o->m_pVACF->Window();
 
8183
                                sprintf(buf,"acf_%s%s.w.csv",o->m_pVACF->m_sName,multibuf);
 
8184
                                mprintf("    Saving windowed ACF as %s ...\n",buf);
 
8185
                                o->m_pVACF->WriteACF("",buf,"");
 
8186
                        }
 
8187
 
 
8188
                        if (o->m_pVACF->m_bSpectrum)
 
8189
                        {
 
8190
                                mprintf("    Performing fourier transformation...\n");
 
8191
 
 
8192
                                try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
 
8193
                                if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8194
                                
 
8195
/*                              if (o->m_pVACF->m_bMirror)
 
8196
                                        g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
 
8197
                                                else */g_pFFT->PrepareFFT_C2C(o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding);
 
8198
                                o->m_pVACF->Transform(g_pFFT);
 
8199
                                delete g_pFFT;
 
8200
                                o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
 
8201
                                if (o->m_pVACF->m_bACF_DB)
 
8202
                                {
 
8203
                                        mprintf("    Normalising spectrum to decibel...\n");
 
8204
                                        o->m_pVACF->m_pSpectrum->MakeDB();
 
8205
                                }/* else
 
8206
                                {
 
8207
                                        mprintf("    Normalising integral of spectrum...\n");
 
8208
                                        o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
 
8209
                                }*/
 
8210
/*                              if (o->m_pVACF->m_bWindowFunction)
 
8211
                                {
 
8212
                                        sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
 
8213
                                        mprintf("    Saving spectrum as %s ...\n",buf);
 
8214
                                        o->m_pVACF->m_pSpectrum->Write("",buf,"");
 
8215
                                } else
 
8216
                                {*/
 
8217
                                sprintf(buf,"power_%s%s.csv",o->m_pVACF->m_sName,multibuf);
 
8218
                                mprintf("    Saving spectrum as %s ...\n",buf);
 
8219
                                o->m_pVACF->m_pSpectrum->Write("",buf,"");
 
8220
//                              }
 
8221
                        }
 
8222
                } // End IF VACF
 
8223
 
 
8224
                if (g_bMSD)
 
8225
                {
 
8226
                        mprintf(WHITE,"* Mean Square Displacement\n");
 
8227
                        if (g_bMSDCacheMode)
 
8228
                        {
 
8229
                                mprintf("    Autocorrelating cached vectors...\n");
 
8230
//                              mprintf(WHITE,"      [");
 
8231
//                              tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms)/60.0;
 
8232
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
 
8233
                                {
 
8234
//                                      if (fmod(z2,tfs) < 1.0)
 
8235
//                                              mprintf(WHITE,"#");
 
8236
                                        mprintf("      %4d/%d:  [",z2+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms);
 
8237
                                        tfs = o->m_pMSD->m_iResolution/50.0;
 
8238
                                        ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[z2];
 
8239
                                        for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
 
8240
                                        {
 
8241
                                                if (fmod(z3,tfs) < 1.0)
 
8242
                                                        mprintf(WHITE,"#");
 
8243
                                                tf = 0;
 
8244
 
 
8245
                                                if (o->m_pMSD->m_bTakeX && o->m_pMSD->m_bTakeY && o->m_pMSD->m_bTakeZ)
 
8246
                                                {
 
8247
                                                        for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
 
8248
                                                                tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2) + pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2) + pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
 
8249
                                                } else
 
8250
                                                {
 
8251
                                                        for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
 
8252
                                                        {
 
8253
                                                                if (o->m_pMSD->m_bTakeX)
 
8254
                                                                        tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2);
 
8255
                                                                if (o->m_pMSD->m_bTakeY)
 
8256
                                                                        tf += pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2);
 
8257
                                                                if (o->m_pMSD->m_bTakeZ)
 
8258
                                                                        tf += pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
 
8259
                                                        }
 
8260
                                                }
 
8261
 
 
8262
                                                o->m_pMSD->m_pMSD->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
 
8263
                                                o->m_pMSD->m_pMSD->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
 
8264
                                                if (o->m_pMSD->m_bSplit)
 
8265
                                                {
 
8266
                                                        o->m_pMSD->m_pSplitMSD[z2]->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
 
8267
                                                        o->m_pMSD->m_pSplitMSD[z2]->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
 
8268
                                                }
 
8269
                                        }
 
8270
                                        mprintf("]\n");
 
8271
                                }
 
8272
                                for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
 
8273
                                        o->m_pMSD->m_pMSD->m_pBin[z3/o->m_pMSD->m_iStride] /= ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;
 
8274
//                              mprintf(WHITE,"]\n");
 
8275
                        } else
 
8276
                        {
 
8277
                                o->m_pMSD->m_pMSD->BuildAverage();
 
8278
                        }
 
8279
                        mprintf("    %.0f bin entries.\n",o->m_pMSD->m_pMSD->m_fBinEntries);
 
8280
                        o->m_pMSD->m_pMSD->CalcDeriv(1.0f);
 
8281
                        sprintf(buf,"msd_%s%s.csv",o->m_pMSD->m_sName,multibuf);
 
8282
                        mprintf("    Saving result as %s ...\n",buf);
 
8283
                        if (o->m_pMSD->m_bSplit)
 
8284
                        {
 
8285
                                o->m_pMSD->WriteSplit(buf);
 
8286
                        } else o->m_pMSD->m_pMSD->Write("",buf,"");
 
8287
                        mprintf(WHITE,"\n    Performing linear regression on interval %.2f - %.2f ps...\n",o->m_pMSD->m_pMSD->m_fMinVal+0.5*(o->m_pMSD->m_pMSD->m_fMaxVal-o->m_pMSD->m_pMSD->m_fMinVal),o->m_pMSD->m_pMSD->m_fMaxVal);
 
8288
                        o->m_pMSD->m_pMSD->LinReg(o->m_pMSD->m_pMSD->m_iResolution/2,o->m_pMSD->m_pMSD->m_iResolution-1,&c0,&c1,&r);
 
8289
                        mprintf("      MSD(t) = %.6f + %.6f * t   (units: [MSD] = pm^2, [t] = ps).\n",c0,c1);
 
8290
                        mprintf("           R = %.6f\n",r);
 
8291
                        ti = 0;
 
8292
                        if (o->m_pMSD->m_bTakeX)
 
8293
                                ti++;
 
8294
                        if (o->m_pMSD->m_bTakeY)
 
8295
                                ti++;
 
8296
                        if (o->m_pMSD->m_bTakeZ)
 
8297
                                ti++;
 
8298
                        if (ti != 3)
 
8299
                                mprintf("     Please note: Dimensionality of the system is %d here.\n",ti);
 
8300
                        mprintf("      Diffusion coefficient D = %.6f pm^2/ps  =  %G m^2/s.\n",c1/2.0/ti,c1/2.0e12/ti);
 
8301
                        mprintf("        (assuming <x^2> = %d * D * t)\n\n",2*ti);
 
8302
                } // END IF MSD
 
8303
 
 
8304
                if (g_bNbAnalysis)
 
8305
                {
 
8306
                        mprintf(WHITE,"* Neighborhood Analysis\n");
 
8307
                        mprintf("    %.0f bin entries.\n",o->m_pNbAnalysis->m_fBinEntries);
 
8308
/*                      for (z2=0;z2<o->m_pNbAnalysis->m_iMaxNbCount-o->m_pNbAnalysis->m_iMinNbCount;z2++)
 
8309
                                mprintf("    - %d: %.0f bin entries, %.0f skipped.\n",z2+1,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fBinEntries,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fSkipEntries);
 
8310
*/                      
 
8311
 
 
8312
                        try { pf = new float[o->m_pNbAnalysis->m_iNbCount]; } catch(...) { pf = NULL; }
 
8313
                        if (pf == NULL) NewException((double)o->m_pNbAnalysis->m_iNbCount*sizeof(float),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8314
                        
 
8315
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8316
                                pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
 
8317
 
 
8318
                        sprintf(buf,"nbh_ncf_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
 
8319
                        mprintf("    Saving neighbor count function as %s ...\n",buf);
 
8320
                        a = OpenFileWrite(buf,true);
 
8321
                        mfprintf(a,"# distance [pm]; ");
 
8322
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
 
8323
                        {
 
8324
                                mfprintf(a,"%d neighbors",z3);
 
8325
                                if (z3 < o->m_pNbAnalysis->m_iNbCount)
 
8326
                                        mfprintf(a,";  ");
 
8327
                        }
 
8328
                        mfprintf(a,"\n");
 
8329
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
 
8330
                        {
 
8331
                                mfprintf(a,"%.4f;  ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
 
8332
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
 
8333
                                {
 
8334
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaNPF[z3])->m_pBin[z2]/o->m_pNbAnalysis->m_pNPFCount->m_pBin[z2]*100.0f);
 
8335
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount)
 
8336
                                                mfprintf(a,";  ");
 
8337
                                }
 
8338
                                mfprintf(a,"\n");
 
8339
                        }
 
8340
                        fclose(a);
 
8341
 
 
8342
                        sprintf(buf,"nbh_dist_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
 
8343
                        mprintf("    Calculating mean values and standard deviation...\n");
 
8344
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8345
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CalcMeanSD();
 
8346
                        mprintf("    Saving neighborhood distribution as %s ...\n",buf);
 
8347
                        a = OpenFileWrite(buf,true);
 
8348
                        mfprintf(a,"# distance [pm]; ");
 
8349
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8350
                        {
 
8351
                                mfprintf(a,"%d. neighbor",z3+1);
 
8352
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8353
                                        mfprintf(a,";  ");
 
8354
                        }
 
8355
                        mfprintf(a,"\n");
 
8356
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
 
8357
                        {
 
8358
                                mfprintf(a,"%.4f;  ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
 
8359
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8360
                                {
 
8361
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
 
8362
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8363
                                                mfprintf(a,";  ");
 
8364
                                }
 
8365
                                mfprintf(a,"\n");
 
8366
                        }
 
8367
                        fclose(a);
 
8368
 
 
8369
                        sprintf(buf,"nbh_minmaxavgsd_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
 
8370
                        mprintf("    Saving neighborhood min/max/avg/sd as %s ...\n",buf);
 
8371
                        a = OpenFileWrite(buf,true);
 
8372
                        mfprintf(a,"# n-th neighbor;  min. dist [pm]; max. dist [pm]; avg. dist [pm]; standard deviation [pm]\n");
 
8373
                        for (z2=0;z2<o->m_pNbAnalysis->m_iNbCount;z2++)
 
8374
                        {
 
8375
                                mfprintf(a,"%d;  %.4f;  %.4f;  %.4f;  %.4f",z2+1,o->m_pNbAnalysis->m_pDistMin[z2],o->m_pNbAnalysis->m_pDistMax[z2],((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fMean,((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_fSD);
 
8376
                                mfprintf(a,"\n");
 
8377
                        }
 
8378
                        fclose(a);
 
8379
 
 
8380
                        sprintf(buf,"nbh_rdf_decomp_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
 
8381
                        mprintf("    Saving neighborhood RDF decomposition as %s ...\n",buf);
 
8382
                        a = OpenFileWrite(buf,true);
 
8383
                        mfprintf(a,"# distance [pm]; ");
 
8384
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8385
                        {
 
8386
                                mfprintf(a,"%d. neighbor",z3+1);
 
8387
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8388
                                        mfprintf(a,";  ");
 
8389
                        }
 
8390
                        mfprintf(a,"\n");
 
8391
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8392
                        {
 
8393
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
 
8394
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
 
8395
                        }
 
8396
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8397
                        {
 
8398
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
 
8399
                                if (g_bDoubleBox)
 
8400
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
 
8401
                        }
 
8402
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
 
8403
                        {
 
8404
                                mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
 
8405
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8406
                                {
 
8407
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
 
8408
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8409
                                                mfprintf(a,";  ");
 
8410
                                }
 
8411
                                mfprintf(a,"\n");
 
8412
                        }
 
8413
                        fclose(a);
 
8414
 
 
8415
                        sprintf(buf,"nbh_rdf_decomp_cumulative_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
 
8416
                        mprintf("    Saving cumulative neighborhood RDF decomposition as %s ...\n",buf);
 
8417
                        a = OpenFileWrite(buf,true);
 
8418
                        mfprintf(a,"# distance [pm]; ");
 
8419
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8420
                        {
 
8421
                                mfprintf(a,"%d. neighbor",z3+1);
 
8422
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8423
                                        mfprintf(a,";  ");
 
8424
                        }
 
8425
                        mfprintf(a,"\n");
 
8426
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
 
8427
                                for (z3=1;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8428
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2] += ((CDF*)o->m_pNbAnalysis->m_oaDF[z3-1])->m_pBin[z2];
 
8429
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
 
8430
                        {
 
8431
                                mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
 
8432
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
 
8433
                                {
 
8434
                                        mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
 
8435
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
 
8436
                                                mfprintf(a,";  ");
 
8437
                                }
 
8438
                                mfprintf(a,"\n");
 
8439
                        }
 
8440
                        fclose(a);
 
8441
                        delete[] pf;
 
8442
                }
 
8443
 
 
8444
                if (g_bDipDF)
 
8445
                {
 
8446
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8447
                        {
 
8448
                                if (o->m_pDipDF[zr] == NULL)
 
8449
                                        continue;
 
8450
                                mprintf(WHITE,"* Dipole Distribution Function\n");
 
8451
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,ZeroDivide(o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries+o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries)*100.0);
 
8452
                                o->m_pDipDF[zr]->m_pDipoleDF->CalcMeanSD();
 
8453
                                mprintf("    Mean value: %10G Debye    Standard deviation: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMean,o->m_pDipDF[zr]->m_pDipoleDF->m_fSD);
 
8454
                                mprintf("    Min. value: %10G Debye    Max. value:         %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMinInput,o->m_pDipDF[zr]->m_pDipoleDF->m_fMaxInput);
 
8455
                                o->m_pDipDF[zr]->m_pDipoleDF->NormBinIntegral();
 
8456
                                sprintf(buf,"dipole_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
 
8457
                                mprintf("    Saving dipole distribution as %s ...\n",buf);
 
8458
                                o->m_pDipDF[zr]->m_pDipoleDF->Write("",buf,"",false);
 
8459
                                sprintf(buf,"dipole_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
 
8460
                                mprintf("    Saving dipole distribution AGR file as \"%s\"...\n",buf);
 
8461
                                o->m_pDipDF[zr]->m_pDipoleDF->WriteAgr("",buf,"",o->m_pDipDF[zr]->m_sName,false);
 
8462
                                if (o->m_pDipDF[zr]->m_iHistogramRes != 0)
 
8463
                                {
 
8464
                                        mprintf("    Calculating Histogram...\n");
 
8465
                                        o->m_pDipDF[zr]->m_pDipoleDF->CalcHistogram();
 
8466
                                        sprintf(buf,"his_dipdf_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
 
8467
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8468
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteHistogram("",buf,"");
 
8469
                                }
 
8470
                                if (o->m_bTimeDev)
 
8471
                                {
 
8472
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
8473
                                        {
 
8474
                                                fclose(o->m_pDipDF[zr]->m_fDipole[0]);
 
8475
                                                mprintf("    Saving temporal development as dipole_timedev_%s%s.csv\n",o->m_pDipDF[zr]->m_sName,multibuf);
 
8476
                                        } else
 
8477
                                        {
 
8478
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
8479
                                                {
 
8480
                                                        fclose(o->m_pDipDF[zr]->m_fDipole[z2]);
 
8481
                                                        mprintf("    Saving temporal development as dipole_timedev_%s_ref%d%s.csv\n",o->m_pDipDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
8482
                                                }
 
8483
                                        }
 
8484
                                        if (o->m_bCombinedPlot)
 
8485
                                        {
 
8486
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
 
8487
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
 
8488
                                                o->m_pDipDF[zr]->m_pDipoleDF->CreateCombinedPlot(false);
 
8489
                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->WriteAgr(buf,false);
 
8490
                                        }
 
8491
                                } // END IF TIMEDEV
 
8492
 
 
8493
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
8494
                                {
 
8495
                                        sprintf(buf,"dipdf_decomp_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
 
8496
                                        mprintf("    Saving DipDF decomposition as \"%s\"...\n",buf);
 
8497
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti("",buf,"");
 
8498
                                        sprintf(buf,"dipdf_decomp_%s%s_cumulative.csv",o->m_pDipDF[zr]->m_sName,multibuf);
 
8499
                                        mprintf("    Saving cumulative DipoleDF decomposition as \"%s\"...\n",buf);
 
8500
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti_Cumulative("",buf,"");
 
8501
                                }
 
8502
 
 
8503
                                if (o->m_bTimeDiff)
 
8504
                                        o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
 
8505
                        }
 
8506
                } // END IF DIPOLE
 
8507
 
 
8508
                if (g_bVDF)
 
8509
                {
 
8510
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8511
                        {
 
8512
                                if (o->m_pVDF[zr] == NULL)
 
8513
                                        continue;
 
8514
                                mprintf(WHITE,"* Velocity Distribution Function\n");
 
8515
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVDF[zr]->m_pVDF->m_fBinEntries,o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,ZeroDivide(o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,o->m_pVDF[zr]->m_pVDF->m_fBinEntries+o->m_pVDF[zr]->m_pVDF->m_fSkipEntries)*100.0);
 
8516
                                o->m_pVDF[zr]->m_pVDF->CalcMeanSD();
 
8517
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMean,o->m_pVDF[zr]->m_pVDF->m_fSD);
 
8518
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMinInput,o->m_pVDF[zr]->m_pVDF->m_fMaxInput);
 
8519
                                o->m_pVDF[zr]->m_pVDF->NormBinIntegral();
 
8520
                                sprintf(buf,"vdf_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
 
8521
                                mprintf("    Saving velocity distribution as %s ...\n",buf);
 
8522
                                o->m_pVDF[zr]->m_pVDF->Write("",buf,"",false);
 
8523
                                sprintf(buf,"vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
 
8524
                                mprintf("    Saving velocity distribution AGR file as \"%s\"...\n",buf);
 
8525
                                o->m_pVDF[zr]->m_pVDF->WriteAgr("",buf,"",o->m_pVDF[zr]->m_sName,false);
 
8526
                                if (o->m_pVDF[zr]->m_iHistogramRes != 0)
 
8527
                                {
 
8528
                                        mprintf("    Calculating Histogram...\n");
 
8529
                                        o->m_pVDF[zr]->m_pVDF->CalcHistogram();
 
8530
                                        sprintf(buf,"his_vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
 
8531
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8532
                                        o->m_pVDF[zr]->m_pVDF->WriteHistogram("",buf,"");
 
8533
                                }
 
8534
                                if (o->m_bTimeDev)
 
8535
                                {
 
8536
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
8537
                                        {
 
8538
                                                fclose(o->m_pVDF[zr]->m_fSpeed[0]);
 
8539
                                                mprintf("    Saving temporal development as vdf_timedev_%s%s.csv\n",o->m_pVDF[zr]->m_sName,multibuf);
 
8540
                                        } else
 
8541
                                        {
 
8542
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
8543
                                                {
 
8544
                                                        fclose(o->m_pVDF[zr]->m_fSpeed[z2]);
 
8545
                                                        mprintf("    Saving temporal development as vdf_timedev_%s_ref%d%s.csv\n",o->m_pVDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
8546
                                                }
 
8547
                                        }
 
8548
                                        if (o->m_bCombinedPlot)
 
8549
                                        {
 
8550
                                                sprintf(buf,"combined_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
 
8551
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
 
8552
                                                o->m_pVDF[zr]->m_pVDF->CreateCombinedPlot(false);
 
8553
                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->WriteAgr(buf,false);
 
8554
                                        }
 
8555
                                } // END IF TIMEDEV
 
8556
 
 
8557
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
8558
                                {
 
8559
                                        sprintf(buf,"vdf_decomp_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
 
8560
                                        mprintf("    Saving VDF decomposition as \"%s\"...\n",buf);
 
8561
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti("",buf,"");
 
8562
                                        sprintf(buf,"vdf_decomp_%s%s_cumulative.csv",o->m_pVDF[zr]->m_sName,multibuf);
 
8563
                                        mprintf("    Saving cumulative VDF decomposition as \"%s\"...\n",buf);
 
8564
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti_Cumulative("",buf,"");
 
8565
                                }
 
8566
 
 
8567
                                if (o->m_bTimeDiff)
 
8568
                                        o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
 
8569
                        }
 
8570
                } // END IF VDF
 
8571
 
 
8572
                if (g_bPlDF)
 
8573
                {
 
8574
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8575
                        {
 
8576
                                if (o->m_pPlDF[zr] == NULL)
 
8577
                                        continue;
 
8578
                                mprintf(WHITE,"* Plane Distance Distribution Function\n");
 
8579
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries,o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,ZeroDivide(o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries+o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries)*100.0);
 
8580
                                o->m_pPlDF[zr]->m_pPlDF->CalcMeanSD();
 
8581
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMean,o->m_pPlDF[zr]->m_pPlDF->m_fSD);
 
8582
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMinInput,o->m_pPlDF[zr]->m_pPlDF->m_fMaxInput);
 
8583
                                o->m_pPlDF[zr]->m_pPlDF->NormBinIntegral();
 
8584
                                sprintf(buf,"pldf_%s%s.csv",o->m_pPlDF[zr]->m_sName,multibuf);
 
8585
                                mprintf("    Saving plane distance distribution as %s ...\n",buf);
 
8586
                                o->m_pPlDF[zr]->m_pPlDF->Write("",buf,"",false);
 
8587
                                sprintf(buf,"pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
 
8588
                                mprintf("    Saving plane distance distribution AGR file as \"%s\"...\n",buf);
 
8589
                                o->m_pPlDF[zr]->m_pPlDF->WriteAgr("",buf,"",o->m_pPlDF[zr]->m_sName,false);
 
8590
                                if (o->m_pPlDF[zr]->m_iHistogramRes != 0)
 
8591
                                {
 
8592
                                        mprintf("    Calculating Histogram...\n");
 
8593
                                        o->m_pPlDF[zr]->m_pPlDF->CalcHistogram();
 
8594
                                        sprintf(buf,"his_pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
 
8595
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8596
                                        o->m_pPlDF[zr]->m_pPlDF->WriteHistogram("",buf,"");
 
8597
                                }
 
8598
                        }
 
8599
                } // END IF PlDF
 
8600
 
 
8601
                if (g_bLiDF)
 
8602
                {
 
8603
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8604
                        {
 
8605
                                if (o->m_pLiDF[zr] == NULL)
 
8606
                                        continue;
 
8607
                                mprintf(WHITE,"* Line Distance Distribution Function\n");
 
8608
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries,o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,ZeroDivide(o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries+o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries)*100.0);
 
8609
                                o->m_pLiDF[zr]->m_pLiDF->CalcMeanSD();
 
8610
                                mprintf("    Mean value: %10G pm/ps    Standard deviation: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMean,o->m_pLiDF[zr]->m_pLiDF->m_fSD);
 
8611
                                mprintf("    Min. value: %10G pm/ps    Max. value:         %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMinInput,o->m_pLiDF[zr]->m_pLiDF->m_fMaxInput);
 
8612
        
 
8613
                                if (o->m_pLiDF[zr]->m_bRadialCorrect)
 
8614
                                {
 
8615
                                        mprintf("    Correcting radial distribution...\n");
 
8616
                                        o->m_pLiDF[zr]->m_pLiDF->CorrectLiRadialDist();
 
8617
                                }
 
8618
                                if (o->m_bOthers && o->m_pLiDF[zr]->m_bRadialCorrect)
 
8619
                                {
 
8620
                                        mprintf("    Scaling LiDF to uniform density...\n");
 
8621
                                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
 
8622
                                        {
 
8623
                                                if (o->m_bObsCertain)
 
8624
                                                {
 
8625
                                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / o->m_waObsRefList.GetSize());
 
8626
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / o->m_waObsRefList.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
 
8627
                                                } else
 
8628
                                                {
 
8629
                                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
8630
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
 
8631
                                                }
 
8632
                                                if (g_bDoubleBox)
 
8633
                                                {
 
8634
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_iDoubleBoxFactor);
 
8635
                                                        o->m_pLiDF[zr]->m_pLiDF->MultiplyIntegral(g_iDoubleBoxFactor);
 
8636
                                                }
 
8637
                                        } else
 
8638
                                        {
 
8639
                                                eprintf("    Uniform density not defined if box is not XYZ-periodic!\n");
 
8640
                                                goto _lidfint1;
 
8641
                                        }
 
8642
                                } else
 
8643
                                {
 
8644
_lidfint1:
 
8645
                                        mprintf("    Scaling LiDF to integral value 1000 ...\n");
 
8646
                                        o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral(1000.0);
 
8647
                                        o->m_pLiDF[zr]->m_pLiDF->Integrate(false,1000.0);
 
8648
                                }
 
8649
                                
 
8650
                                
 
8651
                                o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral();
 
8652
                                sprintf(buf,"lidf_%s%s.csv",o->m_pLiDF[zr]->m_sName,multibuf);
 
8653
                                mprintf("    Saving line distance distribution as %s ...\n",buf);
 
8654
                                o->m_pLiDF[zr]->m_pLiDF->Write("",buf,"",false);
 
8655
                                sprintf(buf,"lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
 
8656
                                mprintf("    Saving line distance distribution AGR file as \"%s\"...\n",buf);
 
8657
                                o->m_pLiDF[zr]->m_pLiDF->WriteAgr("",buf,"",o->m_pLiDF[zr]->m_sName,false);
 
8658
                                if (o->m_pLiDF[zr]->m_iHistogramRes != 0)
 
8659
                                {
 
8660
                                        mprintf("    Calculating Histogram...\n");
 
8661
                                        o->m_pLiDF[zr]->m_pLiDF->CalcHistogram();
 
8662
                                        sprintf(buf,"his_lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
 
8663
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8664
                                        o->m_pLiDF[zr]->m_pLiDF->WriteHistogram("",buf,"");
 
8665
                                }
 
8666
                        }
 
8667
                } // END IF LiDF
 
8668
 
 
8669
                if (g_bADF)
 
8670
                {
 
8671
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8672
                        {
 
8673
                                if (o->m_pADF[zr] == NULL)
 
8674
                                        continue;
 
8675
                                mprintf(WHITE,"* Angular Distribution Function\n");
 
8676
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pADF[zr]->m_pADF->m_fBinEntries,o->m_pADF[zr]->m_pADF->m_fSkipEntries,ZeroDivide(o->m_pADF[zr]->m_pADF->m_fSkipEntries,o->m_pADF[zr]->m_pADF->m_fBinEntries+o->m_pADF[zr]->m_pADF->m_fSkipEntries)*100.0);
 
8677
                                o->m_pADF[zr]->m_pADF->CalcMeanSD();
 
8678
                                if (o->m_pADF[zr]->m_bCosine)
 
8679
                                {
 
8680
                                        mprintf("    Mean value: %10G    Standard deviation: %10G\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
 
8681
                                        mprintf("    Min. value: %10G    Max. value:         %10G\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
 
8682
                                } else
 
8683
                                {
 
8684
                                        mprintf("    Mean value: %10G degree    Standard deviation: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
 
8685
                                        mprintf("    Min. value: %10G degree    Max. value:         %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
 
8686
                                }
 
8687
                                if (o->m_pADF[zr]->m_bStat)
 
8688
                                {
 
8689
                                        mprintf("    Applying cone correction...\n");
 
8690
                                        o->m_pADF[zr]->m_pADF->AngleCorrect();
 
8691
                                }
 
8692
                        /*      if (o->m_pADF[zr]->m_bMirror)
 
8693
                                {
 
8694
                                        mprintf("    Making ADF mirror-symmetric...\n");
 
8695
                                        if (o->m_pADF[zr]->m_bCosine)
 
8696
                                                o->m_pADF[zr]->m_pADF->Mirror(0.0f);
 
8697
                                                        else o->m_pADF[zr]->m_pADF->Mirror(90.0f);
 
8698
                                }*/
 
8699
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
 
8700
                                if (o->m_bTimeDev)
 
8701
                                {
 
8702
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
8703
                                        {
 
8704
                                                fclose(o->m_pADF[zr]->m_fAngle[0]);
 
8705
                                                mprintf("    Saving temporal development as adf_timedev_%s%s.csv\n",o->m_pADF[zr]->m_sName,multibuf);
 
8706
                                        } else
 
8707
                                        {
 
8708
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
8709
                                                {
 
8710
                                                        fclose(o->m_pADF[zr]->m_fAngle[z2]);
 
8711
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
8712
                                                        mprintf("    Saving temporal development as %s\n",buf);
 
8713
                                                }
 
8714
                                        }
 
8715
        //                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_pADF->m_sName);
 
8716
        //                              FreeFileName("",o->m_pADF->m_sName,"_angle_stat.txt");
 
8717
        //                              o->m_pADF->m_pAngleStat->Evaluate();
 
8718
        //                              o->m_pADF->m_pAngleStat->Write("",o->m_pADF->m_sName,"_angle_stat.txt");
 
8719
        //                              delete o->m_pAngleStat;
 
8720
                                        delete[] o->m_pADF[zr]->m_fAngle;
 
8721
                                        o->m_pADF[zr]->m_fAngle = NULL;
 
8722
                                        if (o->m_bCombinedPlot)
 
8723
                                        {
 
8724
                                                sprintf(buf,"combined_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
 
8725
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
 
8726
                                                o->m_pADF[zr]->m_pADF->CreateCombinedPlot(false);
 
8727
                                                o->m_pADF[zr]->m_pADF->m_pCombinedPlot->WriteAgr(buf,false);
 
8728
                                        }
 
8729
                                } // END IF TIMEDEV
 
8730
                                sprintf(buf,"adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
 
8731
                                mprintf("    Saving ADF as %s ...\n",buf);
 
8732
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
 
8733
                                o->m_pADF[zr]->m_pADF->Write("",buf,"",false);
 
8734
                                sprintf(buf,"adf_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
 
8735
                                mprintf("    Saving ADF AGR file as \"%s\"...\n",buf);
 
8736
                                if (o->m_pADF[zr]->m_bCosine)
 
8737
                                        o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
 
8738
                                                else o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
 
8739
                                if (o->m_pADF[zr]->m_iHistogramRes != 0)
 
8740
                                {
 
8741
                                        mprintf("    Calculating Histogram...\n");
 
8742
                                        o->m_pADF[zr]->m_pADF->CalcHistogram();
 
8743
                                        sprintf(buf,"his_adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
 
8744
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8745
                                        o->m_pADF[zr]->m_pADF->WriteHistogram("",buf,"");
 
8746
                                }
 
8747
 
 
8748
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
8749
                                {
 
8750
                                        sprintf(buf,"adf_decomp_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
 
8751
                                        mprintf("    Saving ADF decomposition as \"%s\"...\n",buf);
 
8752
                                        o->m_pADF[zr]->m_pADF->WriteMulti("",buf,"");
 
8753
                                        sprintf(buf,"adf_decomp_%s%s_cumulative.csv",o->m_pADF[zr]->m_sName,multibuf);
 
8754
                                        mprintf("    Saving cumulative ADF decomposition as \"%s\"...\n",buf);
 
8755
                                        o->m_pADF[zr]->m_pADF->WriteMulti_Cumulative("",buf,"");
 
8756
                                }
 
8757
 
 
8758
                                if (o->m_bTimeDiff)
 
8759
                                        o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
 
8760
                        }
 
8761
                } // END IF ADF
 
8762
 
 
8763
                if (g_bDDF)
 
8764
                {
 
8765
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
8766
                        {
 
8767
                                if (o->m_pDDF[zr] == NULL)
 
8768
                                        continue;
 
8769
                                mprintf(WHITE,"* Dihedral Distribution Function\n");
 
8770
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDDF[zr]->m_pDDF->m_fBinEntries,o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,ZeroDivide(o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,o->m_pDDF[zr]->m_pDDF->m_fBinEntries+o->m_pDDF[zr]->m_pDDF->m_fSkipEntries)*100.0);
 
8771
                                o->m_pDDF[zr]->m_pDDF->CalcMeanSD();
 
8772
                                if (o->m_pDDF[zr]->m_bCosine)
 
8773
                                {
 
8774
                                        mprintf("    Mean value: %10G    Standard deviation: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
 
8775
                                        mprintf("    Min. value: %10G    Max.value:          %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
 
8776
                                } else
 
8777
                                {
 
8778
                                        mprintf("    Mean value: %10G degree    Standard deviation: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
 
8779
                                        mprintf("    Min. value: %10G degree    Max.value:          %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
 
8780
                                }
 
8781
                                if (o->m_bTimeDev)
 
8782
                                {
 
8783
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
8784
                                        {
 
8785
                                                fclose(o->m_pDDF[zr]->m_fAngle[0]);
 
8786
                                                mprintf("    Saving temporal development as ddf_timedev_%s%s.csv\n",o->m_pDDF[zr]->m_sName,multibuf);
 
8787
                                        } else
 
8788
                                        {
 
8789
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
8790
                                                {
 
8791
                                                        fclose(o->m_pDDF[zr]->m_fAngle[z2]);
 
8792
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
8793
                                                        mprintf("    Saving temporal development as %s\n",buf);
 
8794
                                                }
 
8795
                                        }
 
8796
        /*                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_sName);
 
8797
                                        FreeFileName("",o->m_sName,"_angle_stat.txt");
 
8798
                                        o->m_pAngleStat->Evaluate();
 
8799
                                        o->m_pAngleStat->Write("",o->m_sName,"_angle_stat.txt");
 
8800
        //                              delete o->m_pAngleStat;*/
 
8801
                                        delete[] o->m_pDDF[zr]->m_fAngle;
 
8802
                                        o->m_pDDF[zr]->m_fAngle = NULL;
 
8803
                                        if (o->m_bCombinedPlot)
 
8804
                                        {
 
8805
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
 
8806
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
 
8807
                                                o->m_pDDF[zr]->m_pDDF->CreateCombinedPlot(false);
 
8808
                                                o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->WriteAgr(buf,false);
 
8809
                                        }
 
8810
                                } // END IF TIMEDEV
 
8811
        /*                      if (o->m_pDDF->m_iStat != 0)
 
8812
                                {
 
8813
                                        mprintf("        Korrigiere statistische Verteilung...\n");
 
8814
                                        o->m_pDDF->m_pDDF->AngleCorrect();
 
8815
                                }*/
 
8816
                                sprintf(buf,"ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
 
8817
                                mprintf("    Saving DDF as %s ...\n",buf);
 
8818
                                o->m_pDDF[zr]->m_pDDF->NormBinIntegral();
 
8819
                                o->m_pDDF[zr]->m_pDDF->Write("",buf,"",false);
 
8820
                                sprintf(buf,"ddf_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
 
8821
                                mprintf("    Saving DDF AGR file as \"%s\"...\n",buf);
 
8822
                                if (o->m_pDDF[zr]->m_bCosine)
 
8823
                                        o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
 
8824
                                                else o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
 
8825
                                if (o->m_pDDF[zr]->m_iHistogramRes != 0)
 
8826
                                {
 
8827
                                        mprintf("    Calculating Histogram...\n");
 
8828
                                        o->m_pDDF[zr]->m_pDDF->CalcHistogram();
 
8829
                                        sprintf(buf,"his_ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
 
8830
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
8831
                                        o->m_pDDF[zr]->m_pDDF->WriteHistogram("",buf,"");
 
8832
                                }
 
8833
 
 
8834
                                if (o->m_bObsCertain && o->m_bDecompDist)
 
8835
                                {
 
8836
                                        sprintf(buf,"ddf_decomp_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
 
8837
                                        mprintf("    Saving DDF decomposition as \"%s\"...\n",buf);
 
8838
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti("",buf,"");
 
8839
                                        sprintf(buf,"ddf_decomp_%s%s_cumulative.csv",o->m_pDDF[zr]->m_sName,multibuf);
 
8840
                                        mprintf("    Saving cumulative DDF decomposition as \"%s\"...\n",buf);
 
8841
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti_Cumulative("",buf,"");
 
8842
                                }
 
8843
 
 
8844
                                if (o->m_bTimeDiff)
 
8845
                                        o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
 
8846
                        }
 
8847
                } // END IF DDF
 
8848
 
 
8849
                if (g_bSDF)
 
8850
                {       
 
8851
                        mprintf(WHITE,"* Spatial Distribution Function\n");
 
8852
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pSDF->m_pSDF->m_fBinEntries,o->m_pSDF->m_pSDF->m_fSkipEntries,ZeroDivide(o->m_pSDF->m_pSDF->m_fSkipEntries,o->m_pSDF->m_pSDF->m_fBinEntries+o->m_pSDF->m_pSDF->m_fSkipEntries)*100.0);
 
8853
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
 
8854
                        mprintf("    Raw data range from %.0f to %.0f hits.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry);
 
8855
                        mprintf("    The volume of one bin is %.3f pm^3.\n",pow(o->m_pSDF->m_fRadius*2.0/o->m_pSDF->m_iResolution,3));
 
8856
                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
 
8857
                                mprintf("    The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pSDF->m_fParticleDensity);
 
8858
                                        else mprintf("    The uniform particle density of non-periodic boxes is not defined.\n");
 
8859
/*                      switch(g_iSDFScale)
 
8860
                        {
 
8861
                                case 0:
 
8862
                                        mprintf("    Scaling values to ppm...\n");
 
8863
                                        o->m_pSDF->m_pSDF->MultiplyBin(1000000.0 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8864
                                        break;
 
8865
                                case 1:
 
8866
                                        mprintf("    Scaling values to pm^-3...\n");
 
8867
                                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8868
                                        break;
 
8869
                                case 2:
 
8870
                                        mprintf("    Scaling values to nm^-3...\n");*/
 
8871
/*                                      break;
 
8872
                                case 3:
 
8873
                                        mprintf("    Scaling values relative to average particle density...\n");
 
8874
                                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes / o->m_pSDF->m_fParticleDensity * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8875
                                        break;
 
8876
                        }*/
 
8877
 
 
8878
                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius/2.0*1000.0,3) / (double)g_iSteps * g_iStride / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8879
 
 
8880
                        if (g_bSDFUniform)
 
8881
                        {
 
8882
                                if ((!g_bPeriodicX) || (!g_bPeriodicY) || (!g_bPeriodicZ))
 
8883
                                        goto _sdf_nm;
 
8884
                                o->m_pSDF->m_pSDF->MultiplyBin(1.0/o->m_pSDF->m_fParticleDensity);
 
8885
                                mprintf(WHITE,"    Bin values are given relative to this uniform particle density.\n");
 
8886
                        } else
 
8887
                        {
 
8888
_sdf_nm:
 
8889
                                mprintf(WHITE,"    Bin values are given in nm^-3 (particle density).\n");
 
8890
                        }
 
8891
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
 
8892
                        mprintf("    Data range from %.6f to %.6f%s.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
 
8893
 
 
8894
                        if (o->m_pSDF->m_bInvert)
 
8895
                        {
 
8896
                                mprintf("    Inverting SDF...\n");
 
8897
                                o->m_pSDF->m_pSDF->Invert();
 
8898
                        }
 
8899
                        if (o->m_pSDF->m_bCutPlane)
 
8900
                        {
 
8901
                                mprintf("    Creating Cut Plane...\n");
 
8902
                                o->m_pSDF->CreateCutPlane();
 
8903
                                sprintf(buf,"sdf_cut_%s%s",o->m_pSDF->m_sName,multibuf);
 
8904
                                mprintf("    Saving SDF Cut Plane triples as \"%s_triples.csv\"...\n",buf);
 
8905
                                o->m_pSDF->m_pCutPlane->Write("",buf,"_triples.csv");
 
8906
                                mprintf("    Saving SDF Cut Plane matrix as \"%s_matrix.csv\"...\n",buf);
 
8907
                                o->m_pSDF->m_pCutPlane->WriteCSV("",buf,"_matrix.csv");
 
8908
                                mprintf("    Saving CDF Mathematica Notebook as \"%s.nb\"...\n",buf);
 
8909
                                o->m_pSDF->m_pCutPlane->WriteMathematicaNb("",buf,".nb",false);
 
8910
                                mprintf("    Saving CDF Gnuplot Input as \"%s.gp\"...\n",buf);
 
8911
                                o->m_pSDF->m_pCutPlane->WriteGnuplotInput("",buf,"",false);
 
8912
                        }
 
8913
                        for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
 
8914
                        {
 
8915
                                try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
 
8916
                                if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
8917
                                
 
8918
                                tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
 
8919
 
 
8920
                                if (z2 != 0)
 
8921
                                        tempSDF->Smooth(z2);
 
8922
 
 
8923
                                tempSDF->CalcMaxEntry();
 
8924
                                mprintf("        Data range from %.6f to %.6f%s.\n",tempSDF->m_fMinEntry,tempSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
 
8925
                                if (o->m_pSDF->m_bClipPlane)
 
8926
                                {
 
8927
                                        mprintf("        Creating Clip Plane in %c direction with value %.3f...\n",(o->m_pSDF->m_iClipDirection==0)?'X':((o->m_pSDF->m_iClipDirection==1)?'Y':'Z'),o->m_pSDF->m_fClipValue);
 
8928
                                        o->m_pSDF->m_pSDF->ClipPlane(o->m_pSDF->m_iClipDirection,o->m_pSDF->m_fClipValue);
 
8929
                                }
 
8930
 
 
8931
                                if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_PLT"))
 
8932
                                {
 
8933
                                        if (z2 != 0)
 
8934
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
 
8935
                                                        else sprintf(buf,"%s.plt",multibuf);
 
8936
                                        mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
 
8937
                                        tempSDF->WritePLT("sdf_",o->m_pSDF->m_sName,buf,true);
 
8938
                                }
 
8939
 
 
8940
                                if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_CUBE"))
 
8941
                                {
 
8942
                                        if (z2 != 0)
 
8943
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
 
8944
                                                        else sprintf(buf,"%s.cube",multibuf);
 
8945
                                        mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
 
8946
                                        tempSDF->WriteCube("sdf_",o->m_pSDF->m_sName,buf,true);
 
8947
                                }
 
8948
 
 
8949
                                if (o->m_pSDF->m_iHistogramRes != 0)
 
8950
                                {
 
8951
                                        if (z2 != 0)
 
8952
                                                sprintf(buf,".s%d%s.csv",z2,multibuf);
 
8953
                                                        else sprintf(buf,"%s.csv",multibuf);
 
8954
                                        mprintf("        Saving SDF Histogram as \"his_sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
 
8955
                                        tempSDF->CalcHistogram();
 
8956
                                        tempSDF->WriteHistogram("his_sdf_",o->m_pSDF->m_sName,buf);
 
8957
                                }
 
8958
                        }
 
8959
                        mprintf(YELLOW,"\n    Important: ");
 
8960
                        mprintf(WHITE,"The PLT/CUBE files only contain the volumetric data.\n");
 
8961
                        mprintf(WHITE,"    The atoms of the reference molecule are saved in the ref_*.xyz file!\n");
 
8962
                        mprintf(WHITE,"    You need to load *both files* into the visualization program (e.g. VMD).\n");
 
8963
                } // END IF SDF
 
8964
 
 
8965
                if (g_bPlProj)
8677
8966
                {       
8678
 
                        mprintf(WHITE,"* Spatial Distribution Function\n");
8679
 
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pSDF->m_pSDF->m_fBinEntries,o->m_pSDF->m_pSDF->m_fSkipEntries,ZeroDivide(o->m_pSDF->m_pSDF->m_fSkipEntries,o->m_pSDF->m_pSDF->m_fBinEntries+o->m_pSDF->m_pSDF->m_fSkipEntries)*100.0);
8680
 
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
8681
 
                        mprintf("    Raw data range from %.0f to %.0f hits.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry);
8682
 
                        mprintf("    The volume of one bin is %.3f pm^3.\n",pow(o->m_pSDF->m_fRadius*2.0/o->m_pSDF->m_iResolution,3));
8683
 
                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8684
 
                                mprintf("    The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pSDF->m_fParticleDensity);
8685
 
                                        mprintf("    The uniform particle density of non-periodic boxes is not defined.\n");
8686
 
/*                      switch(g_iSDFScale)
8687
 
                        {
8688
 
                                case 0:
8689
 
                                        mprintf("    Scaling values to ppm...\n");
8690
 
                                        o->m_pSDF->m_pSDF->MultiplyBin(1000000.0 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8691
 
                                        break;
8692
 
                                case 1:
8693
 
                                        mprintf("    Scaling values to pm^-3...\n");
8694
 
                                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8695
 
                                        break;
8696
 
                                case 2:
8697
 
                                        mprintf("    Scaling values to nm^-3...\n");*/
8698
 
/*                                      break;
8699
 
                                case 3:
8700
 
                                        mprintf("    Scaling values relative to average particle density...\n");
8701
 
                                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes / o->m_pSDF->m_fParticleDensity * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8702
 
                                        break;
8703
 
                        }*/
8704
 
 
8705
 
                        o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius/2.0*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8706
 
 
8707
 
                        if (g_bSDFUniform)
8708
 
                        {
8709
 
                                if ((!g_bPeriodicX) || (!g_bPeriodicY) || (!g_bPeriodicZ))
8710
 
                                        goto _sdf_nm;
8711
 
                                o->m_pSDF->m_pSDF->MultiplyBin(1.0/o->m_pSDF->m_fParticleDensity);
8712
 
                                mprintf(WHITE,"    Bin values are given relative to this uniform particle density.\n");
8713
 
                        } else
8714
 
                        {
8715
 
_sdf_nm:
8716
 
                                mprintf(WHITE,"    Bin values are given in nm^-3 (particle density).\n");
8717
 
                        }
8718
 
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
8719
 
                        mprintf("    Data range from %.6f to %.6f%s.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8720
 
 
8721
 
                        if (o->m_pSDF->m_bInvert)
8722
 
                        {
8723
 
                                mprintf("    Inverting SDF...\n");
8724
 
                                o->m_pSDF->m_pSDF->Invert();
8725
 
                        }
8726
 
                        if (o->m_pSDF->m_bCutPlane)
8727
 
                        {
8728
 
                                mprintf("    Creating Cut Plane...\n");
8729
 
                                o->m_pSDF->CreateCutPlane();
8730
 
                                sprintf(buf,"sdf_cut_%s%s",o->m_pSDF->m_sName,multibuf);
8731
 
                                mprintf("    Saving SDF Cut Plane triples as \"%s_triples.csv\"...\n",buf);
8732
 
                                o->m_pSDF->m_pCutPlane->Write("",buf,"_triples.csv");
8733
 
                                mprintf("    Saving SDF Cut Plane matrix as \"%s_matrix.csv\"...\n",buf);
8734
 
                                o->m_pSDF->m_pCutPlane->WriteCSV("",buf,"_matrix.csv");
8735
 
                                mprintf("    Saving CDF Mathematica Notebook as \"%s.nb\"...\n",buf);
8736
 
                                o->m_pSDF->m_pCutPlane->WriteMathematicaNb("",buf,".nb",false);
8737
 
                                mprintf("    Saving CDF Gnuplot Input as \"%s.gp\"...\n",buf);
8738
 
                                o->m_pSDF->m_pCutPlane->WriteGnuplotInput("",buf,"",false);
8739
 
                        }
8740
 
                        for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
8741
 
                        {
8742
 
                                try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
8743
 
                                if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8744
 
                                
8745
 
                                tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
8746
 
 
8747
 
                                if (z2 != 0)
8748
 
                                        tempSDF->Smooth(z2);
8749
 
 
8750
 
                                tempSDF->CalcMaxEntry();
8751
 
                                mprintf("        Data range from %.6f to %.6f%s.\n",tempSDF->m_fMinEntry,tempSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8752
 
                                if (o->m_pSDF->m_bClipPlane)
8753
 
                                {
8754
 
                                        mprintf("        Creating Clip Plane in %c direction with value %.3f...\n",(o->m_pSDF->m_iClipDirection==0)?'X':((o->m_pSDF->m_iClipDirection==1)?'Y':'Z'),o->m_pSDF->m_fClipValue);
8755
 
                                        o->m_pSDF->m_pSDF->ClipPlane(o->m_pSDF->m_iClipDirection,o->m_pSDF->m_fClipValue);
8756
 
                                }
8757
 
 
8758
 
                                if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_PLT"))
8759
 
                                {
8760
 
                                        if (z2 != 0)
8761
 
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
8762
 
                                                        else sprintf(buf,"%s.plt",multibuf);
8763
 
                                        mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8764
 
                                        tempSDF->WritePLT("sdf_",o->m_pSDF->m_sName,buf,true);
8765
 
                                }
8766
 
 
8767
 
                                if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_CUBE"))
8768
 
                                {
8769
 
                                        if (z2 != 0)
8770
 
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
8771
 
                                                        else sprintf(buf,"%s.cube",multibuf);
8772
 
                                        mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8773
 
                                        tempSDF->WriteCube("sdf_",o->m_pSDF->m_sName,buf,true);
8774
 
                                }
8775
 
 
8776
 
                                if (o->m_pSDF->m_iHistogramRes != 0)
8777
 
                                {
8778
 
                                        if (z2 != 0)
8779
 
                                                sprintf(buf,".s%d%s.csv",z2,multibuf);
8780
 
                                                        else sprintf(buf,"%s.csv",multibuf);
8781
 
                                        mprintf("        Saving SDF Histogram as \"his_sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8782
 
                                        tempSDF->CalcHistogram();
8783
 
                                        tempSDF->WriteHistogram("his_sdf_",o->m_pSDF->m_sName,buf);
8784
 
                                }
8785
 
                        }
8786
 
                        mprintf(YELLOW,"\n    Important: ");
8787
 
                        mprintf(WHITE,"The PLT/CUBE files only contain the volumetric data.\n");
8788
 
                        mprintf(WHITE,"    The atoms of the reference molecule are saved in the ref_*.xyz file!\n");
8789
 
                        mprintf(WHITE,"    You need to load *both files* into the visualization program (e.g. VMD).\n");
8790
 
                } // END IF SDF
8791
 
 
8792
 
                if (g_bRDF)
8793
 
                {
8794
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
8795
 
                        {
8796
 
                                if (o->m_pRDF[zr] == NULL)
8797
 
                                        continue;
8798
 
                                mprintf(WHITE,"* Radial Distribution Function\n");
8799
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRDF[zr]->m_pRDF->m_fBinEntries,o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,ZeroDivide(o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,o->m_pRDF[zr]->m_pRDF->m_fBinEntries+o->m_pRDF[zr]->m_pRDF->m_fSkipEntries)*100.0);
8800
 
                                o->m_pRDF[zr]->m_pRDF->CalcMeanSD();
8801
 
                                mprintf("    Mean value: %10G pm    Standard deviation: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMean,o->m_pRDF[zr]->m_pRDF->m_fSD);
8802
 
                                mprintf("    Min. value: %10G pm    Max.value:          %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMinInput,o->m_pRDF[zr]->m_pRDF->m_fMaxInput);
8803
 
 
8804
 
                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1.0 / g_iSteps);
8805
 
 
8806
 
                                if (o->m_pRDF[zr]->m_bCalcSD)
8807
 
                                {
8808
 
                                        mprintf(GREEN,"\n>>> Standard Deviation Engine >>>\n\n");
8809
 
                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishAnalysis();
8810
 
                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->DumpData(o->m_pRDF[zr]->m_pRDF,o->m_pRDF[zr]->m_fSDTimesSigma,o->m_pRDF[zr]->m_bSDVerbose);
8811
 
                                        mprintf(GREEN,"\n<<< Standard Deviation Engine <<<\n\n");
8812
 
                                }
8813
 
                                if (o->m_pRDF[zr]->m_bAdaptive)
8814
 
                                {
8815
 
//                                      o->m_pRDF[zr]->m_pRDF->WriteHenry("rdf_",o->m_pRDF[zr]->m_sName,".csv");
8816
 
                                        o->m_pRDF[zr]->m_pRDF->PrepareAdapt();
8817
 
                                        o->m_pRDF[zr]->m_pRDF->BinTree_RadialDist();
8818
 
                                        if (o->m_iShowMol == g_iFixMol)
8819
 
                                                o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/(((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()-1.0f)/o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
8820
 
                                                        else o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
8821
 
 
8822
 
                                        mprintf("    Saving RDF as \"rdf_%s.csv\"...\n",o->m_pRDF[zr]->m_sName);
8823
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".001.csv",5,10,0.001,true);
8824
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".002.csv",5,10,0.002,true);
8825
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".005.csv",5,10,0.005,true);
8826
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".010.csv",5,10,0.01,true);
8827
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".020.csv",5,10,0.02,true);
8828
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".050.csv",5,10,0.05,true);
8829
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",5,10,0.1,true);
8830
 
 
8831
 
/*                                      o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".50.csv",16,0,50,true);
8832
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",16,0,100,true);
8833
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".500.csv",16,0,500,true);
8834
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".1000.csv",16,0,1000,true);*/
8835
 
                                } else
8836
 
                                {
8837
 
                                        if (o->m_pRDF[zr]->m_bRadialCorrect)
8838
 
                                        {
8839
 
                                                mprintf("    Correcting radial distribution...\n");
8840
 
                                                o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
8841
 
                                        }
8842
 
                                        if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
8843
 
                                        {
8844
 
                                                if (o->m_pRDF[zr]->m_bProbDens)
8845
 
                                                {
8846
 
                                                        mprintf("    Scaling RDF to nm^(-3) ...\n");
8847
 
                                                        if (o->m_bObsCertain)
8848
 
                                                        {
8849
 
                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
8850
 
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8851
 
                                                        } else
8852
 
                                                        {
8853
 
                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8854
 
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8855
 
                                                        }
8856
 
                                                        if (g_bDoubleBox)
8857
 
                                                        {
8858
 
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
8859
 
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
8860
 
                                                        }
8861
 
                                                } else
8862
 
                                                {
8863
 
                                                        mprintf("    Scaling RDF to uniform density ...\n");
8864
 
                                                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8865
 
                                                        {
8866
 
                                                                if (o->m_bObsCertain)
8867
 
                                                                {
8868
 
                                                                        o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
8869
 
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8870
 
                                                                } else
8871
 
                                                                {
8872
 
                                                                        if (g_bRegionAnalysis)
8873
 
                                                                        {
8874
 
                                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 * g_iSteps / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) * o->m_pRDF[zr]->m_iShowAtomGes * ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() * o->m_pRDF[zr]->m_iRefAtomGes);
8875
 
                                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ * g_iSteps / (4.0/3.0*Pi) / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) );
8876
 
                                                                        } else
8877
 
                                                                        {
8878
 
                                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8879
 
                                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8880
 
                                                                        }
8881
 
                                                                }
8882
 
                                                                if (g_bDoubleBox)
8883
 
                                                                {
8884
 
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
8885
 
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
8886
 
                                                                }
8887
 
                                                        } else
8888
 
                                                        {
8889
 
                                                                eprintf("    Uniform density not defined if box is not XYZ-periodic!\n");
8890
 
                                                                goto _rdfint1;
8891
 
                                                        }
8892
 
                                                }
8893
 
                                        } else
8894
 
                                        {
8895
 
_rdfint1:
8896
 
                                                mprintf("    Scaling RDF to integral value 1000 ...\n");
8897
 
                                                o->m_pRDF[zr]->m_pRDF->NormBinIntegral(1000.0);
8898
 
                                                o->m_pRDF[zr]->m_pRDF->Integrate(false,1000.0);
8899
 
                                        }
8900
 
                                        sprintf(buf,"rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
8901
 
                                        mprintf("    Saving RDF as \"%s\"...\n",buf);
8902
 
                                        o->m_pRDF[zr]->m_pRDF->Write("",buf,"",true);
8903
 
                                        sprintf(buf,"rdf_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
8904
 
                                        mprintf("    Saving RDF AGR file as \"%s\"...\n",buf);
8905
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAgr("",buf,"",o->m_pRDF[zr]->m_sName,true);
8906
 
                                        if (o->m_pRDF[zr]->m_iHistogramRes != 0)
8907
 
                                        {
8908
 
                                                mprintf("    Calculating Histogram...\n");
8909
 
                                                o->m_pRDF[zr]->m_pRDF->CalcHistogram();
8910
 
                                                sprintf(buf,"his_rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
8911
 
                                                mprintf("    Saving Histogram as \"%s\"...\n",buf);
8912
 
                                                o->m_pRDF[zr]->m_pRDF->WriteHistogram("",buf,"");
8913
 
                                        }
8914
 
                                        if (o->m_bObsCertain && o->m_bDecompDist)
8915
 
                                        {
8916
 
                                                sprintf(buf,"rdf_decomp_mol_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
8917
 
                                                mprintf("    Saving RDF molecule decomposition as \"%s.csv\"...\n",buf);
8918
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
8919
 
                                                mprintf("    Saving RDF molecule decomposition as \"%s.agr\"...\n",buf);
8920
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
8921
 
 
8922
 
                                                sprintf(buf,"rdf_decomp_nb_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
8923
 
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.csv\"...\n",buf);
8924
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
8925
 
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.agr\"...\n",buf);
8926
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
8927
 
                                        }
8928
 
                                        if (o->m_bDecompType)
8929
 
                                        {
8930
 
                                                sprintf(buf,"rdf_decomp_type_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
8931
 
                                                mprintf("    Saving RDF type decomposition as \"%s.csv\"...\n",buf);
8932
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
8933
 
                                                mprintf("    Saving RDF type decomposition as \"%s.agr\"...\n",buf);
8934
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
8935
 
 
8936
 
                                                sprintf(buf,"rdf_decomp_type_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
8937
 
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.csv\"...\n",buf);
8938
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
8939
 
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.agr\"...\n",buf);
8940
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
8941
 
                                        }
8942
 
 
8943
 
                                        if (o->m_bTimeDiff)
8944
 
                                                o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
8945
 
 
8946
 
                                        if (o->m_pRDF[zr]->m_bACF)
8947
 
                                        {
8948
 
                                                o->m_pRDF[zr]->Autocorrelate();
8949
 
                                        }
8950
 
                                }
8951
 
                                if (o->m_bTimeDev)
8952
 
                                {
8953
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8954
 
                                        {
8955
 
                                                fclose(o->m_pRDF[zr]->m_fDist[0]);
8956
 
                                                mprintf("    Saving temporal development as \"rdf_timedev_%s%s.csv\"...\n",o->m_pRDF[zr]->m_sName,multibuf);
8957
 
                                        } else
8958
 
                                        {
8959
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8960
 
                                                {
8961
 
                                                        fclose(o->m_pRDF[zr]->m_fDist[z2]);
8962
 
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8963
 
                                                        mprintf("    Saving temporal development as \"%s\"...\n",buf);
8964
 
                                                }
8965
 
                                        }
8966
 
                                        delete[] o->m_pRDF[zr]->m_fDist;
8967
 
                                        o->m_pRDF[zr]->m_fDist = NULL;
8968
 
                                        if (o->m_bCombinedPlot)
8969
 
                                        {
8970
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
8971
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
8972
 
                                                o->m_pRDF[zr]->m_pRDF->CreateCombinedPlot(true);
8973
 
                                                o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->WriteAgr(buf,false);
8974
 
                                        }
8975
 
                                }
8976
 
                        }
8977
 
                } // END IF RDF
8978
 
 
8979
 
                if (g_bVHDF)
8980
 
                {
8981
 
                        mprintf(WHITE,"* Van Hove Correlation Function\n");
8982
 
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVHDF->m_pVHDF->m_fBinEntries,o->m_pVHDF->m_pVHDF->m_fSkipEntries,ZeroDivide(o->m_pVHDF->m_pVHDF->m_fSkipEntries,o->m_pVHDF->m_pVHDF->m_fBinEntries+o->m_pVHDF->m_pVHDF->m_fSkipEntries)*100.0);
8983
 
                        o->m_pVHDF->CorrectCount();
8984
 
                        if (o->m_pVHDF->m_bRadialCorrect)
8985
 
                        {
8986
 
                                mprintf("    Correcting radial distribution...\n");
8987
 
                                o->m_pVHDF->m_pVHDF->CorrectRadialDist(1);
8988
 
                                if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8989
 
                                {
8990
 
                                        mprintf("    Normalizing bin to uniform density...\n");
8991
 
                                        o->m_pVHDF->m_pVHDF->MultiplyBin(3.0f/4.0f/Pi*g_fBoxX*g_fBoxY*g_fBoxZ);
8992
 
                                }
8993
 
                                if (g_bDoubleBox)
8994
 
                                        o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
8995
 
                        } else
8996
 
                        {
8997
 
                                mprintf("    Normalizing bin integral to 1000000...\n");
8998
 
                                o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
8999
 
                        }
9000
 
 
9001
 
                        sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9002
 
 
9003
 
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9004
 
                        {
9005
 
                                mprintf("    Saving VHCF triples as \"%s_triples.csv\"...\n",buf);
9006
 
                                o->m_pVHDF->m_pVHDF->Write("",buf,"_triples.csv");
9007
 
                        }
9008
 
 
9009
 
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9010
 
                        {
9011
 
                                mprintf("    Saving VHCF matrix as \"%s_matrix.csv\"...\n",buf);
9012
 
                                o->m_pVHDF->m_pVHDF->WriteCSV("",buf,"_matrix.csv");
9013
 
                        }
9014
 
 
9015
 
                        if (o->m_pVHDF->m_iGraceBunchDist > 0)
9016
 
                        {
9017
 
                                sprintf(buf,"vhcf_dist_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9018
 
                                mprintf("    Saving VHCF distance Grace Stack as \"%s\"...\n",buf);
9019
 
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(0,o->m_pVHDF->m_iGraceBunchDist,1.0f,"",buf,"");
9020
 
                        }
9021
 
 
9022
 
                        if (o->m_pVHDF->m_iGraceBunchTime > 0)
9023
 
                        {
9024
 
                                sprintf(buf,"vhcf_time_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9025
 
                                mprintf("    Saving VHCF time Grace Stack as \"%s\"...\n",buf);
9026
 
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(1,o->m_pVHDF->m_iGraceBunchTime,1.0f,"",buf,"");
9027
 
                        }
9028
 
 
9029
 
                        if (o->m_pVHDF->m_bSwapAxes)
9030
 
                                o->m_pVHDF->m_pVHDF->SwapAxes();
9031
 
 
9032
 
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9033
 
                        {
9034
 
                                sprintf(buf,"vhcf_%s%s.nb",o->m_pVHDF->m_sName,multibuf);
9035
 
                                mprintf("    Saving VHCF Mathematica Notebook as \"%s\"...\n",buf);
9036
 
                                o->m_pVHDF->m_pVHDF->WriteMathematicaNb("",buf,"",false);
9037
 
                        }
9038
 
 
9039
 
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9040
 
                        {
9041
 
                                sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9042
 
                                mprintf("    Saving VHCF Gnuplot Input as \"%s.gp\"...\n",buf);
9043
 
                                o->m_pVHDF->m_pVHDF->WriteGnuplotInput("",buf,"",false);
9044
 
                        }
9045
 
                } // END IF VHDF
9046
 
 
9047
 
                if (g_bCDF)
9048
 
                {
9049
 
                        if (g_iCDFChannels == 2)
9050
 
                        {
9051
 
                                mprintf(WHITE,"* Combined Distribution Function (2D)\n");
9052
 
                        /*      if (o->m_pConditions != NULL)
9053
 
                                {
9054
 
                                        mprintf("    Conditions: %.2f percent of the molecules passed.\n",o->m_pConditions->m_fPassed/(o->m_pConditions->m_fPassed+o->m_pConditions->m_fFailed)*100.0);
9055
 
                                        mprintf("    After conditions: ");
9056
 
                                } else mprintf("    ");*/
9057
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p2DF->m_fBinEntries,o->m_pCDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p2DF->m_fSkipEntries,o->m_pCDF->m_p2DF->m_fSkipEntries+o->m_pCDF->m_p2DF->m_fBinEntries)*100.0);
9058
 
                                if (o->m_pCDF->m_p2DF->m_fBinEntries == 0)
9059
 
                                {
9060
 
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9061
 
                                        goto _skipsdf;
9062
 
                                }
9063
 
                                for (z2=0;z2<2;z2++)
9064
 
                                {
9065
 
                                        if (g_iObsChannel[z2] == 0)
9066
 
                                        {
9067
 
                                                if ((o->m_pRDF[z2]->m_bRadialCorrect) && (o->m_pCDF->m_iNormalize != 3))
9068
 
                                                {
9069
 
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
9070
 
                                                        o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
9071
 
                                                }
9072
 
                                        }
9073
 
                                        if (g_iObsChannel[z2] == 1)
9074
 
                                        {
9075
 
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine) && (o->m_pCDF->m_iNormalize != 3))
9076
 
                                                {
9077
 
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
9078
 
                                                        o->m_pCDF->m_p2DF->CorrectAngle(z2);
9079
 
                                                }
9080
 
                                                if (o->m_pADF[z2]->m_bMirror)
9081
 
                                                {
9082
 
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
9083
 
                                                        if (o->m_pADF[z2]->m_bCosine)
9084
 
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9085
 
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9086
 
                                                }
9087
 
                                        }
9088
 
                                        if (g_iObsChannel[z2] == 6)
9089
 
                                        {
9090
 
                                                if (o->m_pLiDF[z2]->m_bRadialCorrect)
9091
 
                                                {
9092
 
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
9093
 
                                                        o->m_pCDF->m_p2DF->CorrectLiRadialDist(z2);
9094
 
                                                }
9095
 
                                        }
9096
 
                                }
9097
 
                                o->m_pCDF->m_fFactor = 1.0;
9098
 
                                switch(o->m_pCDF->m_iNormalize)
9099
 
                                {
9100
 
                                        case 3:
9101
 
                                                mprintf("    Normalizing CDF to uniform density.\n");
9102
 
                                                o->m_pCDF->m_p2DF->NormalizeUniform(g_fBoxX*g_fBoxY*g_fBoxZ/g_iSteps  / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pCDF->m_iCombinationsEnabled);
9103
 
                                                break;
9104
 
                                        case 2:
9105
 
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9106
 
                                                o->m_pCDF->m_p2DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9107
 
                                                break;
9108
 
                                        case 1:
9109
 
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9110
 
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p2DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9111
 
                                                break;
9112
 
                                        case 0:
9113
 
                                                mprintf("    Not normalizing this CDF.\n");
9114
 
                                                break;
9115
 
                                }
9116
 
 
9117
 
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9118
 
                                {
9119
 
                                        mprintf("    Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9120
 
                                        o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_triples.csv");
9121
 
                                }
9122
 
 
9123
 
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9124
 
                                {
9125
 
                                        mprintf("    Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9126
 
                                        o->m_pCDF->m_p2DF->WriteCSV(o->m_pCDF->m_sName,multibuf,"_matrix.csv");
9127
 
                                }
9128
 
 
9129
 
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9130
 
                                {
9131
 
                                        mprintf("    Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9132
 
                                        o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,".nb",false);
9133
 
                                }
9134
 
 
9135
 
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9136
 
                                {
9137
 
                                        mprintf("    Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9138
 
                                        o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"",false);
9139
 
                                }
9140
 
 
9141
 
                                mprintf("    Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_sName,multibuf);
9142
 
                                o->m_pCDF->m_p2DF->WriteCombinedPlot(o->m_pCDF->m_sName,multibuf,"_combined.agr");
9143
 
                                if (o->m_pCDF->m_iHistogramRes != 0)
9144
 
                                {
9145
 
                                        mprintf("    Calculating Histogram...\n");
9146
 
                                        o->m_pCDF->m_p2DF->CalcHistogram();
9147
 
                                        sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9148
 
                                        mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9149
 
                                        o->m_pCDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9150
 
                                }
9151
 
 
9152
 
                                if (o->m_pCDF->m_bGraceBunch)
9153
 
                                {
9154
 
                                        if (o->m_pCDF->m_iGraceBunchC1 > 0)
9155
 
                                        {
9156
 
                                                if ((g_iObsChannel[1] == 0) && (o->m_bOthers))
9157
 
                                                        tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[1]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[1]->m_iRefAtomGes;
9158
 
                                                                else tf = 1;
9159
 
                                                sprintf(buf,"cdf_c1_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9160
 
                                                mprintf("    Saving CDF Channel 1 Grace Stack as \"%s\"...\n",buf);
9161
 
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(0,o->m_pCDF->m_iGraceBunchC1,(float)tf,"",buf,"");
9162
 
                                        }
9163
 
                                        if (o->m_pCDF->m_iGraceBunchC2 > 0)
9164
 
                                        {
9165
 
                                                if ((g_iObsChannel[0] == 0) && (o->m_bOthers))
9166
 
                                                        tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[0]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[0]->m_iRefAtomGes;
9167
 
                                                                else tf = 1;
9168
 
                                                sprintf(buf,"cdf_c2_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9169
 
                                                mprintf("    Saving CDF Channel 2 Grace Stack as \"%s\"...\n",buf);
9170
 
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(1,o->m_pCDF->m_iGraceBunchC2,(float)tf,"",buf,"");
9171
 
                                        }
9172
 
                                }
9173
 
 
9174
 
                                if (o->m_pCDF->m_bAxisDivide)
9175
 
                                {
9176
 
                                        if (o->m_pCDF->m_bAxisDivideAll)
9177
 
                                        {
9178
 
                                                mprintf("    Saving CDF X projection as \"%s%s_pX.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9179
 
                                                o->m_pCDF->m_p2DF->WriteXProjection(o->m_pCDF->m_sName,multibuf,"_pX.csv");
9180
 
 
9181
 
                                                mprintf("    Saving CDF Y projection as \"%s%s_pY.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9182
 
                                                o->m_pCDF->m_p2DF->WriteYProjection(o->m_pCDF->m_sName,multibuf,"_pY.csv");
9183
 
 
9184
 
                                                mprintf("    Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9185
 
 
9186
 
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9187
 
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9188
 
                                                
9189
 
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9190
 
                                                if (g_iObsChannel[0] == 0)
9191
 
                                                        if (o->m_pRDF[0]->m_bRadialCorrect)
9192
 
                                                                tempc2df->UnCorrectRadialDist(0);
9193
 
                                                if (g_iObsChannel[0] == 1)
9194
 
                                                        if (o->m_pADF[0]->m_bStat && (!o->m_pADF[0]->m_bCosine))
9195
 
                                                                tempc2df->UnCorrectAngle(0);
9196
 
                                                tempc2df->NormalizeXCount();
9197
 
                                                switch(o->m_pCDF->m_iNormalize)
9198
 
                                                {
9199
 
                                                        case 2:
9200
 
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9201
 
                                                                break;
9202
 
                                                        case 1:
9203
 
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9204
 
                                                                break;
9205
 
                                                        case 0:
9206
 
                                                                break;
9207
 
                                                }
9208
 
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
9209
 
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nX",false);
9210
 
                                                delete tempc2df;
9211
 
 
9212
 
                                                mprintf("    Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9213
 
 
9214
 
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9215
 
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9216
 
                                                
9217
 
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9218
 
                                                if (g_iObsChannel[1] == 0)
9219
 
                                                        if (o->m_pRDF[1]->m_bRadialCorrect)
9220
 
                                                                tempc2df->UnCorrectRadialDist(1);
9221
 
                                                if (g_iObsChannel[1] == 1)
9222
 
                                                        if (o->m_pADF[1]->m_bStat && (!o->m_pADF[1]->m_bCosine))
9223
 
                                                                tempc2df->UnCorrectAngle(1);
9224
 
                                                tempc2df->NormalizeYCount();
9225
 
                                                switch(o->m_pCDF->m_iNormalize)
9226
 
                                                {
9227
 
                                                        case 2:
9228
 
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9229
 
                                                                break;
9230
 
                                                        case 1:
9231
 
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9232
 
                                                                break;
9233
 
                                                        case 0:
9234
 
                                                                break;
9235
 
                                                }
9236
 
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
9237
 
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nY",false);
9238
 
                                                delete tempc2df;
9239
 
 
9240
 
                                                mprintf("    Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9241
 
 
9242
 
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9243
 
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9244
 
                                                
9245
 
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9246
 
                                                for (z2=0;z2<2;z2++)
9247
 
                                                {
9248
 
                                                        if (g_iObsChannel[z2] == 0)
9249
 
                                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
9250
 
                                                                        tempc2df->UnCorrectRadialDist(z2);
9251
 
                                                        if (g_iObsChannel[z2] == 1)
9252
 
                                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9253
 
                                                                        tempc2df->UnCorrectAngle(z2);
9254
 
                                                }
9255
 
                                                tempc2df->NormalizeXCount();
9256
 
                                                tempc2df->NormalizeYCount();
9257
 
                                                switch(o->m_pCDF->m_iNormalize)
9258
 
                                                {
9259
 
                                                        case 2:
9260
 
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9261
 
                                                                break;
9262
 
                                                        case 1:
9263
 
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9264
 
                                                                break;
9265
 
                                                        case 0:
9266
 
                                                                break;
9267
 
                                                }
9268
 
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
9269
 
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nXY",false);
9270
 
                                                delete tempc2df;
9271
 
                                        }
9272
 
 
9273
 
                                        mprintf("    Calculating tensor product of CDF projections...\n");
9274
 
 
9275
 
                                        try { o->m_pCDF->m_pTensorProduct = new C2DF(); } catch(...) { o->m_pCDF->m_pTensorProduct = NULL; }
9276
 
                                        if (o->m_pCDF->m_pTensorProduct == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9277
 
                                        
9278
 
                                        o->m_pCDF->m_pTensorProduct->CopyFrom(o->m_pCDF->m_p2DF);
9279
 
                                        o->m_pCDF->m_pTensorProduct->MakeTensorProduct(o->m_pCDF->m_p2DF);
9280
 
                                        switch(o->m_pCDF->m_iNormalize)
9281
 
                                        {
9282
 
                                                case 2:
9283
 
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9284
 
                                                        break;
9285
 
                                                case 1:
9286
 
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9287
 
                                                        break;
9288
 
                                                case 0:
9289
 
                                                        break;
9290
 
                                        }
9291
 
                                        if (o->m_pCDF->m_bAxisDivideAll)
9292
 
                                        {
9293
 
                                                mprintf("    Saving tensor product as \"%s%s_tensor.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9294
 
                                                o->m_pCDF->m_pTensorProduct->Write(o->m_pCDF->m_sName,multibuf,"_tensor.dat");
9295
 
                                                mprintf("    Saving tensor product Mathematica Notebook as \"%s%s_tensor.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9296
 
                                                o->m_pCDF->m_pTensorProduct->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensor.nb",false);
9297
 
                                                mprintf("    Saving tensor product Gnuplot Input as \"%s%s_tensor.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9298
 
                                                o->m_pCDF->m_pTensorProduct->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_tensor",false);
9299
 
                                                mprintf("    Calculating difference between CDF and tensor product...\n");
9300
 
                                        }
9301
 
                                        o->m_pCDF->m_p2DF->Subtract(o->m_pCDF->m_pTensorProduct);
9302
 
                                        o->m_pCDF->m_p2DF->CalcMaxEntry();
9303
 
                                        o->m_pCDF->m_p2DF->m_iColorScale = 4; // PlusMinus Scale
9304
 
                                        o->m_pCDF->m_p2DF->m_fPlotExp = 1.0;
9305
 
        //                              o->m_pCDF->m_p2DF->m_fMathematicaColorOffset = max(fabs(o->m_pCDF->m_p2DF->m_fMinEntry),fabs(o->m_pCDF->m_p2DF->m_fMaxEntry)) / 3.0;
9306
 
        //                              o->m_pCDF->m_p2DF->m_fMathematicaColorScale = o->m_pCDF->m_p2DF->m_fMathematicaColorOffset  * 2.0;
9307
 
                                        mprintf("    Saving +/- correlation plot as \"%s%s_correlation.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9308
 
                                        o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_correlation.dat");
9309
 
                                        mprintf("    Saving +/- correlation plot Mathematica Notebook as \"%s%s_correlation.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9310
 
                                        o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_correlation.nb",false);
9311
 
                                        mprintf("    Saving +/- correlation plot Gnuplot Input as \"%s%s_correlation.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9312
 
                                        o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_correlation",false);
9313
 
                                } // END IF AXISDIVIDE
9314
 
                                if (o->m_pCDF->m_bDumpDat)
9315
 
                                {
9316
 
                                        fclose(o->m_pCDF->m_fDump);
9317
 
                                        mprintf("    CDF raw data saved as cdfdump_%dd_%s%s.csv.\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9318
 
                                }
9319
 
                                if (o->m_bTimeDev)
9320
 
                                {
9321
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
9322
 
                                        {
9323
 
                                                fclose(o->m_pCDF->m_fTimeDev[0]);
9324
 
//                                              sprintf(buf,"cdf_timedev_%dd_%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9325
 
                                                mprintf("    Temporal development saved as cdf_timedev_%dd%s%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9326
 
                                        } else
9327
 
                                        {
9328
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
9329
 
                                                {
9330
 
                                                        fclose(o->m_pCDF->m_fTimeDev[z2]);
9331
 
                                                        mprintf("    Temporal development saved as cdf_timedev_%dd%s_ref%d%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9332
 
                                                }
9333
 
                                        }
9334
 
                                        if (o->m_pCDF->m_bTDAnimation)
9335
 
                                        {
9336
 
                                                mprintf(WHITE,"  * Time dependent animation *\n");
9337
 
                                                sprintf(buf,"animation_complete_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9338
 
                                                mprintf("    Saving complete Plot as \"%s\"...\n",buf);
9339
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9340
 
                                                {
9341
 
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9342
 
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
9343
 
                                                }
9344
 
                                                o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9345
 
                                                sprintf(buf,"render_%s%s",o->m_pCDF->m_sName,multibuf);
9346
 
                                                mprintf("    Saving xmgrace render script for animation as \"%s\"...\n",buf);
9347
 
                                                a = OpenFileWrite("gracebatch",true);
9348
 
                                                mfprintf(a,"PRINT TO \"output.png\"\n");
9349
 
                                                mfprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
9350
 
                                                mfprintf(a,"PAGE SIZE %d, %d\n",o->m_pCDF->m_iTDAResX,o->m_pCDF->m_iTDAResY);
9351
 
                                                mfprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
9352
 
                                                mfprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
9353
 
                                                mfprintf(a,"PRINT\n");
9354
 
                                                fclose(a);
9355
 
                                                a = OpenFileWrite(buf,true);
9356
 
                                                if (o->m_pCDF->m_bTDATrace)
9357
 
                                                {
9358
 
                                                        for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9359
 
                                                        {
9360
 
                                                                o->m_pCDF->m_pTDAPlot->DuplicateSet(z2);
9361
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9362
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.7));
9363
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,3.0f);
9364
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,GraceColor(z2,0.0));
9365
 
                                                        }
9366
 
                                                }
9367
 
                                                for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
9368
 
                                                {
9369
 
                                                        if (o->m_pCDF->m_bTDATrace)
9370
 
                                                        {
9371
 
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9372
 
                                                                {
9373
 
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3+o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9374
 
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,0,z2*o->m_pCDF->m_iTDAStride);
9375
 
                                                                }
9376
 
                                                        } else
9377
 
                                                        {
9378
 
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9379
 
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9380
 
                                                        }
9381
 
 
9382
 
                                                        sprintf(buf,"animation_%05d_%s%s.agr",z2+1,o->m_pCDF->m_sName,multibuf);
9383
 
                                                        mprintf("    Saving frame \"%s\"...\n",buf);
9384
 
                                                        o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9385
 
                                                        mfprintf(a,"echo 'Printing frame %d of %d'\n",z2+1,o->m_pCDF->m_iTDASteps);
9386
 
                                                        mfprintf(a,"xmgrace %s -batch gracebatch -nosafe -hardcopy\n",buf);
9387
 
                                                        mfprintf(a,"mv output.png frame%04d.png\n",z2+1);
9388
 
                                                }
9389
 
                                                fclose(a);
9390
 
                                        }
9391
 
                                }
9392
 
                        } // END IF CHANNELS == 2
9393
 
 
9394
 
                        if (g_iCDFChannels == 3)
9395
 
                        {
9396
 
                                mprintf(WHITE,"* Combined Distribution Function (3D)\n");
9397
 
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_fBinEntries,o->m_pCDF->m_p3DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_fSkipEntries,o->m_pCDF->m_p3DF->m_fSkipEntries+o->m_pCDF->m_p3DF->m_fBinEntries)*100.0);
9398
 
                                if (o->m_pCDF->m_p3DF->m_fBinEntries == 0)
9399
 
                                {
9400
 
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9401
 
                                        goto _skipsdf;
9402
 
                                }
9403
 
                                o->m_pCDF->m_p3DF->CalcMaxEntry();
9404
 
                                mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9405
 
                                for (z2=0;z2<g_iCDFChannels;z2++)
9406
 
                                {
9407
 
                                        if (g_iObsChannel[z2] == 0)
9408
 
                                        {
9409
 
                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
9410
 
                                                {
9411
 
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
9412
 
                                                        o->m_pCDF->m_p3DF->CorrectRadialDist(z2);
9413
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
9414
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9415
 
                                                }
9416
 
                                        }
9417
 
                                        if (g_iObsChannel[z2] == 1)
9418
 
                                        {
9419
 
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9420
 
                                                {
9421
 
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
9422
 
                                                        o->m_pCDF->m_p3DF->CorrectAngle(z2);
9423
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
9424
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9425
 
                                                }
9426
 
                                                if (o->m_pADF[z2]->m_bMirror)
9427
 
                                                {
9428
 
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
9429
 
                                                        if (o->m_pADF[z2]->m_bCosine)
9430
 
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9431
 
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9432
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
9433
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9434
 
                                                }
9435
 
                                        }
9436
 
                                }
9437
 
//                              o->m_pCDF->m_p3DF->CalcMaxEntry();
9438
 
//                              mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9439
 
                                o->m_pCDF->m_fFactor = 1.0;
9440
 
                                switch(o->m_pCDF->m_iNormalize)
9441
 
                                {
9442
 
                                        case 2:
9443
 
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9444
 
                                                o->m_pCDF->m_p3DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9445
 
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
9446
 
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9447
 
                                                break;
9448
 
                                        case 1:
9449
 
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9450
 
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p3DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9451
 
                                                mprintf("    Factor was %G.\n",o->m_pCDF->m_fFactor);
9452
 
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
9453
 
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9454
 
                                                break;
9455
 
                                        case 0:
9456
 
                                                mprintf("    Not normalizing this CDF.\n");
9457
 
                                                break;
9458
 
                                }
9459
 
 
9460
 
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9461
 
                                {
9462
 
                                        try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
9463
 
                                        if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9464
 
                                        
9465
 
                                        temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
9466
 
                                        if (z2 != 0)
9467
 
                                        {
9468
 
                                                temp3DF->Smooth(z2);
9469
 
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
9470
 
                                        } else sprintf(buf,"%s.plt",multibuf);
9471
 
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9472
 
                                        temp3DF->WritePLT("",o->m_pCDF->m_sName,buf,false);
9473
 
 
9474
 
                                        if (z2 != 0)
9475
 
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
9476
 
                                                        else sprintf(buf,"%s.cube",multibuf);
9477
 
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9478
 
                                        temp3DF->WriteCube("",o->m_pCDF->m_sName,buf,false);
9479
 
                                        if (o->m_pCDF->m_iHistogramRes != 0)
9480
 
                                        {
9481
 
                                                mprintf("    Calculating Histogram...\n");
9482
 
                                                temp3DF->CalcHistogram();
9483
 
                                                if (z2 != 0)
9484
 
                                                        sprintf(buf,"his_%s.s%d",o->m_pCDF->m_sName,z2);
9485
 
                                                                else sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9486
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9487
 
                                                temp3DF->WriteHistogram(buf,multibuf,".csv");
9488
 
                                        }
9489
 
 
9490
 
                                        if (o->m_pCDF->m_b3DSlices)
9491
 
                                        {
9492
 
                                                for (z3=0;z3<3;z3++)
9493
 
                                                {
9494
 
                                                        if (o->m_pCDF->m_i3DSliceIntervals[z3] != 0)
9495
 
                                                        {
9496
 
                                                                if (z2 != 0)
9497
 
                                                                        mprintf(WHITE,"    * Creating channel %d smooth grade %d slices...\n",z3+1,z2);
9498
 
                                                                                else mprintf(WHITE,"    * Creating channel %d slices...\n",z3+1);
9499
 
 
9500
 
                                                                try { temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]]; } catch(...) { temp2dfa = NULL; }
9501
 
                                                                if (temp2dfa == NULL) NewException((double)o->m_pCDF->m_i3DSliceIntervals[z3]*sizeof(C2DF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9502
 
 
9503
 
                                                                tf = 0;
9504
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9505
 
                                                                {
9506
 
                                                                        try { temp2dfa[z4] = new C2DF(); } catch(...) { temp2dfa[z4] = NULL; }
9507
 
                                                                        if (temp2dfa[z4] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9508
 
                                                                        
9509
 
                                                                        temp3DF->CreateSlice(z3,(int)((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),(int)((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]);
9510
 
                                                                        mprintf("        - %2d: %9.4f - %9.4f (%3d - %3d), Intensity range %.3f ... %.3f\n",z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),int((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),int((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]->m_fMinEntry,temp2dfa[z4]->m_fMaxEntry);
9511
 
                                                                        if (temp2dfa[z4]->m_fMaxEntry > tf)
9512
 
                                                                                tf = temp2dfa[z4]->m_fMaxEntry;
9513
 
                                                                }
9514
 
 
9515
 
                                                                mprintf("      Setting common intensity range to 0 ... %.3f.\n",tf);
9516
 
 
9517
 
                                                                mprintf("      Writing out slice files...\n",z3+1);
9518
 
 
9519
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9520
 
                                                                {
9521
 
                                                                        temp2dfa[z4]->m_fMinEntry = 0;
9522
 
                                                                        temp2dfa[z4]->m_fMaxEntry = tf;
9523
 
                                                                        if (z2 != 0)
9524
 
                                                                                sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9525
 
                                                                                        else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9526
 
                                                                        mprintf("        %s ...\n",buf);
9527
 
                                                                        temp2dfa[z4]->WriteMathematicaNb("",buf,"",true);
9528
 
                                                                        if (z2 != 0)
9529
 
                                                                                sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9530
 
                                                                                        else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9531
 
                                                                        mprintf("        %s.gp ...\n",buf);
9532
 
                                                                        temp2dfa[z4]->WriteGnuplotInput("",buf,"",true);
9533
 
                                                                }
9534
 
 
9535
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9536
 
                                                                        delete temp2dfa[z4];
9537
 
 
9538
 
                                                                delete[] temp2dfa;
9539
 
                                                        }
9540
 
                                                }
9541
 
                                        }
9542
 
                                }
9543
 
 
9544
 
                                mprintf("    Writing out 2D projections...\n");
9545
 
                                for (z3=0;z3<3;z3++)
9546
 
                                {
9547
 
                                        mprintf(WHITE,"    * CDF 2D projection on channel %d\n",z3+1);
9548
 
                                        mprintf("        %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries+o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries)*100.0);
9549
 
                                        switch(z3)
9550
 
                                        {
9551
 
                                                case 0:
9552
 
                                                        tia[0] = 0;
9553
 
                                                        tia[1] = 1;
9554
 
                                                        break;
9555
 
                                                case 1:
9556
 
                                                        tia[0] = 0;
9557
 
                                                        tia[1] = 2;
9558
 
                                                        break;
9559
 
                                                case 2:
9560
 
                                                        tia[0] = 1;
9561
 
                                                        tia[1] = 2;
9562
 
                                                        break;
9563
 
                                        }
9564
 
                                        for (z2=0;z2<2;z2++)
9565
 
                                        {
9566
 
                                                if (g_iObsChannel[tia[z2]] == 0)
9567
 
                                                {
9568
 
                                                        if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
9569
 
                                                        {
9570
 
                                                                mprintf("        Correcting radial distribution for CDF channel %d...\n",z2+1);
9571
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
9572
 
                                                        }
9573
 
                                                }
9574
 
                                                if (g_iObsChannel[tia[z2]] == 1)
9575
 
                                                {
9576
 
                                                        if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
9577
 
                                                        {
9578
 
                                                                mprintf("        Correcting angular distribution for CDF channel %d...\n",z2+1);
9579
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
9580
 
                                                        }
9581
 
                /*                                      if (o->m_pADF[z2]->m_bMirror)
9582
 
                                                        {
9583
 
                                                                mprintf("        Making channel %d mirror-symmetric...\n",z2+1);
9584
 
                                                                if (o->m_pADF[z2]->m_bCosine)
9585
 
                                                                        o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9586
 
                                                                                else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9587
 
                                                        }*/
9588
 
                                                }
9589
 
                                        }
9590
 
                                        o->m_pCDF->m_fFactor = 1.0;
9591
 
                                        switch(o->m_pCDF->m_iNormalize)
9592
 
                                        {
9593
 
                                                case 2:
9594
 
                                                        mprintf("        Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9595
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9596
 
                                                        break;
9597
 
                                                case 1:
9598
 
                                                        mprintf("        Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9599
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9600
 
                                                        break;
9601
 
                                                case 0:
9602
 
                                                        mprintf("        Not normalizing this CDF.\n");
9603
 
                                                        break;
9604
 
                                        }
9605
 
                                        mprintf("        Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9606
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Write(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_triples.csv");
9607
 
                                        mprintf("        Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9608
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCSV(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_matrix.csv");
9609
 
                                        mprintf("        Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9610
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteMathematicaNb(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,".nb",false);
9611
 
                                        mprintf("        Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9612
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteGnuplotInput(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"",false);
9613
 
                                        mprintf("        Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9614
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCombinedPlot(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_combined.agr");
9615
 
                                        if (o->m_pCDF->m_iHistogramRes != 0)
9616
 
                                        {
9617
 
                                                mprintf("    Calculating Histogram...\n");
9618
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CalcHistogram();
9619
 
                                                sprintf(buf,"his_%s",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName);
9620
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9621
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteHistogram(buf,multibuf,".csv");
9622
 
                                        }
9623
 
                                }
9624
 
                        } // END IF CHANNELS == 3
9625
 
_skipsdf:;
9626
 
                } // END IF CDF
9627
 
 
9628
 
                if (g_bRevSDF)
9629
 
                {
9630
 
                        mprintf(WHITE,"* Pseudo SDF\n");
9631
 
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRevSDF->m_p2DF->m_fBinEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pRevSDF->m_p2DF->m_fSkipEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries+o->m_pRevSDF->m_p2DF->m_fBinEntries)*100.0);
9632
 
                        if (o->m_pRevSDF->m_p2DF->m_fBinEntries == 0)
9633
 
                        {
9634
 
                                eprintf("    There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
9635
 
                                goto _skiprevsdf;
9636
 
                        }
9637
 
                        mprintf("    Normalizing integral value to %.2f.\n",1000000.0f);
9638
 
                        o->m_pRevSDF->m_p2DF->NormalizeBinIntegral(1000000.0f);
9639
 
                        if (o->m_pRevSDF->m_bDrawAtoms)
9640
 
                        {
9641
 
                                mprintf("    Inserting reference atoms into the Pseudo SDF plot...\n");
9642
 
 
9643
 
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius == 0)
9644
 
                                        o->m_pRevSDF->m_p2DF->AddCircle(0,0,50.0,0.4,0.4,0.4);
9645
 
                                                else o->m_pRevSDF->m_p2DF->AddCircle(0,0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorB/255.0);
9646
 
 
9647
 
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius == 0)
9648
 
                                        o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,50.0,0.4,0.4,0.4);
9649
 
                                                else o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorB/255.0);
9650
 
                        }
9651
 
                        mprintf("    Saving PseudoSDF triples as \"%s%s_triples.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9652
 
                        o->m_pRevSDF->m_p2DF->Write(o->m_pRevSDF->m_sName,multibuf,"_triples.csv");
9653
 
                        mprintf("    Saving PseudoSDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9654
 
                        o->m_pRevSDF->m_p2DF->WriteCSV(o->m_pRevSDF->m_sName,multibuf,"_matrix.csv");
9655
 
                        mprintf("    Saving PseudoSDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pRevSDF->m_sName,multibuf);
9656
 
                        o->m_pRevSDF->m_p2DF->WriteMathematicaNb(o->m_pRevSDF->m_sName,multibuf,".nb",false);
9657
 
                        mprintf("    Saving PseudoSDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pRevSDF->m_sName,multibuf);
9658
 
                        o->m_pRevSDF->m_p2DF->WriteGnuplotInput(o->m_pRevSDF->m_sName,multibuf,"",false);
9659
 
                        if (o->m_pRevSDF->m_iHistogramRes != 0)
 
8967
                        mprintf(WHITE,"* Plane Projection Distribution Function\n");
 
8968
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlProj->m_p2DF->m_fBinEntries,o->m_pPlProj->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pPlProj->m_p2DF->m_fSkipEntries,o->m_pPlProj->m_p2DF->m_fBinEntries+o->m_pPlProj->m_p2DF->m_fSkipEntries)*100.0);
 
8969
                        if (o->m_pPlProj->m_p2DF->m_fBinEntries == 0)
 
8970
                        {
 
8971
                                eprintf("    There were no bin entries. Check your function definition. Skipping this Plane Projection DF.\n\n");
 
8972
                                goto _skipplproj;
 
8973
                        }
 
8974
 
 
8975
                        o->m_pPlProj->m_p2DF->CalcMaxEntry();
 
8976
                        mprintf("    Raw data range from %.0f to %.0f hits.\n",o->m_pPlProj->m_p2DF->m_fMinEntry,o->m_pPlProj->m_p2DF->m_fMaxEntry);
 
8977
                        mprintf("    The volume of one bin is %.3f pm^3.\n",(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])*(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])*(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])/o->m_pPlProj->m_iResolution[0]/o->m_pPlProj->m_iResolution[1]);
 
8978
 
 
8979
                        if ((g_bPeriodicX) && (g_bPeriodicY) && (g_bPeriodicZ))
 
8980
                        {
 
8981
                                mprintf("    System is periodic, normalizing values to uniform density.\n");
 
8982
                                mprintf("    The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pPlProj->m_fParticleDensity);
 
8983
                        //      mprintf(" (%f)\n",(double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pPlProj->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8984
                        //      mprintf(" o->m_pPlProj->m_iShowAtomGes = %d\n",o->m_pPlProj->m_iShowAtomGes);
 
8985
                        //      mprintf(" 1/Vol = %f\n",(double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9);
 
8986
                                o->m_pPlProj->m_p2DF->MultiplyBin((double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9 / (double)g_iSteps * g_iStride / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /* / o->m_pPlProj->m_iShowAtomGes*/ * (g_bDoubleBox?g_iDoubleBoxFactor:1));
 
8987
                        //      mprintf(" (%f)\n",1.0/o->m_pPlProj->m_fParticleDensity);
 
8988
                                o->m_pPlProj->m_p2DF->MultiplyBin(1.0/o->m_pPlProj->m_fParticleDensity);
 
8989
                        } else
 
8990
                        {
 
8991
                                mprintf("    System is non-periodic, normalizing integral value to %.2f.\n",1000000.0f);
 
8992
                                o->m_pPlProj->m_p2DF->NormalizeBinIntegral(1000000.0f);
 
8993
                        }
 
8994
 
 
8995
                        o->m_pPlProj->m_p2DF->CalcMaxEntry();
 
8996
                        mprintf("    Resulting data range from %.6f to %.6f.\n",o->m_pPlProj->m_p2DF->m_fMinEntry,o->m_pPlProj->m_p2DF->m_fMaxEntry);
 
8997
 
 
8998
                        if (o->m_pPlProj->m_bDrawAtoms)
 
8999
                        {
 
9000
                                mprintf("    Inserting reference atoms into the Plane Projection DF plot...\n");
 
9001
                                ti = 0;
 
9002
                                for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
 
9003
                                {
 
9004
                                        ti2 = o->m_pPlProj->m_oDrawAtoms.m_baRealAtomType[z3];
 
9005
                                        for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
 
9006
                                        {
 
9007
                                                if (o->m_pPlProj->m_bAverageAtomPos)
 
9008
                                                        o->m_pPlProj->m_vaAtomPos[ti] /= o->m_pPlProj->m_iAverageCounter;
 
9009
 
 
9010
                                                if (((CAtom*)g_oaAtoms[ti2])->m_pElement->m_fRadius == 0)
 
9011
                                                        o->m_pPlProj->m_p2DF->AddCircle(o->m_pPlProj->m_vaAtomPos[ti][0],o->m_pPlProj->m_vaAtomPos[ti][1],25.0,0.4,0.4,0.4);
 
9012
                                                                else o->m_pPlProj->m_p2DF->AddCircle(o->m_pPlProj->m_vaAtomPos[ti][0],o->m_pPlProj->m_vaAtomPos[ti][1],((CAtom*)g_oaAtoms[ti2])->m_pElement->m_fRadius*0.6,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorB/255.0);
 
9013
 
 
9014
                                                ti++;
 
9015
                                        }
 
9016
                                }
 
9017
                        }
 
9018
 
 
9019
                        mprintf("    Saving Plane Projection DF triples as \"%s%s_triples.csv\"...\n",o->m_pPlProj->m_sName,multibuf);
 
9020
                        o->m_pPlProj->m_p2DF->Write(o->m_pPlProj->m_sName,multibuf,"_triples.csv");
 
9021
                        mprintf("    Saving Plane Projection DF matrix as \"%s%s_matrix.csv\"...\n",o->m_pPlProj->m_sName,multibuf);
 
9022
                        o->m_pPlProj->m_p2DF->WriteCSV(o->m_pPlProj->m_sName,multibuf,"_matrix.csv");
 
9023
                        mprintf("    Saving Plane Projection DF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pPlProj->m_sName,multibuf);
 
9024
                        o->m_pPlProj->m_p2DF->WriteMathematicaNb(o->m_pPlProj->m_sName,multibuf,".nb",false);
 
9025
                        mprintf("    Saving Plane Projection DF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pPlProj->m_sName,multibuf);
 
9026
                        o->m_pPlProj->m_p2DF->WriteGnuplotInput(o->m_pPlProj->m_sName,multibuf,"",false);
 
9027
                        if (o->m_pPlProj->m_iHistogramRes != 0)
9660
9028
                        {
9661
9029
                                mprintf("    Calculating Histogram...\n");
9662
 
                                o->m_pRevSDF->m_p2DF->CalcHistogram();
9663
 
                                sprintf(buf,"his_%s",o->m_pRevSDF->m_sName);
 
9030
                                o->m_pPlProj->m_p2DF->CalcHistogram();
 
9031
                                sprintf(buf,"his_%s",o->m_pPlProj->m_sName);
9664
9032
                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9665
 
                                o->m_pRevSDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9666
 
                        }
9667
 
                        if (o->m_pRevSDF->m_bCreateRevSDF)
9668
 
                        {
9669
 
                                mprintf("    Creating volumetric Revolution SDF...\n");
9670
 
                                o->m_pRevSDF->CreateRevSDF();
9671
 
                                sprintf(buf,"revsdf_ref_%s.xyz",o->m_pRevSDF->m_sName);
9672
 
                                mprintf("    Saving Revolution SDF reference structure as \"%s\"...\n",buf);
9673
 
                                a = OpenFileWrite(buf,true);
9674
 
                                mfprintf(a,"2\n\n%s   0.0  0.0  0.0\n%s  0.0  %f  0.0\n",((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount/100.0);
9675
 
                                fclose(a);
9676
 
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9677
 
                                {
9678
 
                                        try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
9679
 
                                        if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9680
 
                                        
9681
 
                                        tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
9682
 
                                        if (z2 != 0)
9683
 
                                        {
9684
 
                                                tempSDF->Smooth(z2);
9685
 
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
9686
 
                                        } else sprintf(buf,"%s.plt",multibuf);
9687
 
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9688
 
                                        tempSDF->WritePLT("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9689
 
 
9690
 
                                        if (z2 != 0)
9691
 
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
9692
 
                                                        else sprintf(buf,"%s.cube",multibuf);
9693
 
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9694
 
                                        tempSDF->WriteCube("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9695
 
 
9696
 
                                        if (z2 != 0)
9697
 
                                                sprintf(buf,".s%d%s.his",z2,multibuf);
9698
 
                                                        else sprintf(buf,"%s.his",multibuf);
9699
 
                                        mprintf("    Saving Revolution SDF Histogram as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9700
 
                                        tempSDF->CalcHistogram();
9701
 
                                        tempSDF->WriteHistogram("revsdf_",o->m_pRevSDF->m_sName,buf);
9702
 
                                        if (o->m_pRevSDF->m_iHistogramRes != 0)
9703
 
                                        {
9704
 
                                                mprintf("    Calculating Histogram...\n");
9705
 
                                                tempSDF->CalcHistogram();
9706
 
                                                sprintf(buf2,"his_revsdf_%s",o->m_pRevSDF->m_sName);
9707
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf2,buf);
9708
 
                                                tempSDF->WriteHistogram(buf2,buf,".csv");
9709
 
                                        }
9710
 
                                }
9711
 
                        }
9712
 
_skiprevsdf:;
9713
 
                } // END IF REVSDF
9714
 
        }
9715
 
 
9716
 
        if (g_bSDF || g_bAvg || g_bVoidSDF)
9717
 
        {
9718
 
                sprintf(buf,"ref_%s_%s%d_%s%d_%s%d%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,g_iFixAtom[0]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,g_iFixAtom[1]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[2]])->m_sName,g_iFixAtom[2]+1,multibuf);
9719
 
                strtolower(buf);
9720
 
                mprintf("\n*** Reference molecule ***\n");
9721
 
                FreeFileName(buf);
9722
 
                mprintf("Saving reference molecule as \"%s\"...",buf);
9723
 
                a = OpenFileWrite(buf,true);
9724
 
                if (a == NULL)
9725
 
                {
9726
 
                        eprintf("\nError: Could not open %s for writing.\n",buf);
9727
 
                        return 0;
9728
 
                }
9729
 
                if (!g_bSaveVirtAtoms)
9730
 
                        mfprintf(a,"  %d \n\n",(int)(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes-((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize()));
9731
 
                                else mfprintf(a,"  %d \n\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
9732
 
                cc = 0;
9733
 
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
9734
 
                {
9735
 
                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
9736
 
                                continue;
9737
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
9738
 
                        {
9739
 
                                if (g_bMiddleAvg)
9740
 
                                {
9741
 
                                        g_pRefMol[cc][0] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9742
 
                                        g_pRefMol[cc][1] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9743
 
                                        g_pRefMol[cc][2] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9744
 
                                }
9745
 
                                if (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType)
9746
 
                                        mfprintf(a,"  %s  %9.6f  %9.6f  %9.6f\n",((CVirtualAtom*)g_oaVirtualAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms[z2]])->m_sLabel,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
9747
 
                                                else mfprintf(a,"  %s  %9.6f  %9.6f  %9.6f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z]])->m_sName,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
9748
 
                                cc++;
9749
 
                        }
9750
 
                }
9751
 
                fclose(a);
9752
 
                mprintf("Done.\n");
9753
 
                if (g_iSwapAtoms)
9754
 
                {
9755
 
                        mprintf("\n*** This is the swap matrix of reference molecule %s:\n  (It shows how often the atoms\n  have been swapped with each other)\n\n     ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
9756
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
9757
 
                        {
9758
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
9759
 
                                {
9760
 
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
9761
 
                                                mprintf(" ");
9762
 
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);  
9763
 
                                        if (z3 < 10)
9764
 
                                                mprintf(" ");
9765
 
                                }
9766
 
                        }
9767
 
                        mprintf("\n");
9768
 
                        cc = 0;
9769
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
9770
 
                        {
9771
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
9772
 
                                {
9773
 
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
9774
 
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
9775
 
                                                mprintf(" ");
9776
 
                                        if (z3 < 9)
9777
 
                                                mprintf(" ");
9778
 
                                        cc2 = 0;
9779
 
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
9780
 
                                        {
9781
 
                                                for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
9782
 
                                                {
9783
 
                                                        if ((z2 == z4) && (z3 == z5))
9784
 
                                                        {
9785
 
                                                                mprintf(" *** ");
9786
 
                                                                goto _swm;
9787
 
                                                        }
9788
 
                                                        if (pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] != 0)
9789
 
                                                                mprintf("%3.0f%c ",(double)pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] * 100.0f / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize(),'%');
9790
 
                                                                        else mprintf("  -  ");
9791
 
_swm:
9792
 
                                                        cc2++;
9793
 
                                                }
9794
 
                                        }       
9795
 
                                        mprintf("\n");
9796
 
                                        cc++;
9797
 
                                }
9798
 
                        }
9799
 
                }
9800
 
        }
9801
 
_ende:
9802
 
 
9803
 
        if (g_bMultiInterval)
9804
 
        {
9805
 
                mprintf("\n");
9806
 
                mprintf(YELLOW,"***********************************************\n");
9807
 
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) finished. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
9808
 
                mprintf(YELLOW,"***********************************************\n\n");
9809
 
                multicounter++;
9810
 
                if (multicounter < g_laMultiIntervalStart.GetSize())
9811
 
                        goto _multiintervalstart;
9812
 
        }
9813
 
 
9814
 
        g_iEndTime = time(NULL);
9815
 
        if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
9816
 
        {
9817
 
                mprintf(WHITE,"\nAnalysis was running for %dh %dm %ds.\n",(g_iEndTime-g_iStartTime)/3600,((g_iEndTime-g_iStartTime)/60)%60,(g_iEndTime-g_iStartTime)%60);
9818
 
                mprintf(WHITE,"  (%.3f steps per second)\n\n",g_iSteps/g_iStride/((double)g_iEndTime-g_iStartTime));
9819
 
        } else mprintf("\n");
9820
 
 
9821
 
        WriteCredits();
9822
 
 
9823
 
        if (g_bSMode)
9824
 
        {
9825
 
                PrintSMode();
9826
 
        } else
9827
 
        {
9828
 
                mprintf(WHITE,"*** The End ***\n\n");
9829
 
        }
9830
 
        UninstallSignalHandler();
9831
 
        if (g_fInput != NULL)
9832
 
                fclose(g_fInput);
9833
 
        if (g_pDatabase != NULL)
9834
 
        {
9835
 
                delete g_pDatabase;
9836
 
                g_pDatabase = NULL;
9837
 
        }
9838
 
        if (g_pTempTimestep != NULL)
9839
 
        {
9840
 
                delete g_pTempTimestep;
9841
 
                g_pTempTimestep = NULL;
9842
 
        }
9843
 
        if (apfa != NULL)
9844
 
        {
9845
 
                delete[] apfa;
9846
 
                apfa = NULL;
9847
 
        }
9848
 
        if (tda != NULL)
9849
 
        {
9850
 
                delete[] tda;
9851
 
                tda = NULL;
9852
 
        }
9853
 
        RemoveAllAnalyses();
9854
 
        RemoveAllElements();
9855
 
        RemoveAllAtoms();
9856
 
        RemoveAllMolecules();
9857
 
        RemoveAllObservations();
9858
 
        BTOUT;
9859
 
        return 0;
9860
 
}
9861
 
 
9862
 
//////////////// Cross-Correlation Test 1                                                                                                                                                                                                                                                                              
9863
 
                                                                                                                                                                                                                                                                                                                       
9864
 
/*      CAutoCorrelation acx, acf;                                                                                                                                                                                                                                                                                      
9865
 
        CCrossCorrelation ccx, ccf;                                                                                                                                                                                                                                                                                     
9866
 
        CxFloatArray i1, i2, opx, opf, opcx, opcf;                                                                                                                                                                                                                                                                      
9867
 
                                                                                                                                                                                                                                                                                                                       
9868
 
        i1.SetSize(32);                                                                                                                                                                                                                                                                                                 
9869
 
        i2.SetSize(32);                                                                                                                                                                                                                                                                                                 
9870
 
                                                                                                                                                                                                                                                                                                                       
9871
 
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
9872
 
        {                                                                                                                                                                                                                                                                                                               
9873
 
                i1[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
9874
 
                i2[z] = i1[z];                                                                                                                                                                                                                                                                                          
9875
 
        }                                                                                                                                                                                                                                                                                                               
9876
 
                                                                                                                                                                                                                                                                                                                       
9877
 
        acx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
9878
 
        acx.AutoCorrelate(&i1,&opx);                                                                                                                                                                                                                                                                                    
9879
 
                                                                                                                                                                                                                                                                                                                       
9880
 
        acf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
9881
 
        acf.AutoCorrelate(&i1,&opf);                                                                                                                                                                                                                                                                                    
9882
 
                                                                                                                                                                                                                                                                                                                       
9883
 
        ccx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
9884
 
        ccx.CrossCorrelate(&i1,&i2,&opcx);                                                                                                                                                                                                                                                                              
9885
 
                                                                                                                                                                                                                                                                                                                       
9886
 
        ccf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
9887
 
        ccf.CrossCorrelate(&i1,&i2,&opcf);                                                                                                                                                                                                                                                                              
9888
 
                                                                                                                                                                                                                                                                                                                       
9889
 
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
9890
 
                mprintf("%8.4f  - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],opx[z],opf[z],opcx[z],opcf[z]);                                                                                                                                                                                                                
9891
 
                                                                                                                                                                                                                                                                                                                       
9892
 
        gets(buf);                                                                                                                                                                                                                                                                                                      
9893
 
                                                                                                                                                                                                                                                                                                                       
9894
 
        return 0;*/                                                                                                                                                                                                                                                                                                     
9895
 
                                                                                                                                                                                                                                                                                                                       
9896
 
//////////////// Cross-Correlation Test 2                                                                                                                                                                                                                                                                              
9897
 
                                                                                                                                                                                                                                                                                                                       
9898
 
/*      CCrossCorrelation ccx, ccf;                                                                                                                                                                                                                                                                                     
9899
 
        CxFloatArray i1, i2, opcx, opcf;                                                                                                                                                                                                                                                                                
9900
 
                                                                                                                                                                                                                                                                                                                       
9901
 
        i1.SetSize(32);                                                                                                                                                                                                                                                                                                 
9902
 
        i2.SetSize(32);                                                                                                                                                                                                                                                                                                 
9903
 
                                                                                                                                                                                                                                                                                                                       
9904
 
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
9905
 
        {                                                                                                                                                                                                                                                                                                               
9906
 
                i1[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
9907
 
                i2[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
9908
 
        }                                                                                                                                                                                                                                                                                                               
9909
 
                                                                                                                                                                                                                                                                                                                       
9910
 
        ccx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
9911
 
        ccx.CrossCorrelate(&i1,&i2,&opcx);                                                                                                                                                                                                                                                                              
9912
 
                                                                                                                                                                                                                                                                                                                       
9913
 
        ccf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
9914
 
        ccf.CrossCorrelate(&i1,&i2,&opcf);                                                                                                                                                                                                                                                                              
9915
 
                                                                                                                                                                                                                                                                                                                       
9916
 
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
9917
 
                mprintf("%8.4f  - %8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],i2[z],opcx[z],opcf[z],ccf.m_pFFTback->m_pOutput[2*z]/64.0/(32-z),ccf.m_pFFTback->m_pOutput[2*z+1]/64.0/(32-z));                                                                                                                        
9918
 
                                                                                                                                                                                                                                                                                                                       
9919
 
        gets(buf);                                                                                                                                                                                                                                                                                                      
9920
 
                                                                                                                                                                                                                                                                                                                       
9921
 
        return 0;*/                                                                                                                                                                                                                                                                                                     
9922
 
                                                                                                                                                                                                                                                                                                                       
9923
 
 
9924
 
/*      a = fopen("E:\\tmptraj.xyz","wt");
9925
 
 
9926
 
        for (z=0;z<200000;z++)
9927
 
        {
9928
 
                mfprintf(a,"4\n\n");
9929
 
                mfprintf(a,"Ne  %f  %f  %f\n",sin(pow(z/50.0,1.1))*3.0,cos(pow(z/50.0,1.1))*3.0,0);
9930
 
                mfprintf(a,"Ne  %f  %f  %f\n",-sin(pow(z/50.0,1.1))*3.0,-cos(pow(z/50.0,1.1))*3.0,0);
9931
 
 
9932
 
                mfprintf(a,"Ne  %f  %f  %f\n",0.0,0.0,cos(z/33.0)*2.0+4.0);
9933
 
                mfprintf(a,"Ne  %f  %f  %f\n",0.0,0.0,-cos(z/33.0)*2.0-4.0);
9934
 
        }
9935
 
 
9936
 
        fclose(a);
9937
 
        return 0;*/
9938
 
 
9939
 
//      mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
9940
 
 
9941
 
/*      CClusterAnalysis *can;
9942
 
        can = new CClusterAnalysis();
9943
 
 
9944
 
        for (z=0;z<15;z++)
9945
 
        {
9946
 
                can->AddCluster();
9947
 
                can->AddParticle(rand()%20,rand()%20,rand()%20);
9948
 
 
9949
 
        }
9950
 
 
9951
 
        can->BuildTree();
9952
 
 
9953
 
        can->DumpAgr("C:\\Software\\test.csv");
9954
 
 
9955
 
        gets(buf);
9956
 
 
9957
 
        return 0;*/
9958
 
        
9959
 
/*      int maj, min;
9960
 
        CreateTicks(0,540,maj,min);
9961
 
        return 0;*/
9962
 
 
9963
 
/*      CExtendedCondition *ec;
9964
 
 
9965
 
        ec = new CExtendedCondition();
9966
 
 
9967
 
        ec->m_fD[0] = 1;
9968
 
        ec->m_fA[0] = 1;
9969
 
 
9970
 
        ec->m_fD[1] = 2;
9971
 
        ec->m_fA[1] = 1;
9972
 
        
9973
 
        ec->m_fD[2] = 2;
9974
 
        ec->m_fA[2] = 0;
9975
 
 
9976
 
        if (!ec->Evaluate())
9977
 
        {
9978
 
                printf("Fail.\n");
9979
 
//              return 0;
9980
 
        }
9981
 
 
9982
 
        printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
9983
 
        return 0;*/
9984
 
 
9985
 
/*      CLMWrapper w;
9986
 
        double *px, *py, *pp, r, integral;
9987
 
 
9988
 
        px = new double[100];
9989
 
        py = new double[100];
9990
 
        pp = new double[6];
9991
 
 
9992
 
        pp[0] = 1;
9993
 
        pp[1] = -0.001;
9994
 
        pp[2] = 1;
9995
 
        pp[3] = -0.01;
9996
 
        pp[4] = 1;
9997
 
        pp[5] = -0.0001;
9998
 
 
9999
 
        for (z=0;z<100;z++)
10000
 
        {
10001
 
                px[z] = z;
10002
 
                py[z] = 0.2 * exp(-0.004 * z) + 0.3 * exp(-0.05 * z) + 0.5 * exp(-0.15 * z) + 0.1 * exp(-0.1 * z);
10003
 
        }
10004
 
 
10005
 
        w.Fit_TriExp(100,px,py,pp,r,integral);
10006
 
 
10007
 
        return 0;*/
10008
 
 
10009
 
/*      C3DF *df3;
10010
 
 
10011
 
        df3 = new C3DF();
10012
 
        df3->m_fMinVal[0] = -100;
10013
 
        df3->m_fMaxVal[0] = 100;
10014
 
        df3->m_fMinVal[1] = -100;
10015
 
        df3->m_fMaxVal[1] = 100;
10016
 
        df3->m_fMinVal[2] = -100;
10017
 
        df3->m_fMaxVal[2] = 100;
10018
 
        df3->m_iRes[0] = 101;
10019
 
        df3->m_iRes[1] = 101;
10020
 
        df3->m_iRes[2] = 101;
10021
 
        df3->Create();
10022
 
 
10023
 
        for (z=0;z<101;z++)
10024
 
                for (z2=0;z2<101;z2++)
10025
 
                        for (z3=0;z3<101;z3++)
10026
 
                                if (sqrt(pow(z-50,2)+pow(z2-50,2)+pow(z3-50,2)) < 30)
10027
 
                                        df3->AddToBin(CxVector3(z-50,z2-50,z3-50));
10028
 
 
10029
 
        df3->WritePLT("","C:\\test.plt","",true);
10030
 
        df3->WriteCube("","C:\\test.cube","",true);
10031
 
        return 0;*/
10032
 
 
10033
 
/*      CDF *mdf;
10034
 
 
10035
 
        mdf = new CDF();
10036
 
        mdf->m_fMinVal = 0;
10037
 
        mdf->m_fMaxVal = 1;
10038
 
        mdf->m_iResolution = 20;
10039
 
        mdf->Create(true);
10040
 
 
10041
 
        srand(time(NULL));
10042
 
        for (z=0;z<1000000;z++)
10043
 
                mdf->AddToBin(z/999999.0);
10044
 
        mdf->Write("","D:\\Software\\out.csv","");
10045
 
        return 0;*/
10046
 
 
10047
 
/*      CAutoCorrelation *ac;
10048
 
 
10049
 
        ac = new CAutoCorrelation();
10050
 
 
10051
 
#define N 23
10052
 
 
10053
 
        ac->Init(N,N,false);
10054
 
 
10055
 
        ptfa = new CxFloatArray();
10056
 
        ptfa->SetSize(N);
10057
 
        ptfa2 = new CxFloatArray();
10058
 
        ptfa2->SetSize(N);
10059
 
 
10060
 
        for (z=0;z<N;z++)
10061
 
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10062
 
 
10063
 
        ac->AutoCorrelate(ptfa,ptfa2);
10064
 
 
10065
 
        mprintf("Classic:\n");
10066
 
        for (z=0;z<N;z++)
10067
 
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10068
 
 
10069
 
        ac->Init(N,N,true);
10070
 
 
10071
 
        for (z=0;z<N;z++)
10072
 
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10073
 
 
10074
 
        ac->AutoCorrelate(ptfa,ptfa2);
10075
 
 
10076
 
        mprintf("\nFFT:\n");
10077
 
        for (z=0;z<N;z++)
10078
 
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10079
 
 
10080
 
        gets(buf);
10081
 
 
10082
 
        return 0;*/
10083
 
 
10084
 
 
10085
 
/*      fft = new CFFT();
10086
 
 
10087
 
        fft->PrepareFFT_R2C(300);
10088
 
 
10089
 
        for (z=0;z<300;z++)
10090
 
        {
10091
 
                fft->m_pInput[z*2] = sin(z/3.1) * exp(-10.0/z);
10092
 
                fft->m_pInput[z*2+1] = sin(z/2.7+1.0) * exp(-2.0/z);
10093
 
        }
10094
 
 
10095
 
        fft->DoFFT();
10096
 
 
10097
 
        for (z=0;z<300;z++)
10098
 
                mprintf("%03d: % 10.6f  % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
10099
 
 
10100
 
        gets(buf);
10101
 
        return 0;*/
10102
 
 
10103
 
/*      CxVector3 v1, v2, v3, v;
10104
 
 
10105
 
        v1 = CxVector3(0,0,0);
10106
 
        v2 = CxVector3(1,0,0);
10107
 
        v3 = CxVector3(1,1,0);
10108
 
 
10109
 
        v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
10110
 
 
10111
 
        v.Dump();
10112
 
 
10113
 
        gets(buf);
10114
 
        return 0;*/
10115
 
 
10116
 
/*      fft = new CFFT();
10117
 
        fft->PrepareFFT_C2C(20);
10118
 
        for (z=0;z<20;z++)
10119
 
        {
10120
 
                if (z < 20)
10121
 
                {
10122
 
                        fft->m_pInput[2*z] = sin(2*z*17.89) * exp(-0.1*z*2);
10123
 
                        fft->m_pInput[2*z+1] = sin((2*z+1)*17.89) * exp(-0.1*(2*z+1));
10124
 
                } else
10125
 
                {
10126
 
                        fft->m_pInput[2*z] = 0;
10127
 
                        fft->m_pInput[2*z+1] = 0;
10128
 
                }
10129
 
                printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
10130
 
        }
10131
 
        printf("Transforming...\n");
10132
 
        fft->DoFFT();
10133
 
        for (z=0;z<20;z++)
10134
 
                printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
10135
 
        gets(buf);
10136
 
 
10137
 
        return 0;*/
10138
 
 
10139
 
 
10140
 
/*      vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
10141
 
        vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
10142
 
 
10143
 
        tf = DotP(vec0,vec1);
10144
 
 
10145
 
        tf2 = Angle_Deg(vec0,vec1);
10146
 
 
10147
 
        printf("DotP: %f, Length 1: %f, Length 2: %f, DotP/Length1/Length2: %.10f, Angle: %.10f\n",tf,vec0.GetLength(),vec1.GetLength(),tf/vec0.GetLength()/vec1.GetLength(),tf2);
10148
 
 
10149
 
        printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
10150
 
        return 0;*/
10151
 
 
10152
 
 
10153
 
/*      CxVector3 a1, a2, a3;
10154
 
 
10155
 
        a1 = CxVector3(0,1.0,0);
10156
 
        a2 = CxVector3(0,-1.0,0.0001);
10157
 
        a3 = CxVector3(1.0,0,0);
10158
 
 
10159
 
        mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
10160
 
        getchar();
10161
 
        return 0;*/
10162
 
 
10163
 
/*      CGrace *g = new CGrace();
10164
 
 
10165
 
        g->m_fMinValX = 1.37;
10166
 
        g->m_fMaxValX = 2.53;
10167
 
        g->m_fMinValY = 225;
10168
 
        g->m_fMaxValY = 8337;
10169
 
        g->MakeTicks();
10170
 
 
10171
 
        printf("X: %f - %f    Ticks %f\nY: %f - %f    Ticks %f\n",g->m_fMinRangeX,g->m_fMaxRangeX,g->m_fTickMajorX,g->m_fMinRangeY,g->m_fMaxRangeY,g->m_fTickMajorY);
10172
 
*/
10173
 
 
10174
 
/*      CDatabaseTable *dt = new CDatabaseTable();
10175
 
        
10176
 
        dt->AddInt(0,0,12345);
10177
 
        dt->AddInt(1,1,123456);
10178
 
        dt->AddInt(2,2,123);
10179
 
        dt->AddInt(3,3,1);
10180
 
        dt->AddInt(4,4,123456789);
10181
 
        
10182
 
        dt->AddDouble(1,0,13.45);
10183
 
        dt->AddDouble(2,1,3.199);
10184
 
        dt->AddDouble(3,2,1367.4597);
10185
 
        dt->AddDouble(4,3,13.45);
10186
 
        dt->AddDouble(0,4,1.45);
10187
 
        
10188
 
        dt->AddString(2,0,"Hallo!");
10189
 
        dt->AddString(3,1,"Hiu");
10190
 
        dt->AddString(4,2,"Hallo Welt!");
10191
 
        dt->AddString(0,3,"Dies ist ein Test");
10192
 
        dt->AddString(1,4,"^^");
10193
 
        
10194
 
        dt->AddBool(3,0,true);
10195
 
        dt->AddBool(4,1,false);
10196
 
        dt->AddBool(0,2,true);
10197
 
        dt->AddBool(1,3,false);
10198
 
        dt->AddBool(2,4,true);
10199
 
        
10200
 
        dt->DumpTable();
10201
 
        a = fopen("table.dat","wt");
10202
 
        dt->DumpOutputFile(a);
10203
 
        fclose(a);
10204
 
        
10205
 
        return 0;*/
10206
 
 
10207
 
/*      CFFAtomNode *no;
10208
 
 
10209
 
        no = new CFFAtomNode();
10210
 
 
10211
 
        no->REC_Parse("O2=O(C,Si(O,S)(C))",0);
10212
 
 
10213
 
        no->REC_DumpTree(0,0xFFFFFFFF,false);
10214
 
 
10215
 
 
10216
 
        gets(buf);
10217
 
 
10218
 
        return 0;*/
10219
 
 
10220
 
/*      C2DF *t2df;
10221
 
 
10222
 
        t2df = new C2DF();
10223
 
 
10224
 
        t2df->m_iRes[0] = 100;
10225
 
        t2df->m_iRes[1] = 100; 
10226
 
        t2df->m_fMinVal[0] = 0;
10227
 
        t2df->m_fMaxVal[0] = 500.0;
10228
 
        t2df->m_fMinVal[1] = 0;
10229
 
        t2df->m_fMaxVal[1] = 500.0;
10230
 
        t2df->Create();
10231
 
 
10232
 
        FILE *aa;
10233
 
        char *pp;
10234
 
 
10235
 
        aa = fopen(argv[1],"rt");
10236
 
 
10237
 
        z = 0;
10238
 
        while (!feof(aa))
10239
 
        {
10240
 
                z++;
10241
 
                if ((z%5000)==0)
10242
 
                        mprintf("\n");
10243
 
                if ((z%100)==0)
10244
 
                        mprintf(".");
10245
 
                fgets(buf,256,aa);
10246
 
                if (feof(aa))
10247
 
                        break;
10248
 
                buf[strlen(buf)-1] = 0;
10249
 
                pp = strchr(buf,' ');
10250
 
                *pp = 0;
10251
 
                tf = atof(buf);
10252
 
                pp++;
10253
 
                tf2 = atof(pp);
10254
 
//              mprintf("%f | %f\n",tf,tf2);
10255
 
                t2df->AddToBin(tf,tf2);
10256
 
        }
10257
 
 
10258
 
        fclose(aa);
10259
 
 
10260
 
        mprintf("\n%.0f Entries, %.0f skipped.\n\n",t2df->m_fBinEntries,t2df->m_fSkipEntries);
10261
 
        
10262
 
        t2df->CorrectRadialDist(0);
10263
 
        t2df->CorrectRadialDist(1);
10264
 
        t2df->NormalizeBinIntegral(1000000.0);
10265
 
 
10266
 
        t2df->WriteMathematicaNb("cdf.nb","","",false);
10267
 
 
10268
 
        return 0;*/
10269
 
 
10270
 
 
10271
 
/***********************************************************************************************************/
10272
 
 
10273
 
/*
10274
 
 
10275
 
  int xv0[] = {            
10276
 
                0,    166,    333,    500,    667,    834,   1001,   1168,   1335,   1502,
10277
 
        1669,   1836,   2003,   2170,   2337,   2504,   2671,   2838,   3004,   3171,
10278
 
        3338,   3505,   3672,   3839,   4006,   4173,   4340,   4507,   4674,   4841,
10279
 
        5008,   5175,   5342,   5509,   5676,   5843,   6009,   6176,   6343,   6510,
10280
 
        6677,   6844,   7011,   7178,   7345,   7512,   7679,   7846,   8013,   8180,
10281
 
        8347,   8514,   8681,   8847,   9014,   9181,   9348,   9515,   9682,   9849,
10282
 
       10016,  10183,  10350,  10517,  10684,  10851,  11018,  11185,  11352,  11519,
10283
 
       11686,  11852,  12019,  12186,  12353,  12520,  12687,  12854,  13021,  13188,
10284
 
       13355,  13522,  13689,  13856,  14023,  14190,  14357,  14524,  14691,  14857,
10285
 
       15024,  15191,  15358,  15525,  15692,  15859,  16026,  16193,  16360,  16527,
10286
 
       16694,  16861,  17028,  17195,  17362,  17529,  17695,  17862,  18029,  18196,
10287
 
       18363,  18530,  18697,  18864,  19031,  19198,  19365,  19532,  19699,  19866,
10288
 
       20033,  20200,  20367,  20534,  20700,  20867,  21034,  21201,  21368,  21535,
10289
 
       21702,  21869,  22036,  22203,  22370,  22537,  22704,  22871,  23038,  23205,
10290
 
       23372,  23538,  23705,  23872,  24039,  24206,  24373,  24540,  24707,  24874,
10291
 
       25041,  25208,  25375,  25542,  25709,  25876,  26043,  26210,  26377,  26543,
10292
 
       26710,  26877,  27044,  27211,  27378,  27545,  27712,  27879,  28046,  28213,
10293
 
       28380,  28547,  28714,  28881,  29048,  29215,  29382,  29548,  29715,  29882,
10294
 
       30049,  30216,  30383,  30550,  30717,  30884,  31051,  31218,  31385,  31552,
10295
 
       31719,  31886,  32053,  32220,  32386,  32553,  32720,  32887,  33054,  33221,
10296
 
       33388,  33555,  33722,  33889,  34056,  34223,  34390,  34557,  34724,  34891,
10297
 
       35058,  35225,  35391,  35558,  35725,  35892,  36059,  36226,  36393,  36560,
10298
 
       36727,  36894,  37061,  37228,  37395,  37562,  37729,  37896,  38063,  38230,
10299
 
       38396,  38563,  38730,  38897,  39064,  39231,  39398,  39565,  39732,  39899,
10300
 
       40066,  40233,  40400,  40567,  40734,  40901,  41068,  41234,  41401,  41568,
10301
 
       41735,  41902,  42069,  42236,  42403,  42570,  42737,  42904,  43071,  43238,
10302
 
       43405,  43572,  43739,  43906,  44073,  44239,  44406,  44573,  44740,  44907,
10303
 
       45074,  45241,  45408,  45575,  45742,  45909,  46076,  46243,  46410,  46577,
10304
 
       46744,  46911,  47077,  47244,  47411,  47578,  47745,  47912,  48079,  48246,
10305
 
       48413,  48580,  48747,  48914,  49081,  49248,  49415,  49582,  49749,  49916,
10306
 
       50082,  50249,  50416,  50583,  50750,  50917,  51084,  51251,  51418,  51585,
10307
 
       51752,  51919,  52086,  52253,  52420,  52587,  52754,  52921,  53087,  53254,
10308
 
       53421,  53588,  53755,  53922,  54089,  54256,  54423,  54590,  54757,  54924,
10309
 
       55091,  55258,  55425,  55592,  55759,  55925,  56092,  56259,  56426,  56593,
10310
 
       56760,  56927,  57094,  57261,  57428,  57595,  57762,  57929,  58096,  58263,
10311
 
       58430,  58597,  58764,  58930,  59097,  59264,  59431,  59598,  59765,  59932,
10312
 
       60099,  60266,  60433,  60600,  60767,  60934,  61101,  61268,  61435,  61602,
10313
 
       61768,  61935,  62102,  62269,  62436,  62603,  62770,  62937,  63104,  63271,
10314
 
       63438,  63605,  63772,  63939,  64106,  64273,  64440,  64607,  64773,  64940,
10315
 
       65107,  65274,  65441,  65608,  65775,  65942,  66109,  66276,  66443,  66610,
10316
 
       66777,  66944,  67111,  67278,  67445,  67612,  67778,  67945,  68112,  68279,
10317
 
       68446,  68613,  68780,  68947,  69114,  69281,  69448,  69615,  69782,  69949,
10318
 
       70116,  70283,  70450,  70616,  70783,  70950,  71117,  71284,  71451,  71618,
10319
 
       71785,  71952,  72119,  72286,  72453,  72620,  72787,  72954,  73121,  73288,
10320
 
       73455,  73621,  73788,  73955,  74122,  74289,  74456,  74623,  74790,  74957,
10321
 
       75124,  75291,  75458,  75625,  75792,  75959,  76126,  76293,  76460,  76626,
10322
 
       76793,  76960,  77127,  77294,  77461,  77628,  77795,  77962,  78129,  78296,
10323
 
       78463,  78630,  78797,  78964,  79131,  79298,  79464,  79631,  79798,  79965,
10324
 
       80132,  80299,  80466,  80633,  80800,  80967,  81134,  81301,  81468,  81635,
10325
 
       81802,  81969,  82136,  82303,  82469,  82636,  82803,  82970,  83137,  83304,
10326
 
       83471,  83638,  83805,  83972,  84139,  84306,  84473,  84640,  84807,  84974,
10327
 
       85141,  85307,  85474,  85641,  85808,  85975,  86142,  86309,  86476,  86643,
10328
 
       86810,  86977,  87144,  87311,  87478,  87645,  87812,  87979,  88146,  88312,
10329
 
       88479,  88646,  88813,  88980,  89147,  89314,  89481,  89648,  89815,  89982,
10330
 
       90149,  90316,  90483,  90650,  90817,  90984,  91151,  91317,  91484,  91651,
10331
 
       91818,  91985,  92152,  92319,  92486,  92653,  92820,  92987,  93154,  93321,
10332
 
       93488,  93655,  93822,  93989,  94155,  94322,  94489,  94656,  94823,  94990,
10333
 
       95157,  95324,  95491,  95658,  95825,  95992,  96159,  96326,  96493,  96660,
10334
 
       96827,  96994,  97160,  97327,  97494,  97661,  97828,  97995,  98162,  98329,
10335
 
       98496,  98663,  98830,  98997,  99164,  99331,  99498,  99665,  99832,  99999 };
10336
 
 
10337
 
double yv[] = {
10338
 
        1,
10339
 
0.535508,
10340
 
0.393073,
10341
 
0.296141,
10342
 
0.226017,
10343
 
0.174104,
10344
 
0.13505,
10345
 
0.105128,
10346
 
0.0820967,
10347
 
0.0645619,
10348
 
0.0510392,
10349
 
0.0406872,
10350
 
0.0322757,
10351
 
0.0257705,
10352
 
0.0206065,
10353
 
0.0167599,
10354
 
0.0135311,
10355
 
0.0110249,
10356
 
0.00922048,
10357
 
0.00751678,
10358
 
0.0062541,
10359
 
0.00473929,
10360
 
0.00376091,
10361
 
0.00322141,
10362
 
0.00266083,
10363
 
0.00230204,
10364
 
0.00165769,
10365
 
0.00142532,
10366
 
0.00146844,
10367
 
0.00135552,
10368
 
0.000981507,
10369
 
0.000500664,
10370
 
7.63E-05,
10371
 
-0.00021215,
10372
 
-0.000345428,
10373
 
-0.000356055,
10374
 
-0.000586005,
10375
 
-0.000365747,
10376
 
-8.19E-06,
10377
 
0.000117745,
10378
 
0.000301018,
10379
 
0.000153056,
10380
 
0.000249429,
10381
 
0.00041901,
10382
 
0.000272173,
10383
 
0.000432356,
10384
 
0.00034246,
10385
 
0.000253033,
10386
 
-8.95E-07,
10387
 
-0.000191937,
10388
 
-0.000411342,
10389
 
-0.000388538,
10390
 
-0.00014581,
10391
 
-8.29E-05,
10392
 
5.60E-05,
10393
 
-5.46E-06,
10394
 
-0.00012311,
10395
 
-0.000203272,
10396
 
-0.000304272,
10397
 
-0.000385733,
10398
 
-0.00033551,
10399
 
-0.000174071,
10400
 
3.46E-05,
10401
 
-3.06E-05,
10402
 
-0.000196145,
10403
 
-0.00075811,
10404
 
-0.000873794,
10405
 
-0.000839649,
10406
 
-0.000891512,
10407
 
-0.00109231,
10408
 
-0.0012406,
10409
 
-0.00125277,
10410
 
-0.00116772,
10411
 
-0.000800529,
10412
 
-0.000503297,
10413
 
-0.000388711,
10414
 
-0.000192247,
10415
 
-0.000380379,
10416
 
-0.000626382,
10417
 
-0.000562528,
10418
 
-0.000338185,
10419
 
-0.000261972,
10420
 
-0.000172413,
10421
 
-0.00014704,
10422
 
-0.000147816,
10423
 
-0.000335954,
10424
 
-0.000423681,
10425
 
-0.00077368,
10426
 
-0.000829694,
10427
 
-0.000599776,
10428
 
-0.000274863,
10429
 
-0.000198762,
10430
 
2.44E-05,
10431
 
0.000157793,
10432
 
3.36E-05,
10433
 
5.52E-05,
10434
 
0.000132802,
10435
 
0.000160182,
10436
 
0.000267747,
10437
 
0.000285335,
10438
 
0.000302909,
10439
 
0.000112509,
10440
 
0.00033765,
10441
 
0.000410808,
10442
 
0.000399938,
10443
 
0.000217723,
10444
 
0.000252189,
10445
 
0.000413789,
10446
 
0.000334351,
10447
 
0.000221592,
10448
 
-0.000128382,
10449
 
-0.000407701,
10450
 
-0.000434761,
10451
 
-0.000446333,
10452
 
-0.000268609,
10453
 
-0.000328874,
10454
 
-0.000253456,
10455
 
-0.000364477,
10456
 
-0.000379713,
10457
 
-0.000270978,
10458
 
3.09E-05,
10459
 
3.43E-05,
10460
 
0.000132993,
10461
 
0.000223472,
10462
 
0.000196531,
10463
 
0.000394839,
10464
 
0.000353766,
10465
 
0.000120042,
10466
 
0.000186034,
10467
 
4.34E-05,
10468
 
-0.000169091,
10469
 
-0.000463253,
10470
 
-0.000526637,
10471
 
-0.000382341,
10472
 
-0.000317881,
10473
 
-0.000161383,
10474
 
-2.10E-05,
10475
 
-5.39E-05,
10476
 
-4.20E-05,
10477
 
-0.000428827,
10478
 
-0.000372915,
10479
 
-0.000230522,
10480
 
3.13E-05,
10481
 
-5.22E-05,
10482
 
1.12E-06,
10483
 
0.00020615,
10484
 
-3.95E-05,
10485
 
-0.000188001,
10486
 
-0.00036392,
10487
 
-0.000579835,
10488
 
-0.000763892,
10489
 
-0.000954471,
10490
 
-0.000672926,
10491
 
-0.000424378,
10492
 
-0.000254547,
10493
 
-0.000183938,
10494
 
-2.71E-05,
10495
 
0.000387271,
10496
 
0.000741082,
10497
 
0.00118213,
10498
 
0.00144803,
10499
 
0.00149683,
10500
 
0.00137681,
10501
 
0.00128621,
10502
 
0.00110935,
10503
 
0.000937524,
10504
 
0.000815979,
10505
 
0.000710253,
10506
 
0.000625412,
10507
 
0.00018105,
10508
 
-0.000126372,
10509
 
-0.000286713,
10510
 
-0.000268511,
10511
 
-9.48E-05,
10512
 
2.80E-05,
10513
 
0.000193522,
10514
 
0.000218011,
10515
 
0.000241254,
10516
 
0.000212373,
10517
 
-0.000144938,
10518
 
-0.000317461,
10519
 
-0.000310367,
10520
 
5.52E-05,
10521
 
7.28E-05,
10522
 
6.31E-06,
10523
 
-0.000100696,
10524
 
-0.000231523,
10525
 
-0.000232838,
10526
 
-0.000357755,
10527
 
-0.000312569,
10528
 
-0.000515436,
10529
 
-0.000606856,
10530
 
-0.000662088,
10531
 
-0.000494031,
10532
 
-0.000264875,
10533
 
-0.000439725,
10534
 
-0.00023842,
10535
 
-0.000240582,
10536
 
-0.000521013,
10537
 
-0.000548953,
10538
 
-0.000471158,
10539
 
-0.000383092,
10540
 
-0.000433934,
10541
 
-0.000297616,
10542
 
-0.000263819,
10543
 
2.98E-05,
10544
 
0.000241952,
10545
 
0.000294519,
10546
 
0.000128055,
10547
 
-0.000164661,
10548
 
-0.000125856,
10549
 
5.48E-05,
10550
 
0.00017835,
10551
 
0.000567644,
10552
 
0.000653388,
10553
 
0.00072292,
10554
 
0.00086677,
10555
 
0.000497185,
10556
 
0.000419213,
10557
 
0.000338733,
10558
 
0.000446219,
10559
 
0.000775549,
10560
 
0.00108515,
10561
 
0.00112122,
10562
 
0.00103212,
10563
 
0.000753898,
10564
 
0.000780644,
10565
 
0.000633858,
10566
 
0.000593352,
10567
 
0.000742397,
10568
 
0.000461387,
10569
 
0.000510694,
10570
 
0.000425991,
10571
 
0.000106824,
10572
 
1.30E-05,
10573
 
-0.000101644,
10574
 
-0.000247787,
10575
 
-5.23E-05,
10576
 
-1.88E-06,
10577
 
0.000314304,
10578
 
3.31E-05,
10579
 
-0.000493994,
10580
 
-0.000676519,
10581
 
-0.000815772,
10582
 
-0.000560616,
10583
 
-0.000419621,
10584
 
-0.000246948,
10585
 
-7.98E-06,
10586
 
5.47E-05,
10587
 
3.29E-06,
10588
 
9.70E-05,
10589
 
-6.67E-05,
10590
 
-0.000400225,
10591
 
-0.000545787,
10592
 
-0.000536147,
10593
 
-0.000382494,
10594
 
-0.000212611,
10595
 
0.00026384,
10596
 
0.000870903,
10597
 
0.00101919,
10598
 
0.000827203,
10599
 
0.000977354,
10600
 
0.000797584,
10601
 
0.000839661,
10602
 
0.000891465,
10603
 
0.000894189,
10604
 
0.000790827,
10605
 
0.000859716,
10606
 
0.00110719,
10607
 
0.00102985,
10608
 
0.00116294,
10609
 
0.00111391,
10610
 
0.00104187,
10611
 
0.000972879,
10612
 
0.000838099,
10613
 
0.000928914,
10614
 
0.000839244,
10615
 
0.000550288,
10616
 
0.000317816,
10617
 
0.000128915,
10618
 
-2.48E-05,
10619
 
-0.00015162,
10620
 
-0.000297103,
10621
 
-0.000498082,
10622
 
-0.000904425,
10623
 
-0.000721854,
10624
 
-0.000218374,
10625
 
9.71E-05,
10626
 
0.000350858,
10627
 
0.000214938,
10628
 
0.000131151,
10629
 
0.000248389,
10630
 
0.00052038,
10631
 
0.000395342,
10632
 
0.000123723,
10633
 
-0.000264557,
10634
 
-0.000841548,
10635
 
-0.00122576,
10636
 
-0.00109667,
10637
 
-0.0012236,
10638
 
-0.00124427,
10639
 
-0.00154254,
10640
 
-0.00141593,
10641
 
-0.00130058,
10642
 
-0.00124156,
10643
 
-0.000803948,
10644
 
-0.000595218,
10645
 
-6.42E-05,
10646
 
-4.95E-05,
10647
 
-1.82E-05,
10648
 
-4.49E-05,
10649
 
-4.76E-05,
10650
 
-0.000322162,
10651
 
-0.000217286,
10652
 
-0.000200726,
10653
 
-0.000318639,
10654
 
-0.000532153,
10655
 
-0.000347614,
10656
 
-3.16E-06,
10657
 
0.000644489,
10658
 
0.00100808,
10659
 
0.00107041,
10660
 
0.0011488,
10661
 
0.000744875,
10662
 
0.000428291,
10663
 
0.000290936,
10664
 
0.000258901,
10665
 
0.00057231,
10666
 
0.000625447,
10667
 
0.000833305,
10668
 
0.000679633,
10669
 
0.000736282,
10670
 
0.000384085,
10671
 
0.000100621,
10672
 
0.000125945,
10673
 
0.00018803,
10674
 
0.000247397,
10675
 
0.000140543,
10676
 
0.00023271,
10677
 
0.000206796,
10678
 
5.84E-05,
10679
 
1.03E-05,
10680
 
0.000149909,
10681
 
0.000621023,
10682
 
0.000754729,
10683
 
0.000771421,
10684
 
0.00105867,
10685
 
0.000834447,
10686
 
0.000733547,
10687
 
0.000612523,
10688
 
0.000335448,
10689
 
8.25E-06,
10690
 
-0.000189546,
10691
 
-0.000233238,
10692
 
-0.000519596,
10693
 
-0.00042089,
10694
 
-6.40E-06,
10695
 
7.77E-05,
10696
 
9.84E-05,
10697
 
-0.000171139,
10698
 
-0.000310745,
10699
 
-0.000261869,
10700
 
-0.000309991,
10701
 
-0.000362793,
10702
 
-0.000151421,
10703
 
-0.000194398,
10704
 
-0.00038984,
10705
 
-0.000337404,
10706
 
-0.000292472,
10707
 
-8.61E-05,
10708
 
5.75E-05,
10709
 
9.07E-05,
10710
 
0.000190954,
10711
 
0.000296186,
10712
 
0.000278313,
10713
 
-3.25E-05,
10714
 
-0.000333689,
10715
 
-0.000519787,
10716
 
-0.000496129,
10717
 
-0.000570476,
10718
 
-0.000303045,
10719
 
-0.000160277,
10720
 
0.000232384,
10721
 
0.000591203,
10722
 
0.00071829,
10723
 
0.000966969,
10724
 
0.00114479,
10725
 
0.00115608,
10726
 
0.00114881,
10727
 
0.0012485,
10728
 
0.0013597,
10729
 
0.00168101,
10730
 
0.00104358,
10731
 
0.000856327,
10732
 
0.000687258,
10733
 
0.000923271,
10734
 
0.000879711,
10735
 
0.000717467,
10736
 
0.000847053,
10737
 
0.000710694,
10738
 
0.000415626,
10739
 
0.000267475,
10740
 
0.00017531,
10741
 
0.000130545,
10742
 
7.53E-05,
10743
 
3.66E-05,
10744
 
0.000127371,
10745
 
0.000364506,
10746
 
0.000782998,
10747
 
0.000713517,
10748
 
0.000554627,
10749
 
0.000520172,
10750
 
0.000294821,
10751
 
0.000494704,
10752
 
0.00086818,
10753
 
0.000818739,
10754
 
0.000570463,
10755
 
0.000593457,
10756
 
0.000274417,
10757
 
0.000465056,
10758
 
0.000570629,
10759
 
0.000410949,
10760
 
0.000267827,
10761
 
0.000521008,
10762
 
0.000639421,
10763
 
0.000740811,
10764
 
0.000654325,
10765
 
0.000120355,
10766
 
-0.000199765,
10767
 
-0.000367148,
10768
 
-0.00050777,
10769
 
-0.000554528,
10770
 
-0.000742839,
10771
 
-0.000954415,
10772
 
-0.00111473,
10773
 
-0.00065717,
10774
 
-0.000384281,
10775
 
-0.000584488,
10776
 
-0.000387121,
10777
 
6.11E-07,
10778
 
6.18E-05,
10779
 
2.74E-06,
10780
 
-0.000239685,
10781
 
-0.00039921,
10782
 
-0.000224125,
10783
 
-4.40E-05,
10784
 
8.77E-06,
10785
 
-6.21E-05,
10786
 
-0.000519798,
10787
 
-0.000574988,
10788
 
-0.000376014,
10789
 
-0.000261826,
10790
 
0.000255553,
10791
 
0.000595628,
10792
 
0.0006648,
10793
 
0.000842629,
10794
 
0.000902367,
10795
 
0.000586933,
10796
 
0.00018307,
10797
 
0.000255133,
10798
 
9.85E-05,
10799
 
0.000368992,
10800
 
0.000562369,
10801
 
0.00085546,
10802
 
0.000859038,
10803
 
0.000907761,
10804
 
0.000390729,
10805
 
0.00050405,
10806
 
0.000698643,
10807
 
0.000572906,
10808
 
0.000644083,
10809
 
0.000435071,
10810
 
0.000530602,
10811
 
0.00063087,
10812
 
0.000323015,
10813
 
0.000115957,
10814
 
-5.61E-05,
10815
 
-0.000302566,
10816
 
-0.000569679,
10817
 
-0.000301438,
10818
 
0.000363858,
10819
 
0.000895815,
10820
 
0.00128842,
10821
 
0.00100383,
10822
 
0.00158317,
10823
 
0.00128054,
10824
 
0.000798382,
10825
 
0.000581018,
10826
 
0.000703249,
10827
 
0.000438639,
10828
 
0.000442378,
10829
 
0.000251144,
10830
 
-0.000178674,
10831
 
-4.74E-05,
10832
 
-7.63E-05,
10833
 
-0.000290456,
10834
 
-0.000425779,
10835
 
-0.00117202,
10836
 
-0.00130518,
10837
 
-0.00135565,
10838
 
-0.00117334,
10839
 
-0.000820887,
10840
 
-0.000492772,
10841
 
-0.000300751,
10842
 
0.00020894,
10843
 
0.000542867,
10844
 
0.00112235,
10845
 
0.0013269,
10846
 
0.0015155,
10847
 
0.00171764,
10848
 
0.00160906,
10849
 
0.00137222,
10850
 
0.0015151,
10851
 
0.00146072,
10852
 
0.000792795,
10853
 
0.000521727,
10854
 
0.000575187,
10855
 
0.000491216,
10856
 
0.000296697,
10857
 
0.000245324,
10858
 
0.000225258,
10859
 
1.92E-05,
10860
 
-0.000372311,
10861
 
-4.10E-05,
10862
 
-0.000128977,
10863
 
1.09E-05,
10864
 
-0.000600517,
10865
 
-0.0008249,
10866
 
-0.000992362,
10867
 
-0.000963039,
10868
 
-0.00113936,
10869
 
-0.00146438,
10870
 
-0.00111718,
10871
 
-0.00112647,
10872
 
-0.00135347,
10873
 
-0.00101142,
10874
 
-0.000652267,
10875
 
-0.000734747,
10876
 
-0.000377075,
10877
 
-0.00011074,
10878
 
-0.00051855,
10879
 
-0.000619458,
10880
 
-0.000187873,
10881
 
-0.000102412,
10882
 
0.000484728,
10883
 
0.000783395,
10884
 
0.000441902,
10885
 
0.000299374,
10886
 
0.000947764,
10887
 
0.00141674,
10888
 
0.00155242,
10889
 
0.00180191,
10890
 
0.00230594,
10891
 
0.00251656,
10892
 
0.0024539,
10893
 
0.00254168,
10894
 
0.0024158,
10895
 
0.00195566,
10896
 
0.0019329,
10897
 
0.00160632,
10898
 
0.00188157,
10899
 
0.001764,
10900
 
0.00108332,
10901
 
0.000869896,
10902
 
0.00067471,
10903
 
0.000615986,
10904
 
0.000794104,
10905
 
0.000386439,
10906
 
-5.17E-05,
10907
 
-0.000309826,
10908
 
-0.000247388,
10909
 
-0.0004103,
10910
 
-0.000398971,
10911
 
-0.000322127,
10912
 
-0.000306698,
10913
 
-0.000682788,
10914
 
-0.000919077,
10915
 
-0.000967931,
10916
 
-0.00112106,
10917
 
-0.00105072,
10918
 
-0.000969028,
10919
 
-0.000764652,
10920
 
-0.000580761,
10921
 
-0.000390856,
10922
 
-0.000211922,
10923
 
-0.000408224,
10924
 
0.000178671,
10925
 
0.000698164,
10926
 
0.00156287,
10927
 
0.00143122,
10928
 
0.000691728,
10929
 
-0.000475124,
10930
 
-0.000888173,
10931
 
-0.000686491,
10932
 
-0.0009318,
10933
 
-0.000852938,
10934
 
-0.00018467,
10935
 
-0.000494222,
10936
 
-0.000801158,
10937
 
-0.000975636 };
10938
 
 
10939
 
  double coeff[] = { 200.00000,191.41233,183.19339,175.32736,167.79909,160.59407,
10940
 
153.69842,147.09886,140.78267,134.73769,128.95227,123.41527,
10941
 
118.11602,113.04431,108.19037,103.54485,99.09880,94.84366,
10942
 
90.77123,86.87366,83.14344,79.57340,76.15664,72.88660,
10943
 
69.75697,66.76172,63.89508,61.15153,58.52578,56.01278,
10944
 
53.60768,51.30585,49.10286,46.99446,44.97660,43.04537,
10945
 
41.19708,39.42814,37.73516,36.11487,34.56416,33.08003,
10946
 
31.65963,30.30021,28.99917,27.75399,26.56228,25.42174,
10947
 
24.33017,23.28547,22.28563,21.32872,20.41290,19.53641,
10948
 
18.69754,17.89470,17.12633,16.39096,15.68715,15.01357,
10949
 
14.36892,13.75194,13.16145,12.59632,12.05545,11.53781,
10950
 
11.04240,10.56825,10.11447,9.68017,9.26452,8.86672,
10951
 
8.48600,8.12162,7.77289,7.43914,7.11971,6.81400,
10952
 
6.52142,6.24140,5.97341,5.71692,5.47144,5.23651,
10953
 
5.01166,4.79647,4.59051,4.39341,4.20476,4.02421,
10954
 
3.85142,3.68605,3.52777,3.37630,3.23132,3.09258,
10955
 
2.95979,2.83270,2.71107,2.59466,2.48325,2.37662,
10956
 
2.27457,2.17691,2.08343,1.99397,1.90836,1.82641,
10957
 
1.74799,1.67293,1.60110,1.53235,1.46656,1.40358,
10958
 
1.34332,1.28564,1.23043,1.17760,1.12704,1.07864,
10959
 
1.03233,0.98800,0.94558,0.90498,0.86612,0.82893,
10960
 
0.79334,0.75927,0.72667,0.69547,0.66561,0.63703,
10961
 
0.60967,0.58349,0.55844,0.53446,0.51151,0.48955,
10962
 
0.46853,0.44841,0.42916,0.41073,0.39309,0.37621,
10963
 
0.36006,0.34460,0.32980,0.31564,0.30209,0.28912,
10964
 
0.27670,0.26482,0.25345,0.24257,0.23215,0.22218,
10965
 
0.21264,0.20351,0.19478,0.18641,0.17841,0.17075,
10966
 
0.16342,0.15640,0.14968,0.14326,0.13711,0.13122,
10967
 
0.12558,0.12019,0.11503,0.11009,0.10536,0.10084,
10968
 
0.09651,0.09237,0.08840,0.08460,0.08097,0.07749,
10969
 
0.07417,0.07098,0.06793,0.06502,0.06223,0.05955,
10970
 
0.05700,0.05455,0.05221,0.04997,0.04782,0.04577,
10971
 
0.04380,0.04192,0.04012,0.03840,0.03675,0.03517,
10972
 
0.03366,0.03222,0.03083,0.02951,0.02824,0.02703,
10973
 
0.02587,0.02476,0.02369,0.02268,0.02170,0.02077,
10974
 
0.01988,0.01903,0.01821,0.01743,0.01668,0.01596,
10975
 
0.01528,0.01462,0.01399,0.01339,0.01282,0.01227,
10976
 
0.01174,0.01124,0.01075,0.01029,0.00985,0.00943,
10977
 
0.00902,0.00864,0.00826,0.00791,0.00757,0.00724,
10978
 
0.00693,0.00664,0.00635,0.00608,0.00582,0.00557,
10979
 
0.00533,0.00510,0.00488,0.00467,0.00447,0.00428,
10980
 
0.00409,0.00392,0.00375,0.00359,0.00344,0.00329,
10981
 
0.00315,0.00301,0.00288,0.00276,0.00264,0.00253,
10982
 
0.00242,0.00231,0.00222,0.00212,0.00203,0.00194,
10983
 
0.00186,0.00178,0.00170,0.00163,0.00156,0.00149,
10984
 
0.00143,0.00137,0.00131,0.00125,0.00120,0.00115,
10985
 
0.00110,0.00105,0.00101,0.00096,0.00092,0.00088,
10986
 
0.00084,0.00081,0.00077,0.00074,0.00071,0.00068,
10987
 
0.00065,0.00062,0.00059,0.00057,0.00054,0.00052,
10988
 
0.00050,0.00048,0.00046,0.00044,0.00042,0.00040 };
10989
 
 
10990
 
  double xv[600];
10991
 
  
10992
 
        for (z=0;z<600;z++)
10993
 
                xv[z] = xv0[z]*0.005;
10994
 
 
10995
 
 
10996
 
        CDF *tmpdf;
10997
 
        CLTSpec *tlsp;
10998
 
 
10999
 
        tmpdf = new CDF();
11000
 
        tmpdf->m_fMinVal = 0;
11001
 
        tmpdf->m_fMaxVal = 500.0;
11002
 
        tmpdf->m_iResolution = 600;
11003
 
        tmpdf->m_bLeft = true;
11004
 
        tmpdf->Create();
11005
 
 
11006
 
        for (z=0;z<600;z++)
11007
 
                tmpdf->m_pBin[z] = yv[z];
11008
 
 
11009
 
        tlsp = new CLTSpec();
11010
 
        tlsp->m_bLSpecDataLin = true;
11011
 
        tlsp->m_fLSpecMinExp = 0.005;
11012
 
        tlsp->m_fLSpecMaxExp = 2500.0;
11013
 
        tlsp->m_iLSpecData = 600;
11014
 
        tlsp->m_iLSpecPoints = 300;
11015
 
        tlsp->m_iMaxLMIter = 200;
11016
 
        tlsp->m_fLSpecZeroWeight = 1.0;
11017
 
 
11018
 
        tlsp->ComputeSpectrum("rdyn","bla","","",tmpdf);
11019
 
      
11020
 
 
11021
 
        return 0;
11022
 
*/
11023
 
/****************************************************************************************************************/
11024
 
 
 
9033
                                o->m_pPlProj->m_p2DF->WriteHistogram(buf,multibuf,".csv");
 
9034
                        }
 
9035
                        mprintf(WHITE,"\n    Note: ");
 
9036
                        mprintf("The atoms of the ref. molecule are only drawn in the Mathematica Notebook (.nb)!\n\n");
 
9037
_skipplproj:;
 
9038
                } // END IF PlProj
 
9039
 
 
9040
                if (g_bRDF)
 
9041
                {
 
9042
                        for (zr=0;zr<g_iCDFChannels;zr++)
 
9043
                        {
 
9044
                                if (o->m_pRDF[zr] == NULL)
 
9045
                                        continue;
 
9046
                                mprintf(WHITE,"* Radial Distribution Function\n");
 
9047
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRDF[zr]->m_pRDF->m_fBinEntries,o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,ZeroDivide(o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,o->m_pRDF[zr]->m_pRDF->m_fBinEntries+o->m_pRDF[zr]->m_pRDF->m_fSkipEntries)*100.0);
 
9048
                                o->m_pRDF[zr]->m_pRDF->CalcMeanSD();
 
9049
                                mprintf("    Mean value: %10G pm    Standard deviation: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMean,o->m_pRDF[zr]->m_pRDF->m_fSD);
 
9050
                                mprintf("    Min. value: %10G pm    Max.value:          %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMinInput,o->m_pRDF[zr]->m_pRDF->m_fMaxInput);
 
9051
 
 
9052
                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1.0 / g_iSteps);
 
9053
 
 
9054
                                if (o->m_pRDF[zr]->m_bCalcSD)
 
9055
                                {
 
9056
                                        mprintf(GREEN,"\n>>> Standard Deviation Engine >>>\n\n");
 
9057
                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishAnalysis();
 
9058
                                        o->m_pRDF[zr]->m_pRDF->m_pSDEngine->DumpData(o->m_pRDF[zr]->m_pRDF,o->m_pRDF[zr]->m_fSDTimesSigma,o->m_pRDF[zr]->m_bSDVerbose);
 
9059
                                        mprintf(GREEN,"\n<<< Standard Deviation Engine <<<\n\n");
 
9060
                                }
 
9061
                                if (o->m_pRDF[zr]->m_bAdaptive)
 
9062
                                {
 
9063
//                                      o->m_pRDF[zr]->m_pRDF->WriteHenry("rdf_",o->m_pRDF[zr]->m_sName,".csv");
 
9064
                                        o->m_pRDF[zr]->m_pRDF->PrepareAdapt();
 
9065
                                        o->m_pRDF[zr]->m_pRDF->BinTree_RadialDist();
 
9066
                                        if (o->m_iShowMol == g_iFixMol)
 
9067
                                                o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/(((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()-1.0f)/o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
 
9068
                                                        else o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
 
9069
 
 
9070
                                        mprintf("    Saving RDF as \"rdf_%s.csv\"...\n",o->m_pRDF[zr]->m_sName);
 
9071
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".001.csv",5,10,0.001,true);
 
9072
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".002.csv",5,10,0.002,true);
 
9073
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".005.csv",5,10,0.005,true);
 
9074
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".010.csv",5,10,0.01,true);
 
9075
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".020.csv",5,10,0.02,true);
 
9076
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".050.csv",5,10,0.05,true);
 
9077
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",5,10,0.1,true);
 
9078
 
 
9079
/*                                      o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".50.csv",16,0,50,true);
 
9080
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",16,0,100,true);
 
9081
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".500.csv",16,0,500,true);
 
9082
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".1000.csv",16,0,1000,true);*/
 
9083
                                } else
 
9084
                                {
 
9085
                                        if (o->m_pRDF[zr]->m_bRadialCorrect)
 
9086
                                        {
 
9087
                                                mprintf("    Correcting radial distribution...\n");
 
9088
 
 
9089
                                                if (o->m_pRDF[zr]->m_bLongMode)
 
9090
                                                {
 
9091
                                                        o->m_pRDF[zr]->m_pRDF->CorrectRadialDistLong();
 
9092
                                                } else
 
9093
                                                {
 
9094
                                                        o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
 
9095
                                                }
 
9096
                                        }
 
9097
                                        if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
 
9098
                                        {
 
9099
                                                if (o->m_pRDF[zr]->m_bProbDens)
 
9100
                                                {
 
9101
                                                        mprintf("    Scaling RDF to nm^(-3) ...\n");
 
9102
                                                        if (o->m_bObsCertain)
 
9103
                                                        {
 
9104
                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
 
9105
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
 
9106
                                                        } else
 
9107
                                                        {
 
9108
                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
9109
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
 
9110
                                                        }
 
9111
                                                        if (g_bDoubleBox)
 
9112
                                                        {
 
9113
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
 
9114
                                                                o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
 
9115
                                                        }
 
9116
                                                } else
 
9117
                                                {
 
9118
                                                        mprintf("    Scaling RDF to uniform density ...\n");
 
9119
                                                        if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
 
9120
                                                        {
 
9121
                                                                if (o->m_bObsCertain)
 
9122
                                                                {
 
9123
                                                                        o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
 
9124
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
 
9125
                                                                } else
 
9126
                                                                {
 
9127
                                                                        if (g_bRegionAnalysis)
 
9128
                                                                        {
 
9129
                                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 * g_iSteps / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) * o->m_pRDF[zr]->m_iShowAtomGes * ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() * o->m_pRDF[zr]->m_iRefAtomGes);
 
9130
                                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ * g_iSteps / (4.0/3.0*Pi) / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) );
 
9131
                                                                        } else
 
9132
                                                                        {
 
9133
                                                                                o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
9134
                                                                                o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
 
9135
                                                                        }
 
9136
                                                                }
 
9137
                                                                if (g_bDoubleBox)
 
9138
                                                                {
 
9139
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
 
9140
                                                                        o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
 
9141
                                                                }
 
9142
                                                        } else
 
9143
                                                        {
 
9144
                                                                eprintf("    Uniform density not defined if box is not XYZ-periodic!\n");
 
9145
                                                                goto _rdfint1;
 
9146
                                                        }
 
9147
                                                }
 
9148
                                        } else
 
9149
                                        {
 
9150
_rdfint1:
 
9151
                                                mprintf("    Scaling RDF to integral value 1000 ...\n");
 
9152
                                                o->m_pRDF[zr]->m_pRDF->NormBinIntegral(1000.0);
 
9153
                                                o->m_pRDF[zr]->m_pRDF->Integrate(false,1000.0);
 
9154
                                        }
 
9155
                                        sprintf(buf,"rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
 
9156
                                        mprintf("    Saving RDF as \"%s\"...\n",buf);
 
9157
                                        o->m_pRDF[zr]->m_pRDF->Write("",buf,"",true);
 
9158
                                        sprintf(buf,"rdf_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
 
9159
                                        mprintf("    Saving RDF AGR file as \"%s\"...\n",buf);
 
9160
                                        o->m_pRDF[zr]->m_pRDF->WriteAgr("",buf,"",o->m_pRDF[zr]->m_sName,true);
 
9161
                                        if (o->m_pRDF[zr]->m_iHistogramRes != 0)
 
9162
                                        {
 
9163
                                                mprintf("    Calculating Histogram...\n");
 
9164
                                                o->m_pRDF[zr]->m_pRDF->CalcHistogram();
 
9165
                                                sprintf(buf,"his_rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
 
9166
                                                mprintf("    Saving Histogram as \"%s\"...\n",buf);
 
9167
                                                o->m_pRDF[zr]->m_pRDF->WriteHistogram("",buf,"");
 
9168
                                        }
 
9169
                                        if (o->m_bObsCertain && o->m_bDecompDist)
 
9170
                                        {
 
9171
                                                sprintf(buf,"rdf_decomp_mol_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
 
9172
                                                mprintf("    Saving RDF molecule decomposition as \"%s.csv\"...\n",buf);
 
9173
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
 
9174
                                                mprintf("    Saving RDF molecule decomposition as \"%s.agr\"...\n",buf);
 
9175
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
 
9176
 
 
9177
                                                sprintf(buf,"rdf_decomp_nb_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
 
9178
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.csv\"...\n",buf);
 
9179
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
 
9180
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.agr\"...\n",buf);
 
9181
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
 
9182
                                        }
 
9183
                                        if (o->m_bDecompType)
 
9184
                                        {
 
9185
                                                sprintf(buf,"rdf_decomp_type_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
 
9186
                                                mprintf("    Saving RDF type decomposition as \"%s.csv\"...\n",buf);
 
9187
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
 
9188
                                                mprintf("    Saving RDF type decomposition as \"%s.agr\"...\n",buf);
 
9189
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
 
9190
 
 
9191
                                                sprintf(buf,"rdf_decomp_type_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
 
9192
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.csv\"...\n",buf);
 
9193
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
 
9194
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.agr\"...\n",buf);
 
9195
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
 
9196
                                        }
 
9197
 
 
9198
                                        if (o->m_bTimeDiff)
 
9199
                                                o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
 
9200
 
 
9201
                                        if (o->m_pRDF[zr]->m_bACF)
 
9202
                                        {
 
9203
                                                o->m_pRDF[zr]->Autocorrelate();
 
9204
                                        }
 
9205
                                }
 
9206
                                if (o->m_bTimeDev)
 
9207
                                {
 
9208
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
9209
                                        {
 
9210
                                                fclose(o->m_pRDF[zr]->m_fDist[0]);
 
9211
                                                mprintf("    Saving temporal development as \"rdf_timedev_%s%s.csv\"...\n",o->m_pRDF[zr]->m_sName,multibuf);
 
9212
                                        } else
 
9213
                                        {
 
9214
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
9215
                                                {
 
9216
                                                        fclose(o->m_pRDF[zr]->m_fDist[z2]);
 
9217
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
 
9218
                                                        mprintf("    Saving temporal development as \"%s\"...\n",buf);
 
9219
                                                }
 
9220
                                        }
 
9221
                                        delete[] o->m_pRDF[zr]->m_fDist;
 
9222
                                        o->m_pRDF[zr]->m_fDist = NULL;
 
9223
                                        if (o->m_bCombinedPlot)
 
9224
                                        {
 
9225
                                                sprintf(buf,"combined_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
 
9226
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
 
9227
                                                o->m_pRDF[zr]->m_pRDF->CreateCombinedPlot(true);
 
9228
                                                o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->WriteAgr(buf,false);
 
9229
                                        }
 
9230
                                }
 
9231
                        }
 
9232
                } // END IF RDF
 
9233
 
 
9234
                if (g_bVHDF)
 
9235
                {
 
9236
                        mprintf(WHITE,"* Van Hove Correlation Function\n");
 
9237
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVHDF->m_pVHDF->m_fBinEntries,o->m_pVHDF->m_pVHDF->m_fSkipEntries,ZeroDivide(o->m_pVHDF->m_pVHDF->m_fSkipEntries,o->m_pVHDF->m_pVHDF->m_fBinEntries+o->m_pVHDF->m_pVHDF->m_fSkipEntries)*100.0);
 
9238
                        o->m_pVHDF->CorrectCount();
 
9239
                        if (o->m_pVHDF->m_bRadialCorrect)
 
9240
                        {
 
9241
                                mprintf("    Correcting radial distribution...\n");
 
9242
                                o->m_pVHDF->m_pVHDF->CorrectRadialDist(1);
 
9243
                                if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
 
9244
                                {
 
9245
                                        mprintf("    Normalizing bin to uniform density...\n");
 
9246
                                        o->m_pVHDF->m_pVHDF->MultiplyBin(3.0f/4.0f/Pi*g_fBoxX*g_fBoxY*g_fBoxZ);
 
9247
                                }
 
9248
                                if (g_bDoubleBox)
 
9249
                                        o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
 
9250
                        } else
 
9251
                        {
 
9252
                                mprintf("    Normalizing bin integral to 1000000...\n");
 
9253
                                o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
 
9254
                        }
 
9255
 
 
9256
                        sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
 
9257
 
 
9258
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
 
9259
                        {
 
9260
                                mprintf("    Saving VHCF triples as \"%s_triples.csv\"...\n",buf);
 
9261
                                o->m_pVHDF->m_pVHDF->Write("",buf,"_triples.csv");
 
9262
                        }
 
9263
 
 
9264
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
 
9265
                        {
 
9266
                                mprintf("    Saving VHCF matrix as \"%s_matrix.csv\"...\n",buf);
 
9267
                                o->m_pVHDF->m_pVHDF->WriteCSV("",buf,"_matrix.csv");
 
9268
                        }
 
9269
 
 
9270
                        if (o->m_pVHDF->m_iGraceBunchDist > 0)
 
9271
                        {
 
9272
                                sprintf(buf,"vhcf_dist_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
 
9273
                                mprintf("    Saving VHCF distance Grace Stack as \"%s\"...\n",buf);
 
9274
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(0,o->m_pVHDF->m_iGraceBunchDist,1.0f,"",buf,"");
 
9275
                        }
 
9276
 
 
9277
                        if (o->m_pVHDF->m_iGraceBunchTime > 0)
 
9278
                        {
 
9279
                                sprintf(buf,"vhcf_time_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
 
9280
                                mprintf("    Saving VHCF time Grace Stack as \"%s\"...\n",buf);
 
9281
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(1,o->m_pVHDF->m_iGraceBunchTime,1.0f,"",buf,"");
 
9282
                        }
 
9283
 
 
9284
                        if (o->m_pVHDF->m_bSwapAxes)
 
9285
                                o->m_pVHDF->m_pVHDF->SwapAxes();
 
9286
 
 
9287
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
 
9288
                        {
 
9289
                                sprintf(buf,"vhcf_%s%s.nb",o->m_pVHDF->m_sName,multibuf);
 
9290
                                mprintf("    Saving VHCF Mathematica Notebook as \"%s\"...\n",buf);
 
9291
                                o->m_pVHDF->m_pVHDF->WriteMathematicaNb("",buf,"",false);
 
9292
                        }
 
9293
 
 
9294
                        if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
 
9295
                        {
 
9296
                                sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
 
9297
                                mprintf("    Saving VHCF Gnuplot Input as \"%s.gp\"...\n",buf);
 
9298
                                o->m_pVHDF->m_pVHDF->WriteGnuplotInput("",buf,"",false);
 
9299
                        }
 
9300
                } // END IF VHDF
 
9301
 
 
9302
                if (g_bCDF)
 
9303
                {
 
9304
                        if (g_iCDFChannels == 2)
 
9305
                        {
 
9306
                                mprintf(WHITE,"* Combined Distribution Function (2D)\n");
 
9307
                        /*      if (o->m_pConditions != NULL)
 
9308
                                {
 
9309
                                        mprintf("    Conditions: %.2f percent of the molecules passed.\n",o->m_pConditions->m_fPassed/(o->m_pConditions->m_fPassed+o->m_pConditions->m_fFailed)*100.0);
 
9310
                                        mprintf("    After conditions: ");
 
9311
                                } else mprintf("    ");*/
 
9312
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p2DF->m_fBinEntries,o->m_pCDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p2DF->m_fSkipEntries,o->m_pCDF->m_p2DF->m_fSkipEntries+o->m_pCDF->m_p2DF->m_fBinEntries)*100.0);
 
9313
                                if (o->m_pCDF->m_p2DF->m_fBinEntries == 0)
 
9314
                                {
 
9315
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
 
9316
                                        goto _skipsdf;
 
9317
                                }
 
9318
                                for (z2=0;z2<2;z2++)
 
9319
                                {
 
9320
                                        if (g_iObsChannel[z2] == 0)
 
9321
                                        {
 
9322
                                                if ((o->m_pRDF[z2]->m_bRadialCorrect) && (o->m_pCDF->m_iNormalize != 3))
 
9323
                                                {
 
9324
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
 
9325
                                                        o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
 
9326
                                                }
 
9327
                                        }
 
9328
                                        if (g_iObsChannel[z2] == 1)
 
9329
                                        {
 
9330
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine) && (o->m_pCDF->m_iNormalize != 3))
 
9331
                                                {
 
9332
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
 
9333
                                                        o->m_pCDF->m_p2DF->CorrectAngle(z2);
 
9334
                                                }
 
9335
                                                if (o->m_pADF[z2]->m_bMirror)
 
9336
                                                {
 
9337
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
 
9338
                                                        if (o->m_pADF[z2]->m_bCosine)
 
9339
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
 
9340
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
 
9341
                                                }
 
9342
                                        }
 
9343
                                        if (g_iObsChannel[z2] == 6)
 
9344
                                        {
 
9345
                                                if (o->m_pLiDF[z2]->m_bRadialCorrect)
 
9346
                                                {
 
9347
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
 
9348
                                                        o->m_pCDF->m_p2DF->CorrectLiRadialDist(z2);
 
9349
                                                }
 
9350
                                        }
 
9351
                                }
 
9352
                                o->m_pCDF->m_fFactor = 1.0;
 
9353
                                switch(o->m_pCDF->m_iNormalize)
 
9354
                                {
 
9355
                                        case 3:
 
9356
                                                mprintf("    Normalizing CDF to uniform density.\n");
 
9357
                                                o->m_pCDF->m_p2DF->NormalizeUniform(g_fBoxX*g_fBoxY*g_fBoxZ/g_iSteps  / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pCDF->m_iCombinationsEnabled);
 
9358
                                                break;
 
9359
                                        case 2:
 
9360
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9361
                                                o->m_pCDF->m_p2DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9362
                                                break;
 
9363
                                        case 1:
 
9364
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9365
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p2DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9366
                                                break;
 
9367
                                        case 0:
 
9368
                                                mprintf("    Not normalizing this CDF.\n");
 
9369
                                                break;
 
9370
                                }
 
9371
 
 
9372
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
 
9373
                                {
 
9374
                                        mprintf("    Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_sName,multibuf);
 
9375
                                        o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_triples.csv");
 
9376
                                }
 
9377
 
 
9378
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
 
9379
                                {
 
9380
                                        mprintf("    Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_sName,multibuf);
 
9381
                                        o->m_pCDF->m_p2DF->WriteCSV(o->m_pCDF->m_sName,multibuf,"_matrix.csv");
 
9382
                                }
 
9383
 
 
9384
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
 
9385
                                {
 
9386
                                        mprintf("    Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9387
                                        o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,".nb",false);
 
9388
                                }
 
9389
 
 
9390
                                if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
 
9391
                                {
 
9392
                                        mprintf("    Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_sName,multibuf);
 
9393
                                        o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"",false);
 
9394
                                }
 
9395
 
 
9396
                                mprintf("    Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_sName,multibuf);
 
9397
                                o->m_pCDF->m_p2DF->WriteCombinedPlot(o->m_pCDF->m_sName,multibuf,"_combined.agr");
 
9398
                                if (o->m_pCDF->m_iHistogramRes != 0)
 
9399
                                {
 
9400
                                        mprintf("    Calculating Histogram...\n");
 
9401
                                        o->m_pCDF->m_p2DF->CalcHistogram();
 
9402
                                        sprintf(buf,"his_%s",o->m_pCDF->m_sName);
 
9403
                                        mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
 
9404
                                        o->m_pCDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
 
9405
                                }
 
9406
 
 
9407
                                if (o->m_pCDF->m_bGraceBunch)
 
9408
                                {
 
9409
                                        if (o->m_pCDF->m_iGraceBunchC1 > 0)
 
9410
                                        {
 
9411
                                                if ((g_iObsChannel[1] == 0) && (o->m_bOthers))
 
9412
                                                        tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[1]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[1]->m_iRefAtomGes;
 
9413
                                                                else tf = 1;
 
9414
                                                sprintf(buf,"cdf_c1_%s%s.agr",o->m_pCDF->m_sName,multibuf);
 
9415
                                                mprintf("    Saving CDF Channel 1 Grace Stack as \"%s\"...\n",buf);
 
9416
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(0,o->m_pCDF->m_iGraceBunchC1,(float)tf,"",buf,"");
 
9417
                                        }
 
9418
                                        if (o->m_pCDF->m_iGraceBunchC2 > 0)
 
9419
                                        {
 
9420
                                                if ((g_iObsChannel[0] == 0) && (o->m_bOthers))
 
9421
                                                        tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()      /o->m_pRDF[0]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[0]->m_iRefAtomGes;
 
9422
                                                                else tf = 1;
 
9423
                                                sprintf(buf,"cdf_c2_%s%s.agr",o->m_pCDF->m_sName,multibuf);
 
9424
                                                mprintf("    Saving CDF Channel 2 Grace Stack as \"%s\"...\n",buf);
 
9425
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(1,o->m_pCDF->m_iGraceBunchC2,(float)tf,"",buf,"");
 
9426
                                        }
 
9427
                                }
 
9428
 
 
9429
                                if (o->m_pCDF->m_bAxisDivide)
 
9430
                                {
 
9431
                                        if (o->m_pCDF->m_bAxisDivideAll)
 
9432
                                        {
 
9433
                                                mprintf("    Saving CDF X projection as \"%s%s_pX.csv\"...\n",o->m_pCDF->m_sName,multibuf);
 
9434
                                                o->m_pCDF->m_p2DF->WriteXProjection(o->m_pCDF->m_sName,multibuf,"_pX.csv");
 
9435
 
 
9436
                                                mprintf("    Saving CDF Y projection as \"%s%s_pY.csv\"...\n",o->m_pCDF->m_sName,multibuf);
 
9437
                                                o->m_pCDF->m_p2DF->WriteYProjection(o->m_pCDF->m_sName,multibuf,"_pY.csv");
 
9438
 
 
9439
                                                mprintf("    Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9440
 
 
9441
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
 
9442
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9443
                                                
 
9444
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
 
9445
                                                if (g_iObsChannel[0] == 0)
 
9446
                                                        if (o->m_pRDF[0]->m_bRadialCorrect)
 
9447
                                                                tempc2df->UnCorrectRadialDist(0);
 
9448
                                                if (g_iObsChannel[0] == 1)
 
9449
                                                        if (o->m_pADF[0]->m_bStat && (!o->m_pADF[0]->m_bCosine))
 
9450
                                                                tempc2df->UnCorrectAngle(0);
 
9451
                                                tempc2df->NormalizeXCount();
 
9452
                                                switch(o->m_pCDF->m_iNormalize)
 
9453
                                                {
 
9454
                                                        case 2:
 
9455
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9456
                                                                break;
 
9457
                                                        case 1:
 
9458
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9459
                                                                break;
 
9460
                                                        case 0:
 
9461
                                                                break;
 
9462
                                                }
 
9463
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
 
9464
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nX",false);
 
9465
                                                delete tempc2df;
 
9466
 
 
9467
                                                mprintf("    Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9468
 
 
9469
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
 
9470
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9471
                                                
 
9472
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
 
9473
                                                if (g_iObsChannel[1] == 0)
 
9474
                                                        if (o->m_pRDF[1]->m_bRadialCorrect)
 
9475
                                                                tempc2df->UnCorrectRadialDist(1);
 
9476
                                                if (g_iObsChannel[1] == 1)
 
9477
                                                        if (o->m_pADF[1]->m_bStat && (!o->m_pADF[1]->m_bCosine))
 
9478
                                                                tempc2df->UnCorrectAngle(1);
 
9479
                                                tempc2df->NormalizeYCount();
 
9480
                                                switch(o->m_pCDF->m_iNormalize)
 
9481
                                                {
 
9482
                                                        case 2:
 
9483
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9484
                                                                break;
 
9485
                                                        case 1:
 
9486
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9487
                                                                break;
 
9488
                                                        case 0:
 
9489
                                                                break;
 
9490
                                                }
 
9491
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
 
9492
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nY",false);
 
9493
                                                delete tempc2df;
 
9494
 
 
9495
                                                mprintf("    Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9496
 
 
9497
                                                try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
 
9498
                                                if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9499
                                                
 
9500
                                                tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
 
9501
                                                for (z2=0;z2<2;z2++)
 
9502
                                                {
 
9503
                                                        if (g_iObsChannel[z2] == 0)
 
9504
                                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
 
9505
                                                                        tempc2df->UnCorrectRadialDist(z2);
 
9506
                                                        if (g_iObsChannel[z2] == 1)
 
9507
                                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
 
9508
                                                                        tempc2df->UnCorrectAngle(z2);
 
9509
                                                }
 
9510
                                                tempc2df->NormalizeXCount();
 
9511
                                                tempc2df->NormalizeYCount();
 
9512
                                                switch(o->m_pCDF->m_iNormalize)
 
9513
                                                {
 
9514
                                                        case 2:
 
9515
                                                                tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9516
                                                                break;
 
9517
                                                        case 1:
 
9518
                                                                tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9519
                                                                break;
 
9520
                                                        case 0:
 
9521
                                                                break;
 
9522
                                                }
 
9523
                                                tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
 
9524
                                                tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nXY",false);
 
9525
                                                delete tempc2df;
 
9526
                                        }
 
9527
 
 
9528
                                        mprintf("    Calculating tensor product of CDF projections...\n");
 
9529
 
 
9530
                                        try { o->m_pCDF->m_pTensorProduct = new C2DF(); } catch(...) { o->m_pCDF->m_pTensorProduct = NULL; }
 
9531
                                        if (o->m_pCDF->m_pTensorProduct == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9532
                                        
 
9533
                                        o->m_pCDF->m_pTensorProduct->CopyFrom(o->m_pCDF->m_p2DF);
 
9534
                                        o->m_pCDF->m_pTensorProduct->MakeTensorProduct(o->m_pCDF->m_p2DF);
 
9535
                                        switch(o->m_pCDF->m_iNormalize)
 
9536
                                        {
 
9537
                                                case 2:
 
9538
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9539
                                                        break;
 
9540
                                                case 1:
 
9541
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9542
                                                        break;
 
9543
                                                case 0:
 
9544
                                                        break;
 
9545
                                        }
 
9546
                                        if (o->m_pCDF->m_bAxisDivideAll)
 
9547
                                        {
 
9548
                                                mprintf("    Saving tensor product as \"%s%s_tensor.dat\"...\n",o->m_pCDF->m_sName,multibuf);
 
9549
                                                o->m_pCDF->m_pTensorProduct->Write(o->m_pCDF->m_sName,multibuf,"_tensor.dat");
 
9550
                                                mprintf("    Saving tensor product Mathematica Notebook as \"%s%s_tensor.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9551
                                                o->m_pCDF->m_pTensorProduct->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensor.nb",false);
 
9552
                                                mprintf("    Saving tensor product Gnuplot Input as \"%s%s_tensor.gp\"...\n",o->m_pCDF->m_sName,multibuf);
 
9553
                                                o->m_pCDF->m_pTensorProduct->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_tensor",false);
 
9554
                                                mprintf("    Calculating difference between CDF and tensor product...\n");
 
9555
                                        }
 
9556
                                        o->m_pCDF->m_p2DF->Subtract(o->m_pCDF->m_pTensorProduct);
 
9557
                                        o->m_pCDF->m_p2DF->CalcMaxEntry();
 
9558
                                        o->m_pCDF->m_p2DF->m_iColorScale = 4; // PlusMinus Scale
 
9559
                                        o->m_pCDF->m_p2DF->m_fPlotExp = 1.0;
 
9560
        //                              o->m_pCDF->m_p2DF->m_fMathematicaColorOffset = max(fabs(o->m_pCDF->m_p2DF->m_fMinEntry),fabs(o->m_pCDF->m_p2DF->m_fMaxEntry)) / 3.0;
 
9561
        //                              o->m_pCDF->m_p2DF->m_fMathematicaColorScale = o->m_pCDF->m_p2DF->m_fMathematicaColorOffset  * 2.0;
 
9562
                                        mprintf("    Saving +/- correlation plot as \"%s%s_correlation.dat\"...\n",o->m_pCDF->m_sName,multibuf);
 
9563
                                        o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_correlation.dat");
 
9564
                                        mprintf("    Saving +/- correlation plot Mathematica Notebook as \"%s%s_correlation.nb\"...\n",o->m_pCDF->m_sName,multibuf);
 
9565
                                        o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_correlation.nb",false);
 
9566
                                        mprintf("    Saving +/- correlation plot Gnuplot Input as \"%s%s_correlation.gp\"...\n",o->m_pCDF->m_sName,multibuf);
 
9567
                                        o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_correlation",false);
 
9568
                                } // END IF AXISDIVIDE
 
9569
                                if (o->m_pCDF->m_bDumpDat)
 
9570
                                {
 
9571
                                        fclose(o->m_pCDF->m_fDump);
 
9572
                                        mprintf("    CDF raw data saved as cdfdump_%dd_%s%s.csv.\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
 
9573
                                }
 
9574
                                if (o->m_bTimeDev)
 
9575
                                {
 
9576
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
 
9577
                                        {
 
9578
                                                fclose(o->m_pCDF->m_fTimeDev[0]);
 
9579
//                                              sprintf(buf,"cdf_timedev_%dd_%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
 
9580
                                                mprintf("    Temporal development saved as cdf_timedev_%dd%s%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
 
9581
                                        } else
 
9582
                                        {
 
9583
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
 
9584
                                                {
 
9585
                                                        fclose(o->m_pCDF->m_fTimeDev[z2]);
 
9586
                                                        mprintf("    Temporal development saved as cdf_timedev_%dd%s_ref%d%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
 
9587
                                                }
 
9588
                                        }
 
9589
                                        if (o->m_pCDF->m_bTDAnimation)
 
9590
                                        {
 
9591
                                                mprintf(WHITE,"  * Time dependent animation *\n");
 
9592
                                                sprintf(buf,"animation_complete_%s%s.agr",o->m_pCDF->m_sName,multibuf);
 
9593
                                                mprintf("    Saving complete Plot as \"%s\"...\n",buf);
 
9594
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
 
9595
                                                {
 
9596
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
 
9597
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
 
9598
                                                }
 
9599
                                                o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
 
9600
                                                sprintf(buf,"render_%s%s",o->m_pCDF->m_sName,multibuf);
 
9601
                                                mprintf("    Saving xmgrace render script for animation as \"%s\"...\n",buf);
 
9602
                                                a = OpenFileWrite("gracebatch",true);
 
9603
                                                mfprintf(a,"PRINT TO \"output.png\"\n");
 
9604
                                                mfprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
 
9605
                                                mfprintf(a,"PAGE SIZE %d, %d\n",o->m_pCDF->m_iTDAResX,o->m_pCDF->m_iTDAResY);
 
9606
                                                mfprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
 
9607
                                                mfprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
 
9608
                                                mfprintf(a,"PRINT\n");
 
9609
                                                fclose(a);
 
9610
                                                a = OpenFileWrite(buf,true);
 
9611
                                                if (o->m_pCDF->m_bTDATrace)
 
9612
                                                {
 
9613
                                                        for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
 
9614
                                                        {
 
9615
                                                                o->m_pCDF->m_pTDAPlot->DuplicateSet(z2);
 
9616
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
 
9617
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.7));
 
9618
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,3.0f);
 
9619
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,GraceColor(z2,0.0));
 
9620
                                                        }
 
9621
                                                }
 
9622
                                                for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
 
9623
                                                {
 
9624
                                                        if (o->m_pCDF->m_bTDATrace)
 
9625
                                                        {
 
9626
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
 
9627
                                                                {
 
9628
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3+o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
 
9629
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,0,z2*o->m_pCDF->m_iTDAStride);
 
9630
                                                                }
 
9631
                                                        } else
 
9632
                                                        {
 
9633
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
 
9634
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
 
9635
                                                        }
 
9636
 
 
9637
                                                        sprintf(buf,"animation_%05d_%s%s.agr",z2+1,o->m_pCDF->m_sName,multibuf);
 
9638
                                                        mprintf("    Saving frame \"%s\"...\n",buf);
 
9639
                                                        o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
 
9640
                                                        mfprintf(a,"echo 'Printing frame %d of %d'\n",z2+1,o->m_pCDF->m_iTDASteps);
 
9641
                                                        mfprintf(a,"xmgrace %s -batch gracebatch -nosafe -hardcopy\n",buf);
 
9642
                                                        mfprintf(a,"mv output.png frame%04d.png\n",z2+1);
 
9643
                                                }
 
9644
                                                fclose(a);
 
9645
                                        }
 
9646
                                }
 
9647
                        } // END IF CHANNELS == 2
 
9648
 
 
9649
                        if (g_iCDFChannels == 3)
 
9650
                        {
 
9651
                                mprintf(WHITE,"* Combined Distribution Function (3D)\n");
 
9652
                                mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_fBinEntries,o->m_pCDF->m_p3DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_fSkipEntries,o->m_pCDF->m_p3DF->m_fSkipEntries+o->m_pCDF->m_p3DF->m_fBinEntries)*100.0);
 
9653
                                if (o->m_pCDF->m_p3DF->m_fBinEntries == 0)
 
9654
                                {
 
9655
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
 
9656
                                        goto _skipsdf;
 
9657
                                }
 
9658
                                o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9659
                                mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9660
                                for (z2=0;z2<g_iCDFChannels;z2++)
 
9661
                                {
 
9662
                                        if (g_iObsChannel[z2] == 0)
 
9663
                                        {
 
9664
                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
 
9665
                                                {
 
9666
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
 
9667
                                                        o->m_pCDF->m_p3DF->CorrectRadialDist(z2);
 
9668
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9669
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9670
                                                }
 
9671
                                        }
 
9672
                                        if (g_iObsChannel[z2] == 1)
 
9673
                                        {
 
9674
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
 
9675
                                                {
 
9676
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
 
9677
                                                        o->m_pCDF->m_p3DF->CorrectAngle(z2);
 
9678
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9679
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9680
                                                }
 
9681
                                                if (o->m_pADF[z2]->m_bMirror)
 
9682
                                                {
 
9683
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
 
9684
                                                        if (o->m_pADF[z2]->m_bCosine)
 
9685
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
 
9686
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
 
9687
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9688
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9689
                                                }
 
9690
                                        }
 
9691
                                }
 
9692
//                              o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9693
//                              mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9694
                                o->m_pCDF->m_fFactor = 1.0;
 
9695
                                switch(o->m_pCDF->m_iNormalize)
 
9696
                                {
 
9697
                                        case 2:
 
9698
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9699
                                                o->m_pCDF->m_p3DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9700
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9701
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9702
                                                break;
 
9703
                                        case 1:
 
9704
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9705
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p3DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9706
                                                mprintf("    Factor was %G.\n",o->m_pCDF->m_fFactor);
 
9707
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
 
9708
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
 
9709
                                                break;
 
9710
                                        case 0:
 
9711
                                                mprintf("    Not normalizing this CDF.\n");
 
9712
                                                break;
 
9713
                                }
 
9714
 
 
9715
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
 
9716
                                {
 
9717
                                        try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
 
9718
                                        if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9719
                                        
 
9720
                                        temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
 
9721
                                        if (z2 != 0)
 
9722
                                        {
 
9723
                                                temp3DF->Smooth(z2);
 
9724
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
 
9725
                                        } else sprintf(buf,"%s.plt",multibuf);
 
9726
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
 
9727
                                        temp3DF->WritePLT("",o->m_pCDF->m_sName,buf,false);
 
9728
 
 
9729
                                        if (z2 != 0)
 
9730
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
 
9731
                                                        else sprintf(buf,"%s.cube",multibuf);
 
9732
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
 
9733
                                        temp3DF->WriteCube("",o->m_pCDF->m_sName,buf,false);
 
9734
                                        if (o->m_pCDF->m_iHistogramRes != 0)
 
9735
                                        {
 
9736
                                                mprintf("    Calculating Histogram...\n");
 
9737
                                                temp3DF->CalcHistogram();
 
9738
                                                if (z2 != 0)
 
9739
                                                        sprintf(buf,"his_%s.s%d",o->m_pCDF->m_sName,z2);
 
9740
                                                                else sprintf(buf,"his_%s",o->m_pCDF->m_sName);
 
9741
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
 
9742
                                                temp3DF->WriteHistogram(buf,multibuf,".csv");
 
9743
                                        }
 
9744
 
 
9745
                                        if (o->m_pCDF->m_b3DSlices)
 
9746
                                        {
 
9747
                                                for (z3=0;z3<3;z3++)
 
9748
                                                {
 
9749
                                                        if (o->m_pCDF->m_i3DSliceIntervals[z3] != 0)
 
9750
                                                        {
 
9751
                                                                if (z2 != 0)
 
9752
                                                                        mprintf(WHITE,"    * Creating channel %d smooth grade %d slices...\n",z3+1,z2);
 
9753
                                                                                else mprintf(WHITE,"    * Creating channel %d slices...\n",z3+1);
 
9754
 
 
9755
                                                                try { temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]]; } catch(...) { temp2dfa = NULL; }
 
9756
                                                                if (temp2dfa == NULL) NewException((double)o->m_pCDF->m_i3DSliceIntervals[z3]*sizeof(C2DF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9757
 
 
9758
                                                                tf = 0;
 
9759
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
 
9760
                                                                {
 
9761
                                                                        try { temp2dfa[z4] = new C2DF(); } catch(...) { temp2dfa[z4] = NULL; }
 
9762
                                                                        if (temp2dfa[z4] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9763
                                                                        
 
9764
                                                                        temp3DF->CreateSlice(z3,(int)((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),(int)((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]);
 
9765
                                                                        mprintf("        - %2d: %9.4f - %9.4f (%3d - %3d), Intensity range %.3f ... %.3f\n",z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),int((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),int((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]->m_fMinEntry,temp2dfa[z4]->m_fMaxEntry);
 
9766
                                                                        if (temp2dfa[z4]->m_fMaxEntry > tf)
 
9767
                                                                                tf = temp2dfa[z4]->m_fMaxEntry;
 
9768
                                                                }
 
9769
 
 
9770
                                                                mprintf("      Setting common intensity range to 0 ... %.3f.\n",tf);
 
9771
 
 
9772
                                                                mprintf("      Writing out slice files...\n",z3+1);
 
9773
 
 
9774
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
 
9775
                                                                {
 
9776
                                                                        temp2dfa[z4]->m_fMinEntry = 0;
 
9777
                                                                        temp2dfa[z4]->m_fMaxEntry = tf;
 
9778
                                                                        if (z2 != 0)
 
9779
                                                                                sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
 
9780
                                                                                        else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
 
9781
                                                                        mprintf("        %s ...\n",buf);
 
9782
                                                                        temp2dfa[z4]->WriteMathematicaNb("",buf,"",true);
 
9783
                                                                        if (z2 != 0)
 
9784
                                                                                sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
 
9785
                                                                                        else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
 
9786
                                                                        mprintf("        %s.gp ...\n",buf);
 
9787
                                                                        temp2dfa[z4]->WriteGnuplotInput("",buf,"",true);
 
9788
                                                                }
 
9789
 
 
9790
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
 
9791
                                                                        delete temp2dfa[z4];
 
9792
 
 
9793
                                                                delete[] temp2dfa;
 
9794
                                                        }
 
9795
                                                }
 
9796
                                        }
 
9797
                                }
 
9798
 
 
9799
                                mprintf("    Writing out 2D projections...\n");
 
9800
                                for (z3=0;z3<3;z3++)
 
9801
                                {
 
9802
                                        mprintf(WHITE,"    * CDF 2D projection on channel %d\n",z3+1);
 
9803
                                        mprintf("        %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries+o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries)*100.0);
 
9804
                                        switch(z3)
 
9805
                                        {
 
9806
                                                case 0:
 
9807
                                                        tia[0] = 0;
 
9808
                                                        tia[1] = 1;
 
9809
                                                        break;
 
9810
                                                case 1:
 
9811
                                                        tia[0] = 0;
 
9812
                                                        tia[1] = 2;
 
9813
                                                        break;
 
9814
                                                case 2:
 
9815
                                                        tia[0] = 1;
 
9816
                                                        tia[1] = 2;
 
9817
                                                        break;
 
9818
                                        }
 
9819
                                        for (z2=0;z2<2;z2++)
 
9820
                                        {
 
9821
                                                if (g_iObsChannel[tia[z2]] == 0)
 
9822
                                                {
 
9823
                                                        if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
 
9824
                                                        {
 
9825
                                                                mprintf("        Correcting radial distribution for CDF channel %d...\n",z2+1);
 
9826
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
 
9827
                                                        }
 
9828
                                                }
 
9829
                                                if (g_iObsChannel[tia[z2]] == 1)
 
9830
                                                {
 
9831
                                                        if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
 
9832
                                                        {
 
9833
                                                                mprintf("        Correcting angular distribution for CDF channel %d...\n",z2+1);
 
9834
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
 
9835
                                                        }
 
9836
                /*                                      if (o->m_pADF[z2]->m_bMirror)
 
9837
                                                        {
 
9838
                                                                mprintf("        Making channel %d mirror-symmetric...\n",z2+1);
 
9839
                                                                if (o->m_pADF[z2]->m_bCosine)
 
9840
                                                                        o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
 
9841
                                                                                else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
 
9842
                                                        }*/
 
9843
                                                }
 
9844
                                        }
 
9845
                                        o->m_pCDF->m_fFactor = 1.0;
 
9846
                                        switch(o->m_pCDF->m_iNormalize)
 
9847
                                        {
 
9848
                                                case 2:
 
9849
                                                        mprintf("        Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9850
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
 
9851
                                                        break;
 
9852
                                                case 1:
 
9853
                                                        mprintf("        Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
 
9854
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
 
9855
                                                        break;
 
9856
                                                case 0:
 
9857
                                                        mprintf("        Not normalizing this CDF.\n");
 
9858
                                                        break;
 
9859
                                        }
 
9860
                                        mprintf("        Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
 
9861
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Write(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_triples.csv");
 
9862
                                        mprintf("        Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
 
9863
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCSV(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_matrix.csv");
 
9864
                                        mprintf("        Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
 
9865
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteMathematicaNb(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,".nb",false);
 
9866
                                        mprintf("        Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
 
9867
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteGnuplotInput(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"",false);
 
9868
                                        mprintf("        Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
 
9869
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCombinedPlot(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_combined.agr");
 
9870
                                        if (o->m_pCDF->m_iHistogramRes != 0)
 
9871
                                        {
 
9872
                                                mprintf("    Calculating Histogram...\n");
 
9873
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CalcHistogram();
 
9874
                                                sprintf(buf,"his_%s",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName);
 
9875
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
 
9876
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteHistogram(buf,multibuf,".csv");
 
9877
                                        }
 
9878
                                }
 
9879
                        } // END IF CHANNELS == 3
 
9880
_skipsdf:;
 
9881
                } // END IF CDF
 
9882
 
 
9883
                if (g_bRevSDF)
 
9884
                {
 
9885
                        mprintf(WHITE,"* Pseudo SDF\n");
 
9886
                        mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRevSDF->m_p2DF->m_fBinEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pRevSDF->m_p2DF->m_fSkipEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries+o->m_pRevSDF->m_p2DF->m_fBinEntries)*100.0);
 
9887
                        if (o->m_pRevSDF->m_p2DF->m_fBinEntries == 0)
 
9888
                        {
 
9889
                                eprintf("    There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
 
9890
                                goto _skiprevsdf;
 
9891
                        }
 
9892
                        mprintf("    Normalizing integral value to %.2f.\n",1000000.0f);
 
9893
                        o->m_pRevSDF->m_p2DF->NormalizeBinIntegral(1000000.0f);
 
9894
                        if (o->m_pRevSDF->m_bDrawAtoms)
 
9895
                        {
 
9896
                                mprintf("    Inserting reference atoms into the Pseudo SDF plot...\n");
 
9897
 
 
9898
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius == 0)
 
9899
                                        o->m_pRevSDF->m_p2DF->AddCircle(0,0,50.0,0.4,0.4,0.4);
 
9900
                                                else o->m_pRevSDF->m_p2DF->AddCircle(0,0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorB/255.0);
 
9901
 
 
9902
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius == 0)
 
9903
                                        o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,50.0,0.4,0.4,0.4);
 
9904
                                                else o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorB/255.0);
 
9905
                        }
 
9906
                        mprintf("    Saving PseudoSDF triples as \"%s%s_triples.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
 
9907
                        o->m_pRevSDF->m_p2DF->Write(o->m_pRevSDF->m_sName,multibuf,"_triples.csv");
 
9908
                        mprintf("    Saving PseudoSDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
 
9909
                        o->m_pRevSDF->m_p2DF->WriteCSV(o->m_pRevSDF->m_sName,multibuf,"_matrix.csv");
 
9910
                        mprintf("    Saving PseudoSDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pRevSDF->m_sName,multibuf);
 
9911
                        o->m_pRevSDF->m_p2DF->WriteMathematicaNb(o->m_pRevSDF->m_sName,multibuf,".nb",false);
 
9912
                        mprintf("    Saving PseudoSDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pRevSDF->m_sName,multibuf);
 
9913
                        o->m_pRevSDF->m_p2DF->WriteGnuplotInput(o->m_pRevSDF->m_sName,multibuf,"",false);
 
9914
                        if (o->m_pRevSDF->m_iHistogramRes != 0)
 
9915
                        {
 
9916
                                mprintf("    Calculating Histogram...\n");
 
9917
                                o->m_pRevSDF->m_p2DF->CalcHistogram();
 
9918
                                sprintf(buf,"his_%s",o->m_pRevSDF->m_sName);
 
9919
                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
 
9920
                                o->m_pRevSDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
 
9921
                        }
 
9922
                        if (o->m_pRevSDF->m_bCreateRevSDF)
 
9923
                        {
 
9924
                                mprintf("    Creating volumetric Revolution SDF...\n");
 
9925
                                o->m_pRevSDF->CreateRevSDF();
 
9926
                                sprintf(buf,"revsdf_ref_%s.xyz",o->m_pRevSDF->m_sName);
 
9927
                                mprintf("    Saving Revolution SDF reference structure as \"%s\"...\n",buf);
 
9928
                                a = OpenFileWrite(buf,true);
 
9929
                                mfprintf(a,"2\n\n%s   0.0  0.0  0.0\n%s  0.0  %f  0.0\n",((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount/100.0);
 
9930
                                fclose(a);
 
9931
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
 
9932
                                {
 
9933
                                        try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
 
9934
                                        if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
 
9935
                                        
 
9936
                                        tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
 
9937
                                        if (z2 != 0)
 
9938
                                        {
 
9939
                                                tempSDF->Smooth(z2);
 
9940
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
 
9941
                                        } else sprintf(buf,"%s.plt",multibuf);
 
9942
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
 
9943
                                        tempSDF->WritePLT("revsdf_",o->m_pRevSDF->m_sName,buf,true);
 
9944
 
 
9945
                                        if (z2 != 0)
 
9946
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
 
9947
                                                        else sprintf(buf,"%s.cube",multibuf);
 
9948
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
 
9949
                                        tempSDF->WriteCube("revsdf_",o->m_pRevSDF->m_sName,buf,true);
 
9950
 
 
9951
                                        if (z2 != 0)
 
9952
                                                sprintf(buf,".s%d%s.his",z2,multibuf);
 
9953
                                                        else sprintf(buf,"%s.his",multibuf);
 
9954
                                        mprintf("    Saving Revolution SDF Histogram as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
 
9955
                                        tempSDF->CalcHistogram();
 
9956
                                        tempSDF->WriteHistogram("revsdf_",o->m_pRevSDF->m_sName,buf);
 
9957
                                        if (o->m_pRevSDF->m_iHistogramRes != 0)
 
9958
                                        {
 
9959
                                                mprintf("    Calculating Histogram...\n");
 
9960
                                                tempSDF->CalcHistogram();
 
9961
                                                sprintf(buf2,"his_revsdf_%s",o->m_pRevSDF->m_sName);
 
9962
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf2,buf);
 
9963
                                                tempSDF->WriteHistogram(buf2,buf,".csv");
 
9964
                                        }
 
9965
                                }
 
9966
                        }
 
9967
_skiprevsdf:;
 
9968
                } // END IF REVSDF
 
9969
        }
 
9970
 
 
9971
        if (g_bSDF || g_bAvg || g_bVoidSDF)
 
9972
        {
 
9973
                sprintf(buf,"ref_%s_%s%d_%s%d_%s%d%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,g_iFixAtom[0]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,g_iFixAtom[1]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[2]])->m_sName,g_iFixAtom[2]+1,multibuf);
 
9974
                strtolower(buf);
 
9975
                mprintf("\n*** Reference molecule ***\n");
 
9976
                FreeFileName(buf);
 
9977
                mprintf("Saving reference molecule as \"%s\"...",buf);
 
9978
                a = OpenFileWrite(buf,true);
 
9979
                if (a == NULL)
 
9980
                {
 
9981
                        eprintf("\nError: Could not open %s for writing.\n",buf);
 
9982
                        return 0;
 
9983
                }
 
9984
                if (!g_bSaveVirtAtoms)
 
9985
                        mfprintf(a,"  %d \n\n",(int)(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes-((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize()));
 
9986
                                else mfprintf(a,"  %d \n\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
 
9987
                cc = 0;
 
9988
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
 
9989
                {
 
9990
                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
 
9991
                                continue;
 
9992
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
 
9993
                        {
 
9994
                                if (g_bMiddleAvg)
 
9995
                                {
 
9996
                                        g_pRefMol[cc][0] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
9997
                                        g_pRefMol[cc][1] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
9998
                                        g_pRefMol[cc][2] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
 
9999
                                }
 
10000
                                if (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType)
 
10001
                                        mfprintf(a,"  %s  %9.6f  %9.6f  %9.6f\n",((CVirtualAtom*)g_oaVirtualAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms[z2]])->m_sLabel,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
 
10002
                                                else mfprintf(a,"  %s  %9.6f  %9.6f  %9.6f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z]])->m_sName,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
 
10003
                                cc++;
 
10004
                        }
 
10005
                }
 
10006
                fclose(a);
 
10007
                mprintf("Done.\n");
 
10008
                if (g_iSwapAtoms)
 
10009
                {
 
10010
                        mprintf("\n*** This is the swap matrix of reference molecule %s:\n  (It shows how often the atoms\n  have been swapped with each other)\n\n     ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
 
10011
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
 
10012
                        {
 
10013
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
 
10014
                                {
 
10015
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
 
10016
                                                mprintf(" ");
 
10017
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);  
 
10018
                                        if (z3 < 10)
 
10019
                                                mprintf(" ");
 
10020
                                }
 
10021
                        }
 
10022
                        mprintf("\n");
 
10023
                        cc = 0;
 
10024
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
 
10025
                        {
 
10026
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
 
10027
                                {
 
10028
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
 
10029
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
 
10030
                                                mprintf(" ");
 
10031
                                        if (z3 < 9)
 
10032
                                                mprintf(" ");
 
10033
                                        cc2 = 0;
 
10034
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
 
10035
                                        {
 
10036
                                                for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
 
10037
                                                {
 
10038
                                                        if ((z2 == z4) && (z3 == z5))
 
10039
                                                        {
 
10040
                                                                mprintf(" *** ");
 
10041
                                                                goto _swm;
 
10042
                                                        }
 
10043
                                                        if (pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] != 0)
 
10044
                                                                mprintf("%3.0f%c ",(double)pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] * 100.0f / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize(),'%');
 
10045
                                                                        else mprintf("  -  ");
 
10046
_swm:
 
10047
                                                        cc2++;
 
10048
                                                }
 
10049
                                        }       
 
10050
                                        mprintf("\n");
 
10051
                                        cc++;
 
10052
                                }
 
10053
                        }
 
10054
                }
 
10055
        }
 
10056
_ende:
 
10057
 
 
10058
        if (g_bMultiInterval)
 
10059
        {
 
10060
                mprintf("\n");
 
10061
                mprintf(YELLOW,"***********************************************\n");
 
10062
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) finished. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
 
10063
                mprintf(YELLOW,"***********************************************\n\n");
 
10064
                multicounter++;
 
10065
                if (multicounter < g_laMultiIntervalStart.GetSize())
 
10066
                        goto _multiintervalstart;
 
10067
        }
 
10068
 
 
10069
        g_iEndTime = time(NULL);
 
10070
        if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
 
10071
        {
 
10072
                mprintf(WHITE,"\nAnalysis was running for %dh %dm %ds.\n",(g_iEndTime-g_iStartTime)/3600,((g_iEndTime-g_iStartTime)/60)%60,(g_iEndTime-g_iStartTime)%60);
 
10073
                mprintf(WHITE,"  (%.3f steps per second)\n\n",g_iSteps/g_iStride/((double)g_iEndTime-g_iStartTime));
 
10074
        } else mprintf("\n");
 
10075
 
 
10076
        WriteCredits();
 
10077
 
 
10078
        if (g_bSMode)
 
10079
        {
 
10080
                PrintSMode();
 
10081
        } else
 
10082
        {
 
10083
                mprintf(WHITE,"*** The End ***\n\n");
 
10084
        }
 
10085
        UninstallSignalHandler();
 
10086
        if (g_fInput != NULL)
 
10087
                fclose(g_fInput);
 
10088
        if (g_pDatabase != NULL)
 
10089
        {
 
10090
                delete g_pDatabase;
 
10091
                g_pDatabase = NULL;
 
10092
        }
 
10093
        if (g_pTempTimestep != NULL)
 
10094
        {
 
10095
                delete g_pTempTimestep;
 
10096
                g_pTempTimestep = NULL;
 
10097
        }
 
10098
        if (apfa != NULL)
 
10099
        {
 
10100
                delete[] apfa;
 
10101
                apfa = NULL;
 
10102
        }
 
10103
        if (tda != NULL)
 
10104
        {
 
10105
                delete[] tda;
 
10106
                tda = NULL;
 
10107
        }
 
10108
        RemoveAllAnalyses();
 
10109
        RemoveAllElements();
 
10110
        RemoveAllAtoms();
 
10111
        RemoveAllMolecules();
 
10112
        RemoveAllObservations();
 
10113
        BTOUT;
 
10114
        return 0;
 
10115
}
 
10116
 
 
10117
//////////////// Cross-Correlation Test 1                                                                                                                                                                                                                                                                              
 
10118
                                                                                                                                                                                                                                                                                                                       
 
10119
/*      CAutoCorrelation acx, acf;                                                                                                                                                                                                                                                                                      
 
10120
        CCrossCorrelation ccx, ccf;                                                                                                                                                                                                                                                                                     
 
10121
        CxFloatArray i1, i2, opx, opf, opcx, opcf;                                                                                                                                                                                                                                                                      
 
10122
                                                                                                                                                                                                                                                                                                                       
 
10123
        i1.SetSize(32);                                                                                                                                                                                                                                                                                                 
 
10124
        i2.SetSize(32);                                                                                                                                                                                                                                                                                                 
 
10125
                                                                                                                                                                                                                                                                                                                       
 
10126
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
 
10127
        {                                                                                                                                                                                                                                                                                                               
 
10128
                i1[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
 
10129
                i2[z] = i1[z];                                                                                                                                                                                                                                                                                          
 
10130
        }                                                                                                                                                                                                                                                                                                               
 
10131
                                                                                                                                                                                                                                                                                                                       
 
10132
        acx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
 
10133
        acx.AutoCorrelate(&i1,&opx);                                                                                                                                                                                                                                                                                    
 
10134
                                                                                                                                                                                                                                                                                                                       
 
10135
        acf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
 
10136
        acf.AutoCorrelate(&i1,&opf);                                                                                                                                                                                                                                                                                    
 
10137
                                                                                                                                                                                                                                                                                                                       
 
10138
        ccx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
 
10139
        ccx.CrossCorrelate(&i1,&i2,&opcx);                                                                                                                                                                                                                                                                              
 
10140
                                                                                                                                                                                                                                                                                                                       
 
10141
        ccf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
 
10142
        ccf.CrossCorrelate(&i1,&i2,&opcf);                                                                                                                                                                                                                                                                              
 
10143
                                                                                                                                                                                                                                                                                                                       
 
10144
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
 
10145
                mprintf("%8.4f  - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],opx[z],opf[z],opcx[z],opcf[z]);                                                                                                                                                                                                                
 
10146
                                                                                                                                                                                                                                                                                                                       
 
10147
        gets(buf);                                                                                                                                                                                                                                                                                                      
 
10148
                                                                                                                                                                                                                                                                                                                       
 
10149
        return 0;*/                                                                                                                                                                                                                                                                                                     
 
10150
                                                                                                                                                                                                                                                                                                                       
 
10151
//////////////// Cross-Correlation Test 2                                                                                                                                                                                                                                                                              
 
10152
                                                                                                                                                                                                                                                                                                                       
 
10153
/*      CCrossCorrelation ccx, ccf;                                                                                                                                                                                                                                                                                     
 
10154
        CxFloatArray i1, i2, opcx, opcf;                                                                                                                                                                                                                                                                                
 
10155
                                                                                                                                                                                                                                                                                                                       
 
10156
        i1.SetSize(32);                                                                                                                                                                                                                                                                                                 
 
10157
        i2.SetSize(32);                                                                                                                                                                                                                                                                                                 
 
10158
                                                                                                                                                                                                                                                                                                                       
 
10159
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
 
10160
        {                                                                                                                                                                                                                                                                                                               
 
10161
                i1[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
 
10162
                i2[z] = ((rand()%200)/100.0)-1.0;                                                                                                                                                                                                                                                                       
 
10163
        }                                                                                                                                                                                                                                                                                                               
 
10164
                                                                                                                                                                                                                                                                                                                       
 
10165
        ccx.Init(32,32,false);                                                                                                                                                                                                                                                                                          
 
10166
        ccx.CrossCorrelate(&i1,&i2,&opcx);                                                                                                                                                                                                                                                                              
 
10167
                                                                                                                                                                                                                                                                                                                       
 
10168
        ccf.Init(32,32,true);                                                                                                                                                                                                                                                                                           
 
10169
        ccf.CrossCorrelate(&i1,&i2,&opcf);                                                                                                                                                                                                                                                                              
 
10170
                                                                                                                                                                                                                                                                                                                       
 
10171
        for (z=0;z<32;z++)                                                                                                                                                                                                                                                                                              
 
10172
                mprintf("%8.4f  - %8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],i2[z],opcx[z],opcf[z],ccf.m_pFFTback->m_pOutput[2*z]/64.0/(32-z),ccf.m_pFFTback->m_pOutput[2*z+1]/64.0/(32-z));                                                                                                                        
 
10173
                                                                                                                                                                                                                                                                                                                       
 
10174
        gets(buf);                                                                                                                                                                                                                                                                                                      
 
10175
                                                                                                                                                                                                                                                                                                                       
 
10176
        return 0;*/                                                                                                                                                                                                                                                                                                     
 
10177
                                                                                                                                                                                                                                                                                                                       
 
10178
 
 
10179
/*      a = fopen("E:\\tmptraj.xyz","wt");
 
10180
 
 
10181
        for (z=0;z<200000;z++)
 
10182
        {
 
10183
                mfprintf(a,"4\n\n");
 
10184
                mfprintf(a,"Ne  %f  %f  %f\n",sin(pow(z/50.0,1.1))*3.0,cos(pow(z/50.0,1.1))*3.0,0);
 
10185
                mfprintf(a,"Ne  %f  %f  %f\n",-sin(pow(z/50.0,1.1))*3.0,-cos(pow(z/50.0,1.1))*3.0,0);
 
10186
 
 
10187
                mfprintf(a,"Ne  %f  %f  %f\n",0.0,0.0,cos(z/33.0)*2.0+4.0);
 
10188
                mfprintf(a,"Ne  %f  %f  %f\n",0.0,0.0,-cos(z/33.0)*2.0-4.0);
 
10189
        }
 
10190
 
 
10191
        fclose(a);
 
10192
        return 0;*/
 
10193
 
 
10194
//      mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
 
10195
 
 
10196
/*      CClusterAnalysis *can;
 
10197
        can = new CClusterAnalysis();
 
10198
 
 
10199
        for (z=0;z<15;z++)
 
10200
        {
 
10201
                can->AddCluster();
 
10202
                can->AddParticle(rand()%20,rand()%20,rand()%20);
 
10203
 
 
10204
        }
 
10205
 
 
10206
        can->BuildTree();
 
10207
 
 
10208
        can->DumpAgr("C:\\Software\\test.csv");
 
10209
 
 
10210
        gets(buf);
 
10211
 
 
10212
        return 0;*/
 
10213
        
 
10214
/*      int maj, min;
 
10215
        CreateTicks(0,540,maj,min);
 
10216
        return 0;*/
 
10217
 
 
10218
/*      CExtendedCondition *ec;
 
10219
 
 
10220
        ec = new CExtendedCondition();
 
10221
 
 
10222
        ec->m_fD[0] = 1;
 
10223
        ec->m_fA[0] = 1;
 
10224
 
 
10225
        ec->m_fD[1] = 2;
 
10226
        ec->m_fA[1] = 1;
 
10227
        
 
10228
        ec->m_fD[2] = 2;
 
10229
        ec->m_fA[2] = 0;
 
10230
 
 
10231
        if (!ec->Evaluate())
 
10232
        {
 
10233
                printf("Fail.\n");
 
10234
//              return 0;
 
10235
        }
 
10236
 
 
10237
        printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
 
10238
        return 0;*/
 
10239
 
 
10240
/*      CLMWrapper w;
 
10241
        double *px, *py, *pp, r, integral;
 
10242
 
 
10243
        px = new double[100];
 
10244
        py = new double[100];
 
10245
        pp = new double[6];
 
10246
 
 
10247
        pp[0] = 1;
 
10248
        pp[1] = -0.001;
 
10249
        pp[2] = 1;
 
10250
        pp[3] = -0.01;
 
10251
        pp[4] = 1;
 
10252
        pp[5] = -0.0001;
 
10253
 
 
10254
        for (z=0;z<100;z++)
 
10255
        {
 
10256
                px[z] = z;
 
10257
                py[z] = 0.2 * exp(-0.004 * z) + 0.3 * exp(-0.05 * z) + 0.5 * exp(-0.15 * z) + 0.1 * exp(-0.1 * z);
 
10258
        }
 
10259
 
 
10260
        w.Fit_TriExp(100,px,py,pp,r,integral);
 
10261
 
 
10262
        return 0;*/
 
10263
 
 
10264
/*      C3DF *df3;
 
10265
 
 
10266
        df3 = new C3DF();
 
10267
        df3->m_fMinVal[0] = -100;
 
10268
        df3->m_fMaxVal[0] = 100;
 
10269
        df3->m_fMinVal[1] = -100;
 
10270
        df3->m_fMaxVal[1] = 100;
 
10271
        df3->m_fMinVal[2] = -100;
 
10272
        df3->m_fMaxVal[2] = 100;
 
10273
        df3->m_iRes[0] = 101;
 
10274
        df3->m_iRes[1] = 101;
 
10275
        df3->m_iRes[2] = 101;
 
10276
        df3->Create();
 
10277
 
 
10278
        for (z=0;z<101;z++)
 
10279
                for (z2=0;z2<101;z2++)
 
10280
                        for (z3=0;z3<101;z3++)
 
10281
                                if (sqrt(pow(z-50,2)+pow(z2-50,2)+pow(z3-50,2)) < 30)
 
10282
                                        df3->AddToBin(CxVector3(z-50,z2-50,z3-50));
 
10283
 
 
10284
        df3->WritePLT("","C:\\test.plt","",true);
 
10285
        df3->WriteCube("","C:\\test.cube","",true);
 
10286
        return 0;*/
 
10287
 
 
10288
/*      CDF *mdf;
 
10289
 
 
10290
        mdf = new CDF();
 
10291
        mdf->m_fMinVal = 0;
 
10292
        mdf->m_fMaxVal = 1;
 
10293
        mdf->m_iResolution = 20;
 
10294
        mdf->Create(true);
 
10295
 
 
10296
        srand(time(NULL));
 
10297
        for (z=0;z<1000000;z++)
 
10298
                mdf->AddToBin(z/999999.0);
 
10299
        mdf->Write("","D:\\Software\\out.csv","");
 
10300
        return 0;*/
 
10301
 
 
10302
/*      CAutoCorrelation *ac;
 
10303
 
 
10304
        ac = new CAutoCorrelation();
 
10305
 
 
10306
#define N 23
 
10307
 
 
10308
        ac->Init(N,N,false);
 
10309
 
 
10310
        ptfa = new CxFloatArray();
 
10311
        ptfa->SetSize(N);
 
10312
        ptfa2 = new CxFloatArray();
 
10313
        ptfa2->SetSize(N);
 
10314
 
 
10315
        for (z=0;z<N;z++)
 
10316
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
 
10317
 
 
10318
        ac->AutoCorrelate(ptfa,ptfa2);
 
10319
 
 
10320
        mprintf("Classic:\n");
 
10321
        for (z=0;z<N;z++)
 
10322
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
 
10323
 
 
10324
        ac->Init(N,N,true);
 
10325
 
 
10326
        for (z=0;z<N;z++)
 
10327
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
 
10328
 
 
10329
        ac->AutoCorrelate(ptfa,ptfa2);
 
10330
 
 
10331
        mprintf("\nFFT:\n");
 
10332
        for (z=0;z<N;z++)
 
10333
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
 
10334
 
 
10335
        gets(buf);
 
10336
 
 
10337
        return 0;*/
 
10338
 
 
10339
 
 
10340
/*      fft = new CFFT();
 
10341
 
 
10342
        fft->PrepareFFT_R2C(300);
 
10343
 
 
10344
        for (z=0;z<300;z++)
 
10345
        {
 
10346
                fft->m_pInput[z*2] = sin(z/3.1) * exp(-10.0/z);
 
10347
                fft->m_pInput[z*2+1] = sin(z/2.7+1.0) * exp(-2.0/z);
 
10348
        }
 
10349
 
 
10350
        fft->DoFFT();
 
10351
 
 
10352
        for (z=0;z<300;z++)
 
10353
                mprintf("%03d: % 10.6f  % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
 
10354
 
 
10355
        gets(buf);
 
10356
        return 0;*/
 
10357
 
 
10358
/*      CxVector3 v1, v2, v3, v;
 
10359
 
 
10360
        v1 = CxVector3(0,0,0);
 
10361
        v2 = CxVector3(1,0,0);
 
10362
        v3 = CxVector3(1,1,0);
 
10363
 
 
10364
        v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
 
10365
 
 
10366
        v.Dump();
 
10367
 
 
10368
        gets(buf);
 
10369
        return 0;*/
 
10370
 
 
10371
/*      fft = new CFFT();
 
10372
        fft->PrepareFFT_C2C(20);
 
10373
        for (z=0;z<20;z++)
 
10374
        {
 
10375
                if (z < 20)
 
10376
                {
 
10377
                        fft->m_pInput[2*z] = sin(2*z*17.89) * exp(-0.1*z*2);
 
10378
                        fft->m_pInput[2*z+1] = sin((2*z+1)*17.89) * exp(-0.1*(2*z+1));
 
10379
                } else
 
10380
                {
 
10381
                        fft->m_pInput[2*z] = 0;
 
10382
                        fft->m_pInput[2*z+1] = 0;
 
10383
                }
 
10384
                printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
 
10385
        }
 
10386
        printf("Transforming...\n");
 
10387
        fft->DoFFT();
 
10388
        for (z=0;z<20;z++)
 
10389
                printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
 
10390
        gets(buf);
 
10391
 
 
10392
        return 0;*/
 
10393
 
 
10394
 
 
10395
/*      vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
 
10396
        vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
 
10397
 
 
10398
        tf = DotP(vec0,vec1);
 
10399
 
 
10400
        tf2 = Angle_Deg(vec0,vec1);
 
10401
 
 
10402
        printf("DotP: %f, Length 1: %f, Length 2: %f, DotP/Length1/Length2: %.10f, Angle: %.10f\n",tf,vec0.GetLength(),vec1.GetLength(),tf/vec0.GetLength()/vec1.GetLength(),tf2);
 
10403
 
 
10404
        printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
 
10405
        return 0;*/
 
10406
 
 
10407
 
 
10408
/*      CxVector3 a1, a2, a3;
 
10409
 
 
10410
        a1 = CxVector3(0,1.0,0);
 
10411
        a2 = CxVector3(0,-1.0,0.0001);
 
10412
        a3 = CxVector3(1.0,0,0);
 
10413
 
 
10414
        mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
 
10415
        getchar();
 
10416
        return 0;*/
 
10417
 
 
10418
/*      CGrace *g = new CGrace();
 
10419
 
 
10420
        g->m_fMinValX = 1.37;
 
10421
        g->m_fMaxValX = 2.53;
 
10422
        g->m_fMinValY = 225;
 
10423
        g->m_fMaxValY = 8337;
 
10424
        g->MakeTicks();
 
10425
 
 
10426
        printf("X: %f - %f    Ticks %f\nY: %f - %f    Ticks %f\n",g->m_fMinRangeX,g->m_fMaxRangeX,g->m_fTickMajorX,g->m_fMinRangeY,g->m_fMaxRangeY,g->m_fTickMajorY);
 
10427
*/
 
10428
 
 
10429
/*      CDatabaseTable *dt = new CDatabaseTable();
 
10430
        
 
10431
        dt->AddInt(0,0,12345);
 
10432
        dt->AddInt(1,1,123456);
 
10433
        dt->AddInt(2,2,123);
 
10434
        dt->AddInt(3,3,1);
 
10435
        dt->AddInt(4,4,123456789);
 
10436
        
 
10437
        dt->AddDouble(1,0,13.45);
 
10438
        dt->AddDouble(2,1,3.199);
 
10439
        dt->AddDouble(3,2,1367.4597);
 
10440
        dt->AddDouble(4,3,13.45);
 
10441
        dt->AddDouble(0,4,1.45);
 
10442
        
 
10443
        dt->AddString(2,0,"Hallo!");
 
10444
        dt->AddString(3,1,"Hiu");
 
10445
        dt->AddString(4,2,"Hallo Welt!");
 
10446
        dt->AddString(0,3,"Dies ist ein Test");
 
10447
        dt->AddString(1,4,"^^");
 
10448
        
 
10449
        dt->AddBool(3,0,true);
 
10450
        dt->AddBool(4,1,false);
 
10451
        dt->AddBool(0,2,true);
 
10452
        dt->AddBool(1,3,false);
 
10453
        dt->AddBool(2,4,true);
 
10454
        
 
10455
        dt->DumpTable();
 
10456
        a = fopen("table.dat","wt");
 
10457
        dt->DumpOutputFile(a);
 
10458
        fclose(a);
 
10459
        
 
10460
        return 0;*/
 
10461
 
 
10462
/*      CFFAtomNode *no;
 
10463
 
 
10464
        no = new CFFAtomNode();
 
10465
 
 
10466
        no->REC_Parse("O2=O(C,Si(O,S)(C))",0);
 
10467
 
 
10468
        no->REC_DumpTree(0,0xFFFFFFFF,false);
 
10469
 
 
10470
 
 
10471
        gets(buf);
 
10472
 
 
10473
        return 0;*/
 
10474
 
 
10475
/*      C2DF *t2df;
 
10476
 
 
10477
        t2df = new C2DF();
 
10478
 
 
10479
        t2df->m_iRes[0] = 100;
 
10480
        t2df->m_iRes[1] = 100; 
 
10481
        t2df->m_fMinVal[0] = 0;
 
10482
        t2df->m_fMaxVal[0] = 500.0;
 
10483
        t2df->m_fMinVal[1] = 0;
 
10484
        t2df->m_fMaxVal[1] = 500.0;
 
10485
        t2df->Create();
 
10486
 
 
10487
        FILE *aa;
 
10488
        char *pp;
 
10489
 
 
10490
        aa = fopen(argv[1],"rt");
 
10491
 
 
10492
        z = 0;
 
10493
        while (!feof(aa))
 
10494
        {
 
10495
                z++;
 
10496
                if ((z%5000)==0)
 
10497
                        mprintf("\n");
 
10498
                if ((z%100)==0)
 
10499
                        mprintf(".");
 
10500
                fgets(buf,256,aa);
 
10501
                if (feof(aa))
 
10502
                        break;
 
10503
                buf[strlen(buf)-1] = 0;
 
10504
                pp = strchr(buf,' ');
 
10505
                *pp = 0;
 
10506
                tf = atof(buf);
 
10507
                pp++;
 
10508
                tf2 = atof(pp);
 
10509
//              mprintf("%f | %f\n",tf,tf2);
 
10510
                t2df->AddToBin(tf,tf2);
 
10511
        }
 
10512
 
 
10513
        fclose(aa);
 
10514
 
 
10515
        mprintf("\n%.0f Entries, %.0f skipped.\n\n",t2df->m_fBinEntries,t2df->m_fSkipEntries);
 
10516
        
 
10517
        t2df->CorrectRadialDist(0);
 
10518
        t2df->CorrectRadialDist(1);
 
10519
        t2df->NormalizeBinIntegral(1000000.0);
 
10520
 
 
10521
        t2df->WriteMathematicaNb("cdf.nb","","",false);
 
10522
 
 
10523
        return 0;*/
 
10524
 
 
10525
 
 
10526
/***********************************************************************************************************/
 
10527
 
 
10528
/*
 
10529
 
 
10530
  int xv0[] = {            
 
10531
                0,    166,    333,    500,    667,    834,   1001,   1168,   1335,   1502,
 
10532
        1669,   1836,   2003,   2170,   2337,   2504,   2671,   2838,   3004,   3171,
 
10533
        3338,   3505,   3672,   3839,   4006,   4173,   4340,   4507,   4674,   4841,
 
10534
        5008,   5175,   5342,   5509,   5676,   5843,   6009,   6176,   6343,   6510,
 
10535
        6677,   6844,   7011,   7178,   7345,   7512,   7679,   7846,   8013,   8180,
 
10536
        8347,   8514,   8681,   8847,   9014,   9181,   9348,   9515,   9682,   9849,
 
10537
       10016,  10183,  10350,  10517,  10684,  10851,  11018,  11185,  11352,  11519,
 
10538
       11686,  11852,  12019,  12186,  12353,  12520,  12687,  12854,  13021,  13188,
 
10539
       13355,  13522,  13689,  13856,  14023,  14190,  14357,  14524,  14691,  14857,
 
10540
       15024,  15191,  15358,  15525,  15692,  15859,  16026,  16193,  16360,  16527,
 
10541
       16694,  16861,  17028,  17195,  17362,  17529,  17695,  17862,  18029,  18196,
 
10542
       18363,  18530,  18697,  18864,  19031,  19198,  19365,  19532,  19699,  19866,
 
10543
       20033,  20200,  20367,  20534,  20700,  20867,  21034,  21201,  21368,  21535,
 
10544
       21702,  21869,  22036,  22203,  22370,  22537,  22704,  22871,  23038,  23205,
 
10545
       23372,  23538,  23705,  23872,  24039,  24206,  24373,  24540,  24707,  24874,
 
10546
       25041,  25208,  25375,  25542,  25709,  25876,  26043,  26210,  26377,  26543,
 
10547
       26710,  26877,  27044,  27211,  27378,  27545,  27712,  27879,  28046,  28213,
 
10548
       28380,  28547,  28714,  28881,  29048,  29215,  29382,  29548,  29715,  29882,
 
10549
       30049,  30216,  30383,  30550,  30717,  30884,  31051,  31218,  31385,  31552,
 
10550
       31719,  31886,  32053,  32220,  32386,  32553,  32720,  32887,  33054,  33221,
 
10551
       33388,  33555,  33722,  33889,  34056,  34223,  34390,  34557,  34724,  34891,
 
10552
       35058,  35225,  35391,  35558,  35725,  35892,  36059,  36226,  36393,  36560,
 
10553
       36727,  36894,  37061,  37228,  37395,  37562,  37729,  37896,  38063,  38230,
 
10554
       38396,  38563,  38730,  38897,  39064,  39231,  39398,  39565,  39732,  39899,
 
10555
       40066,  40233,  40400,  40567,  40734,  40901,  41068,  41234,  41401,  41568,
 
10556
       41735,  41902,  42069,  42236,  42403,  42570,  42737,  42904,  43071,  43238,
 
10557
       43405,  43572,  43739,  43906,  44073,  44239,  44406,  44573,  44740,  44907,
 
10558
       45074,  45241,  45408,  45575,  45742,  45909,  46076,  46243,  46410,  46577,
 
10559
       46744,  46911,  47077,  47244,  47411,  47578,  47745,  47912,  48079,  48246,
 
10560
       48413,  48580,  48747,  48914,  49081,  49248,  49415,  49582,  49749,  49916,
 
10561
       50082,  50249,  50416,  50583,  50750,  50917,  51084,  51251,  51418,  51585,
 
10562
       51752,  51919,  52086,  52253,  52420,  52587,  52754,  52921,  53087,  53254,
 
10563
       53421,  53588,  53755,  53922,  54089,  54256,  54423,  54590,  54757,  54924,
 
10564
       55091,  55258,  55425,  55592,  55759,  55925,  56092,  56259,  56426,  56593,
 
10565
       56760,  56927,  57094,  57261,  57428,  57595,  57762,  57929,  58096,  58263,
 
10566
       58430,  58597,  58764,  58930,  59097,  59264,  59431,  59598,  59765,  59932,
 
10567
       60099,  60266,  60433,  60600,  60767,  60934,  61101,  61268,  61435,  61602,
 
10568
       61768,  61935,  62102,  62269,  62436,  62603,  62770,  62937,  63104,  63271,
 
10569
       63438,  63605,  63772,  63939,  64106,  64273,  64440,  64607,  64773,  64940,
 
10570
       65107,  65274,  65441,  65608,  65775,  65942,  66109,  66276,  66443,  66610,
 
10571
       66777,  66944,  67111,  67278,  67445,  67612,  67778,  67945,  68112,  68279,
 
10572
       68446,  68613,  68780,  68947,  69114,  69281,  69448,  69615,  69782,  69949,
 
10573
       70116,  70283,  70450,  70616,  70783,  70950,  71117,  71284,  71451,  71618,
 
10574
       71785,  71952,  72119,  72286,  72453,  72620,  72787,  72954,  73121,  73288,
 
10575
       73455,  73621,  73788,  73955,  74122,  74289,  74456,  74623,  74790,  74957,
 
10576
       75124,  75291,  75458,  75625,  75792,  75959,  76126,  76293,  76460,  76626,
 
10577
       76793,  76960,  77127,  77294,  77461,  77628,  77795,  77962,  78129,  78296,
 
10578
       78463,  78630,  78797,  78964,  79131,  79298,  79464,  79631,  79798,  79965,
 
10579
       80132,  80299,  80466,  80633,  80800,  80967,  81134,  81301,  81468,  81635,
 
10580
       81802,  81969,  82136,  82303,  82469,  82636,  82803,  82970,  83137,  83304,
 
10581
       83471,  83638,  83805,  83972,  84139,  84306,  84473,  84640,  84807,  84974,
 
10582
       85141,  85307,  85474,  85641,  85808,  85975,  86142,  86309,  86476,  86643,
 
10583
       86810,  86977,  87144,  87311,  87478,  87645,  87812,  87979,  88146,  88312,
 
10584
       88479,  88646,  88813,  88980,  89147,  89314,  89481,  89648,  89815,  89982,
 
10585
       90149,  90316,  90483,  90650,  90817,  90984,  91151,  91317,  91484,  91651,
 
10586
       91818,  91985,  92152,  92319,  92486,  92653,  92820,  92987,  93154,  93321,
 
10587
       93488,  93655,  93822,  93989,  94155,  94322,  94489,  94656,  94823,  94990,
 
10588
       95157,  95324,  95491,  95658,  95825,  95992,  96159,  96326,  96493,  96660,
 
10589
       96827,  96994,  97160,  97327,  97494,  97661,  97828,  97995,  98162,  98329,
 
10590
       98496,  98663,  98830,  98997,  99164,  99331,  99498,  99665,  99832,  99999 };
 
10591
 
 
10592
double yv[] = {
 
10593
        1,
 
10594
0.535508,
 
10595
0.393073,
 
10596
0.296141,
 
10597
0.226017,
 
10598
0.174104,
 
10599
0.13505,
 
10600
0.105128,
 
10601
0.0820967,
 
10602
0.0645619,
 
10603
0.0510392,
 
10604
0.0406872,
 
10605
0.0322757,
 
10606
0.0257705,
 
10607
0.0206065,
 
10608
0.0167599,
 
10609
0.0135311,
 
10610
0.0110249,
 
10611
0.00922048,
 
10612
0.00751678,
 
10613
0.0062541,
 
10614
0.00473929,
 
10615
0.00376091,
 
10616
0.00322141,
 
10617
0.00266083,
 
10618
0.00230204,
 
10619
0.00165769,
 
10620
0.00142532,
 
10621
0.00146844,
 
10622
0.00135552,
 
10623
0.000981507,
 
10624
0.000500664,
 
10625
7.63E-05,
 
10626
-0.00021215,
 
10627
-0.000345428,
 
10628
-0.000356055,
 
10629
-0.000586005,
 
10630
-0.000365747,
 
10631
-8.19E-06,
 
10632
0.000117745,
 
10633
0.000301018,
 
10634
0.000153056,
 
10635
0.000249429,
 
10636
0.00041901,
 
10637
0.000272173,
 
10638
0.000432356,
 
10639
0.00034246,
 
10640
0.000253033,
 
10641
-8.95E-07,
 
10642
-0.000191937,
 
10643
-0.000411342,
 
10644
-0.000388538,
 
10645
-0.00014581,
 
10646
-8.29E-05,
 
10647
5.60E-05,
 
10648
-5.46E-06,
 
10649
-0.00012311,
 
10650
-0.000203272,
 
10651
-0.000304272,
 
10652
-0.000385733,
 
10653
-0.00033551,
 
10654
-0.000174071,
 
10655
3.46E-05,
 
10656
-3.06E-05,
 
10657
-0.000196145,
 
10658
-0.00075811,
 
10659
-0.000873794,
 
10660
-0.000839649,
 
10661
-0.000891512,
 
10662
-0.00109231,
 
10663
-0.0012406,
 
10664
-0.00125277,
 
10665
-0.00116772,
 
10666
-0.000800529,
 
10667
-0.000503297,
 
10668
-0.000388711,
 
10669
-0.000192247,
 
10670
-0.000380379,
 
10671
-0.000626382,
 
10672
-0.000562528,
 
10673
-0.000338185,
 
10674
-0.000261972,
 
10675
-0.000172413,
 
10676
-0.00014704,
 
10677
-0.000147816,
 
10678
-0.000335954,
 
10679
-0.000423681,
 
10680
-0.00077368,
 
10681
-0.000829694,
 
10682
-0.000599776,
 
10683
-0.000274863,
 
10684
-0.000198762,
 
10685
2.44E-05,
 
10686
0.000157793,
 
10687
3.36E-05,
 
10688
5.52E-05,
 
10689
0.000132802,
 
10690
0.000160182,
 
10691
0.000267747,
 
10692
0.000285335,
 
10693
0.000302909,
 
10694
0.000112509,
 
10695
0.00033765,
 
10696
0.000410808,
 
10697
0.000399938,
 
10698
0.000217723,
 
10699
0.000252189,
 
10700
0.000413789,
 
10701
0.000334351,
 
10702
0.000221592,
 
10703
-0.000128382,
 
10704
-0.000407701,
 
10705
-0.000434761,
 
10706
-0.000446333,
 
10707
-0.000268609,
 
10708
-0.000328874,
 
10709
-0.000253456,
 
10710
-0.000364477,
 
10711
-0.000379713,
 
10712
-0.000270978,
 
10713
3.09E-05,
 
10714
3.43E-05,
 
10715
0.000132993,
 
10716
0.000223472,
 
10717
0.000196531,
 
10718
0.000394839,
 
10719
0.000353766,
 
10720
0.000120042,
 
10721
0.000186034,
 
10722
4.34E-05,
 
10723
-0.000169091,
 
10724
-0.000463253,
 
10725
-0.000526637,
 
10726
-0.000382341,
 
10727
-0.000317881,
 
10728
-0.000161383,
 
10729
-2.10E-05,
 
10730
-5.39E-05,
 
10731
-4.20E-05,
 
10732
-0.000428827,
 
10733
-0.000372915,
 
10734
-0.000230522,
 
10735
3.13E-05,
 
10736
-5.22E-05,
 
10737
1.12E-06,
 
10738
0.00020615,
 
10739
-3.95E-05,
 
10740
-0.000188001,
 
10741
-0.00036392,
 
10742
-0.000579835,
 
10743
-0.000763892,
 
10744
-0.000954471,
 
10745
-0.000672926,
 
10746
-0.000424378,
 
10747
-0.000254547,
 
10748
-0.000183938,
 
10749
-2.71E-05,
 
10750
0.000387271,
 
10751
0.000741082,
 
10752
0.00118213,
 
10753
0.00144803,
 
10754
0.00149683,
 
10755
0.00137681,
 
10756
0.00128621,
 
10757
0.00110935,
 
10758
0.000937524,
 
10759
0.000815979,
 
10760
0.000710253,
 
10761
0.000625412,
 
10762
0.00018105,
 
10763
-0.000126372,
 
10764
-0.000286713,
 
10765
-0.000268511,
 
10766
-9.48E-05,
 
10767
2.80E-05,
 
10768
0.000193522,
 
10769
0.000218011,
 
10770
0.000241254,
 
10771
0.000212373,
 
10772
-0.000144938,
 
10773
-0.000317461,
 
10774
-0.000310367,
 
10775
5.52E-05,
 
10776
7.28E-05,
 
10777
6.31E-06,
 
10778
-0.000100696,
 
10779
-0.000231523,
 
10780
-0.000232838,
 
10781
-0.000357755,
 
10782
-0.000312569,
 
10783
-0.000515436,
 
10784
-0.000606856,
 
10785
-0.000662088,
 
10786
-0.000494031,
 
10787
-0.000264875,
 
10788
-0.000439725,
 
10789
-0.00023842,
 
10790
-0.000240582,
 
10791
-0.000521013,
 
10792
-0.000548953,
 
10793
-0.000471158,
 
10794
-0.000383092,
 
10795
-0.000433934,
 
10796
-0.000297616,
 
10797
-0.000263819,
 
10798
2.98E-05,
 
10799
0.000241952,
 
10800
0.000294519,
 
10801
0.000128055,
 
10802
-0.000164661,
 
10803
-0.000125856,
 
10804
5.48E-05,
 
10805
0.00017835,
 
10806
0.000567644,
 
10807
0.000653388,
 
10808
0.00072292,
 
10809
0.00086677,
 
10810
0.000497185,
 
10811
0.000419213,
 
10812
0.000338733,
 
10813
0.000446219,
 
10814
0.000775549,
 
10815
0.00108515,
 
10816
0.00112122,
 
10817
0.00103212,
 
10818
0.000753898,
 
10819
0.000780644,
 
10820
0.000633858,
 
10821
0.000593352,
 
10822
0.000742397,
 
10823
0.000461387,
 
10824
0.000510694,
 
10825
0.000425991,
 
10826
0.000106824,
 
10827
1.30E-05,
 
10828
-0.000101644,
 
10829
-0.000247787,
 
10830
-5.23E-05,
 
10831
-1.88E-06,
 
10832
0.000314304,
 
10833
3.31E-05,
 
10834
-0.000493994,
 
10835
-0.000676519,
 
10836
-0.000815772,
 
10837
-0.000560616,
 
10838
-0.000419621,
 
10839
-0.000246948,
 
10840
-7.98E-06,
 
10841
5.47E-05,
 
10842
3.29E-06,
 
10843
9.70E-05,
 
10844
-6.67E-05,
 
10845
-0.000400225,
 
10846
-0.000545787,
 
10847
-0.000536147,
 
10848
-0.000382494,
 
10849
-0.000212611,
 
10850
0.00026384,
 
10851
0.000870903,
 
10852
0.00101919,
 
10853
0.000827203,
 
10854
0.000977354,
 
10855
0.000797584,
 
10856
0.000839661,
 
10857
0.000891465,
 
10858
0.000894189,
 
10859
0.000790827,
 
10860
0.000859716,
 
10861
0.00110719,
 
10862
0.00102985,
 
10863
0.00116294,
 
10864
0.00111391,
 
10865
0.00104187,
 
10866
0.000972879,
 
10867
0.000838099,
 
10868
0.000928914,
 
10869
0.000839244,
 
10870
0.000550288,
 
10871
0.000317816,
 
10872
0.000128915,
 
10873
-2.48E-05,
 
10874
-0.00015162,
 
10875
-0.000297103,
 
10876
-0.000498082,
 
10877
-0.000904425,
 
10878
-0.000721854,
 
10879
-0.000218374,
 
10880
9.71E-05,
 
10881
0.000350858,
 
10882
0.000214938,
 
10883
0.000131151,
 
10884
0.000248389,
 
10885
0.00052038,
 
10886
0.000395342,
 
10887
0.000123723,
 
10888
-0.000264557,
 
10889
-0.000841548,
 
10890
-0.00122576,
 
10891
-0.00109667,
 
10892
-0.0012236,
 
10893
-0.00124427,
 
10894
-0.00154254,
 
10895
-0.00141593,
 
10896
-0.00130058,
 
10897
-0.00124156,
 
10898
-0.000803948,
 
10899
-0.000595218,
 
10900
-6.42E-05,
 
10901
-4.95E-05,
 
10902
-1.82E-05,
 
10903
-4.49E-05,
 
10904
-4.76E-05,
 
10905
-0.000322162,
 
10906
-0.000217286,
 
10907
-0.000200726,
 
10908
-0.000318639,
 
10909
-0.000532153,
 
10910
-0.000347614,
 
10911
-3.16E-06,
 
10912
0.000644489,
 
10913
0.00100808,
 
10914
0.00107041,
 
10915
0.0011488,
 
10916
0.000744875,
 
10917
0.000428291,
 
10918
0.000290936,
 
10919
0.000258901,
 
10920
0.00057231,
 
10921
0.000625447,
 
10922
0.000833305,
 
10923
0.000679633,
 
10924
0.000736282,
 
10925
0.000384085,
 
10926
0.000100621,
 
10927
0.000125945,
 
10928
0.00018803,
 
10929
0.000247397,
 
10930
0.000140543,
 
10931
0.00023271,
 
10932
0.000206796,
 
10933
5.84E-05,
 
10934
1.03E-05,
 
10935
0.000149909,
 
10936
0.000621023,
 
10937
0.000754729,
 
10938
0.000771421,
 
10939
0.00105867,
 
10940
0.000834447,
 
10941
0.000733547,
 
10942
0.000612523,
 
10943
0.000335448,
 
10944
8.25E-06,
 
10945
-0.000189546,
 
10946
-0.000233238,
 
10947
-0.000519596,
 
10948
-0.00042089,
 
10949
-6.40E-06,
 
10950
7.77E-05,
 
10951
9.84E-05,
 
10952
-0.000171139,
 
10953
-0.000310745,
 
10954
-0.000261869,
 
10955
-0.000309991,
 
10956
-0.000362793,
 
10957
-0.000151421,
 
10958
-0.000194398,
 
10959
-0.00038984,
 
10960
-0.000337404,
 
10961
-0.000292472,
 
10962
-8.61E-05,
 
10963
5.75E-05,
 
10964
9.07E-05,
 
10965
0.000190954,
 
10966
0.000296186,
 
10967
0.000278313,
 
10968
-3.25E-05,
 
10969
-0.000333689,
 
10970
-0.000519787,
 
10971
-0.000496129,
 
10972
-0.000570476,
 
10973
-0.000303045,
 
10974
-0.000160277,
 
10975
0.000232384,
 
10976
0.000591203,
 
10977
0.00071829,
 
10978
0.000966969,
 
10979
0.00114479,
 
10980
0.00115608,
 
10981
0.00114881,
 
10982
0.0012485,
 
10983
0.0013597,
 
10984
0.00168101,
 
10985
0.00104358,
 
10986
0.000856327,
 
10987
0.000687258,
 
10988
0.000923271,
 
10989
0.000879711,
 
10990
0.000717467,
 
10991
0.000847053,
 
10992
0.000710694,
 
10993
0.000415626,
 
10994
0.000267475,
 
10995
0.00017531,
 
10996
0.000130545,
 
10997
7.53E-05,
 
10998
3.66E-05,
 
10999
0.000127371,
 
11000
0.000364506,
 
11001
0.000782998,
 
11002
0.000713517,
 
11003
0.000554627,
 
11004
0.000520172,
 
11005
0.000294821,
 
11006
0.000494704,
 
11007
0.00086818,
 
11008
0.000818739,
 
11009
0.000570463,
 
11010
0.000593457,
 
11011
0.000274417,
 
11012
0.000465056,
 
11013
0.000570629,
 
11014
0.000410949,
 
11015
0.000267827,
 
11016
0.000521008,
 
11017
0.000639421,
 
11018
0.000740811,
 
11019
0.000654325,
 
11020
0.000120355,
 
11021
-0.000199765,
 
11022
-0.000367148,
 
11023
-0.00050777,
 
11024
-0.000554528,
 
11025
-0.000742839,
 
11026
-0.000954415,
 
11027
-0.00111473,
 
11028
-0.00065717,
 
11029
-0.000384281,
 
11030
-0.000584488,
 
11031
-0.000387121,
 
11032
6.11E-07,
 
11033
6.18E-05,
 
11034
2.74E-06,
 
11035
-0.000239685,
 
11036
-0.00039921,
 
11037
-0.000224125,
 
11038
-4.40E-05,
 
11039
8.77E-06,
 
11040
-6.21E-05,
 
11041
-0.000519798,
 
11042
-0.000574988,
 
11043
-0.000376014,
 
11044
-0.000261826,
 
11045
0.000255553,
 
11046
0.000595628,
 
11047
0.0006648,
 
11048
0.000842629,
 
11049
0.000902367,
 
11050
0.000586933,
 
11051
0.00018307,
 
11052
0.000255133,
 
11053
9.85E-05,
 
11054
0.000368992,
 
11055
0.000562369,
 
11056
0.00085546,
 
11057
0.000859038,
 
11058
0.000907761,
 
11059
0.000390729,
 
11060
0.00050405,
 
11061
0.000698643,
 
11062
0.000572906,
 
11063
0.000644083,
 
11064
0.000435071,
 
11065
0.000530602,
 
11066
0.00063087,
 
11067
0.000323015,
 
11068
0.000115957,
 
11069
-5.61E-05,
 
11070
-0.000302566,
 
11071
-0.000569679,
 
11072
-0.000301438,
 
11073
0.000363858,
 
11074
0.000895815,
 
11075
0.00128842,
 
11076
0.00100383,
 
11077
0.00158317,
 
11078
0.00128054,
 
11079
0.000798382,
 
11080
0.000581018,
 
11081
0.000703249,
 
11082
0.000438639,
 
11083
0.000442378,
 
11084
0.000251144,
 
11085
-0.000178674,
 
11086
-4.74E-05,
 
11087
-7.63E-05,
 
11088
-0.000290456,
 
11089
-0.000425779,
 
11090
-0.00117202,
 
11091
-0.00130518,
 
11092
-0.00135565,
 
11093
-0.00117334,
 
11094
-0.000820887,
 
11095
-0.000492772,
 
11096
-0.000300751,
 
11097
0.00020894,
 
11098
0.000542867,
 
11099
0.00112235,
 
11100
0.0013269,
 
11101
0.0015155,
 
11102
0.00171764,
 
11103
0.00160906,
 
11104
0.00137222,
 
11105
0.0015151,
 
11106
0.00146072,
 
11107
0.000792795,
 
11108
0.000521727,
 
11109
0.000575187,
 
11110
0.000491216,
 
11111
0.000296697,
 
11112
0.000245324,
 
11113
0.000225258,
 
11114
1.92E-05,
 
11115
-0.000372311,
 
11116
-4.10E-05,
 
11117
-0.000128977,
 
11118
1.09E-05,
 
11119
-0.000600517,
 
11120
-0.0008249,
 
11121
-0.000992362,
 
11122
-0.000963039,
 
11123
-0.00113936,
 
11124
-0.00146438,
 
11125
-0.00111718,
 
11126
-0.00112647,
 
11127
-0.00135347,
 
11128
-0.00101142,
 
11129
-0.000652267,
 
11130
-0.000734747,
 
11131
-0.000377075,
 
11132
-0.00011074,
 
11133
-0.00051855,
 
11134
-0.000619458,
 
11135
-0.000187873,
 
11136
-0.000102412,
 
11137
0.000484728,
 
11138
0.000783395,
 
11139
0.000441902,
 
11140
0.000299374,
 
11141
0.000947764,
 
11142
0.00141674,
 
11143
0.00155242,
 
11144
0.00180191,
 
11145
0.00230594,
 
11146
0.00251656,
 
11147
0.0024539,
 
11148
0.00254168,
 
11149
0.0024158,
 
11150
0.00195566,
 
11151
0.0019329,
 
11152
0.00160632,
 
11153
0.00188157,
 
11154
0.001764,
 
11155
0.00108332,
 
11156
0.000869896,
 
11157
0.00067471,
 
11158
0.000615986,
 
11159
0.000794104,
 
11160
0.000386439,
 
11161
-5.17E-05,
 
11162
-0.000309826,
 
11163
-0.000247388,
 
11164
-0.0004103,
 
11165
-0.000398971,
 
11166
-0.000322127,
 
11167
-0.000306698,
 
11168
-0.000682788,
 
11169
-0.000919077,
 
11170
-0.000967931,
 
11171
-0.00112106,
 
11172
-0.00105072,
 
11173
-0.000969028,
 
11174
-0.000764652,
 
11175
-0.000580761,
 
11176
-0.000390856,
 
11177
-0.000211922,
 
11178
-0.000408224,
 
11179
0.000178671,
 
11180
0.000698164,
 
11181
0.00156287,
 
11182
0.00143122,
 
11183
0.000691728,
 
11184
-0.000475124,
 
11185
-0.000888173,
 
11186
-0.000686491,
 
11187
-0.0009318,
 
11188
-0.000852938,
 
11189
-0.00018467,
 
11190
-0.000494222,
 
11191
-0.000801158,
 
11192
-0.000975636 };
 
11193
 
 
11194
  double coeff[] = { 200.00000,191.41233,183.19339,175.32736,167.79909,160.59407,
 
11195
153.69842,147.09886,140.78267,134.73769,128.95227,123.41527,
 
11196
118.11602,113.04431,108.19037,103.54485,99.09880,94.84366,
 
11197
90.77123,86.87366,83.14344,79.57340,76.15664,72.88660,
 
11198
69.75697,66.76172,63.89508,61.15153,58.52578,56.01278,
 
11199
53.60768,51.30585,49.10286,46.99446,44.97660,43.04537,
 
11200
41.19708,39.42814,37.73516,36.11487,34.56416,33.08003,
 
11201
31.65963,30.30021,28.99917,27.75399,26.56228,25.42174,
 
11202
24.33017,23.28547,22.28563,21.32872,20.41290,19.53641,
 
11203
18.69754,17.89470,17.12633,16.39096,15.68715,15.01357,
 
11204
14.36892,13.75194,13.16145,12.59632,12.05545,11.53781,
 
11205
11.04240,10.56825,10.11447,9.68017,9.26452,8.86672,
 
11206
8.48600,8.12162,7.77289,7.43914,7.11971,6.81400,
 
11207
6.52142,6.24140,5.97341,5.71692,5.47144,5.23651,
 
11208
5.01166,4.79647,4.59051,4.39341,4.20476,4.02421,
 
11209
3.85142,3.68605,3.52777,3.37630,3.23132,3.09258,
 
11210
2.95979,2.83270,2.71107,2.59466,2.48325,2.37662,
 
11211
2.27457,2.17691,2.08343,1.99397,1.90836,1.82641,
 
11212
1.74799,1.67293,1.60110,1.53235,1.46656,1.40358,
 
11213
1.34332,1.28564,1.23043,1.17760,1.12704,1.07864,
 
11214
1.03233,0.98800,0.94558,0.90498,0.86612,0.82893,
 
11215
0.79334,0.75927,0.72667,0.69547,0.66561,0.63703,
 
11216
0.60967,0.58349,0.55844,0.53446,0.51151,0.48955,
 
11217
0.46853,0.44841,0.42916,0.41073,0.39309,0.37621,
 
11218
0.36006,0.34460,0.32980,0.31564,0.30209,0.28912,
 
11219
0.27670,0.26482,0.25345,0.24257,0.23215,0.22218,
 
11220
0.21264,0.20351,0.19478,0.18641,0.17841,0.17075,
 
11221
0.16342,0.15640,0.14968,0.14326,0.13711,0.13122,
 
11222
0.12558,0.12019,0.11503,0.11009,0.10536,0.10084,
 
11223
0.09651,0.09237,0.08840,0.08460,0.08097,0.07749,
 
11224
0.07417,0.07098,0.06793,0.06502,0.06223,0.05955,
 
11225
0.05700,0.05455,0.05221,0.04997,0.04782,0.04577,
 
11226
0.04380,0.04192,0.04012,0.03840,0.03675,0.03517,
 
11227
0.03366,0.03222,0.03083,0.02951,0.02824,0.02703,
 
11228
0.02587,0.02476,0.02369,0.02268,0.02170,0.02077,
 
11229
0.01988,0.01903,0.01821,0.01743,0.01668,0.01596,
 
11230
0.01528,0.01462,0.01399,0.01339,0.01282,0.01227,
 
11231
0.01174,0.01124,0.01075,0.01029,0.00985,0.00943,
 
11232
0.00902,0.00864,0.00826,0.00791,0.00757,0.00724,
 
11233
0.00693,0.00664,0.00635,0.00608,0.00582,0.00557,
 
11234
0.00533,0.00510,0.00488,0.00467,0.00447,0.00428,
 
11235
0.00409,0.00392,0.00375,0.00359,0.00344,0.00329,
 
11236
0.00315,0.00301,0.00288,0.00276,0.00264,0.00253,
 
11237
0.00242,0.00231,0.00222,0.00212,0.00203,0.00194,
 
11238
0.00186,0.00178,0.00170,0.00163,0.00156,0.00149,
 
11239
0.00143,0.00137,0.00131,0.00125,0.00120,0.00115,
 
11240
0.00110,0.00105,0.00101,0.00096,0.00092,0.00088,
 
11241
0.00084,0.00081,0.00077,0.00074,0.00071,0.00068,
 
11242
0.00065,0.00062,0.00059,0.00057,0.00054,0.00052,
 
11243
0.00050,0.00048,0.00046,0.00044,0.00042,0.00040 };
 
11244
 
 
11245
  double xv[600];
 
11246
  
 
11247
        for (z=0;z<600;z++)
 
11248
                xv[z] = xv0[z]*0.005;
 
11249
 
 
11250
 
 
11251
        CDF *tmpdf;
 
11252
        CLTSpec *tlsp;
 
11253
 
 
11254
        tmpdf = new CDF();
 
11255
        tmpdf->m_fMinVal = 0;
 
11256
        tmpdf->m_fMaxVal = 500.0;
 
11257
        tmpdf->m_iResolution = 600;
 
11258
        tmpdf->m_bLeft = true;
 
11259
        tmpdf->Create();
 
11260
 
 
11261
        for (z=0;z<600;z++)
 
11262
                tmpdf->m_pBin[z] = yv[z];
 
11263
 
 
11264
        tlsp = new CLTSpec();
 
11265
        tlsp->m_bLSpecDataLin = true;
 
11266
        tlsp->m_fLSpecMinExp = 0.005;
 
11267
        tlsp->m_fLSpecMaxExp = 2500.0;
 
11268
        tlsp->m_iLSpecData = 600;
 
11269
        tlsp->m_iLSpecPoints = 300;
 
11270
        tlsp->m_iMaxLMIter = 200;
 
11271
        tlsp->m_fLSpecZeroWeight = 1.0;
 
11272
 
 
11273
        tlsp->ComputeSpectrum("rdyn","bla","","",tmpdf);
 
11274
      
 
11275
 
 
11276
        return 0;
 
11277
*/
 
11278
/****************************************************************************************************************/
 
11279