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

« back to all changes in this revision

Viewing changes to .pc/hardening.patch/src/travis.cpp

  • Committer: Package Import Robot
  • Author(s): Daniel Leidert
  • Date: 2013-03-13 00:32:06 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20130313003206-ysmbjy4p7db4mh0e
Tags: 130123-1
* New upstream release.
* debian/control (Standards-Version): Bumped to 3.9.4.
  (Homepage): Adjusted.
  (Vcs-Browser, Vcs-Svn): Fixed vcs-field-not-canonical.
* debian/travis.1: Updated manpage file.
* debian/travis.docs: Added PDF.
* debian/travis.doc-base: Register PDF.
* debian/upstream: Updated URLs.
* debian/watch: Fixed.
* debian/patches/hardening.patch: Applied upstream. Dropped.
* debian/patches/series: Adjusted.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
    TRAVIS - Trajectory Analyzer and Visualizer
3
 
    Copyright (C) 2009-2012 Martin Brehm
4
 
 
5
 
    This program is free software: you can redistribute it and/or modify
6
 
    it under the terms of the GNU General Public License as published by
7
 
    the Free Software Foundation, either version 3 of the License, or
8
 
    (at your option) any later version.
9
 
 
10
 
    This program is distributed in the hope that it will be useful,
11
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
    GNU General Public License for more details.
14
 
 
15
 
    You should have received a copy of the GNU General Public License
16
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 
*****************************************************************************/
18
 
 
19
 
#include "travis.h"
20
 
#include "tools.h"
21
 
#include "database.h"
22
 
#include "statistics.h"
23
 
#include "maintools.h"
24
 
#include <float.h>
25
 
#include "dacf.h"
26
 
#include "lmwrapper.h"
27
 
#include "cluster.h"
28
 
 
29
 
#ifdef TARGET_WINDOWS
30
 
#include <windows.h>
31
 
#include <direct.h>
32
 
#endif
33
 
 
34
 
#ifdef TARGET_LINUX
35
 
#include <unistd.h>
36
 
#endif
37
 
 
38
 
/***************************************************************************************************************
39
 
 ********************** Beginn Quellcode ***********************************************************************
40
 
 ***************************************************************************************************************/
41
 
 
42
 
int main(int argc, const char *argv[])
43
 
{
44
 
        BTIN;
45
 
//      FILE *fff;
46
 
        FILE *a, *tfi;
47
 
        char buf[256], buf2[64], buf3[256], *p, *q;
48
 
        int ti, ti2, ti3, cc, cc2, ticomb, tic_r, tic_o;
49
 
        int z0, z, z2, z3, z4, z5, z6, z7, zr, zs, zi;
50
 
        int z1a, z1t, z2a, z2t;
51
 
        CxIntArray *a1, *a2;
52
 
        CAtomGroup *g1, *g2;
53
 
        int tia[3];
54
 
        CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
55
 
        CxMatrix3 mat;
56
 
        double tf, tf2, tfr, tf3, tf4, tfs;
57
 
        double c0, c1, r;
58
 
        double *pd;
59
 
        float *pf;
60
 
        CMolecule *m, *tm;
61
 
        CSingleMolecule *sm, *smfix, *sm2, *tsm;
62
 
        char tc;
63
 
        unsigned long t0, t1, eta;
64
 
        int showinterval;
65
 
        CObservation *o;
66
 
        C3DF *tempSDF;
67
 
        C3DF *temp3DF;
68
 
        CDF *tdf;
69
 
        int sic;
70
 
//      CxIntArray tempwa, *twa;   // "Tempor�res "W"ord-"A"rray
71
 
        CxIntArray templa, *tla;
72
 
        CxDoubleArray **apfa; // "A"rray von "P"ointern auf "F"loat-"A"rrays
73
 
        double *tda;          // "T"empor�res "D"ouble-"Array"
74
 
        CxByteArray **apba;
75
 
        CxVec3Array tempvel;
76
 
        CAtomGroup *atgr, *ag;
77
 
        struct tm *today;
78
 
        time_t ltime;
79
 
        bool secondmolrun, tb;
80
 
        int multicounter;
81
 
        char multibuf[64];
82
 
        long fpos, fpos2;
83
 
        CMolBondGroup *bg;
84
 
        CMolBond *bond;
85
 
        CxFloatArray tempfa, tempfa2, *ptfa;
86
 
        CxFloatArray *ptfa2, *ptfa3;
87
 
        CGrace *gc, *gc2;
88
 
        CFFT *fft/*, *fft2*/;
89
 
        C2DF *temp2df, *tempc2df, **temp2dfa;
90
 
//      CNbSet *nbset;
91
 
        CConditionGroup *cg;
92
 
//      CNbSearch *nbs;
93
 
        int *tpi;
94
 
        bool ReactSecondRun;
95
 
        unsigned long tul;
96
 
        CAutoCorrelation *ac;
97
 
        CDACFSub *dacfsub;
98
 
        CMicroHetObservation *mho;
99
 
 
100
 
        g_bSaxonize = false;
101
 
        g_bUnknownElements = false;
102
 
 
103
 
        g_iStartTime = 0;
104
 
        g_bSMode = false;
105
 
        g_bNoColor = false;
106
 
        g_iColorIntensity = 1;
107
 
        g_bNPT = true; // Nur anfaenglich
108
 
        g_sNPTFile[0] = 0;
109
 
        g_fNPTFile = NULL;
110
 
        g_fBoxX = 0;
111
 
        g_fBoxY = 0;
112
 
        g_fBoxZ = 0;
113
 
        g_bVerbose = false;
114
 
        g_bClusterAnalysis = false;
115
 
        g_bNeedMoleculeWrap = false;
116
 
        g_bDipoleDefined = false;
117
 
        g_bDipolGrimme = false;
118
 
        g_bVoidSDF = false;
119
 
        g_fTimestepLength = 0;
120
 
 
121
 
//      mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
122
 
 
123
 
/*      CClusterAnalysis *can;
124
 
        can = new CClusterAnalysis();
125
 
 
126
 
        for (z=0;z<15;z++)
127
 
        {
128
 
                can->AddCluster();
129
 
                can->AddParticle(rand()%20,rand()%20,rand()%20);
130
 
 
131
 
        }
132
 
 
133
 
        can->BuildTree();
134
 
 
135
 
        can->DumpAgr("C:\\Software\\test.csv");
136
 
 
137
 
        gets(buf);
138
 
 
139
 
        return 0;*/
140
 
        
141
 
/*      int maj, min;
142
 
        CreateTicks(0,540,maj,min);
143
 
        return 0;*/
144
 
 
145
 
/*      CExtendedCondition *ec;
146
 
 
147
 
        ec = new CExtendedCondition();
148
 
 
149
 
        ec->m_fD[0] = 1;
150
 
        ec->m_fA[0] = 1;
151
 
 
152
 
        ec->m_fD[1] = 2;
153
 
        ec->m_fA[1] = 1;
154
 
        
155
 
        ec->m_fD[2] = 2;
156
 
        ec->m_fA[2] = 0;
157
 
 
158
 
        if (!ec->Evaluate())
159
 
        {
160
 
                printf("Fail.\n");
161
 
//              return 0;
162
 
        }
163
 
 
164
 
        printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
165
 
        return 0;*/
166
 
 
167
 
/*      CLMWrapper w;
168
 
        double *px, *py, *pp, r, integral;
169
 
 
170
 
        px = new double[100];
171
 
        py = new double[100];
172
 
        pp = new double[6];
173
 
 
174
 
        pp[0] = 1;
175
 
        pp[1] = -0.001;
176
 
        pp[2] = 1;
177
 
        pp[3] = -0.01;
178
 
        pp[4] = 1;
179
 
        pp[5] = -0.0001;
180
 
 
181
 
        for (z=0;z<100;z++)
182
 
        {
183
 
                px[z] = z;
184
 
                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);
185
 
        }
186
 
 
187
 
        w.Fit_TriExp(100,px,py,pp,r,integral);
188
 
 
189
 
        return 0;*/
190
 
 
191
 
/*      C3DF *df3;
192
 
 
193
 
        df3 = new C3DF();
194
 
        df3->m_fMinVal[0] = -100;
195
 
        df3->m_fMaxVal[0] = 100;
196
 
        df3->m_fMinVal[1] = -100;
197
 
        df3->m_fMaxVal[1] = 100;
198
 
        df3->m_fMinVal[2] = -100;
199
 
        df3->m_fMaxVal[2] = 100;
200
 
        df3->m_iRes[0] = 101;
201
 
        df3->m_iRes[1] = 101;
202
 
        df3->m_iRes[2] = 101;
203
 
        df3->Create();
204
 
 
205
 
        for (z=0;z<101;z++)
206
 
                for (z2=0;z2<101;z2++)
207
 
                        for (z3=0;z3<101;z3++)
208
 
                                if (sqrt(pow(z-50,2)+pow(z2-50,2)+pow(z3-50,2)) < 30)
209
 
                                        df3->AddToBin(CxVector3(z-50,z2-50,z3-50));
210
 
 
211
 
        df3->WritePLT("","C:\\test.plt","",true);
212
 
        df3->WriteCube("","C:\\test.cube","",true);
213
 
        return 0;*/
214
 
 
215
 
/*      CDF *mdf;
216
 
 
217
 
        mdf = new CDF();
218
 
        mdf->m_fMinVal = 0;
219
 
        mdf->m_fMaxVal = 1;
220
 
        mdf->m_iResolution = 20;
221
 
        mdf->Create(true);
222
 
 
223
 
        srand(time(NULL));
224
 
        for (z=0;z<1000000;z++)
225
 
                mdf->AddToBin(z/999999.0);
226
 
        mdf->Write("","D:\\Software\\out.csv","");
227
 
        return 0;*/
228
 
 
229
 
/*      CAutoCorrelation *ac;
230
 
 
231
 
        ac = new CAutoCorrelation();
232
 
 
233
 
#define N 23
234
 
 
235
 
        ac->Init(N,N,false);
236
 
 
237
 
        ptfa = new CxFloatArray();
238
 
        ptfa->SetSize(N);
239
 
        ptfa2 = new CxFloatArray();
240
 
        ptfa2->SetSize(N);
241
 
 
242
 
        for (z=0;z<N;z++)
243
 
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
244
 
 
245
 
        ac->AutoCorrelate(ptfa,ptfa2);
246
 
 
247
 
        mprintf("Classic:\n");
248
 
        for (z=0;z<N;z++)
249
 
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
250
 
 
251
 
        ac->Init(N,N,true);
252
 
 
253
 
        for (z=0;z<N;z++)
254
 
                ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
255
 
 
256
 
        ac->AutoCorrelate(ptfa,ptfa2);
257
 
 
258
 
        mprintf("\nFFT:\n");
259
 
        for (z=0;z<N;z++)
260
 
                mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
261
 
 
262
 
        gets(buf);
263
 
 
264
 
        return 0;*/
265
 
 
266
 
 
267
 
/*      fft = new CFFT();
268
 
 
269
 
        fft->PrepareFFT_R2C(300);
270
 
 
271
 
        for (z=0;z<300;z++)
272
 
        {
273
 
                fft->m_pInput[z*2] = sin(z/3.1) * exp(-10.0/z);
274
 
                fft->m_pInput[z*2+1] = sin(z/2.7+1.0) * exp(-2.0/z);
275
 
        }
276
 
 
277
 
        fft->DoFFT();
278
 
 
279
 
        for (z=0;z<300;z++)
280
 
                mprintf("%03d: % 10.6f  % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
281
 
 
282
 
        gets(buf);
283
 
        return 0;*/
284
 
 
285
 
/*      CxVector3 v1, v2, v3, v;
286
 
 
287
 
        v1 = CxVector3(0,0,0);
288
 
        v2 = CxVector3(1,0,0);
289
 
        v3 = CxVector3(1,1,0);
290
 
 
291
 
        v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
292
 
 
293
 
        v.Dump();
294
 
 
295
 
        gets(buf);
296
 
        return 0;*/
297
 
 
298
 
/*      fft = new CFFT();
299
 
        fft->PrepareFFT_C2C(20);
300
 
        for (z=0;z<20;z++)
301
 
        {
302
 
                if (z < 20)
303
 
                {
304
 
                        fft->m_pInput[2*z] = sin(2*z*17.89) * exp(-0.1*z*2);
305
 
                        fft->m_pInput[2*z+1] = sin((2*z+1)*17.89) * exp(-0.1*(2*z+1));
306
 
                } else
307
 
                {
308
 
                        fft->m_pInput[2*z] = 0;
309
 
                        fft->m_pInput[2*z+1] = 0;
310
 
                }
311
 
                printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
312
 
        }
313
 
        printf("Transforming...\n");
314
 
        fft->DoFFT();
315
 
        for (z=0;z<20;z++)
316
 
                printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
317
 
        gets(buf);
318
 
 
319
 
        return 0;*/
320
 
 
321
 
 
322
 
/*      vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
323
 
        vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
324
 
 
325
 
        tf = DotP(vec0,vec1);
326
 
 
327
 
        tf2 = Angle_Deg(vec0,vec1);
328
 
 
329
 
        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);
330
 
 
331
 
        printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
332
 
        return 0;*/
333
 
 
334
 
 
335
 
/*      CxVector3 a1, a2, a3;
336
 
 
337
 
        a1 = CxVector3(0,1.0,0);
338
 
        a2 = CxVector3(0,-1.0,0.0001);
339
 
        a3 = CxVector3(1.0,0,0);
340
 
 
341
 
        mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
342
 
        getchar();
343
 
        return 0;*/
344
 
 
345
 
        apfa = NULL;
346
 
        tda = NULL;
347
 
//      g_pNbAll = NULL;
348
 
//      g_iMaxMSDDepth = 0;
349
 
 
350
 
        AddElementData();
351
 
 
352
 
        try { g_sExeName = new char[strlen(argv[0])+1]; } catch(...) { g_sExeName = NULL; }
353
 
        if (g_sExeName == NULL) NewException((double)(strlen(argv[0])+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
354
 
        
355
 
        strcpy(g_sExeName,argv[0]);
356
 
 
357
 
        GetTravisPath();
358
 
 
359
 
        g_bAbortAnalysis = true;
360
 
        g_bBetaFeatures = false;
361
 
 
362
 
        InstallSignalHandler();
363
 
 
364
 
        InitColor();
365
 
 
366
 
        g_pLogFile = OpenFileWrite("travis.log",true);
367
 
 
368
 
        showinterval = 1;
369
 
 
370
 
        srand(time(NULL));
371
 
 
372
 
        tul = 256;
373
 
#ifdef TARGET_WINDOWS
374
 
        g_sHomeDir = getenv("APPDATA");
375
 
        if (GetComputerName(buf,&tul))
376
 
        { 
377
 
                try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
378
 
                if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
379
 
                
380
 
                strcpy(g_sHostName,buf);
381
 
        } else g_sHostName = NULL;
382
 
 
383
 
        g_sWorkingDir = _getcwd(NULL,1024);
384
 
#elif defined(TARGET_LINUX)
385
 
        g_sHomeDir = getenv("HOME");
386
 
        buf[0] = 0;
387
 
        if (gethostname(buf,256)==0)
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
 
#else
397
 
        g_sHomeDir = NULL;
398
 
        g_sHostName = NULL;
399
 
        g_sWorkingDir = NULL;
400
 
#endif
401
 
 
402
 
        try { g_pDatabase = new CDatabase(); } catch(...) { g_pDatabase = NULL; }
403
 
        if (g_pDatabase == NULL) NewException((double)sizeof(CDatabase),__FILE__,__LINE__,__PRETTY_FUNCTION__);
404
 
        
405
 
 
406
 
//      LoadSettings(argv[0]);
407
 
 
408
 
/*      CGrace *g = new CGrace();
409
 
 
410
 
        g->m_fMinValX = 1.37;
411
 
        g->m_fMaxValX = 2.53;
412
 
        g->m_fMinValY = 225;
413
 
        g->m_fMaxValY = 8337;
414
 
        g->MakeTicks();
415
 
 
416
 
        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);
417
 
*/
418
 
 
419
 
/*      CDatabaseTable *dt = new CDatabaseTable();
420
 
        
421
 
        dt->AddInt(0,0,12345);
422
 
        dt->AddInt(1,1,123456);
423
 
        dt->AddInt(2,2,123);
424
 
        dt->AddInt(3,3,1);
425
 
        dt->AddInt(4,4,123456789);
426
 
        
427
 
        dt->AddDouble(1,0,13.45);
428
 
        dt->AddDouble(2,1,3.199);
429
 
        dt->AddDouble(3,2,1367.4597);
430
 
        dt->AddDouble(4,3,13.45);
431
 
        dt->AddDouble(0,4,1.45);
432
 
        
433
 
        dt->AddString(2,0,"Hallo!");
434
 
        dt->AddString(3,1,"Hiu");
435
 
        dt->AddString(4,2,"Hallo Welt!");
436
 
        dt->AddString(0,3,"Dies ist ein Test");
437
 
        dt->AddString(1,4,"^^");
438
 
        
439
 
        dt->AddBool(3,0,true);
440
 
        dt->AddBool(4,1,false);
441
 
        dt->AddBool(0,2,true);
442
 
        dt->AddBool(1,3,false);
443
 
        dt->AddBool(2,4,true);
444
 
        
445
 
        dt->DumpTable();
446
 
        a = fopen("table.dat","wt");
447
 
        dt->DumpOutputFile(a);
448
 
        fclose(a);
449
 
        
450
 
        return 0;*/
451
 
        
452
 
        g_bMiddleAvg = true;
453
 
        g_bVFHisto = false;
454
 
        g_bUseVelocities = false;
455
 
        g_bUseForces = false;
456
 
//      g_bKeepNbCount = false;
457
 
//      g_bRefEnvAtomwise = false;
458
 
        g_bWriteAtomwise = false;
459
 
        g_fBondFactor = 1.15f;
460
 
        g_fVelPercentage = 0.95f;
461
 
        g_fForcePercentage = 0.95f;
462
 
        g_fPos = NULL;
463
 
        g_fVel = NULL;
464
 
        g_fForce = NULL;
465
 
        g_iRefSystemDim = 0;
466
 
        g_iFixMol = -1;
467
 
        g_fInputFile = NULL;
468
 
        g_fInput = NULL;
469
 
        g_fSaveCondFile = NULL;
470
 
        g_bSaveCondSnapshot = false;
471
 
        g_bScanVelocities = false;
472
 
        g_bSilentProgress = false;
473
 
        ReactSecondRun = false;
474
 
        g_bCreateRevSDF = false;
475
 
        g_bDeriv = false;
476
 
 
477
 
        ParsePassiveArgs(argc,argv);
478
 
 
479
 
        InitAnalyses();
480
 
        
481
 
        WriteHeader();
482
 
 
483
 
        if (g_bDipolGrimme)
484
 
        {
485
 
                if (argc < 3)
486
 
                        DipolGrimme(NULL);
487
 
                                else DipolGrimme(argv[2]);
488
 
                return 0;
489
 
        }
490
 
 
491
 
        if (!ParseArgs(argc,argv))
492
 
                goto _ende;
493
 
 
494
 
        if (strlen(g_sInputTraj) == 0)
495
 
        {
496
 
                eprintf("No trajectory file specified.\n");
497
 
                mprintf("Please use the -p flag to specify an input trajectory in the command line.\n\n");
498
 
                mprintf("     Enter the file name of the trajectory file to open: [Quit] ");
499
 
                myget(buf);
500
 
                mprintf("\n");
501
 
                if (strlen(buf)==0)
502
 
                {
503
 
                        CommandLineHelp();
504
 
                        goto _ende;
505
 
                }
506
 
                strcpy(g_sInputTraj,buf);
507
 
        }
508
 
 
509
 
        if (!DetermineTrajFormat())
510
 
                goto _ende;
511
 
 
512
 
        g_bInputRedirected = false;
513
 
        if (g_sInputFile != NULL)
514
 
        {
515
 
                g_fInputFile = fopen(g_sInputFile,"rt");
516
 
                if (g_fInputFile == NULL)
517
 
                {
518
 
                        eprintf("Could not open input file \"%s\".\n",g_sInputFile);
519
 
                        goto _ende;
520
 
                }
521
 
                g_bInputRedirected = true;
522
 
        }
523
 
 
524
 
        if (IsTTY(stdin) && (!g_bInputRedirected))
525
 
        {
526
 
                g_fInput = OpenFileWrite("input.txt",true);
527
 
                g_bInputRedirected = false;
528
 
                inpprintf("! TRAVIS input file\n! Created with TRAVIS version compiled at %s %s\n",__DATE__,__TIME__);
529
 
 
530
 
                time(&ltime);
531
 
                today = localtime(&ltime);
532
 
                strcpy(buf,asctime(today));
533
 
                buf[strlen(buf)-1] = 0;
534
 
                inpprintf("! Input file written at %s.\n",buf);
535
 
 
536
 
        } else g_bInputRedirected = true;
537
 
 
538
 
        if (g_sInputTraj[0] != 0)
539
 
        {
540
 
                mprintf("Opening position trajectory %s ...",g_sInputTraj);
541
 
                if (!FileExist(g_sInputTraj))
542
 
                {
543
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
544
 
                        goto _ende;
545
 
                }
546
 
        }
547
 
        if (g_sInputVel[0] != 0)
548
 
        {
549
 
                mprintf("Opening velocity trajectory %s ...",g_sInputVel);
550
 
                if (!FileExist(g_sInputVel))
551
 
                {
552
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
553
 
                        goto _ende;
554
 
                }
555
 
        }
556
 
        if (g_sInputForce[0] != 0)
557
 
        {
558
 
                mprintf("Opening Force Trajectory %s ...",g_sInputForce);
559
 
                if (!FileExist(g_sInputForce))
560
 
                {
561
 
                        eprintf("\nError. File does not exist or cannot be read.\n");
562
 
                        goto _ende;
563
 
                }
564
 
        }
565
 
        mprintf("\n");
566
 
        if (g_sInputTraj[0] == 0)
567
 
        {
568
 
                eprintf("Error: No trajectory file specified.\n");
569
 
                goto _ende;
570
 
        }
571
 
        g_fPos = fopen(g_sInputTraj,"rt");
572
 
        if (g_fPos == NULL)
573
 
        {
574
 
                eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
575
 
                goto _ende;
576
 
        }
577
 
 
578
 
        if (!g_TimeStep.ReadTimestep(g_fPos,true))
579
 
        {
580
 
                eprintf("\nError reading first time step from trajectory. Leaving.\n");
581
 
                goto _ende;
582
 
        }
583
 
 
584
 
        g_TimeStep.CalcMinMax();
585
 
 
586
 
//      fgetpos(g_fPos,&fpos);
587
 
        fpos = ftell(g_fPos);
588
 
        fseek(g_fPos,0,SEEK_END);
589
 
        fpos2 = ftell(g_fPos);
590
 
//      fgetpos(g_fPos,&fpos2);
591
 
        fclose(g_fPos);
592
 
 
593
 
        if (fpos2 < 0)
594
 
        {
595
 
                mprintf("\nCould not determine trajectory file size.\n\n");
596
 
                g_iTrajSteps = -1;
597
 
        } else
598
 
        {
599
 
                g_iTrajSteps = fpos2/fpos;
600
 
                mprintf("\nTrajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
601
 
        }
602
 
 
603
 
        g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
604
 
 
605
 
        if (g_iGesAtomCount == 0)
606
 
        {
607
 
                eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
608
 
                goto _ende;
609
 
        }       
610
 
 
611
 
        g_iGesVirtAtomCount = g_iGesAtomCount;
612
 
        g_TimeStep.AddAtoms();
613
 
        if (g_bUnknownElements)
614
 
                mprintf("\n");
615
 
 
616
 
        SortAtoms();
617
 
        mprintf(WHITE,"%d atoms in the system: ",g_iGesAtomCount);
618
 
        for (z=0;z<g_oaAtoms.GetSize();z++)
619
 
        {
620
 
                mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
621
 
                if (z < (int)g_oaAtoms.GetSize()-1)
622
 
                        mprintf(", ");
623
 
        }
624
 
        mprintf("\n\n");
625
 
        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]);
626
 
        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]);
627
 
        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]);
628
 
 
629
 
        g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
630
 
 
631
 
        xAddAtom("#");
632
 
 
633
 
        /****************************/
634
 
 
635
 
        if (!GatherInfos())
636
 
                goto _ende;
637
 
 
638
 
        /************** Beginn Analyse **************/
639
 
 
640
 
        g_iStartTime = time(NULL);
641
 
 
642
 
        if (g_iMaxStep != -1)
643
 
        {
644
 
                g_iTrajSteps = g_iMaxStep;
645
 
        } else
646
 
        {
647
 
                if (g_iTrajSteps != -1)
648
 
                {
649
 
                        g_iTrajSteps -= g_iBeginStep;
650
 
                        if (g_iTrajSteps < 1)
651
 
                                g_iTrajSteps = 1;
652
 
                }
653
 
        }
654
 
 
655
 
        if (g_bResp || g_bFFGen)
656
 
                goto _ende;
657
 
 
658
 
        g_iStepHistory = 3;
659
 
        multicounter = 0;
660
 
 
661
 
_multiintervalstart:
662
 
        if (g_bMultiInterval)
663
 
        {
664
 
                g_iBeginStep = g_laMultiIntervalStart[multicounter];
665
 
                g_iScanNbhStart = g_iBeginStep;
666
 
                g_iMaxStep = g_laMultiIntervalEnd[multicounter] - g_laMultiIntervalStart[multicounter] + 1;
667
 
                g_iScanNbhSteps = g_iMaxStep;
668
 
                mprintf(YELLOW,"***********************************************\n");
669
 
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) starting. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
670
 
                mprintf(YELLOW,"***********************************************\n\n");
671
 
                sprintf(multibuf,"_I%d_%d-%d",multicounter+1,g_laMultiIntervalStart[multicounter],g_laMultiIntervalEnd[multicounter]);
672
 
        } else multibuf[0] = 0;
673
 
 
674
 
        mprintf(WHITE,">>> Initialization >>>\n\n");
675
 
 
676
 
        g_bAbortAnalysis = false;
677
 
 
678
 
        g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
679
 
        if (g_fPos == NULL)
680
 
        {
681
 
                eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
682
 
                goto _ende;
683
 
        }
684
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
685
 
        {
686
 
                g_fNPTFile = fopen(g_sNPTFile,"rt");
687
 
                if (g_fNPTFile == NULL)
688
 
                {
689
 
                        eprintf("\nCould not open cell vector file.\n");
690
 
                        goto _ende;
691
 
                }
692
 
        }
693
 
        if (g_iBeginStep != 0)
694
 
        {
695
 
                mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
696
 
                mprintf(WHITE,"  [");
697
 
                for (z=0;z<g_iBeginStep;z++)
698
 
                {
699
 
                        if (fmod(z,g_iBeginStep/50.0) < 1.0)
700
 
                                mprintf(WHITE,"#");
701
 
                        if (!g_TimeStep.SkipTimestep(g_fPos))
702
 
                        {
703
 
                                eprintf("\nError: Unexpected end of position trajectory.\n");
704
 
                                goto _ende;
705
 
                        }
706
 
                        if ((g_bNPT) && (g_sNPTFile[0] != 0))
707
 
                                fgets(buf,256,g_fNPTFile);
708
 
                }
709
 
                mprintf(WHITE,"]\n");
710
 
                g_iFastForwardPos = ftell(g_fPos);
711
 
                mprintf("  Step %d begins at offset %lu (%.1f MB).\n\n",g_iBeginStep+1,g_iFastForwardPos,g_iFastForwardPos/1024.0/1024.0);
712
 
        }
713
 
//      fclose(g_fPos);
714
 
//      g_fPos = fopen(g_sInputTraj,"rb");
715
 
//      mprintf("Seek: %d.\n",g_iFastForwardPos);
716
 
//      fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
717
 
 
718
 
        g_TimeStep.ReadTimestep(g_fPos,true);
719
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
720
 
        {
721
 
                g_TimeStep.ReadCellVector(g_fNPTFile);
722
 
                fclose(g_fNPTFile);
723
 
        }
724
 
        fclose(g_fPos);
725
 
        g_TimeStep.CalcCenters();
726
 
 
727
 
        if (g_bPeriodic)
728
 
                g_TimeStep.UniteMolecules(false);
729
 
 
730
 
        if (g_bScanVelocities)
731
 
        {
732
 
                mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
733
 
 
734
 
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
735
 
                if (g_fPos == NULL)
736
 
                {
737
 
                        eprintf("Error. Input Trajectory suddenly vanished ^^\n");
738
 
                        return 0;
739
 
                }
740
 
                g_iSteps = 0; // Der Zaehler der Zeitschritte
741
 
                if (g_iScanVelStart != 0)
742
 
                {
743
 
                        mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
744
 
                        mprintf(WHITE,"  [");
745
 
                        for (z=0;z<g_iScanVelStart;z++)
746
 
                        {
747
 
                                if (fmod(z,g_iScanVelStart/60.0) < 1.0)
748
 
                                        mprintf(WHITE,"#");
749
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
750
 
                                        break;
751
 
                        }
752
 
                        mprintf(WHITE,"]\n");
753
 
                }
754
 
 
755
 
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
756
 
                {
757
 
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
758
 
                                goto _endvel;
759
 
                        if (g_TimeStep.m_iGesAtomCount == 0)
760
 
                                goto _endvel;
761
 
 
762
 
                        g_TimeStep.CalcCenters();
763
 
        
764
 
                        if ((g_iSteps % 4) == 0)
765
 
                        {
766
 
                                if ((g_iSteps % 200) == 0) 
767
 
                                        mprintf("\nStep %6d...",g_iSteps);
768
 
                                                else mprintf(".");
769
 
                        }
770
 
        
771
 
                        g_iSteps++;
772
 
        
773
 
                        if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
774
 
                                break;
775
 
                }
776
 
                _endvel:
777
 
 
778
 
                fclose(g_fPos);
779
 
 
780
 
                mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
781
 
        } // END IF g_bScanVelocities
782
 
 
783
 
 
784
 
        if (g_bSaveRefEnv && (g_iNbhMode == 1))
785
 
        {
786
 
                mprintf("Creating statical neighborhood...\n");
787
 
                g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep,true);
788
 
                if (g_bSaveRefWithEnv)
789
 
                {
790
 
                        mprintf("Adding reference molecule to neighborhood...\n");
791
 
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
792
 
                }
793
 
                mprintf("\n");
794
 
                g_pNbSet->Dump();
795
 
                mprintf("\n");
796
 
        }
797
 
 
798
 
        if (g_bVACF && g_bGlobalVACF)
799
 
        {
800
 
                mprintf("Initializing Global Velocity Autocorrelation Function...\n");
801
 
                g_pGlobalVACF->Create();
802
 
 
803
 
                if (!g_bVACFCacheMode)
804
 
                {
805
 
                        if (g_pGlobalVACF->m_iSize > g_iStepHistory)
806
 
                                g_iStepHistory = g_pGlobalVACF->m_iSize;
807
 
                } else
808
 
                {
809
 
                        mprintf("    VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_iGesAtomCount*g_iTrajSteps*3.1*sizeof(float)));
810
 
                        for (z=0;z<g_iGesAtomCount;z++)
811
 
                        {
812
 
                                try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
813
 
                                if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
814
 
                                
815
 
                                if (g_iTrajSteps != -1)
816
 
                                {
817
 
                                        ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
818
 
                                        ptfa->SetGrow((long)(g_iTrajSteps*0.1));
819
 
                                } else ptfa->SetGrow(1000);
820
 
                                g_pGlobalVACF->m_oaCache.Add(ptfa);
821
 
                        }
822
 
                }
823
 
        }
824
 
 
825
 
        if (g_bSaveCondSnapshot)
826
 
                g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
827
 
 
828
 
        for (z=0;z<g_oaObserv.GetSize();z++)
829
 
        {
830
 
                mprintf("Initializing Observation %d...\n",z+1);
831
 
                o = (CObservation*)g_oaObserv[z];
832
 
 
833
 
                if (g_bAggregation)
834
 
                {
835
 
                        mprintf("  Creating Aggregation Functions (%d value sets)...\n",o->m_pDACF->m_oaSubDACFs.GetSize());
836
 
                        for (z2=0;z2<o->m_pDACF->m_oaSubDACFs.GetSize();z2++)
837
 
                        {
838
 
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
839
 
                                if (g_bDLDisp)
840
 
                                {
841
 
                                        try { dacfsub->m_pDLDisp = new C2DF(); } catch(...) { dacfsub->m_pDLDisp = NULL; }
842
 
                                        if (dacfsub->m_pDLDisp == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
843
 
                                        
844
 
                                        dacfsub->m_pDLDisp->m_iRes[0] = o->m_pDACF->m_iLifetimeRes;
845
 
                                        dacfsub->m_pDLDisp->m_fMinVal[0] = 0.0f;
846
 
                                        dacfsub->m_pDLDisp->m_fMaxVal[0] = o->m_pDACF->m_fLargestLifetime;
847
 
                                        dacfsub->m_pDLDisp->m_iRes[1] = o->m_pDACF->m_iDisplacementRes;
848
 
                                        dacfsub->m_pDLDisp->m_fMinVal[1] = 0.0f;
849
 
                                        dacfsub->m_pDLDisp->m_fMaxVal[1] = o->m_pDACF->m_fLargestDisplacement;
850
 
                                        dacfsub->m_pDLDisp->Create();
851
 
                                        dacfsub->m_pDLDisp->SetLabelX("Lifetime [ps]");
852
 
                                        dacfsub->m_pDLDisp->SetLabelY("Displacement [pm]");
853
 
                                }
854
 
 
855
 
                                if (g_bDDisp)
856
 
                                {
857
 
                                        try { dacfsub->m_pDDisp = new CDF(); } catch(...) { dacfsub->m_pDDisp = NULL; }
858
 
                                        if (dacfsub->m_pDDisp == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
859
 
                                        
860
 
                                        dacfsub->m_pDDisp->m_iResolution = o->m_pDACF->m_iDisplacementRes;
861
 
                                        dacfsub->m_pDDisp->m_fMinVal = 0.0f;
862
 
                                        dacfsub->m_pDDisp->m_fMaxVal = o->m_pDACF->m_fLargestDisplacement;
863
 
                                        dacfsub->m_pDDisp->SetLabelX("Dimer displacement [pm]");
864
 
                                        dacfsub->m_pDDisp->SetLabelY("Occurrence");
865
 
                                        dacfsub->m_pDDisp->Create();
866
 
                                }
867
 
 
868
 
                                if (g_bDLDF)
869
 
                                {
870
 
                                        try { dacfsub->m_pDLDF = new CDF(); } catch(...) { dacfsub->m_pDLDF = NULL; }
871
 
                                        if (dacfsub->m_pDLDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
872
 
                                        
873
 
                                        dacfsub->m_pDLDF->m_bLeft = true;
874
 
                                        dacfsub->m_pDLDF->m_iResolution = o->m_pDACF->m_iLifetimeRes;
875
 
                                        dacfsub->m_pDLDF->m_fMinVal = 0.0f;
876
 
                                        dacfsub->m_pDLDF->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
877
 
                                        dacfsub->m_pDLDF->SetLabelX("Tau [ps]");
878
 
                                        dacfsub->m_pDLDF->SetLabelY("Occurrence");
879
 
                                        dacfsub->m_pDLDF->Create();
880
 
                                }
881
 
 
882
 
                                if (g_bDACF)
883
 
                                {
884
 
                                        try { dacfsub->m_pDACF = new CDF(); } catch(...) { dacfsub->m_pDACF = NULL; }
885
 
                                        if (dacfsub->m_pDACF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
886
 
                                        
887
 
                                        dacfsub->m_pDACF->m_bLeft = true;
888
 
                                        dacfsub->m_pDACF->m_iResolution = o->m_pDACF->m_iDACFRes;
889
 
                                        dacfsub->m_pDACF->m_fMinVal = 0;
890
 
                                        dacfsub->m_pDACF->m_fMaxVal = o->m_pDACF->m_iDACFRes * g_fTimestepLength / 1000.0;
891
 
                                        dacfsub->m_pDACF->SetLabelX("Tau [ps]");
892
 
                                        dacfsub->m_pDACF->SetLabelY("Occurrence");
893
 
                                        dacfsub->m_pDACF->Create();
894
 
                                }
895
 
 
896
 
                                try { dacfsub->m_pNDF = new CDF(); } catch(...) { dacfsub->m_pNDF = NULL; }
897
 
                                if (dacfsub->m_pNDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
898
 
                                
899
 
                                dacfsub->m_pNDF->m_iResolution = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
900
 
                                dacfsub->m_pNDF->m_fMinVal = 0.0f;
901
 
                                dacfsub->m_pNDF->m_fMaxVal = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
902
 
                                dacfsub->m_pNDF->Create();
903
 
                        }
904
 
                }
905
 
 
906
 
                if (g_bSDF)
907
 
                {
908
 
                        mprintf("  Creating SDF...\n");
909
 
                        o->m_pSDF->m_pSDF->m_fMinVal[0] = -o->m_pSDF->m_fRadius;
910
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[0] = o->m_pSDF->m_fRadius;
911
 
                        o->m_pSDF->m_pSDF->m_fMinVal[1] = -o->m_pSDF->m_fRadius;
912
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[1] = o->m_pSDF->m_fRadius;
913
 
                        o->m_pSDF->m_pSDF->m_fMinVal[2] = -o->m_pSDF->m_fRadius;
914
 
                        o->m_pSDF->m_pSDF->m_fMaxVal[2] = o->m_pSDF->m_fRadius;
915
 
                        o->m_pSDF->m_pSDF->m_iRes[0] = o->m_pSDF->m_iResolution;
916
 
                        o->m_pSDF->m_pSDF->m_iRes[1] = o->m_pSDF->m_iResolution;
917
 
                        o->m_pSDF->m_pSDF->m_iRes[2] = o->m_pSDF->m_iResolution;
918
 
                        o->m_pSDF->m_pSDF->m_iHistogramRes = o->m_pSDF->m_iHistogramRes;
919
 
                        o->m_pSDF->m_pSDF->Create();
920
 
//                      mprintf("Observation %d: Creating %d VecArrays.\n",z+1,o->m_iShowMolCount);
921
 
 
922
 
                        try { o->m_pSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_vaData = NULL; }
923
 
                        if (o->m_pSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
924
 
                        
925
 
                        if (o->m_pSDF->m_bVdWSpheres)
926
 
                        {
927
 
                                try { o->m_pSDF->m_faRadius = new CxFloatArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_faRadius = NULL; }
928
 
                                if (o->m_pSDF->m_faRadius == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
929
 
                        }
930
 
 
931
 
                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
932
 
                        {
933
 
                                try { o->m_pSDF->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_baDataEnabled = NULL; }
934
 
                                if (o->m_pSDF->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
935
 
                        }
936
 
                }
937
 
 
938
 
                if (g_bRDyn)
939
 
                {
940
 
                        mprintf("  Creating Reorientation Dynamics...\n");
941
 
                        o->m_pRDyn->m_pRDyn->m_fMinVal = 0;
942
 
                        o->m_pRDyn->m_pRDyn->m_fMaxVal = o->m_pRDyn->m_iDepth * g_fTimestepLength / 1000.0f;
943
 
                        o->m_pRDyn->m_pRDyn->m_iResolution = o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;
944
 
                        o->m_pRDyn->m_pRDyn->SetLabelX("Tau [ps]");
945
 
                        o->m_pRDyn->m_pRDyn->SetLabelY("Vector autocorrelation");
946
 
                        o->m_pRDyn->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)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
951
 
                                                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)));
952
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
953
 
                                {
954
 
                                        try { ptfa = new CxFloatArray(); } 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
 
                                        o->m_pRDyn->m_oaCache.Add(ptfa);
963
 
                                }
964
 
                        } else
965
 
                        {
966
 
                                try { o->m_pRDyn->m_pCount = new double[o->m_pRDyn->m_pRDyn->m_iResolution]; } catch(...) { o->m_pRDyn->m_pCount = NULL; }
967
 
                                if (o->m_pRDyn->m_pCount == NULL) NewException((double)o->m_pRDyn->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
968
 
                                
969
 
                                for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
970
 
                                        o->m_pRDyn->m_pCount[z2] = 0;
971
 
                                if (!g_bRDynCacheMode)
972
 
                                {
973
 
                                        if (o->m_pRDyn->m_iDepth > g_iStepHistory)
974
 
                                                g_iStepHistory = o->m_pRDyn->m_iDepth;
975
 
                                }
976
 
                        }
977
 
                }
978
 
 
979
 
                if (g_bVHDF)
980
 
                {
981
 
                        mprintf("  Creating VHCF...\n");
982
 
                        o->m_pVHDF->m_pVHDF->m_fMinVal[0] = o->m_pVHDF->m_fMinDist;
983
 
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[0] = o->m_pVHDF->m_fMaxDist;
984
 
                        o->m_pVHDF->m_pVHDF->m_iRes[0] = o->m_pVHDF->m_iResolution;
985
 
                        o->m_pVHDF->m_pVHDF->m_fMinVal[1] = 0.0;
986
 
                        o->m_pVHDF->m_pVHDF->m_fMaxVal[1] = o->m_pVHDF->m_iDepth * g_fTimestepLength / 1000.0f;
987
 
                        o->m_pVHDF->m_pVHDF->m_iRes[1] = o->m_pVHDF->m_iDepth / o->m_pVHDF->m_iStride;
988
 
                        o->m_pVHDF->m_pVHDF->Create();
989
 
 
990
 
                        try { o->m_pVHDF->m_pCount = new double[o->m_pVHDF->m_pVHDF->m_iRes[1]]; } catch(...) { o->m_pVHDF->m_pCount = NULL; }
991
 
                        if (o->m_pVHDF->m_pCount == NULL) NewException((double)o->m_pVHDF->m_pVHDF->m_iRes[1]*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
992
 
                        
993
 
                        for (z0=0;z0<o->m_pVHDF->m_pVHDF->m_iRes[1];z0++)
994
 
                                o->m_pVHDF->m_pCount[z0] = 0;
995
 
                        o->m_pVHDF->m_pVHDF->SetLabelX("Distance [pm]");
996
 
                        o->m_pVHDF->m_pVHDF->SetLabelY("Tau [ps]");
997
 
                        if (o->m_pVHDF->m_iDepth > g_iStepHistory)
998
 
                                g_iStepHistory = o->m_pVHDF->m_iDepth;
999
 
                } 
1000
 
 
1001
 
                if (g_bNbAnalysis)
1002
 
                {
1003
 
                        mprintf("  Creating Neighborhood Analysis...\n");
1004
 
 
1005
 
                        try { o->m_pNbAnalysis->m_pNPFCount = new CDF(); } catch(...) { o->m_pNbAnalysis->m_pNPFCount = NULL; }
1006
 
                        if (o->m_pNbAnalysis->m_pNPFCount == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1007
 
                        
1008
 
                        o->m_pNbAnalysis->m_pNPFCount->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1009
 
                        o->m_pNbAnalysis->m_pNPFCount->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1010
 
                        o->m_pNbAnalysis->m_pNPFCount->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1011
 
 
1012
 
                        o->m_pNbAnalysis->m_pNPFCount->Create();
1013
 
 
1014
 
                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1015
 
                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1016
 
                        
1017
 
                        tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1018
 
                        tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1019
 
                        tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1020
 
                        tdf->SetLabelX("Distance [pm]");
1021
 
                        tdf->SetLabelY("Occurrence");
1022
 
                        tdf->Create();
1023
 
                        o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1024
 
 
1025
 
                        for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
1026
 
                        {
1027
 
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1028
 
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1029
 
                                
1030
 
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1031
 
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1032
 
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1033
 
                                tdf->SetLabelX("Distance [pm]");
1034
 
                                tdf->SetLabelY("Occurrence");
1035
 
                                tdf->Create();
1036
 
                                o->m_pNbAnalysis->m_oaDF.Add(tdf);
1037
 
 
1038
 
                                try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1039
 
                                if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1040
 
                                
1041
 
                                tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1042
 
                                tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1043
 
                                tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1044
 
                                tdf->SetLabelX("Distance [pm]");
1045
 
                                tdf->SetLabelY("Occurrence");
1046
 
                                tdf->Create();
1047
 
                                o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1048
 
                        }
1049
 
                } 
1050
 
 
1051
 
                for (z0=0;z0<g_iCDFChannels;z0++)
1052
 
                {
1053
 
                        if (g_bRDF && (o->m_pRDF[z0] != NULL))
1054
 
                        {
1055
 
                                mprintf("  Creating RDF...\n");
1056
 
                                o->m_pRDF[z0]->m_pRDF->m_fMinVal = o->m_pRDF[z0]->m_fMinDist;
1057
 
                                o->m_pRDF[z0]->m_pRDF->m_fMaxVal = o->m_pRDF[z0]->m_fMaxDist;
1058
 
                                o->m_pRDF[z0]->m_pRDF->m_iResolution = o->m_pRDF[z0]->m_iResolution;
1059
 
                                o->m_pRDF[z0]->m_pRDF->m_iHistogramRes = o->m_pRDF[z0]->m_iHistogramRes;
1060
 
                                o->m_pRDF[z0]->m_pRDF->SetLabelX("Distance [pm]");
1061
 
                                o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r)");
1062
 
 
1063
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1064
 
                                {
1065
 
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1066
 
 
1067
 
                        /*              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; }
1068
 
                                        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__);
1069
 
                                        
1070
 
                                        for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
1071
 
                                        {
1072
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1073
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1074
 
                                        }
1075
 
                        */
1076
 
                                        for (z=0;z<o->m_waObsRefList.GetSize();z++)
1077
 
                                        {
1078
 
                                                for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
1079
 
                                                {
1080
 
                                                        if ((o->m_waObsRefList.GetSize() > 1) && (o->m_waObsShowList.GetSize() > 1))
1081
 
                                                                sprintf(buf,"RM%d-OM%d",o->m_waObsRefList[z]+1,o->m_waObsShowList[z2]+1);
1082
 
                                                        else if (o->m_waObsRefList.GetSize() > 1)
1083
 
                                                                sprintf(buf,"RM%d",o->m_waObsRefList[z]+1);
1084
 
                                                        else 
1085
 
                                                                sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
1086
 
 
1087
 
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waObsShowList.GetSize()+z2,buf);
1088
 
                                                }
1089
 
                                        }
1090
 
                                } else if (o->m_bDecompType)
1091
 
                                {
1092
 
                                        m = (CMolecule*)g_oaMolecules[g_iFixMol];
1093
 
                                        o->m_waDecompTypeRefOffs.SetSize(g_iGesVirtAtomCount);
1094
 
                                        for (z=0;z<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z++)
1095
 
                                        {
1096
 
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z*2];
1097
 
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1098
 
                                                {
1099
 
                                                        for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1100
 
                                                                if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
1101
 
                                                                        goto _decomptype1;
1102
 
                                                        z3 = o->m_waDecompTypeRefList.GetSize();
1103
 
                                                        o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
1104
 
_decomptype1:
1105
 
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1106
 
                                                        {
1107
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1108
 
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1109
 
                                                                        o->m_waDecompTypeRefOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1110
 
                                                        }
1111
 
                                                }
1112
 
                                        }
1113
 
 
1114
 
                                        if (o->m_bOthers)
1115
 
                                                m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
1116
 
                                                        else m = (CMolecule*)g_oaMolecules[g_iFixMol];
1117
 
                                        o->m_waDecompTypeObsOffs.SetSize(g_iGesVirtAtomCount);
1118
 
                                        for (z=0;z<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z++)
1119
 
                                        {
1120
 
                                                ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z*2+1];
1121
 
                                                for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1122
 
                                                {
1123
 
                                                        for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
1124
 
                                                                if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
1125
 
                                                                        goto _decomptype2;
1126
 
                                                        z3 = o->m_waDecompTypeObsList.GetSize();
1127
 
                                                        o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
1128
 
_decomptype2:
1129
 
                                                        for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1130
 
                                                        {
1131
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1132
 
                                                                for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1133
 
                                                                        o->m_waDecompTypeObsOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1134
 
                                                        }
1135
 
                                                }
1136
 
                                        }
1137
 
 
1138
 
                                        o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
1139
 
 
1140
 
        /*                              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; }
1141
 
                                        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__);
1142
 
                                        
1143
 
                                        for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
1144
 
                                        {
1145
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1146
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1147
 
                                        }*/
1148
 
 
1149
 
                                        for (z=0;z<o->m_waDecompTypeRefList.GetSize();z++)
1150
 
                                        {
1151
 
                                                for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
1152
 
                                                {
1153
 
                                                        sprintf(buf,"%s-%s",((CAtom*)g_oaAtoms[o->m_waDecompTypeRefList[z]])->m_sName,((CAtom*)g_oaAtoms[o->m_waDecompTypeObsList[z2]])->m_sName);
1154
 
                                                        o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waDecompTypeObsList.GetSize()+z2,buf);
1155
 
                                                }
1156
 
                                        }
1157
 
                                } else o->m_pRDF[z0]->m_pRDF->Create();
1158
 
 
1159
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1160
 
                                {
1161
 
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1162
 
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1163
 
                                        
1164
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1165
 
                                        {
1166
 
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1167
 
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1168
 
                                        }
1169
 
                                } else
1170
 
                                {
1171
 
                                        try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1172
 
                                        if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1173
 
                                        
1174
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1175
 
                                        {
1176
 
                                                try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1177
 
                                                if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1178
 
                                        }
1179
 
                                }
1180
 
                                if (o->m_bTimeDev)
1181
 
                                {
1182
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1183
 
                                        {
1184
 
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[1]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1185
 
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1186
 
                                                
1187
 
                                                sprintf(buf,"rdf_timedev_%s%s.csv",o->m_pRDF[z0]->m_sName,multibuf);
1188
 
                                                o->m_pRDF[z0]->m_fDist[0] = OpenFileWrite(buf,true);
1189
 
                                        } else
1190
 
                                        {
1191
 
                                                try { o->m_pRDF[z0]->m_fDist = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1192
 
                                                if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1193
 
                                                
1194
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1195
 
                                                {
1196
 
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1197
 
                                                        o->m_pRDF[z0]->m_fDist[z2] = OpenFileWrite(buf,true);
1198
 
                                                }
1199
 
                                        }
1200
 
                                        if (o->m_bCombinedPlot)
1201
 
                                        {
1202
 
//                                              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);
1203
 
 
1204
 
                                                try { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = NULL; }
1205
 
                                                if (o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1206
 
                                                
1207
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetTitle("Combined distance time development/histogram");
1208
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSubTitle(o->m_pRDF[z0]->m_sShortName);
1209
 
                                //              smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
1210
 
                                //              sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[0]];
1211
 
                                //              o->m_pRDF[z0]->BuildAtomList(smfix,sm,sm,&templa);
1212
 
                                                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));
1213
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1214
 
                                                {
1215
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1216
 
                                                        {
1217
 
                        /*                                      for (z4=0;z4<templa.GetSize()/2;z4++)
1218
 
                                                                {
1219
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1220
 
                                                                        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);
1221
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1222
 
                                                                        if (g_iTrajSteps != -1)
1223
 
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *g_iTrajSteps);
1224
 
                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *100);
1225
 
                                                                        if (o->m_bCombinedGreyMode)
1226
 
                                                                        {
1227
 
                                                                                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;
1228
 
                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_iLineColor = ti*0x10000 + ti*0x100 + ti;
1229
 
                                                                        }
1230
 
                                                                }*/
1231
 
 
1232
 
                                                                ti2 = 0;
1233
 
                                                                for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
1234
 
                                                                {
1235
 
                                                                        g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
1236
 
                                                                        for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
1237
 
                                                                        {
1238
 
                                                                                a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
1239
 
                                                                                for (z1a=0;z1a<a1->GetSize();z1a++)
1240
 
                                                                                {
1241
 
                                                                                        g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
1242
 
                                                                                        for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
1243
 
                                                                                        {
1244
 
                                                                                                a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
1245
 
                                                                                                for (z2a=0;z2a<a2->GetSize();z2a++)
1246
 
                                                                                                {
1247
 
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1248
 
                                                                                                        if (o->m_bOthers)
1249
 
                                                                                                                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);
1250
 
                                                                                                                        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);
1251
 
                                                                                                        o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1252
 
                                                                                                        if (g_iTrajSteps != -1)
1253
 
                                                                                                                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);
1254
 
                                                                                                        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);
1255
 
                                                                                                        if (o->m_bCombinedGreyMode)
1256
 
                                                                                                        {
1257
 
                                                                                                                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;
1258
 
                                                                                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1259
 
                                                                                                        }
1260
 
                                                                                                        ti2++;
1261
 
/*                                                                                                      if (o->m_pRDF[z0]->m_iRefOrSec[0])
1262
 
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1263
 
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1264
 
                                                                                                        if (o->m_pRDF[z0]->m_iRefOrSec[1])
1265
 
                                                                                                                vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1266
 
                                                                                                                        else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1267
 
*/                                                                              //                      mprintf("Vector z=%d, z1t=%d, z1a=%d, z2t=%d, z2a=%d.\n",z,z1t,z1a,z2t,z2a);
1268
 
                                                                                                }
1269
 
                                                                                        }
1270
 
                                                                                }
1271
 
                                                                        }
1272
 
                                                                }
1273
 
 
1274
 
                                                        }
1275
 
                                                }
1276
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelX("Time [ps] / g(r)");
1277
 
                                                o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelY("Distance [pm]");
1278
 
                                        }
1279
 
                                } // END IF TIMEDEV
1280
 
 
1281
 
                                if (o->m_bTimeDiff)
1282
 
                                        o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
1283
 
 
1284
 
                                if (g_bDeriv)
1285
 
                                        o->m_pDipDF[z0]->InitDeriv();
1286
 
                        } // END IF RDF
1287
 
 
1288
 
                        if (g_bADF && (o->m_pADF[z0] != NULL))
1289
 
                        {
1290
 
                                mprintf("  Creating ADF...\n");
1291
 
                                o->m_pADF[z0]->m_pADF->m_fMinVal = o->m_pADF[z0]->m_fMinAngle;
1292
 
                                o->m_pADF[z0]->m_pADF->m_fMaxVal = o->m_pADF[z0]->m_fMaxAngle;
1293
 
                                o->m_pADF[z0]->m_pADF->m_iResolution = o->m_pADF[z0]->m_iResolution;
1294
 
                                o->m_pADF[z0]->m_pADF->m_iHistogramRes = o->m_pADF[z0]->m_iHistogramRes;
1295
 
                                if (o->m_pADF[z0]->m_bCosine)
1296
 
                                        o->m_pADF[z0]->m_pADF->SetLabelX("Cos(angle)");
1297
 
                                                else o->m_pADF[z0]->m_pADF->SetLabelX("Angle (degree)");
1298
 
                                o->m_pADF[z0]->m_pADF->SetLabelY("Occurrence");
1299
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1300
 
                                        o->m_pADF[z0]->m_pADF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1301
 
                                                else o->m_pADF[z0]->m_pADF->Create();
1302
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1303
 
                                {
1304
 
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1305
 
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1306
 
                                        
1307
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1308
 
                                        {
1309
 
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1310
 
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1311
 
                                        }
1312
 
                                } else
1313
 
                                {
1314
 
                                        try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1315
 
                                        if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1316
 
                                        
1317
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1318
 
                                        {
1319
 
                                                try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1320
 
                                                if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1321
 
                                        }
1322
 
                                }
1323
 
                                if (o->m_bTimeDev)
1324
 
                                {
1325
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1326
 
                                        {
1327
 
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1328
 
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1329
 
                                                
1330
 
                                                sprintf(buf,"adf_timedev_%s%s.csv",o->m_pADF[z0]->m_sName,multibuf);
1331
 
                                                o->m_pADF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1332
 
                                        } else
1333
 
                                        {
1334
 
                                                try { o->m_pADF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1335
 
                                                if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1336
 
                                                
1337
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1338
 
                                                {
1339
 
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1340
 
                                                        o->m_pADF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1341
 
                                                }
1342
 
                                        }
1343
 
                                        if (o->m_bCombinedPlot)
1344
 
                                        {
1345
 
                                                try { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = NULL; }
1346
 
                                                if (o->m_pADF[z0]->m_pADF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1347
 
                                                
1348
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetTitle("Combined angle time development/histogram");
1349
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSubTitle(o->m_pADF[z0]->m_sShortName);
1350
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1351
 
                                                {
1352
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1353
 
                                                        {
1354
 
                                                                for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
1355
 
                                                                {
1356
 
                                                                        o->m_pADF[z0]->m_pADF->m_pCombinedPlot->AddDataset();
1357
 
                                                                        if (g_iTrajSteps != -1)
1358
 
                                                                                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);
1359
 
                                                                        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);
1360
 
                                                                        if (o->m_bCombinedGreyMode)
1361
 
                                                                        {
1362
 
                                                                                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;
1363
 
                                                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1364
 
                                                                        }
1365
 
                                        //                              o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pADF[z0]->m_iCombinations+z4,2.0f);
1366
 
                                                                }
1367
 
                                                        }
1368
 
                                                }
1369
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelX("Time [ps] / ADF(r)");
1370
 
                                                o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelY("Angle [Degree]");
1371
 
                                        }
1372
 
                                } // END IF TIMEDEV
1373
 
 
1374
 
                                if (o->m_bTimeDiff)
1375
 
                                        o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
1376
 
 
1377
 
                                if (g_bDeriv)
1378
 
                                        o->m_pDipDF[z0]->InitDeriv();
1379
 
                        } // END IF ADF
1380
 
 
1381
 
                        if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
1382
 
                        {
1383
 
                                mprintf("  Creating DipDF...\n");
1384
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMinVal = o->m_pDipDF[z0]->m_fDipoleMin;
1385
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_fMaxVal = o->m_pDipDF[z0]->m_fDipoleMax;
1386
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iResolution = o->m_pDipDF[z0]->m_iResolution;
1387
 
                                o->m_pDipDF[z0]->m_pDipoleDF->m_iHistogramRes = o->m_pDipDF[z0]->m_iHistogramRes;
1388
 
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelX("Dipole moment (Debye)");
1389
 
                                o->m_pDipDF[z0]->m_pDipoleDF->SetLabelY("Occurrence");
1390
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1391
 
                                        o->m_pDipDF[z0]->m_pDipoleDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1392
 
                                                else o->m_pDipDF[z0]->m_pDipoleDF->Create();
1393
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1394
 
                                {
1395
 
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1396
 
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1397
 
                                        
1398
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1399
 
                                        {
1400
 
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1401
 
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1402
 
                                        }
1403
 
                                } else
1404
 
                                {
1405
 
                                        try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1406
 
                                        if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1407
 
                                        
1408
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1409
 
                                        {
1410
 
                                                try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1411
 
                                                if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1412
 
                                        }
1413
 
                                }
1414
 
                                if (o->m_bTimeDev)
1415
 
                                {
1416
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1417
 
                                        {
1418
 
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[1]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1419
 
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1420
 
                                                
1421
 
                                                sprintf(buf,"dipole_timedev_%s%s.csv",o->m_pDipDF[z0]->m_sName,multibuf);
1422
 
                                                o->m_pDipDF[z0]->m_fDipole[0] = OpenFileWrite(buf,true);
1423
 
                                        } else
1424
 
                                        {
1425
 
                                                try { o->m_pDipDF[z0]->m_fDipole = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1426
 
                                                if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1427
 
                                                
1428
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1429
 
                                                {
1430
 
                                                        sprintf(buf,"dipole_timedev_%s_ref%d%s.csv",o->m_pDipDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1431
 
                                                        o->m_pDipDF[z0]->m_fDipole[z2] = OpenFileWrite(buf,true);
1432
 
                                                }
1433
 
                                        }
1434
 
                                        if (o->m_bCombinedPlot)
1435
 
                                        {
1436
 
                                                try { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = NULL; }
1437
 
                                                if (o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1438
 
                                                
1439
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetTitle("Combined dipole moment time development/histogram");
1440
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSubTitle(o->m_pDipDF[z0]->m_sShortName);
1441
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1442
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1443
 
                                                        {
1444
 
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->AddDataset();
1445
 
                                                                if (g_iTrajSteps != -1)
1446
 
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*g_iTrajSteps);
1447
 
                                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*100);
1448
 
                                                                if (o->m_bCombinedGreyMode)
1449
 
                                                                {
1450
 
                                                                        ti = o->m_iCombinedGreyMin + ((z3+z2*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1451
 
                                                                        o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1452
 
                                                                }
1453
 
                                                        }
1454
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelX("Time [ps] / DipDF(r)");
1455
 
                                                o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelY("Dipole moment [Debye]");
1456
 
                                        }
1457
 
                                } // END IF TIMEDEV
1458
 
 
1459
 
                                if (o->m_bTimeDiff)
1460
 
                                        o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
1461
 
 
1462
 
                                if (g_bDeriv)
1463
 
                                        o->m_pDipDF[z0]->InitDeriv();
1464
 
                        } // END IF DIPOLE
1465
 
 
1466
 
                        if (g_bVDF && (o->m_pVDF[z0] != NULL))
1467
 
                        {
1468
 
                                mprintf("  Creating VDF...\n");
1469
 
                                o->m_pVDF[z0]->m_pVDF->m_fMinVal = o->m_pVDF[z0]->m_fMinSpeed;
1470
 
                                o->m_pVDF[z0]->m_pVDF->m_fMaxVal = o->m_pVDF[z0]->m_fMaxSpeed;
1471
 
                                o->m_pVDF[z0]->m_pVDF->m_iResolution = o->m_pVDF[z0]->m_iResolution;
1472
 
                                o->m_pVDF[z0]->m_pVDF->m_iHistogramRes = o->m_pVDF[z0]->m_iHistogramRes;
1473
 
                                o->m_pVDF[z0]->m_pVDF->SetLabelX("Velocity [pm/ps]");
1474
 
                                o->m_pVDF[z0]->m_pVDF->SetLabelY("Occurrence");
1475
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1476
 
                                        o->m_pVDF[z0]->m_pVDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1477
 
                                                else o->m_pVDF[z0]->m_pVDF->Create();
1478
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1479
 
                                {
1480
 
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1481
 
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1482
 
                                        
1483
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1484
 
                                        {
1485
 
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1486
 
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1487
 
                                        }
1488
 
                                } else
1489
 
                                {
1490
 
                                        try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1491
 
                                        if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1492
 
                                        
1493
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1494
 
                                        {
1495
 
                                                try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1496
 
                                                if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1497
 
                                        }
1498
 
                                }
1499
 
                                if (o->m_bTimeDev)
1500
 
                                {
1501
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1502
 
                                        {
1503
 
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[1]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1504
 
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1505
 
                                                
1506
 
                                                sprintf(buf,"vdf_timedev_%s%s.csv",o->m_pVDF[z0]->m_sName,multibuf);
1507
 
                                                o->m_pVDF[z0]->m_fSpeed[0] = OpenFileWrite(buf,true);
1508
 
                                        } else
1509
 
                                        {
1510
 
                                                try { o->m_pVDF[z0]->m_fSpeed = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1511
 
                                                if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1512
 
                                                
1513
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1514
 
                                                {
1515
 
                                                        sprintf(buf,"vdf_timedev_%s_ref%d%s.csv",o->m_pVDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1516
 
                                                        o->m_pVDF[z0]->m_fSpeed[z2] = OpenFileWrite(buf,true);
1517
 
                                                }
1518
 
                                        }
1519
 
                                        if (o->m_bCombinedPlot)
1520
 
                                        {
1521
 
                                                try { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = NULL; }
1522
 
                                                if (o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1523
 
                                                
1524
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetTitle("Combined velocity time development/histogram");
1525
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSubTitle(o->m_pVDF[z0]->m_sShortName);
1526
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1527
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1528
 
                                                                for (z4=0;z4<o->m_pVDF[z0]->m_iCombinations;z4++)
1529
 
                                                                {
1530
 
                                                                        o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->AddDataset();
1531
 
                                                                        if (g_iTrajSteps != -1)
1532
 
                                                                                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);
1533
 
                                                                        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);
1534
 
                                                                        if (o->m_bCombinedGreyMode)
1535
 
                                                                        {
1536
 
                                                                                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;
1537
 
                                                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1538
 
                                                                        }
1539
 
//                                                                      o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
1540
 
                                                                }
1541
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelX("Time [ps] / VDF(r)");
1542
 
                                                o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelY("Velocity [pm/ps]");
1543
 
                                        }
1544
 
                                } // END IF TIMEDEV
1545
 
 
1546
 
                                if (o->m_bTimeDiff)
1547
 
                                        o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
1548
 
 
1549
 
                                if (g_bDeriv)
1550
 
                                        o->m_pVDF[z0]->InitDeriv();
1551
 
                        } // END IF VDF
1552
 
 
1553
 
                        if (g_bDDF && (o->m_pDDF[z0] != NULL))
1554
 
                        {
1555
 
                                mprintf("  Creating DDF...\n");
1556
 
                                o->m_pDDF[z0]->m_pDDF->m_fMinVal = o->m_pDDF[z0]->m_fMinAngle;
1557
 
                                o->m_pDDF[z0]->m_pDDF->m_fMaxVal = o->m_pDDF[z0]->m_fMaxAngle;
1558
 
                                o->m_pDDF[z0]->m_pDDF->m_iResolution = o->m_pDDF[z0]->m_iResolution;
1559
 
                                o->m_pDDF[z0]->m_pDDF->m_iHistogramRes = o->m_pDDF[z0]->m_iHistogramRes;
1560
 
                                if (o->m_pDDF[z0]->m_bCosine)
1561
 
                                        o->m_pDDF[z0]->m_pDDF->SetLabelX("Cos(Dihedral Angle)");
1562
 
                                                else o->m_pDDF[z0]->m_pDDF->SetLabelX("Dihedral Angle (Degree)");
1563
 
                                o->m_pDDF[z0]->m_pDDF->SetLabelY("Occurrence");
1564
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
1565
 
                                        o->m_pDDF[z0]->m_pDDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1566
 
                                                else o->m_pDDF[z0]->m_pDDF->Create();
1567
 
                                if (o->m_bSecondShowMol && (z0 == 1))
1568
 
                                {
1569
 
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1570
 
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1571
 
                                        
1572
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1573
 
                                        {
1574
 
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1575
 
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1576
 
                                        }
1577
 
                                } else
1578
 
                                {
1579
 
                                        try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1580
 
                                        if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1581
 
                                        
1582
 
                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1583
 
                                        {
1584
 
                                                try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1585
 
                                                if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1586
 
                                        }
1587
 
                                                
1588
 
                                        if (o->m_pDDF[z0]->m_bRotate)
1589
 
                                        {
1590
 
                                                for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
1591
 
                                                {
1592
 
                                                        o->m_pDDF[z0]->m_faLastData.Add(0);
1593
 
                                                        o->m_pDDF[z0]->m_laRotation.Add(0);
1594
 
                                                }
1595
 
                                        }
1596
 
                                }
1597
 
                                if (o->m_bTimeDev)
1598
 
                                {
1599
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1600
 
                                        {
1601
 
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1602
 
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1603
 
                                                
1604
 
                                                sprintf(buf,"ddf_timedev_%s%s.csv",o->m_pDDF[z0]->m_sName,multibuf);
1605
 
                                                o->m_pDDF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1606
 
                                        } else
1607
 
                                        {
1608
 
                                                try { o->m_pDDF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1609
 
                                                if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1610
 
                                                
1611
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1612
 
                                                {
1613
 
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1614
 
                                                        o->m_pDDF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1615
 
                                                }
1616
 
                                        }
1617
 
                                        if (o->m_bCombinedPlot)
1618
 
                                        {
1619
 
                                                try { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = NULL; }
1620
 
                                                if (o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1621
 
                                                
1622
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetTitle("Combined dihedral time development/histogram");
1623
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSubTitle(o->m_pDDF[z0]->m_sShortName);
1624
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1625
 
                                                        for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1626
 
                                                                for (z4=0;z4<o->m_pDDF[z0]->m_iCombinations;z4++)
1627
 
                                                                {
1628
 
                                                                        o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->AddDataset();
1629
 
                                                                        if (g_iTrajSteps != -1)
1630
 
                                                                                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);
1631
 
                                                                        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);
1632
 
                                                                        if (o->m_bCombinedGreyMode)
1633
 
                                                                        {
1634
 
                                                                                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;
1635
 
                                                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1636
 
                                                                        }
1637
 
                                //                                      o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pDDF[z0]->m_iCombinations+z4,2.0f);
1638
 
                                                                }
1639
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelX("Time [ps] / DDF(r)");
1640
 
                                                o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelY("Dihedral [Degree]");
1641
 
                                        }
1642
 
                                } // END IF TIMEDEV
1643
 
 
1644
 
                                if (o->m_bTimeDiff)
1645
 
                                        o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
1646
 
 
1647
 
                                if (g_bDeriv)
1648
 
                                        o->m_pDDF[z0]->InitDeriv();
1649
 
                        } // END IF DDF
1650
 
                } // END FOR z0
1651
 
 
1652
 
                if (g_bCDF)
1653
 
                {
1654
 
                        mprintf("  Creating CDF...\n");
1655
 
                        if (g_iCDFChannels == 2)
1656
 
                        {
1657
 
                                try { o->m_pCDF->m_p2DF = new C2DF(); } catch(...) { o->m_pCDF->m_p2DF = NULL; }
1658
 
                                if (o->m_pCDF->m_p2DF == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1659
 
                                
1660
 
                                buf[0] = 0;
1661
 
                                for (z2=0;z2<2;z2++)
1662
 
                                {
1663
 
                                        o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1664
 
                                        switch(g_iObsChannel[z2])
1665
 
                                        {
1666
 
                                                case 0:
1667
 
                                                        strcat(buf,"_rdf");
1668
 
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
1669
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
1670
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
1671
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
1672
 
                                                        break;
1673
 
                                                case 1:
1674
 
                                                        strcat(buf,"_adf");
1675
 
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
1676
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
1677
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
1678
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
1679
 
                                                        break;
1680
 
                                                case 2:
1681
 
                                                        strcat(buf,"_ddf");
1682
 
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
1683
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
1684
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
1685
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
1686
 
                                                        break;
1687
 
                                                case 3:
1688
 
                                                        strcat(buf,"_dipole");
1689
 
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
1690
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
1691
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
1692
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
1693
 
                                                        break;
1694
 
                                                case 4:
1695
 
                                                        strcat(buf,"_vdf");
1696
 
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
1697
 
                                                        o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
1698
 
                                                        o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
1699
 
                                                        o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
1700
 
                                                        break;
1701
 
                                        }
1702
 
                                }
1703
 
                                o->m_pCDF->m_p2DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
1704
 
                                o->m_pCDF->m_p2DF->Create();
1705
 
                                switch(g_iObsChannel[0])
1706
 
                                {
1707
 
                                        case 0:
1708
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
1709
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
1710
 
                                                break;
1711
 
                                        case 1:
1712
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
1713
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
1714
 
                                                break;
1715
 
                                        case 2:
1716
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
1717
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
1718
 
                                                break;
1719
 
                                        case 3:
1720
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
1721
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
1722
 
                                                break;
1723
 
                                        case 4:
1724
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
1725
 
                                                o->m_pCDF->m_p2DF->SetLabelX(buf2);
1726
 
                                                break;
1727
 
                                }
1728
 
                                switch(g_iObsChannel[1])
1729
 
                                {
1730
 
                                        case 0:
1731
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
1732
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
1733
 
                                                break;
1734
 
                                        case 1:
1735
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
1736
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
1737
 
                                                break;
1738
 
                                        case 2:
1739
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
1740
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
1741
 
                                                break;
1742
 
                                        case 3:
1743
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
1744
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
1745
 
                                                break;
1746
 
                                        case 4:
1747
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
1748
 
                                                o->m_pCDF->m_p2DF->SetLabelY(buf2);
1749
 
                                                break;
1750
 
                                }
1751
 
                        } // END IF CHANNELS == 2
1752
 
 
1753
 
                        if (g_iCDFChannels == 3)
1754
 
                        {
1755
 
                                try { o->m_pCDF->m_p3DF = new C3DF(); } catch(...) { o->m_pCDF->m_p3DF = NULL; }
1756
 
                                if (o->m_pCDF->m_p3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1757
 
                                
1758
 
                                buf[0] = 0;
1759
 
                                for (z2=0;z2<g_iCDFChannels;z2++)
1760
 
                                {
1761
 
                                        o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1762
 
                                        switch(g_iObsChannel[z2])
1763
 
                                        {
1764
 
                                                case 0:
1765
 
                                                        strcat(buf,"_rdf");
1766
 
                                                        strcat(buf,o->m_pRDF[z2]->m_sShortName);
1767
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
1768
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
1769
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
1770
 
                                                        break;
1771
 
                                                case 1:
1772
 
                                                        strcat(buf,"_adf");
1773
 
                                                        strcat(buf,o->m_pADF[z2]->m_sShortName);
1774
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
1775
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
1776
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
1777
 
                                                        break;
1778
 
                                                case 2:
1779
 
                                                        strcat(buf,"_ddf");
1780
 
                                                        strcat(buf,o->m_pDDF[z2]->m_sShortName);
1781
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
1782
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
1783
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
1784
 
                                                        break;
1785
 
                                                case 3:
1786
 
                                                        strcat(buf,"_dipole");
1787
 
                                                        strcat(buf,o->m_pDipDF[z2]->m_sShortName);
1788
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
1789
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
1790
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
1791
 
                                                        break;
1792
 
                                                case 4:
1793
 
                                                        strcat(buf,"_vdf");
1794
 
                                                        strcat(buf,o->m_pVDF[z2]->m_sShortName);
1795
 
                                                        o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
1796
 
                                                        o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
1797
 
                                                        o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
1798
 
                                                        break;
1799
 
                                        }
1800
 
                                }
1801
 
                                o->m_pCDF->m_p3DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
1802
 
                                o->m_pCDF->m_p3DF->Create();
1803
 
                                switch(g_iObsChannel[0])
1804
 
                                {
1805
 
                                        case 0:
1806
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
1807
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
1808
 
                                                break;
1809
 
                                        case 1:
1810
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
1811
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
1812
 
                                                break;
1813
 
                                        case 2:
1814
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
1815
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
1816
 
                                                break;
1817
 
                                        case 3:
1818
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
1819
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
1820
 
                                                break;
1821
 
                                        case 4:
1822
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
1823
 
                                                o->m_pCDF->m_p3DF->SetLabelX(buf2);
1824
 
                                                break;
1825
 
                                }
1826
 
                                switch(g_iObsChannel[1])
1827
 
                                {
1828
 
                                        case 0:
1829
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
1830
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
1831
 
                                                break;
1832
 
                                        case 1:
1833
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
1834
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
1835
 
                                                break;
1836
 
                                        case 2:
1837
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
1838
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
1839
 
                                                break;
1840
 
                                        case 3:
1841
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
1842
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
1843
 
                                                break;
1844
 
                                        case 4:
1845
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
1846
 
                                                o->m_pCDF->m_p3DF->SetLabelY(buf2);
1847
 
                                                break;
1848
 
                                }
1849
 
                                switch(g_iObsChannel[2])
1850
 
                                {
1851
 
                                        case 0:
1852
 
                                                sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
1853
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1854
 
                                                break;
1855
 
                                        case 1:
1856
 
                                                sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
1857
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1858
 
                                                break;
1859
 
                                        case 2:
1860
 
                                                sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
1861
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1862
 
                                                break;
1863
 
                                        case 3:
1864
 
                                                sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
1865
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1866
 
                                                break;
1867
 
                                        case 4:
1868
 
                                                sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
1869
 
                                                o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1870
 
                                                break;
1871
 
                                }
1872
 
 
1873
 
                                // Fuer jede C3DF noch die 3 C2DFs erzeugen
1874
 
                                for (z3=0;z3<3;z3++)
1875
 
                                {
1876
 
                                        try { o->m_pCDF->m_p3DF->m_p2DF[z3] = new C2DF(); } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3] = NULL; }
1877
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1878
 
                                        
1879
 
                                        buf3[0] = 0;
1880
 
                                        switch(z3)
1881
 
                                        {
1882
 
                                                case 0:
1883
 
                                                        tia[0] = 0;
1884
 
                                                        tia[1] = 1;
1885
 
                                                        break;
1886
 
                                                case 1:
1887
 
                                                        tia[0] = 0;
1888
 
                                                        tia[1] = 2;
1889
 
                                                        break;
1890
 
                                                case 2:
1891
 
                                                        tia[0] = 1;
1892
 
                                                        tia[1] = 2;
1893
 
                                                        break;
1894
 
                                        }
1895
 
                                        for (z2=0;z2<2;z2++)
1896
 
                                        {
1897
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iRes[z2] = o->m_pCDF->m_iResolution[tia[z2]];
1898
 
                                                switch(g_iObsChannel[tia[z2]])
1899
 
                                                {
1900
 
                                                        case 0:
1901
 
                                                                strcat(buf3,"_rdf");
1902
 
                                                                strcat(buf3,o->m_pRDF[tia[z2]]->m_sShortName);
1903
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pRDF[tia[z2]]->m_fMinDist;
1904
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pRDF[tia[z2]]->m_fMaxDist;
1905
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pRDF[tia[z2]]->m_pRDF;
1906
 
                                                                break;
1907
 
                                                        case 1:
1908
 
                                                                strcat(buf3,"_adf");
1909
 
                                                                strcat(buf3,o->m_pADF[tia[z2]]->m_sShortName);
1910
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pADF[tia[z2]]->m_fMinAngle;
1911
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pADF[tia[z2]]->m_fMaxAngle;
1912
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pADF[tia[z2]]->m_pADF;
1913
 
                                                                break;
1914
 
                                                        case 2:
1915
 
                                                                strcat(buf3,"_ddf");
1916
 
                                                                strcat(buf3,o->m_pDDF[tia[z2]]->m_sShortName);
1917
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDDF[tia[z2]]->m_fMinAngle;
1918
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDDF[tia[z2]]->m_fMaxAngle;
1919
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDDF[tia[z2]]->m_pDDF;
1920
 
                                                                break;
1921
 
                                                        case 3:
1922
 
                                                                strcat(buf3,"_dipole");
1923
 
                                                                strcat(buf3,o->m_pDipDF[tia[z2]]->m_sShortName);
1924
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMin;
1925
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMax;
1926
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDipDF[tia[z2]]->m_pDipoleDF;
1927
 
                                                                break;
1928
 
                                                        case 4:
1929
 
                                                                strcat(buf3,"_vdf");
1930
 
                                                                strcat(buf3,o->m_pVDF[tia[z2]]->m_sShortName);
1931
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pVDF[tia[z2]]->m_fMinSpeed;
1932
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pVDF[tia[z2]]->m_fMaxSpeed;
1933
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pVDF[tia[z2]]->m_pVDF;
1934
 
                                                                break;
1935
 
                                                }
1936
 
                                        }
1937
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
1938
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Create();
1939
 
                                        switch(g_iObsChannel[tia[0]])
1940
 
                                        {
1941
 
                                                case 0:
1942
 
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
1943
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1944
 
                                                        break;
1945
 
                                                case 1:
1946
 
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
1947
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1948
 
                                                        break;
1949
 
                                                case 2:
1950
 
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
1951
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1952
 
                                                        break;
1953
 
                                                case 3:
1954
 
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[0]]->m_sShortName);
1955
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1956
 
                                                        break;
1957
 
                                                case 4:
1958
 
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[0]]->m_sShortName);
1959
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1960
 
                                                        break;
1961
 
                                        }
1962
 
                                        switch(g_iObsChannel[tia[1]])
1963
 
                                        {
1964
 
                                                case 0:
1965
 
                                                        sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
1966
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1967
 
                                                        break;
1968
 
                                                case 1:
1969
 
                                                        sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
1970
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1971
 
                                                        break;
1972
 
                                                case 2:
1973
 
                                                        sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
1974
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1975
 
                                                        break;
1976
 
                                                case 3:
1977
 
                                                        sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[1]]->m_sShortName);
1978
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1979
 
                                                        break;
1980
 
                                                case 4:
1981
 
                                                        sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[1]]->m_sShortName);
1982
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1983
 
                                                        break;
1984
 
                                        }
1985
 
                                        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; }
1986
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1987
 
                                        
1988
 
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName,buf3);
1989
 
                                        sprintf(buf3,"cdf_2");
1990
 
                                        strcat(buf3,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName);
1991
 
 
1992
 
                                        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; }
1993
 
                                        if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1994
 
                                        
1995
 
                                        strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
1996
 
                                } // END FOR z3
1997
 
                        } // END IF CHANNELS == 3
1998
 
 
1999
 
                        try { o->m_pCDF->m_sShortName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sShortName = NULL; }
2000
 
                        if (o->m_pCDF->m_sShortName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2001
 
                        
2002
 
                        strcpy(o->m_pCDF->m_sShortName,buf);
2003
 
                        sprintf(buf,"cdf_%d",g_iCDFChannels);
2004
 
                        strcat(buf,o->m_pCDF->m_sShortName);
2005
 
 
2006
 
                        try { o->m_pCDF->m_sName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sName = NULL; }
2007
 
                        if (o->m_pCDF->m_sName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2008
 
                        
2009
 
                        strcpy(o->m_pCDF->m_sName,buf);
2010
 
                        if (o->m_pCDF->m_bDumpDat)
2011
 
                        {
2012
 
                                sprintf(buf,"cdfdump_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2013
 
                                o->m_pCDF->m_fDump = OpenFileWrite(buf,true);
2014
 
                                fprintf(o->m_pCDF->m_fDump,"#  step;  RM;  OM1;  OM2;  channels\n");
2015
 
                        }
2016
 
                        if (o->m_bTimeDev)
2017
 
                        {
2018
 
                                if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
2019
 
                                {
2020
 
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[1]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2021
 
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2022
 
                                        
2023
 
                                        sprintf(buf,"cdf_timedev_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2024
 
                                        o->m_pCDF->m_fTimeDev[0] = OpenFileWrite(buf,true);
2025
 
                                } else
2026
 
                                {
2027
 
                                        try { o->m_pCDF->m_fTimeDev = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2028
 
                                        if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2029
 
                                        
2030
 
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2031
 
                                        {
2032
 
                                                sprintf(buf,"cdf_timedev_%dd%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
2033
 
                                                o->m_pCDF->m_fTimeDev[z2] = OpenFileWrite(buf,true);
2034
 
                                        }
2035
 
                                }
2036
 
                                if (o->m_pCDF->m_bTDAnimation)
2037
 
                                {
2038
 
                                        try { o->m_pCDF->m_pTDAPlot = new CGrace(); } catch(...) { o->m_pCDF->m_pTDAPlot = NULL; }
2039
 
                                        if (o->m_pCDF->m_pTDAPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2040
 
                                        
2041
 
                                        o->m_pCDF->m_pTDAPlot->SetTitle("CDF Time Development");
2042
 
                                        o->m_pCDF->m_pTDAPlot->SetSubTitle(&o->m_pCDF->m_sShortName[1]);
2043
 
                                        for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2044
 
                                        {
2045
 
                                                for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
2046
 
                                                {
2047
 
                                                        for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
2048
 
                                                        {
2049
 
                                                                o->m_pCDF->m_pTDAPlot->AddDataset();
2050
 
                                                                if (g_iTrajSteps != -1)
2051
 
                                                                        o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*g_iTrajSteps);
2052
 
                                                                o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*100);
2053
 
                                                        }
2054
 
                                                }
2055
 
                                        }
2056
 
                                        o->m_pCDF->m_pTDAPlot->SetRangeX(o->m_pCDF->m_p2DF->m_fMinVal[0],o->m_pCDF->m_p2DF->m_fMaxVal[0]);
2057
 
                                        o->m_pCDF->m_pTDAPlot->SetRangeY(o->m_pCDF->m_p2DF->m_fMinVal[1],o->m_pCDF->m_p2DF->m_fMaxVal[1]);
2058
 
                                        o->m_pCDF->m_pTDAPlot->MakeTicks();
2059
 
                                        o->m_pCDF->m_pTDAPlot->SetLabelX(o->m_pCDF->m_p2DF->m_sLabelX);
2060
 
                                        o->m_pCDF->m_pTDAPlot->SetLabelY(o->m_pCDF->m_p2DF->m_sLabelY);
2061
 
                                }
2062
 
                        }
2063
 
                } // END IF CDF
2064
 
 
2065
 
                if (g_bVACF)
2066
 
                {
2067
 
                        mprintf("  Creating VACF...\n");
2068
 
                        o->m_pVACF->Create();
2069
 
                        if (g_bVACFCacheMode)
2070
 
                        {
2071
 
                                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)));
2072
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
2073
 
                                {
2074
 
                                        try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
2075
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2076
 
                                        
2077
 
                                        if (g_iTrajSteps != -1)
2078
 
                                        {
2079
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
2080
 
                                                ptfa->SetGrow((long)(g_iTrajSteps*0.1));
2081
 
                                        } else ptfa->SetGrow(1000);
2082
 
                                        o->m_pVACF->m_oaCache.Add(ptfa);
2083
 
                                }
2084
 
                        } else
2085
 
                        {
2086
 
                                if (o->m_pVACF->m_iSize > g_iStepHistory)
2087
 
                                        g_iStepHistory = o->m_pVACF->m_iSize;
2088
 
                        }
2089
 
                }
2090
 
 
2091
 
                if (g_bDipACF)
2092
 
                {
2093
 
                        mprintf("  Creating DipACF...\n");
2094
 
                        o->m_pDipACF->Create();
2095
 
                }
2096
 
 
2097
 
                if (g_bMSD)
2098
 
                {
2099
 
                        mprintf("  Creating MSD...\n");
2100
 
                        o->m_pMSD->m_pMSD->m_fMinVal = 0.0f;
2101
 
                        o->m_pMSD->m_pMSD->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength*g_iStride/1000.0;
2102
 
                        o->m_pMSD->m_pMSD->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2103
 
                        o->m_pMSD->m_pMSD->Create();
2104
 
                        if (g_bMSDCacheMode)
2105
 
                        {
2106
 
                                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)));
2107
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2108
 
                                {
2109
 
                                        try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
2110
 
                                        if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2111
 
                                        
2112
 
                                        if (g_iTrajSteps != -1)
2113
 
                                        {
2114
 
                                                ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.1));
2115
 
                                                ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.1));
2116
 
                                        } else ptfa->SetGrow(1000);
2117
 
                                        o->m_pMSD->m_oaCache.Add(ptfa);
2118
 
                                }
2119
 
                                if (o->m_pMSD->m_bSplit)
2120
 
                                {
2121
 
                                        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)));
2122
 
                                        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; }
2123
 
                                        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__);
2124
 
                                        
2125
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2126
 
                                        {
2127
 
                                                try { o->m_pMSD->m_pSplitMSD[z2] = new CAF(); } catch(...) { o->m_pMSD->m_pSplitMSD[z2] = NULL; }
2128
 
                                                if (o->m_pMSD->m_pSplitMSD[z2] == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2129
 
                                                
2130
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMinVal = 0.0f;
2131
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength/1000.0;
2132
 
                                                o->m_pMSD->m_pSplitMSD[z2]->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2133
 
                                                o->m_pMSD->m_pSplitMSD[z2]->Create();
2134
 
                                        }
2135
 
                                }
2136
 
                        } else
2137
 
                        {
2138
 
                                if (!g_bMSDCacheMode)
2139
 
                                {
2140
 
                                        if (o->m_pMSD->m_iResolution > g_iStepHistory)
2141
 
                                                g_iStepHistory = o->m_pMSD->m_iResolution;
2142
 
                                }
2143
 
                        }
2144
 
                }
2145
 
 
2146
 
                if (g_bRevSDF)
2147
 
                {
2148
 
                        mprintf("  Creating Pseudo SDF...\n");
2149
 
                        o->m_pRevSDF->m_p2DF->m_fMinVal[0] = -o->m_pRevSDF->m_fRadius;
2150
 
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[0] = o->m_pRevSDF->m_fRadius;
2151
 
                        o->m_pRevSDF->m_p2DF->m_fMinVal[1] = -o->m_pRevSDF->m_fRadius;
2152
 
                        o->m_pRevSDF->m_p2DF->m_fMaxVal[1] = o->m_pRevSDF->m_fRadius;
2153
 
                        o->m_pRevSDF->m_p2DF->m_iRes[0] = o->m_pRevSDF->m_iResolution;
2154
 
                        o->m_pRevSDF->m_p2DF->m_iRes[1] = o->m_pRevSDF->m_iResolution;
2155
 
                        o->m_pRevSDF->m_p2DF->SetLabelX("X [pm]");
2156
 
                        o->m_pRevSDF->m_p2DF->SetLabelY("Y [pm]");
2157
 
                        o->m_pRevSDF->m_p2DF->m_iHistogramRes = o->m_pRevSDF->m_iHistogramRes;
2158
 
                        o->m_pRevSDF->m_p2DF->Create();
2159
 
 
2160
 
                        try { o->m_pRevSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pRevSDF->m_vaData = NULL; }
2161
 
                        if (o->m_pRevSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2162
 
                }
2163
 
        }
2164
 
 
2165
 
        if (g_bBondACF)
2166
 
        {
2167
 
                mprintf("  Creating BondACF...\n");
2168
 
                for (z=0;z<g_oaSingleMolecules.GetSize();z++)
2169
 
                {
2170
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z];
2171
 
                        for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
2172
 
                        {
2173
 
                                bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
2174
 
                                for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
2175
 
                                {
2176
 
                                        if (g_iTrajSteps != -1)
2177
 
                                        {
2178
 
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetMaxSize(g_iTrajSteps);
2179
 
                                                ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(g_iTrajSteps/10);
2180
 
                                        } else ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(10000);
2181
 
                                }
2182
 
                        }
2183
 
                }
2184
 
        }
2185
 
 
2186
 
        if (g_bClusterAnalysis)
2187
 
        {
2188
 
                mprintf("  Creating Cluster Analysis...\n");
2189
 
                g_pClusterAnalysis->Create();
2190
 
        }
2191
 
 
2192
 
        if (g_bMicroHet)
2193
 
        {
2194
 
                mprintf("  Creating Microheterogeneity Analysis...\n");
2195
 
                g_pMicroHet->Create();
2196
 
        }
2197
 
 
2198
 
        if (g_iRefSystemDim == 3) 
2199
 
                g_pRefMol.SetSize(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
2200
 
        if ((g_iRefSystemDim == 3) && !g_bMiddleAvg) // Einfach das erstbeste Molekuel als Referenz nehmen
2201
 
        {
2202
 
                mprintf("Creating reference molecule from first time step...");
2203
 
                g_TimeStep.CalcCenters();
2204
 
                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])];
2205
 
                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])];
2206
 
                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])];
2207
 
                vec2 -= vec1;
2208
 
                vec3 -= vec1;
2209
 
                mat.MatUltra(vec2,vec3);
2210
 
                cc = 0;
2211
 
                // Jeden Atomtyp des Zielmolekuels durchgehen
2212
 
                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
2213
 
                {
2214
 
                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
2215
 
                        {
2216
 
                                vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[z3])->GetAt(z4)];
2217
 
                                vec2 -= vec1;
2218
 
                                g_pRefMol[cc] = mat * vec2;
2219
 
                                cc++;
2220
 
                        }
2221
 
                }
2222
 
                mprintf("Done.\n");
2223
 
        } // Ende Referenzbestimmung
2224
 
 
2225
 
        unsigned int *g_pSwapMatrix;
2226
 
 
2227
 
        if (g_iSwapAtoms)
2228
 
        {
2229
 
                mprintf("Creating Reference Molecule Swap Matrix...\n");
2230
 
 
2231
 
                try { g_pSwapMatrix = new unsigned int[((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes]; } catch(...) { g_pSwapMatrix = NULL; }
2232
 
                if (g_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__);
2233
 
                
2234
 
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes;z++)
2235
 
                        g_pSwapMatrix[z] = 0;
2236
 
        }
2237
 
 
2238
 
        g_iCurrentTimeStep = -1;
2239
 
        g_iNextTimeStep = -1;
2240
 
        g_iLastTimeStep = -1;
2241
 
 
2242
 
        try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
2243
 
        if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2244
 
 
2245
 
        if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
2246
 
        {
2247
 
                mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
2248
 
 
2249
 
                g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
2250
 
                if (g_fPos == NULL)
2251
 
                {
2252
 
                        eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
2253
 
                        return 0;
2254
 
                }
2255
 
                g_iSteps = 0; // Der Zaehler der Zeitschritte
2256
 
                if (g_iScanNbhStart != 0)
2257
 
                {
2258
 
                        mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
2259
 
                        mprintf(WHITE,"  [");
2260
 
                        for (z=0;z<g_iScanNbhStart;z++)
2261
 
                        {
2262
 
                                if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
2263
 
                                        mprintf(WHITE,"#");
2264
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
2265
 
                                        break;
2266
 
                        }
2267
 
                        mprintf(WHITE,"]\n");
2268
 
                }
2269
 
                while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2270
 
                {
2271
 
                        for (z=0;z<(g_iScanNbhStride-1);z++)
2272
 
                                if (!g_TimeStep.SkipTimestep(g_fPos))
2273
 
                                        goto _endnbs;
2274
 
                        if (!g_TimeStep.ReadTimestep(g_fPos,false))
2275
 
                                goto _endnbs;
2276
 
                        if (g_TimeStep.m_iGesAtomCount == 0)
2277
 
                                goto _endnbs;
2278
 
//                      g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
2279
 
//                      g_TimeStep.UniteMolecules();
2280
 
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2281
 
                        g_TimeStep.CalcCenters();
2282
 
        
2283
 
                        if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
2284
 
                        {
2285
 
                                if ((g_iSteps % (200*g_iScanNbhStride)) == 0) 
2286
 
                                        mprintf("\nStep %6d...",g_iSteps);
2287
 
                                                else mprintf(".");
2288
 
                        }
2289
 
        
2290
 
                        g_iSteps+=g_iScanNbhStride;
2291
 
        
2292
 
//                      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])];
2293
 
        
2294
 
//                      g_TimeStep.CenterPos(vec1);
2295
 
        
2296
 
//                      if (g_bFold)
2297
 
//                              g_TimeStep.FoldMolecules();
2298
 
 
2299
 
//                      for (z=0;z<g_oaNbSearches.GetSize();z++)
2300
 
                        g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep,g_bFold);
2301
 
 
2302
 
                        if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
2303
 
                                break;
2304
 
                }
2305
 
                _endnbs:
2306
 
 
2307
 
                fclose(g_fPos);
2308
 
                mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
2309
 
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2310
 
                {
2311
 
                        mprintf(YELLOW,"\n*** Choose Neighbors\n");
2312
 
//                      nbset = (CNbSet*)g_oaNbSearches[z0];
2313
 
                        // Sort Neighbors after time they have been neighbors
2314
 
                        for (z=0;z<g_pNbSet->m_oaConditionGroups.GetSize();z++)
2315
 
                        {
2316
 
                                if (g_pNbSet->m_oaConditionGroups[z] == NULL)
2317
 
                                        continue;
2318
 
                                cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
2319
 
 
2320
 
                                try { tpi = new int[((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()]; } catch(...) { tpi = NULL; }
2321
 
                                if (tpi == NULL) NewException((double)((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()*sizeof(int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2322
 
                                
2323
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2324
 
                                {
2325
 
                                        cg->m_bAlwaysTrue[z2] = false;
2326
 
                                        tpi[z2] = -1;
2327
 
                                }
2328
 
                                ti3 = 0;
2329
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2330
 
                                {
2331
 
                                        ti = 0;
2332
 
                                        for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
2333
 
                                        {
2334
 
                                                for (z4=0;z4<z2;z4++)
2335
 
                                                        if (tpi[z4] == z3)
2336
 
                                                                goto _nbhave;
2337
 
                                                if (cg->m_iPassCounter[z3] > ti)
2338
 
                                                {
2339
 
                                                        ti = cg->m_iPassCounter[z3];
2340
 
                                                        ti2 = z3;
2341
 
                                                }
2342
 
_nbhave:;
2343
 
                                        }
2344
 
                                        if (ti == 0)
2345
 
                                                break;
2346
 
                                        ti3++;
2347
 
                                        tpi[z2] = ti2;
2348
 
                                }
2349
 
                                mprintf(WHITE,"\n  Molecule type %s. %d neighbors found in total:\n",((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2350
 
                                for (z2=0;z2<ti3;z2++)
2351
 
                                        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]]);
2352
 
 
2353
 
                                if (ti3 != 0)
2354
 
                                {
2355
 
                                        z3 = AskUnsignedInteger("\nUse how many of the frequentiest neighbors for molecule %s? [%d] ",ti3,((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2356
 
                                        for (z2=0;z2<z3;z2++)
2357
 
                                                cg->m_bAlwaysTrue[tpi[z2]] = true;
2358
 
                                }
2359
 
 
2360
 
                                delete[] tpi;
2361
 
                                cg->m_bInactive = true;
2362
 
                        }
2363
 
                }
2364
 
                mprintf("\n");
2365
 
//              for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2366
 
                if (g_bSaveRefWithEnv)
2367
 
                {
2368
 
                        mprintf("Adding reference molecule to neighborhood...\n");
2369
 
                        g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
2370
 
                }
2371
 
 
2372
 
                g_pNbSet->Reset();
2373
 
                g_pNbSet->Dump();
2374
 
        }
2375
 
 
2376
 
        if (g_bVFDF)
2377
 
        {
2378
 
                g_iVFCorrCount = 0;
2379
 
                for (z=0;z<g_oaMolecules.GetSize();z++)
2380
 
                {
2381
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
2382
 
                        {
2383
 
                                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);
2384
 
//                              FreeFileName(buf);
2385
 
                                g_fVFCorr[g_iVFCorrCount] = OpenFileWrite(buf,true);
2386
 
                                g_iVFCorrCount++;
2387
 
                        }
2388
 
                }
2389
 
        }
2390
 
 
2391
 
        if (g_bReact)
2392
 
        {
2393
 
                g_pReact->Create();
2394
 
                g_pReact->InitMolecules(&g_TimeStep);
2395
 
        }
2396
 
 
2397
 
        if (g_bSaveRefEnv)
2398
 
        {
2399
 
                mprintf("\n");
2400
 
                sprintf(g_sRefEnv,"refenv_%s.%d.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1);
2401
 
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
2402
 
                        if (g_pNbAll->m_waMolCount[z] != 0)
2403
 
                        {
2404
 
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2405
 
                                strcat(g_sRefEnv,buf2);
2406
 
                        }*/
2407
 
/*              if (!g_bDynamicNeighbor)
2408
 
                        strcat(g_sRefEnv,"static.");
2409
 
                if (g_bRefEnvCenter)
2410
 
                        strcat(g_sRefEnv,"center.");
2411
 
                if (g_bRefEnvFix)
2412
 
                        strcat(g_sRefEnv,"fix.");
2413
 
                if (g_bScanNeighbors)
2414
 
                        strcat(g_sRefEnv,"scannb.");*/
2415
 
                strcat(g_sRefEnv,multibuf);
2416
 
                strcat(g_sRefEnv,"xyz");
2417
 
                mprintf(">>> Saving reference environment as %s\n",g_sRefEnv);
2418
 
//              FreeFileName(g_sRefEnv);
2419
 
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2420
 
                mprintf("\n");
2421
 
        }
2422
 
 
2423
 
        if (g_bCutCluster)
2424
 
        {
2425
 
                mprintf("\n");
2426
 
                sprintf(g_sRefEnv,"cluster_%s.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
2427
 
/*              for (z=0;z<g_oaMolecules.GetSize();z++)
2428
 
                        if (g_pNbAll->m_waMolCount[z] != 0)
2429
 
                        {
2430
 
                                sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2431
 
                                strcat(g_sRefEnv,buf2);
2432
 
                        }*/
2433
 
/*              if (g_bRefEnvCenter)
2434
 
                        strcat(g_sRefEnv,"center.");
2435
 
                if (g_bRefEnvFix)
2436
 
                        strcat(g_sRefEnv,"fix.");*/
2437
 
                strcat(g_sRefEnv,multibuf);
2438
 
                strcat(g_sRefEnv,"xyz");
2439
 
                mprintf(">>> Saving cluster list as %s\n",g_sRefEnv);
2440
 
//              FreeFileName(g_sRefEnv);
2441
 
                g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2442
 
                mprintf("\n");
2443
 
        }
2444
 
 
2445
 
        if (g_bSaveJustTraj)
2446
 
        {
2447
 
                strcpy(buf,g_sInputTraj);
2448
 
                p = strrchr(buf,'/');
2449
 
                q = strrchr(buf,'\\');
2450
 
                if (q > p)
2451
 
                        p = q;
2452
 
                if (p == NULL)
2453
 
                        p = buf;
2454
 
                                else p++;
2455
 
                strcpy(buf2,p);
2456
 
                p = strrchr(buf2,'.');
2457
 
                if (p != NULL)
2458
 
                        *p = 0;
2459
 
                strcat(buf2,multibuf);
2460
 
                strcat(buf2,"_out.xyz");
2461
 
//              FreeFileName(buf);
2462
 
//              sprintf(buf,"traj_out.xyz");
2463
 
                mprintf("Saving processed trajectory as %s ...\n",buf2);
2464
 
                g_fSaveJustTraj = OpenFileWrite(buf2,true);
2465
 
        }
2466
 
 
2467
 
        mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
2468
 
 
2469
 
_beginmain:
2470
 
        if (ReactSecondRun)
2471
 
                mprintf(WHITE,"\n### Starting Second Pass ###\n");
2472
 
                        else mprintf(WHITE,"\n### Starting Main Analysis ###\n");
2473
 
 
2474
 
#ifdef TARGET_LINUX
2475
 
        if (!g_bMultiInterval || (multicounter == 0))
2476
 
        {
2477
 
                mprintf(WHITE,"\nHint: ");
2478
 
                mprintf("Press CTRL+C once to softly interrupt analysis and still write the results.\n");
2479
 
                mprintf("      Creating an empty file named EXIT (\"touch EXIT\") has the same effect.\n");
2480
 
        }
2481
 
#endif
2482
 
 
2483
 
        g_fPos = fopen(g_sInputTraj,"rb"); 
2484
 
        if (g_fPos == NULL)
2485
 
        {
2486
 
                eprintf("\nCould not open position trajectory.\n");
2487
 
                goto _ende;
2488
 
        }
2489
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
2490
 
        {
2491
 
                g_fNPTFile = fopen(g_sNPTFile,"rt");
2492
 
                if (g_fNPTFile == NULL)
2493
 
                {
2494
 
                        eprintf("\nCould not open cell vector file.\n");
2495
 
                        goto _ende;
2496
 
                }
2497
 
        }
2498
 
 
2499
 
        if (g_bUseVelocities && (g_sInputVel[0] != 0))
2500
 
        {
2501
 
                g_fVel = fopen(g_sInputVel,"rt"); 
2502
 
                if (g_fVel == NULL)
2503
 
                {
2504
 
                        eprintf("\nCould not open velocity trajectory.\n");
2505
 
                        goto _ende;
2506
 
                }
2507
 
        }
2508
 
        if (g_bUseForces && (g_sInputForce[0] != 0))
2509
 
        {
2510
 
                g_fForce = fopen(g_sInputForce,"rt"); 
2511
 
                if (g_fForce == NULL)
2512
 
                {
2513
 
                        eprintf("\nCould not open force trajectory.\n");
2514
 
                        goto _ende;
2515
 
                }
2516
 
        }
2517
 
 
2518
 
//      fff = fopen("dipole.txt","wt");
2519
 
 
2520
 
        if (g_iBeginStep != 0)
2521
 
        {
2522
 
                mprintf("\nFast-forwarding to step %d...\n",g_iBeginStep+1);
2523
 
//              mprintf("Seek: %d.\n",g_iFastForwardPos);
2524
 
                fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
2525
 
                if ((g_fVel != NULL) || (g_fForce != NULL) || ((g_bNPT) && (g_sNPTFile[0] != 0)))
2526
 
                {
2527
 
                        mprintf(WHITE,"  [");
2528
 
                        for (z=0;z<g_iBeginStep;z++)
2529
 
                        {
2530
 
/*                              if (!g_TimeStep.SkipTimestep(g_fPos))
2531
 
                                {
2532
 
                                        eprintf("Error. Unexpected end of position trajectory.\n");
2533
 
                                        goto _endmainloop;
2534
 
                                }*/
2535
 
                                if (fmod(z,g_iBeginStep/60.0) < 1.0)
2536
 
                                        mprintf(WHITE,"#");
2537
 
                                if (g_fVel != NULL)
2538
 
                                        if (!g_TimeStep.SkipTimestep(g_fVel))
2539
 
                                        {
2540
 
                                                eprintf("Error. Unexpected end of velocity trajectory.\n");
2541
 
                                                goto _endmainloop;
2542
 
                                        }
2543
 
                                if (g_fForce != NULL)
2544
 
                                        if (!g_TimeStep.SkipTimestep(g_fForce))
2545
 
                                        {
2546
 
                                                eprintf("Error. Unexpected end of force trajectory.\n");
2547
 
                                                goto _endmainloop;
2548
 
                                        }
2549
 
                                if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2550
 
                                        fgets(buf,256,g_fNPTFile);
2551
 
                        }
2552
 
                        mprintf(WHITE,"]\n");
2553
 
                }
2554
 
        }
2555
 
 
2556
 
        g_oaTimeSteps.SetSize(g_iStepHistory);
2557
 
        for (z=0;z<g_iStepHistory;z++)
2558
 
                g_oaTimeSteps[z] = NULL;
2559
 
 
2560
 
        g_iSteps = 0; // Der Zaehler der Zeitschritte
2561
 
        g_iCurrentTimeStep = 0;
2562
 
        t0 = time(NULL);
2563
 
        g_iClusterPos = 0;
2564
 
        sic = 0;
2565
 
        g_iSaveCondCount = 0;
2566
 
 
2567
 
        try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
2568
 
        if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2569
 
        
2570
 
        try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
2571
 
        if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2572
 
 
2573
 
        try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
2574
 
        if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2575
 
 
2576
 
        if (g_bDeriv)
2577
 
        {
2578
 
                g_iDerivNext = 2;
2579
 
                g_iDerivCurr = 1;
2580
 
                g_iDerivLast = 0;
2581
 
        }
2582
 
 
2583
 
 
2584
 
/*****************************************************************************
2585
 
*************** Beginn Hauptschleife *****************************************
2586
 
*****************************************************************************/
2587
 
 
2588
 
        g_iLastTimeStep = -1;
2589
 
        g_iDotCounter = 0;
2590
 
        g_bStepSkipped = false;
2591
 
        g_iFirstStepSkipped = -1;
2592
 
 
2593
 
        while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2594
 
        {
2595
 
                if (feof(g_fPos))
2596
 
                {
2597
 
                        mprintf("\nEnd of trajectory file reached.\n");
2598
 
                        break;
2599
 
                }
2600
 
                if (g_bAbortAnalysis)
2601
 
                {
2602
 
                        mprintf("\nAnalysis aborted by user.\n");
2603
 
                        break;
2604
 
                }
2605
 
                g_iCurrentTimeStep++;
2606
 
                if (g_iCurrentTimeStep >= g_iStepHistory)
2607
 
                        g_iCurrentTimeStep = 0;
2608
 
 
2609
 
                if (g_bDeriv)
2610
 
                {
2611
 
                        g_iDerivNext++;
2612
 
                        if (g_iDerivNext > 2)
2613
 
                                g_iDerivNext = 0;
2614
 
                        g_iDerivCurr++;
2615
 
                        if (g_iDerivCurr > 2)
2616
 
                                g_iDerivCurr = 0;
2617
 
                        g_iDerivLast++;
2618
 
                        if (g_iDerivLast > 2)
2619
 
                                g_iDerivLast = 0;
2620
 
                }
2621
 
 
2622
 
                for (z=0;z<(g_iStride-1);z++)
2623
 
                {
2624
 
                        if (!g_TimeStep.SkipTimestep(g_fPos))
2625
 
                        {
2626
 
                                if (!feof(g_fPos))
2627
 
                                        eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
2628
 
                                goto _endmainloop;
2629
 
                        }
2630
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2631
 
                                fgets(buf,256,g_fNPTFile);
2632
 
                        if (g_fVel != NULL)
2633
 
                                if (!g_TimeStep.SkipTimestep(g_fVel))
2634
 
                                {
2635
 
                                        eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
2636
 
                                        goto _endmainloop;
2637
 
                                }
2638
 
                        if (g_fForce != NULL)
2639
 
                                if (!g_TimeStep.SkipTimestep(g_fForce))
2640
 
                                {
2641
 
                                        eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
2642
 
                                        goto _endmainloop;
2643
 
                                }
2644
 
                }
2645
 
_readagain:
2646
 
                if (g_bUseVelocities || g_bUseForces)
2647
 
                {
2648
 
                        if (GetTimeStep(-1) == NULL)
2649
 
                        {
2650
 
                                try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
2651
 
                                if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2652
 
                        }
2653
 
                        if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
2654
 
                        {
2655
 
                                if (feof(g_fPos))
2656
 
                                {
2657
 
                                        mprintf("\nEnd of Trajectory File reached.\n");
2658
 
                                        break;
2659
 
                                }
2660
 
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
2661
 
                                goto _endmainloop;
2662
 
                        }
2663
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2664
 
                                GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
2665
 
                        if (g_bSkipDoubleSteps)
2666
 
                        {
2667
 
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
2668
 
                                {
2669
 
                                        if (!g_bStepSkipped)
2670
 
                                        {
2671
 
                                                g_bStepSkipped = true;
2672
 
                                                g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
2673
 
                                                mprintf("\nSkipping:");
2674
 
                                        }
2675
 
                                        mprintf("*");
2676
 
                                        goto _readagain;
2677
 
                                } else if (g_iFirstStepSkipped != -1)
2678
 
                                {
2679
 
                                        if (g_iFirstStepSkipped == GetTimeStep(-1)->ExtractNumber(g_iNumberPos))
2680
 
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
2681
 
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(-1)->ExtractNumber(g_iNumberPos));
2682
 
                                        g_iDotCounter = 0;
2683
 
                                        g_iFirstStepSkipped = -1;
2684
 
                                }
2685
 
                                if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
2686
 
                                        g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
2687
 
                        } 
2688
 
                        if (GetTimeStep(-1)->m_iGesAtomCount == 0)
2689
 
                        {
2690
 
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
2691
 
                                goto _endmainloop;
2692
 
                        }
2693
 
                        GetTimeStep(-1)->UniteMolecules(false);
2694
 
                        if (g_bRemoveCOM)
2695
 
                                GetTimeStep(-1)->CenterCOM();
2696
 
                        GetTimeStep(-1)->CalcCenters();
2697
 
                        if (g_bDipole)
2698
 
                        {
2699
 
                                if (g_bWannier)
2700
 
                                        GetTimeStep(-1)->ScanWannier(false);
2701
 
                                GetTimeStep(-1)->CalcDipoles();
2702
 
                        }
2703
 
                } else
2704
 
                {
2705
 
                        if (GetTimeStep(0) == NULL)
2706
 
                        {
2707
 
                                try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
2708
 
                                if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2709
 
                        }
2710
 
                        if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
2711
 
                        {
2712
 
                                if (feof(g_fPos))
2713
 
                                {
2714
 
                                        mprintf("\nEnd of trajectory file reached.\n");
2715
 
                                        break;
2716
 
                                }
2717
 
                                eprintf("\nError while reading time step %d.\n",g_iSteps+1);
2718
 
                                goto _endmainloop;
2719
 
                        }
2720
 
                        if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2721
 
                                GetTimeStep(0)->ReadCellVector(g_fNPTFile);
2722
 
                        if (g_bSkipDoubleSteps)
2723
 
                        {
2724
 
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
2725
 
                                {
2726
 
//                                      mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
2727
 
                                        if (!g_bStepSkipped)
2728
 
                                        {
2729
 
                                                g_bStepSkipped = true;
2730
 
                                                g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
2731
 
                                                mprintf("\nSkipping:");
2732
 
                                        }
2733
 
                                        mprintf("*");
2734
 
                                        goto _readagain;
2735
 
                                } else if (g_iFirstStepSkipped != -1)
2736
 
                                {
2737
 
                                        if (g_iFirstStepSkipped == GetTimeStep(0)->ExtractNumber(g_iNumberPos))
2738
 
                                                mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
2739
 
                                                        else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(0)->ExtractNumber(g_iNumberPos));
2740
 
                                        g_iDotCounter = 0;
2741
 
                                        g_iFirstStepSkipped = -1;
2742
 
                                }
2743
 
//                              mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
2744
 
                                if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
2745
 
                                        g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
2746
 
                        }
2747
 
                        if (GetTimeStep(0)->m_iGesAtomCount == 0)
2748
 
                        {
2749
 
                                eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
2750
 
                                goto _endmainloop;
2751
 
                        }
2752
 
                        if (!g_bSaveCoordsUnchanged)
2753
 
                        {
2754
 
                                GetTimeStep(0)->UniteMolecules(false);
2755
 
                                if (g_bRemoveCOM)
2756
 
                                        GetTimeStep(0)->CenterCOM();
2757
 
                        }
2758
 
                        GetTimeStep(0)->CalcCenters();
2759
 
                        if (g_bDipole)
2760
 
                        {
2761
 
                                if (g_bWannier)
2762
 
                                        GetTimeStep(0)->ScanWannier(false);
2763
 
                                GetTimeStep(0)->CalcDipoles();
2764
 
                        }
2765
 
                }
2766
 
                g_bWarnUnsteady = false;
2767
 
 
2768
 
                if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
2769
 
                {
2770
 
                        if ((g_iSteps == 0) || g_bStepSkipped)
2771
 
                        {
2772
 
                                g_bStepSkipped = false;
2773
 
                                if (!g_bSilentProgress)
2774
 
                                        mprintf("\nStep %6d ",g_iSteps);
2775
 
                        }
2776
 
                        if (g_bAsciiArt && (!g_bSilentProgress))
2777
 
                        {
2778
 
                                tc = g_oAsciiArt.GetChar();
2779
 
                                if (tc == 0)
2780
 
                                {
2781
 
                                        if ((g_iSteps != 0) && (g_iTrajSteps != -1))
2782
 
                                        {
2783
 
                                                if ((time(NULL) - t0) > 5)
2784
 
                                                {
2785
 
                                                        eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),(((g_iMaxStep > 0)?g_iMaxStep:g_iTrajSteps) - ((long)g_iSteps)))));
2786
 
                                                        FormatTime(eta,buf);
2787
 
                                                        mprintf(" ETA %s",buf);
2788
 
                                                }
2789
 
                                        }
2790
 
                                        mprintf("\nStep %6d ",g_iSteps);
2791
 
                                        if (g_iSteps != 0)
2792
 
                                                g_oAsciiArt.NewLine();
2793
 
                                } else mprintf("%c",tc);
2794
 
                        } else
2795
 
                        {
2796
 
                                if (g_iDotCounter >= 50)
2797
 
                                {
2798
 
                                        g_iDotCounter = 0;
2799
 
                                        if (!g_bSilentProgress)
2800
 
                                        {
2801
 
                                                if ((g_iSteps != 0) && (g_iTrajSteps != -1))
2802
 
                                                {
2803
 
                                                        if ((time(NULL) - t0) > 5)
2804
 
                                                        {
2805
 
                                                                eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),g_iTrajSteps - ((long)g_iSteps))));
2806
 
                                                                FormatTime(eta,buf);
2807
 
                                                                mprintf(" ETA %s",buf);
2808
 
                                                        }
2809
 
                                                }
2810
 
                                                mprintf("\nStep %6d ",g_iSteps);
2811
 
                                        }
2812
 
                                }
2813
 
                                g_iDotCounter++;
2814
 
                                if (!g_bSilentProgress)
2815
 
                                        mprintf(".");
2816
 
                        }
2817
 
                        if (FileExist("EXIT"))
2818
 
                        {
2819
 
                                mprintf("\n\n*** File \"EXIT\" detected. Aborting analys. ***\n\n");
2820
 
                                remove("EXIT");
2821
 
                                break;
2822
 
                        }
2823
 
                }
2824
 
 
2825
 
                if ((int)g_iSteps == /*showinterval**/g_iStride*50)
2826
 
                {
2827
 
                        t1 = time(NULL);
2828
 
                        if (t1 == t0)
2829
 
                                showinterval = 20;
2830
 
                                        else showinterval = (int)(20.0f/(t1-t0));
2831
 
                        if (showinterval == 0)
2832
 
                                showinterval = 1;
2833
 
                        sic = 1;
2834
 
                }
2835
 
 
2836
 
                g_iSteps += g_iStride;
2837
 
 
2838
 
                if (GetTimeStep(0)==NULL)
2839
 
                        continue;
2840
 
 
2841
 
                if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
2842
 
                        continue;
2843
 
 
2844
 
                if (g_bUseVelocities)
2845
 
                {
2846
 
                        if (g_fVel == NULL)
2847
 
                        {
2848
 
                                CalcVelocities();
2849
 
                        } else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
2850
 
                        {
2851
 
                                eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
2852
 
                                goto _endmainloop;
2853
 
                        }
2854
 
                }
2855
 
                if (g_bUseForces)
2856
 
                {
2857
 
                        if (g_fForce == NULL)
2858
 
                        {
2859
 
                                CalcForces();
2860
 
                        } else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
2861
 
                        {
2862
 
                                eprintf("\nError reading force time step %d.\n",g_iSteps+1);
2863
 
                                goto _endmainloop;
2864
 
                        }
2865
 
                }
2866
 
 
2867
 
                if (g_bCutCluster)
2868
 
                {
2869
 
                        if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
2870
 
                                break;
2871
 
                        if (g_iClusterPos >= g_iClusterCount)
2872
 
                                break;
2873
 
                        if (g_iaClusterSteps[g_iClusterPos] != (g_iSteps/g_iStride))
2874
 
                                continue;
2875
 
                }
2876
 
 
2877
 
 
2878
 
                if (g_bUnwrap && ((int)g_iSteps > g_iStride))
2879
 
 // Nicht im ersten Schritt
2880
 
                {
2881
 
                        for (z=0;z<g_oaMolecules.GetSize();z++)
2882
 
                        {
2883
 
                                m = (CMolecule*)g_oaMolecules[z];
2884
 
                                for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
2885
 
                                {
2886
 
                                        if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
2887
 
                                                continue;
2888
 
                                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
2889
 
                                        {
2890
 
                                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
2891
 
                                                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)
2892
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] -= g_fBoxX;
2893
 
                                                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)
2894
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] += g_fBoxX;
2895
 
                                                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)
2896
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] -= g_fBoxY;
2897
 
                                                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)
2898
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] += g_fBoxY;
2899
 
                                                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)
2900
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] -= g_fBoxZ;
2901
 
                                                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)
2902
 
                                                        g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] += g_fBoxZ;
2903
 
                                        }
2904
 
                                }
2905
 
                        }
2906
 
                }
2907
 
 
2908
 
                if (g_bMSD)
2909
 
                {
2910
 
                        g_pT2Timestep = GetTimeStep(0);
2911
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
2912
 
                        {
2913
 
                                ti2 = 0;
2914
 
                                o = (CObservation*)g_oaObserv[z0];
2915
 
                                if (g_bMSDCacheMode)
2916
 
                                {
2917
 
                                        for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
2918
 
                                                for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
2919
 
                                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
2920
 
                                                        {
2921
 
                                                                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));
2922
 
                                                                ((CxFloatArray*)o->m_pMSD->m_oaCache[ti2])->Add(g_pT2Timestep->m_vaCoords[ti][0]);
2923
 
                                                                ((CxFloatArray*)o->m_pMSD->m_oaCache[ti2])->Add(g_pT2Timestep->m_vaCoords[ti][1]);
2924
 
                                                                ((CxFloatArray*)o->m_pMSD->m_oaCache[ti2++])->Add(g_pT2Timestep->m_vaCoords[ti][2]);
2925
 
                                                        }
2926
 
                                } else
2927
 
                                {
2928
 
                                        for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
2929
 
                                        {
2930
 
                                                g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
2931
 
                                                if (g_pTempTimestep == NULL)
2932
 
                                                        continue;
2933
 
                                                for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
2934
 
                                                        for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
2935
 
                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
2936
 
                                                                {
2937
 
                                                                        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));
2938
 
                                                                        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)));
2939
 
                                                                }
2940
 
                                        }
2941
 
                                }
2942
 
                        }
2943
 
                } // END IF MSD 
2944
 
 
2945
 
                if (g_bSaveJustTraj)
2946
 
                {
2947
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
2948
 
 
2949
 
                        if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
2950
 
                        {
2951
 
                                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)];
2952
 
                                g_pTempTimestep->CenterPos(vec0);
2953
 
                        }
2954
 
 
2955
 
                        if (g_bFold && (!g_bSaveCoordsUnchanged))
2956
 
                        {
2957
 
                                if (g_bFoldAtomwise)
2958
 
                                        g_pTempTimestep->FoldAtoms();
2959
 
                                                else g_pTempTimestep->FoldMolecules();
2960
 
                        }
2961
 
 
2962
 
                        if (!g_bCenterZero && (!g_bSaveCoordsUnchanged))
2963
 
                                g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
2964
 
 
2965
 
                        fprintf(g_fSaveJustTraj,"  %d\n",(int)g_iSaveGesAtoms);
2966
 
                        if (g_pTempTimestep->m_pComment != NULL)
2967
 
                                fprintf(g_fSaveJustTraj,"%s\n",g_pTempTimestep->m_pComment);
2968
 
                                        else fprintf(g_fSaveJustTraj,"\n");
2969
 
                        if (g_bWriteAtomwise)
2970
 
                        {
2971
 
                                for (z7=0;z7<g_oaAtoms.GetSize();z7++)
2972
 
                                {
2973
 
                                        for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
2974
 
                                        {
2975
 
                                                atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
2976
 
                                                for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
2977
 
                                                {
2978
 
                                                        for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
2979
 
                                                        {
2980
 
                                                                if (atgr->m_baRealAtomType[z4] != z7)
2981
 
                                                                        continue;
2982
 
                                                                tla = (CxIntArray*)atgr->m_oaAtoms[z4];
2983
 
                                                                for (z5=0;z5<tla->GetSize();z5++)
2984
 
                                                                {
2985
 
                                                                        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))];
2986
 
                                                                        if (g_bUnwrap)
2987
 
                                                                                vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
2988
 
                                                                        if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
2989
 
                                                                        {
2990
 
                                                                                if (g_bSaveVirtAtoms)
2991
 
                                                                                        fprintf(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);
2992
 
                                                                        } else fprintf(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);
2993
 
                                                                }
2994
 
                                                        }
2995
 
                                                }
2996
 
                                        }
2997
 
                                }
2998
 
                        } else
2999
 
                        {
3000
 
                                for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3001
 
                                {
3002
 
                                        atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3003
 
                                        for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3004
 
                                        {
3005
 
                                                for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3006
 
                                                {
3007
 
                                                        tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3008
 
                                                        for (z5=0;z5<tla->GetSize();z5++)
3009
 
                                                        {
3010
 
                                                                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))];
3011
 
                                                                if (g_bUnwrap)
3012
 
                                                                        vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3013
 
                                                                if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3014
 
                                                                {
3015
 
                                                                        if (g_bSaveVirtAtoms)
3016
 
                                                                                fprintf(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);
3017
 
                                                                } else fprintf(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);
3018
 
                                                        }
3019
 
                                                }
3020
 
                                        }
3021
 
                                }
3022
 
                        }
3023
 
                }
3024
 
 
3025
 
                if (g_bBondACF)
3026
 
                {
3027
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3028
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
3029
 
                        {
3030
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
3031
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
3032
 
                                {
3033
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
3034
 
                                        bond->m_faData.Add(VecDist(g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[0]],g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[1]]));
3035
 
                                }
3036
 
                        }
3037
 
                }
3038
 
                
3039
 
                if (g_bKeepUnfoldedCoords)
3040
 
                        GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
3041
 
 
3042
 
                if (g_bAggregation || g_bNbExchange)
3043
 
                {
3044
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3045
 
 
3046
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3047
 
                        {
3048
 
                                o = (CObservation*)g_oaObserv[z0];
3049
 
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3050
 
                                {
3051
 
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3052
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3053
 
                                                dacfsub->m_pCondition->m_iPassCounter[z2] = 0;
3054
 
                                }
3055
 
                        }
3056
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3057
 
                        {
3058
 
                                o = (CObservation*)g_oaObserv[z0];
3059
 
 
3060
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
3061
 
                                {
3062
 
                                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
3063
 
 
3064
 
                                        o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix,g_bPeriodic);
3065
 
 
3066
 
                                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3067
 
                                        {
3068
 
                                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3069
 
 
3070
 
                                                dacfsub->m_pCondition->CopyResults(o->m_pDACF->m_pCondition);
3071
 
                                                dacfsub->m_pCondition->m_bAnyPassed = false;
3072
 
                                                dacfsub->m_pCondition->ReScan(smfix);
3073
 
                                                if (dacfsub->m_pCondition->m_bAnyPassed)
3074
 
                                                        dacfsub->m_pCondition->m_iRMPassCounter[z2]++;
3075
 
        
3076
 
                                                if (g_bDACF)
3077
 
                                                        o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
3078
 
 
3079
 
                                                if (g_bNbExchange)
3080
 
                                                        o->m_pDACF->UpdateNbEx(z2,g_pTempTimestep,dacfsub);
3081
 
                                        } // END FOR ZS
3082
 
                                } // END FOR Z2
3083
 
                        } // END FOR Z0
3084
 
                        for (z0=0;z0<g_oaObserv.GetSize();z0++)
3085
 
                        {
3086
 
                                o = (CObservation*)g_oaObserv[z0];
3087
 
                                for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3088
 
                                {
3089
 
                                        dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3090
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3091
 
                                                if (dacfsub->m_pCondition->m_iPassCounter[z2] != 0)
3092
 
                                                        dacfsub->m_pCondition->m_iOMPassCounter[z2]++;
3093
 
                                }
3094
 
                        }
3095
 
                } // END IF AGGREGATION OR NBEX
3096
 
 
3097
 
                if (g_bRDyn)
3098
 
                {
3099
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3100
 
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
3101
 
                        {
3102
 
                                o = (CObservation*)g_oaObserv[z6];
3103
 
                                ti = 0;
3104
 
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3105
 
                                {
3106
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3107
 
 
3108
 
                                        if (o->m_pRDyn->m_iVecType == 0)
3109
 
                                        {
3110
 
                                                o->m_pRDyn->BuildAtomList(sm,&templa);
3111
 
                                                for (z4=0;z4<templa.GetSize();z4+=3)
3112
 
                                                {
3113
 
                                                        if (o->m_pRDyn->m_bOrtho)
3114
 
                                                        {
3115
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3116
 
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3117
 
                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3118
 
                                                                vec1 = CrossP(vec2-vec0,vec3-vec0);
3119
 
                                                        } else
3120
 
                                                        {
3121
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3122
 
                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3123
 
                                                                vec1 = vec2-vec0;
3124
 
                                                        }
3125
 
                                                        vec1.Normalize();
3126
 
                                                        if (g_bRDynCacheMode)
3127
 
                                                        {
3128
 
                                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[0]);
3129
 
                                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[1]);
3130
 
                                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[2]);
3131
 
                                                                ti++;
3132
 
                                                        } else
3133
 
                                                        {
3134
 
                                                                for (z=0;z<o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z++)
3135
 
                                                                {
3136
 
                                                                        g_pT2Timestep = GetTimeStep(z*o->m_pRDyn->m_iStride);
3137
 
                                                                        if (g_pT2Timestep == NULL)
3138
 
                                                                                continue;
3139
 
                                                                        if (o->m_pRDyn->m_bOrtho)
3140
 
                                                                        {
3141
 
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3142
 
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3143
 
                                                                                vec5 = g_pT2Timestep->m_vaCoords[templa[z4+2]];
3144
 
                                                                                vec2 = CrossP(vec3-vec4,vec5-vec4);
3145
 
                                                                        } else
3146
 
                                                                        {
3147
 
                                                                                vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3148
 
                                                                                vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3149
 
                                                                                vec2 = vec3-vec4;
3150
 
                                                                        }
3151
 
                                                                        vec2.Normalize();
3152
 
                                                                        o->m_pRDyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
3153
 
                                                                        o->m_pRDyn->m_pCount[z]++;
3154
 
                                                                }
3155
 
                                                        }
3156
 
                                                }
3157
 
                                        } else if (o->m_pRDyn->m_iVecType == 1)
3158
 
                                        {
3159
 
                                                vec1 = sm->m_vDipole;
3160
 
                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[0]);
3161
 
                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[1]);
3162
 
                                                ((CxFloatArray*)o->m_pRDyn->m_oaCache[ti])->Add(vec1[2]);
3163
 
 
3164
 
        //                                      if (z3 == 0)
3165
 
        //                                              fprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
3166
 
 
3167
 
                                                ti++;
3168
 
                                        } // END VECTYPE
3169
 
                                }
3170
 
                        }
3171
 
                } // END IF RDYN
3172
 
 
3173
 
                if (g_bVACF)
3174
 
                {
3175
 
                        g_pT2Timestep = GetTimeStep(0);
3176
 
//                      mprintf("\nStep=%d, adding.",g_iSteps);
3177
 
                        if (g_bGlobalVACF)
3178
 
                        {
3179
 
                                if (g_bVACFCacheMode)
3180
 
                                {
3181
 
                                        for (z2=0;z2<g_iGesAtomCount;z2++)
3182
 
                                        {
3183
 
                //                              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]);
3184
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[z2])->Add(g_pT2Timestep->m_vaVelocities[z2][0]);
3185
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[z2])->Add(g_pT2Timestep->m_vaVelocities[z2][1]);
3186
 
                                                ((CxFloatArray*)g_pGlobalVACF->m_oaCache[z2])->Add(g_pT2Timestep->m_vaVelocities[z2][2]);
3187
 
                                        }
3188
 
                                } else
3189
 
                                {
3190
 
                                        for (z=0;z<g_pGlobalVACF->m_iSize;z++)
3191
 
                                        {
3192
 
                                                g_pTempTimestep = GetTimeStep(z);
3193
 
                                                if (g_pTempTimestep == NULL)
3194
 
                                                        continue;
3195
 
                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
3196
 
                                                        continue;
3197
 
                                                pd = &g_pGlobalVACF->m_pData[z];
3198
 
                                                g_pGlobalVACF->m_pCounter[z] += g_iGesAtomCount;
3199
 
                                                for (z2=0;z2<g_iGesAtomCount;z2++)
3200
 
                                                        *pd += DotP(g_pTempTimestep->m_vaVelocities[z2],g_pT2Timestep->m_vaVelocities[z2]);
3201
 
                                        }
3202
 
                                }
3203
 
                        }
3204
 
                        for (z6=0;z6<g_oaObserv.GetSize();z6++)
3205
 
                        {
3206
 
                                o = (CObservation*)g_oaObserv[z6];
3207
 
                                for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3208
 
                                {
3209
 
                                        sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3210
 
                                        o->m_pVACF->BuildAtomList(sm,&templa);
3211
 
                                        for (z4=0;z4<templa.GetSize();z4++)
3212
 
                                        {
3213
 
                                                if (g_bVACFCacheMode)
3214
 
                                                {
3215
 
                                                        ti = templa[z4];
3216
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][0]);
3217
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][1]);
3218
 
                                                        ((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][2]);
3219
 
                                //                      mprintf("%d*%d+%d=%d\n",z3,o->m_pVACF->m_iShowAtomGes,z4,z3*o->m_pVACF->m_iShowAtomGes+z4);
3220
 
                                //                      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]);
3221
 
                                //                      mprintf("Step %d: Obs %d, Mol %d, Atom %d: Index %d.\n",g_iStepHistory,z6+1,z3+1,z4+1,ti+1);
3222
 
                                                } else
3223
 
                                                {
3224
 
                                                        o->m_pVACF->m_pCounter[z5] += o->m_pVACF->m_iShowAtomGes;
3225
 
                                                        for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
3226
 
                                                        {
3227
 
                                                                g_pTempTimestep = GetTimeStep(z5);
3228
 
                                                                if (g_pTempTimestep == NULL)
3229
 
                                                                        continue;
3230
 
                                                                if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
3231
 
                                                                        continue;
3232
 
                                                                o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
3233
 
                                                        }
3234
 
                                                }
3235
 
                                        }
3236
 
                                }
3237
 
                        }
3238
 
                } // END IF VACF
3239
 
 
3240
 
                if (g_bReact)
3241
 
                {
3242
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3243
 
                        if (ReactSecondRun)
3244
 
                        {
3245
 
                                g_pReact->WriteTrajec(g_pTempTimestep);
3246
 
                        } else
3247
 
                        {
3248
 
                                g_pReact->ScanBonds(g_pTempTimestep,false);
3249
 
                        }
3250
 
                }
3251
 
 
3252
 
                if (g_bNbAnalysis)
3253
 
                {
3254
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3255
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
3256
 
                        {
3257
 
                                smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
3258
 
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
3259
 
                                {
3260
 
                                        o = (CObservation*)g_oaObserv[z6];
3261
 
                                        o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep,g_bPeriodic);
3262
 
                                        o->m_pNbAnalysis->AnalyzeStep();
3263
 
                                }
3264
 
                        }
3265
 
                }
3266
 
 
3267
 
                if (g_bNbExchange)
3268
 
                {
3269
 
                }
3270
 
 
3271
 
                if (g_bClusterAnalysis)
3272
 
                {
3273
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3274
 
                        g_pClusterAnalysis->Process(g_pTempTimestep);
3275
 
                }
3276
 
 
3277
 
                if (g_bMicroHet)
3278
 
                {
3279
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3280
 
                        g_pTempTimestep->FoldAtomsPositive();
3281
 
                        g_pMicroHet->Process(g_pTempTimestep);
3282
 
                }
3283
 
 
3284
 
                if (g_bVoro)
3285
 
                {
3286
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3287
 
                        g_pTempTimestep->FoldAtomsPositive();
3288
 
                        g_pVoroWrapper->Build(g_pTempTimestep);
3289
 
                }
3290
 
 
3291
 
                if (g_bVoid)
3292
 
                {
3293
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3294
 
                        g_pTempTimestep->FoldAtomsPositive();
3295
 
                        g_pVoroAnalysis->Step(g_pTempTimestep);
3296
 
                }
3297
 
 
3298
 
                if ((!g_bCDF) && (!g_bRDF) && (!g_bSDF) && (!g_bVoidSDF) && (!g_bADF) && (!g_bDDF) && (!g_bVDF) && (!g_bDipDF) && (!g_bCutCluster) && (!g_bSaveRefEnv) && (!g_bVHDF) && (!g_bRevSDF) && (!g_bCond))
3299
 
                        goto _endstep;
3300
 
 
3301
 
                if (g_bVoid)
3302
 
                {
3303
 
                        if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
3304
 
                        {
3305
 
                                g_pVoroAnalysis->m_pTempSDF->Clear();
3306
 
                                g_pTempTimestep->CopyFrom(GetTimeStep(0));
3307
 
                                g_pTempTimestep->FoldAtomsPositive();
3308
 
                                for (z3=0;z3<g_iGesAtomCount;z3++)
3309
 
                                {
3310
 
                                        vec0 = g_pTempTimestep->m_vaCoords[z3];
3311
 
                                        g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
3312
 
                                }
3313
 
        //                      g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
3314
 
                        }
3315
 
                }
3316
 
 
3317
 
                tfr = 9999.0;
3318
 
 
3319
 
                if (g_iFixMol == -1)
3320
 
                        goto _norefmol;
3321
 
 
3322
 
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
3323
 
                {
3324
 
                        o = (CObservation*)g_oaObserv[z6];
3325
 
                        if (o->m_pConditions != NULL)
3326
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
3327
 
                                        o->m_pConditions->m_iPassCounter[z2] = 0;
3328
 
                }
3329
 
 
3330
 
                // Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
3331
 
                for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
3332
 
                {
3333
 
                        if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
3334
 
                                continue;
3335
 
 
3336
 
                        smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
3337
 
 
3338
 
                        if (g_bCutCluster)
3339
 
                        {
3340
 
                                if (g_iaClusterMol[g_iClusterPos] != z2)
3341
 
                                        continue;
3342
 
                                g_iClusterPos++;
3343
 
                                if (g_iClusterPos >= g_iClusterCount)
3344
 
                                        break;
3345
 
                        }
3346
 
 
3347
 
                        g_pTempTimestep->CopyFrom(GetTimeStep(0));
3348
 
 
3349
 
        /*              for (z3=0;z3<g_iGesAtomCount;z3++)
3350
 
                        {
3351
 
                                mprintf("\nAtom %4d: ",z3);
3352
 
                                g_pTempTimestep->m_vaCoords[z3].Dump();
3353
 
                        }*/
3354
 
                        
3355
 
                        vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
3356
 
 
3357
 
        /*              mprintf("\n\n%d, %d, vecc: ",g_iFixAtomType[0],g_iFixAtom[0]);
3358
 
                        vecc.Dump();
3359
 
                        mprintf("\n\n");*/
3360
 
 
3361
 
                        if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
3362
 
                        {
3363
 
                                if (g_bFold)
3364
 
                                {
3365
 
                                        g_pTempTimestep->CenterPos(vecc);
3366
 
                                        if (g_bFoldAtomwise)
3367
 
                                                g_pTempTimestep->FoldAtoms();
3368
 
                                                        else g_pTempTimestep->FoldMolecules();
3369
 
                                        vec2 = -1.0f * vecc;
3370
 
                                        g_pTempTimestep->CenterPos(vec2);
3371
 
                                }
3372
 
                                if (g_bCutCluster || (g_iNbhMode == 2))
3373
 
                                {
3374
 
                                        g_pNbSet->Reset();
3375
 
                                        if (g_bCutCluster)
3376
 
                                                g_pNbSet->ResetAlwaysTrue();
3377
 
                                        g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3378
 
                                        if (g_bSaveRefWithEnv)
3379
 
                                                g_pNbSet->AddMolecule(g_iFixMol,z2);
3380
 
                                }
3381
 
                                g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3382
 
                                if (g_bTDO)
3383
 
                                {
3384
 
                                        if (g_laTDOSteps.Contains(g_iSteps-1))
3385
 
                                        {
3386
 
                                                sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
3387
 
                                                mprintf("\nSaving TDO step as %s.\n",buf);
3388
 
                                                tfi = OpenFileWrite(buf,true);
3389
 
                                                g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
3390
 
                                                fclose(tfi);
3391
 
                                        }
3392
 
                                }
3393
 
                        }
3394
 
 
3395
 
                        // Legt vecc genau in den Ursprung des Koordinatensystems
3396
 
                        g_pTempTimestep->CenterPos(vecc);
3397
 
 
3398
 
/*                      if (vecc.GetLength() > 100000.0f)
3399
 
                        {
3400
 
                                eprintf("*** Centerpos Error (fixmol=%d, z2=%d, type=%d, atom=%d, offset=%d): ",g_iFixMol,z2,g_iFixAtomType[0],g_iFixAtom[0],((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0]));
3401
 
                                vecc.Dump();
3402
 
                                mprintf("\n");
3403
 
                        }*/
3404
 
 
3405
 
                        if (g_bFold)
3406
 
                        {
3407
 
                                if (g_bFoldAtomwise)
3408
 
                                        g_pTempTimestep->FoldAtoms();
3409
 
                                                else g_pTempTimestep->FoldMolecules();
3410
 
                        }
3411
 
 
3412
 
                        if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
3413
 
                        {
3414
 
                                if (g_bCutCluster || (g_iNbhMode == 2))
3415
 
                                {
3416
 
                                        g_pNbSet->Reset();
3417
 
                                        if (g_bCutCluster)
3418
 
                                                g_pNbSet->ResetAlwaysTrue();
3419
 
                                        g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3420
 
                                        if (g_bSaveRefWithEnv)
3421
 
                                                g_pNbSet->AddMolecule(g_iFixMol,z2);
3422
 
                                }
3423
 
                                if (!g_bCenterZero)
3424
 
                                        g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3425
 
                                g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3426
 
                                if (g_bTDO)
3427
 
                                {
3428
 
                                        if (g_laTDOSteps.Contains(g_iSteps-1))
3429
 
                                        {
3430
 
                                                sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
3431
 
                                                mprintf("\nSaving TDO step as %s.\n",buf);
3432
 
                                                tfi = OpenFileWrite(buf,true);
3433
 
                                                g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
3434
 
                                                fclose(tfi);
3435
 
                                        }
3436
 
                                }
3437
 
                        }
3438
 
 
3439
 
                        if (g_bSDF || g_bVoidSDF || g_bSVDF || g_bSFDF || g_bAvg || ((g_bSaveRefEnv || g_bCutCluster) && g_bRefEnvCenter && g_bRefEnvFix)) // Wir brauchen ein neues Koordinatensystem und eine Drehmatrix
3440
 
                        {
3441
 
                                vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
3442
 
                                vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
3443
 
                                mat.MatUltra(vec2,vec3); // Dies erstellt uns die Drehmatrix
3444
 
                                g_pTempTimestep->Transform(mat);
3445
 
                        }
3446
 
 
3447
 
                        if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
3448
 
                        {
3449
 
                                if (g_bCutCluster || (g_iNbhMode == 2))
3450
 
                                {
3451
 
                                        g_pNbSet->Reset();
3452
 
                                        if (g_bCutCluster)
3453
 
                                                g_pNbSet->ResetAlwaysTrue();
3454
 
                                        g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3455
 
                                        if (g_bSaveRefWithEnv)
3456
 
                                                g_pNbSet->AddMolecule(g_iFixMol,z2);
3457
 
                                }
3458
 
                                if (!g_bCenterZero)
3459
 
                                        g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3460
 
                                g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3461
 
 
3462
 
                                if (g_bTDO)
3463
 
                                {
3464
 
                                        if (g_laTDOSteps.Contains(g_iSteps-1))
3465
 
                                        {
3466
 
                                                sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
3467
 
                                                mprintf("\nSaving TDO step as %s.\n",buf);
3468
 
                                                tfi = OpenFileWrite(buf,true);
3469
 
                                                g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
3470
 
                                                fclose(tfi);
3471
 
                                        }
3472
 
                                }
3473
 
                        }
3474
 
 
3475
 
/***************************************************************************************************************************/
3476
 
        
3477
 
                        if (g_bVoidSDF)
3478
 
                        {
3479
 
                                if (g_pVoroAnalysis->m_bEmptySpaceSDF)
3480
 
                                {
3481
 
                                        if (!g_pVoroAnalysis->m_bNewEmptyMode)
3482
 
                                        {
3483
 
                                                g_pVoroAnalysis->m_pTempSDF->Clear();
3484
 
 
3485
 
                                                for (z3=0;z3<g_oaMolecules.GetSize();z3++)
3486
 
                                                {
3487
 
                                                        tm = (CMolecule*)g_oaMolecules[z3];
3488
 
                                                        for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
3489
 
                                                        {
3490
 
                                                                if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
3491
 
                                                                        if ((z3 == g_iFixMol) && (z4 == z2))
3492
 
                                                                                continue;
3493
 
 
3494
 
                                                                tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
3495
 
 
3496
 
                                                                for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
3497
 
                                                                {
3498
 
                                                                        if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
3499
 
                                                                                continue;
3500
 
 
3501
 
                                                                        for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
3502
 
                                                                        {
3503
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
3504
 
 
3505
 
                                                                                g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
3506
 
                                                                        }
3507
 
                                                                }
3508
 
                                                        }
3509
 
                                                }
3510
 
                                                g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
3511
 
                                        } else
3512
 
                                        {
3513
 
                                                g_pVoroAnalysis->BinEmptySDF();
3514
 
                                        }
3515
 
                                }
3516
 
 
3517
 
                                if (g_pVoroAnalysis->m_bSphereHoleSDF)
3518
 
                                {
3519
 
                                        g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
3520
 
                                }
3521
 
                        }
3522
 
 
3523
 
                        if (g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bSDF || g_bSVDF || g_bSFDF || g_bADF || g_bDDF || g_bVDF || g_bCond) 
3524
 
                        {
3525
 
                                for (z6=0;z6<g_oaObserv.GetSize();z6++)
3526
 
                                {
3527
 
                                        o = (CObservation*)g_oaObserv[z6];
3528
 
                                        ti2 = o->m_waSaveRefList.GetPosition(z2);
3529
 
 
3530
 
                                        if (o->m_bObsCertain)
3531
 
                                        {
3532
 
                                                if (!o->m_waObsRefList.Contains(z2))
3533
 
                                                        continue;
3534
 
                                                tic_r = o->m_waObsRefList.GetPosition(z2);
3535
 
                                        }
3536
 
 
3537
 
                                        if (g_bUseVelocities)
3538
 
                                        {
3539
 
                                                tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
3540
 
                                                if (o->m_bVelocityRelToRef)
3541
 
                                                {
3542
 
                                                        vecv = g_pTempTimestep->m_vaVelocities[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
3543
 
                                                        for (z3=0;z3<g_iGesVirtAtomCount;z3++)
3544
 
                                                                tempvel[z3] -= vecv;
3545
 
                                                }
3546
 
                                        }
3547
 
 
3548
 
                                        if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
3549
 
                                        {
3550
 
                                                if (o->m_bSaveSeparateFiles)
3551
 
                                                        fprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
3552
 
                                                                else if (ti2 == 0)
3553
 
                                                                        fprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
3554
 
                                        }
3555
 
 
3556
 
                                        for (zr=0;zr<g_iCDFChannels;zr++)
3557
 
                                        {
3558
 
                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
3559
 
                                                {
3560
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3561
 
                                                                o->m_pRDF[zr]->m_faData[z3].RemoveAll_KeepSize();
3562
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3563
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3564
 
                                                                        o->m_pRDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
3565
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
3566
 
                                                        {
3567
 
                                                                if (o->m_bSaveSeparateFiles)
3568
 
                                                                        fprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
3569
 
                                                                                else if (ti2 == 0)
3570
 
                                                                                        fprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
3571
 
                                                        }
3572
 
                                                }
3573
 
                                                        
3574
 
                                                if (g_bADF && (o->m_pADF[zr] != NULL))
3575
 
                                                {
3576
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3577
 
                                                                o->m_pADF[zr]->m_faData[z3].RemoveAll_KeepSize();
3578
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3579
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3580
 
                                                                        o->m_pADF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
3581
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
3582
 
                                                        {
3583
 
                                                                if (o->m_bSaveSeparateFiles)
3584
 
                                                                        fprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
3585
 
                                                                                else if (ti2 == 0)
3586
 
                                                                                        fprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
3587
 
                                                        }
3588
 
                                                }
3589
 
 
3590
 
                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
3591
 
                                                {
3592
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3593
 
                                                                o->m_pDDF[zr]->m_faData[z3].RemoveAll_KeepSize();
3594
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3595
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3596
 
                                                                        o->m_pDDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
3597
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
3598
 
                                                        {
3599
 
                                                                if (o->m_bSaveSeparateFiles)
3600
 
                                                                        fprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
3601
 
                                                                                else if (ti2 == 0)
3602
 
                                                                                        fprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
3603
 
                                                        }
3604
 
                                                }
3605
 
 
3606
 
                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
3607
 
                                                {
3608
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3609
 
                                                                o->m_pDipDF[zr]->m_faData[z3].RemoveAll_KeepSize();
3610
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3611
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3612
 
                                                                        o->m_pDipDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
3613
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
3614
 
                                                        {
3615
 
                                                                if (o->m_bSaveSeparateFiles)
3616
 
                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
3617
 
                                                                                else if (ti2 == 0)
3618
 
                                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
3619
 
                                                        }
3620
 
                                                }
3621
 
 
3622
 
                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
3623
 
                                                {
3624
 
                                                        for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3625
 
                                                                o->m_pVDF[zr]->m_faData[z3].RemoveAll_KeepSize();
3626
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3627
 
                                                                for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
3628
 
                                                                        o->m_pVDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
3629
 
                                                        if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
3630
 
                                                        {
3631
 
                                                                if (o->m_bSaveSeparateFiles)
3632
 
                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
3633
 
                                                                                else if (ti2 == 0)
3634
 
                                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
3635
 
                                                        }
3636
 
                                                }
3637
 
                                        } // END FOR zr
3638
 
 
3639
 
                                        if (g_bSDF)
3640
 
                                        {
3641
 
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
3642
 
                                                {
3643
 
                                                        o->m_pSDF->m_vaData[z3].RemoveAll_KeepSize();
3644
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3645
 
                                                                o->m_pSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
3646
 
                                                }
3647
 
                                        }
3648
 
 
3649
 
                                        if (g_bRevSDF)
3650
 
                                        {
3651
 
                                                for (z3=0;z3<o->m_iShowMolCount;z3++)
3652
 
                                                {
3653
 
                                                        o->m_pRevSDF->m_vaData[z3].RemoveAll_KeepSize();
3654
 
                                                        if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
3655
 
                                                                o->m_pRevSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
3656
 
                                                }
3657
 
                                        }
3658
 
 
3659
 
                                        if (o->m_bSelf)
3660
 
                                        {
3661
 
                                                if (g_bADF)
3662
 
                                                {
3663
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
3664
 
                                                        {
3665
 
                                                                if (o->m_pADF[zr] == NULL)
3666
 
                                                                        continue;
3667
 
                                                                o->m_pADF[zr]->BuildAtomList(smfix,NULL,NULL,&templa);
3668
 
                                                                for (z4=0;z4<templa.GetSize();z4+=6)
3669
 
                                                                {
3670
 
                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
3671
 
                                                                        {
3672
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3673
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3674
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3675
 
                                                                                vec1 = CrossP(vec2-vec0,vec3-vec0);
3676
 
                                                                        } else
3677
 
                                                                        {
3678
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3679
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3680
 
                                                                                vec1 = vec2-vec0;
3681
 
                                                                        }
3682
 
                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
3683
 
                                                                        {
3684
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3685
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3686
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
3687
 
                                                                                vec2 = CrossP(vec3-vec4,vec5-vec4);
3688
 
                                                                        } else
3689
 
                                                                        {
3690
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3691
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3692
 
                                                                                vec2 = vec3-vec4;
3693
 
                                                                        }
3694
 
                                                                        tf = Angle_Deg(vec1,vec2);
3695
 
                                                                        if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
3696
 
                                                                                tf = 180.0f-tf;
3697
 
                                                                        if (o->m_pADF[zr]->m_bCosine)
3698
 
                                                                                tf = cos(tf/180.0*Pi);
3699
 
 
3700
 
                                                                        if (g_bDeriv)
3701
 
                                                                        {
3702
 
                                                                                o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) = tf;
3703
 
                                                                                switch(o->m_pADF[zr]->m_iDeriv)
3704
 
                                                                                {
3705
 
                                                                                        case 0:
3706
 
                                                                                                tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
3707
 
                                                                                                break;
3708
 
                                                                                        case 1:
3709
 
                                                                                                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);
3710
 
                                                                                                break;
3711
 
                                                                                        case 2:
3712
 
                                                                                                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);
3713
 
                                                                                                break;
3714
 
                                                                                }
3715
 
                                                                        }
3716
 
 
3717
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
3718
 
                                                                        {
3719
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
3720
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
3721
 
 
3722
 
                                                                                o->m_pADF[zr]->m_faData[0].Add(tf);
3723
 
 
3724
 
                                                                                if (o->m_pADF[zr]->m_bACF)
3725
 
                                                                                        o->m_pADF[zr]->m_pfaACFBuffer[z2*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
3726
 
 
3727
 
                                        /*                                      if (o->m_pADF[zr]->m_bMirror)
3728
 
                                                                                {
3729
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
3730
 
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,180.0-tf);
3731
 
                                                                                        o->m_pADF[zr]->m_faData[0].Add(180.0-tf);
3732
 
                                                                                }*/
3733
 
 
3734
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
3735
 
                                                                                {
3736
 
                                                                                        if (o->m_bSaveSeparateFiles)
3737
 
                                                                                                fprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
3738
 
                                                                                                        else fprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
3739
 
                                                                                        if (o->m_bCombinedPlot)
3740
 
                                                                                                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);
3741
 
                                                                                }
3742
 
                                                                                if (o->m_bTimeDiff)
3743
 
                                                                                        ((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
3744
 
                                                                        }
3745
 
                                                                } // END FOR z4
3746
 
                                                        } // END FOR zr
3747
 
                                                } // Ende IF ADF
3748
 
 
3749
 
                                                if (g_bDDF)
3750
 
                                                {
3751
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
3752
 
                                                        {
3753
 
                                                                if (o->m_pDDF[zr] == NULL)
3754
 
                                                                        continue;
3755
 
                                                                o->m_pDDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3756
 
                                                                for (z4=0;z4<templa.GetSize();z4+=9)
3757
 
                                                                {
3758
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[0])
3759
 
                                                                        {
3760
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3761
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3762
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3763
 
                                                                                vec1 = CrossP(vec2-vec0,vec3-vec0);
3764
 
                                                                        } else
3765
 
                                                                        {
3766
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3767
 
                                                                                vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3768
 
                                                                                vec1 = vec2-vec0;
3769
 
                                                                        }
3770
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[1])
3771
 
                                                                        {
3772
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3773
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3774
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
3775
 
                                                                                vec2 = CrossP(vec3-vec4,vec5-vec4);
3776
 
                                                                        } else
3777
 
                                                                        {
3778
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3779
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3780
 
                                                                                vec2 = vec3-vec4;
3781
 
                                                                        }
3782
 
                                                                        if (o->m_pDDF[zr]->m_bOrtho[2])
3783
 
                                                                        {
3784
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
3785
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
3786
 
                                                                                vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
3787
 
                                                                                vec3 = CrossP(vec3-vec4,vec5-vec4);
3788
 
                                                                        } else
3789
 
                                                                        {
3790
 
                                                                                vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
3791
 
                                                                                vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
3792
 
                                                                                vec3 = vec3-vec4;
3793
 
                                                                        }
3794
 
                                                                        tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
3795
 
                                                                        if (o->m_pDDF[zr]->m_bCosine)
3796
 
                                                                                tf = cos(tf/180.0*Pi);
3797
 
                                                                        if (g_bDeriv)
3798
 
                                                                        {
3799
 
                                                                                o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) = tf;
3800
 
                                                                                switch(o->m_pDDF[zr]->m_iDeriv)
3801
 
                                                                                {
3802
 
                                                                                        case 0:
3803
 
                                                                                                tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
3804
 
                                                                                                break;
3805
 
                                                                                        case 1:
3806
 
                                                                                                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);
3807
 
                                                                                                break;
3808
 
                                                                                        case 2:
3809
 
                                                                                                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);
3810
 
                                                                                                break;
3811
 
                                                                                }
3812
 
                                                                        }
3813
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
3814
 
                                                                        {
3815
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
3816
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
3817
 
 
3818
 
                                                                                o->m_pDDF[zr]->m_faData[0].Add(tf);
3819
 
 
3820
 
                                                                                if (o->m_pDDF[zr]->m_bACF)
3821
 
                                                                                        o->m_pDDF[zr]->m_pfaACFBuffer[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
3822
 
 
3823
 
                                                                                if ((!o->m_pDDF[zr]->m_bAbs) && o->m_pDDF[zr]->m_bSymm)
3824
 
                                                                                {
3825
 
                                                                                        o->m_pDDF[zr]->m_faData[0].Add(-tf);
3826
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
3827
 
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,-tf);
3828
 
                                                                                }
3829
 
 
3830
 
                                                                                if (o->m_bTimeDiff)
3831
 
                                                                                        ((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
3832
 
 
3833
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
3834
 
                                                                                {
3835
 
                                                                                        if (o->m_pDDF[zr]->m_bRotate)
3836
 
                                                                                        {
3837
 
                                                                                                if (g_iSteps > 1)
3838
 
                                                                                                {
3839
 
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
3840
 
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
3841
 
                                                                                                        if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
3842
 
                                                                                                                o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
3843
 
                                                                                                }
3844
 
                                                                                                o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
3845
 
                                                                                                tf2 = tf + o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
3846
 
                                                                                        } else tf2 = tf;
3847
 
                                                                                        if (o->m_bSaveSeparateFiles)
3848
 
                                                                                                fprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
3849
 
                                                                                                        else fprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
3850
 
                                                                                        if (o->m_bCombinedPlot)
3851
 
                                                                                                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);
3852
 
                                                                                }
3853
 
                                                                        }
3854
 
                                                                }
3855
 
                                                        }
3856
 
                                                } // END IF DDF
3857
 
 
3858
 
                                                if (g_bVHDF)
3859
 
                                                {
3860
 
                                                        o->m_pVHDF->BuildAtomList(smfix,smfix,NULL,&templa);
3861
 
                                                        for (z4=0;z4<templa.GetSize();z4+=2)
3862
 
                                                        {
3863
 
                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]] + vecc;
3864
 
                                                                for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
3865
 
                                                                {
3866
 
                                                                        g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
3867
 
                                                                        if (g_pT2Timestep == NULL)
3868
 
                                                                                continue;
3869
 
                                                                        vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3870
 
                                                                        vec2 = vec0-vec1;
3871
 
                                                                        while (vec2[0] >   g_fBoxX/2.0) vec2[0] -= g_fBoxX;
3872
 
                                                                        while (vec2[0] <= -g_fBoxX/2.0) vec2[0] += g_fBoxX;
3873
 
                                                                        while (vec2[1] >   g_fBoxY/2.0) vec2[1] -= g_fBoxY;
3874
 
                                                                        while (vec2[1] <= -g_fBoxY/2.0) vec2[1] += g_fBoxY;
3875
 
                                                                        while (vec2[2] >   g_fBoxZ/2.0) vec2[2] -= g_fBoxZ;
3876
 
                                                                        while (vec2[2] <= -g_fBoxZ/2.0) vec2[2] += g_fBoxZ;
3877
 
                                                                        tf = vec2.GetLength();
3878
 
                                                                        o->m_pVHDF->m_pVHDF->AddToBin(tf,z0);
3879
 
                                                                        o->m_pVHDF->m_pCount[z0]++;
3880
 
                                                                }
3881
 
                                                        } 
3882
 
                                                } // Ende IF VHDF
3883
 
 
3884
 
                                                if (g_bRDF)
3885
 
                                                {
3886
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
3887
 
                                                        {
3888
 
                                                                if (o->m_pRDF[zr] == NULL)
3889
 
                                                                        continue;
3890
 
                                                                o->m_pRDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3891
 
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
3892
 
                                                                {
3893
 
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3894
 
                                                                        vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3895
 
                                                                        vec2 = vec0-vec1;
3896
 
                                                                        tf = vec2.GetLength();
3897
 
                                                                        if (g_bDeriv)
3898
 
                                                                        {
3899
 
                                                                                o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) = tf;
3900
 
                                                                                switch(o->m_pRDF[zr]->m_iDeriv)
3901
 
                                                                                {
3902
 
                                                                                        case 0:
3903
 
                                                                                                tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
3904
 
                                                                                                break;
3905
 
                                                                                        case 1:
3906
 
                                                                                                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);
3907
 
                                                                                                break;
3908
 
                                                                                        case 2:
3909
 
                                                                                                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);
3910
 
                                                                                                break;
3911
 
                                                                                }
3912
 
                                                                        }
3913
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
3914
 
                                                                        {
3915
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
3916
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
3917
 
 
3918
 
                                                                                if (o->m_bDecompType)
3919
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
3920
 
 
3921
 
                                                                                o->m_pRDF[zr]->m_faData[0].Add(tf);
3922
 
 
3923
 
                                                                                if (o->m_pRDF[zr]->m_bACF)
3924
 
                                                                                        o->m_pRDF[zr]->m_pfaACFBuffer[z2*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
3925
 
 
3926
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
3927
 
                                                                                {
3928
 
                                                                                        if (o->m_bSaveSeparateFiles)
3929
 
                                                                                                fprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
3930
 
                                                                                                        else fprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
3931
 
                                                                                        if (o->m_bCombinedPlot)
3932
 
                                                                                                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);
3933
 
                                                                                }
3934
 
                                                                                if (o->m_bTimeDiff)
3935
 
                                                                                        ((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
3936
 
                                                                        }
3937
 
                                                                } 
3938
 
                                                        }
3939
 
                                                } // Ende IF RDF
3940
 
 
3941
 
                                                if (g_bDipDF)
3942
 
                                                {
3943
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
3944
 
                                                        {
3945
 
                                                                if (o->m_pDipDF[zr] == NULL)
3946
 
                                                                        continue;
3947
 
                                                                tf = smfix->m_vDipole.GetLength();
3948
 
                                                                if (g_bDeriv)
3949
 
                                                                {
3950
 
                                                                        o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
3951
 
                                                                        switch(o->m_pDipDF[zr]->m_iDeriv)
3952
 
                                                                        {
3953
 
                                                                                case 0:
3954
 
                                                                                        tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
3955
 
                                                                                        break;
3956
 
                                                                                case 1:
3957
 
                                                                                        tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2)) / (2*g_fTimestepLength);
3958
 
                                                                                        break;
3959
 
                                                                                case 2:
3960
 
                                                                                        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);
3961
 
                                                                                        break;
3962
 
                                                                        }
3963
 
                                                                }
3964
 
                                                                if (!g_bDeriv || (g_iSteps > 2))
3965
 
                                                                {
3966
 
                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
3967
 
                                                                                o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
3968
 
 
3969
 
                                                                        o->m_pDipDF[zr]->m_faData[0].Add(tf);
3970
 
 
3971
 
                                                                        if (o->m_pDipDF[zr]->m_bACF)
3972
 
                                                                                o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
3973
 
 
3974
 
                                                                        if (o->m_bTimeDev && (ti2 != -1))
3975
 
                                                                        {
3976
 
                                                                                if (o->m_bSaveSeparateFiles)
3977
 
                                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
3978
 
                                                                                                else fprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
3979
 
                                                                                if (o->m_bCombinedPlot)
3980
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2,g_iSteps*g_fTimestepLength/1000.0,tf);
3981
 
                                                                        }
3982
 
                                                                        if (o->m_bTimeDiff)
3983
 
                                                                                ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
3984
 
                                                                }
3985
 
                                                        }
3986
 
                                                } // Ende IF DIPDF
3987
 
 
3988
 
                                                if (g_bVDF)
3989
 
                                                {
3990
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
3991
 
                                                        {
3992
 
                                                                if (o->m_pVDF[zr] == NULL)
3993
 
                                                                        continue;
3994
 
                                                                o->m_pVDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3995
 
                                                                for (z4=0;z4<templa.GetSize();z4++)
3996
 
                                                                {
3997
 
                                                                        tf = tempvel[templa[z4]].GetLength();
3998
 
                                                                        if (g_bDeriv)
3999
 
                                                                        {
4000
 
                                                                                o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) = tf;
4001
 
                                                                                switch(o->m_pVDF[zr]->m_iDeriv)
4002
 
                                                                                {
4003
 
                                                                                        case 0:
4004
 
                                                                                                tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
4005
 
                                                                                                break;
4006
 
                                                                                        case 1:
4007
 
                                                                                                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);
4008
 
                                                                                                break;
4009
 
                                                                                        case 2:
4010
 
                                                                                                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);
4011
 
                                                                                                break;
4012
 
                                                                                }
4013
 
                                                                        }
4014
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4015
 
                                                                        {
4016
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4017
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
4018
 
 
4019
 
                                                                                o->m_pVDF[zr]->m_faData[0].Add(tf);
4020
 
 
4021
 
                                                                                if (o->m_pVDF[zr]->m_bACF)
4022
 
                                                                                        o->m_pVDF[zr]->m_pfaACFBuffer[z2*o->m_pVDF[zr]->m_iCombinations+z4]->Add((float)tf);
4023
 
 
4024
 
                                                                                if (o->m_bTimeDev && (ti2 != -1))
4025
 
                                                                                {
4026
 
                                                                                        if (o->m_bSaveSeparateFiles)
4027
 
                                                                                                fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
4028
 
                                                                                                        else fprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
4029
 
                                                                                        if (o->m_bCombinedPlot)
4030
 
                                                                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pVDF[zr]->m_iCombinations+z4,g_iSteps*g_fTimestepLength/1000.0,tf);
4031
 
                                                                                }
4032
 
                                                                                if (o->m_bTimeDiff)
4033
 
                                                                                        ((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
4034
 
                                                                        }
4035
 
                                                                }
4036
 
                                                        }
4037
 
                                                } // Ende IF VDF
4038
 
 
4039
 
                                                if (g_bSDF)
4040
 
                                                {
4041
 
                                                        o->m_pSDF->BuildAtomList(smfix,smfix,NULL,&templa);
4042
 
                                                        for (z4=0;z4<templa.GetSize();z4++)
4043
 
                                                        {
4044
 
                                                                o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4045
 
 
4046
 
                                                                if (o->m_pSDF->m_bVdWSpheres)
4047
 
                                                                        o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
4048
 
                                                        } 
4049
 
                                                } // Ende IF SDF
4050
 
 
4051
 
                                                if (g_bRevSDF)
4052
 
                                                {
4053
 
                                                        o->m_pRevSDF->BuildAtomList(smfix,smfix,NULL,&templa);
4054
 
                                                        for (z4=0;z4<templa.GetSize();z4++)
4055
 
                                                                o->m_pRevSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4056
 
                                                } // Ende IF RevSDF
4057
 
 
4058
 
                                        } // Ende IF m_bSelf  
4059
 
 
4060
 
                                        if (o->m_bOthers)
4061
 
                                        {
4062
 
                                                secondmolrun = false;
4063
 
_secondmolstart:
4064
 
                                                if (o->m_pConditions != NULL)
4065
 
                                                {
4066
 
                                                        o->m_pConditions->m_bAnyPassed = false;
4067
 
                                                        o->m_pConditions->ScanNeighborhoodAllOM(g_pTempTimestep,smfix,false);
4068
 
                                                        if (o->m_pConditions->m_bAnyPassed)
4069
 
                                                                o->m_pConditions->m_iRMPassCounter[z2]++;
4070
 
                                                }
4071
 
 
4072
 
                                                for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
4073
 
                                                {
4074
 
                                                        if (secondmolrun)
4075
 
                                                        {
4076
 
                                                                if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
4077
 
                                                                                continue;
4078
 
                                                                if (o->m_bObsCertain)
4079
 
                                                                {
4080
 
                                                                        if (!o->m_waObsShow2List.Contains(z3))
4081
 
                                                                                continue;
4082
 
                                                                        tic_o = o->m_waObsShow2List.GetPosition(z3);
4083
 
                                                                }
4084
 
                                                        } else
4085
 
                                                        {
4086
 
                                                                if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
4087
 
                                                                                continue;
4088
 
                                                                if (o->m_bObsCertain)
4089
 
                                                                {
4090
 
                                                                        if (!o->m_waObsShowList.Contains(z3))
4091
 
                                                                                continue;
4092
 
                                                                        tic_o = o->m_waObsShowList.GetPosition(z3);
4093
 
                                                                }
4094
 
                                                        }
4095
 
 
4096
 
                                                        if (secondmolrun)
4097
 
                                                        {
4098
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
4099
 
                                                        } else
4100
 
                                                        {
4101
 
                                                                ti = o->m_waSaveShowList.GetPosition(z3);
4102
 
                                                                sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4103
 
                                                        }
4104
 
 
4105
 
                                                        if (o->m_bTimeDev && (o->m_pConditions != NULL))
4106
 
                                                        {
4107
 
                                                                if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
4108
 
                                                                {
4109
 
                                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4110
 
                                                                        {
4111
 
                                                                                if (g_bADF && (o->m_pADF[zr] != NULL))
4112
 
                                                                                {
4113
 
                                                                                        if ((ti2 != -1) && (ti != -1))
4114
 
                                                                                        {
4115
 
                                                                                                if (o->m_bSaveSeparateFiles)
4116
 
                                                                                                        fprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
4117
 
                                                                                                                else fprintf(o->m_pADF[zr]->m_fAngle[0],";     -   ");
4118
 
                                                                                        }
4119
 
                                                                                }
4120
 
 
4121
 
                                                                                if (g_bDDF && (o->m_pDDF[zr] != NULL))
4122
 
                                                                                {
4123
 
                                                                                        if ((ti2 != -1) && (ti != -1))
4124
 
                                                                                        {
4125
 
                                                                                                if (o->m_bSaveSeparateFiles)
4126
 
                                                                                                        fprintf(o->m_pADF[zr]->m_fAngle[ti2],";     -   ");
4127
 
                                                                                                                else fprintf(o->m_pDDF[zr]->m_fAngle[0],";     -   ");
4128
 
                                                                                        }
4129
 
                                                                                }
4130
 
 
4131
 
                                                                                if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
4132
 
                                                                                {
4133
 
                                                                                        if ((ti2 != -1) && (ti != -1))
4134
 
                                                                                        {
4135
 
                                                                                                if (o->m_bSaveSeparateFiles)
4136
 
                                                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],";     -   ");
4137
 
                                                                                                                else fprintf(o->m_pDipDF[zr]->m_fDipole[0],";     -   ");
4138
 
                                                                                        }
4139
 
                                                                                }
4140
 
 
4141
 
                                                                                if (g_bVDF && (o->m_pVDF[zr] != NULL))
4142
 
                                                                                {
4143
 
                                                                                        if ((ti2 != -1) && (ti != -1))
4144
 
                                                                                        {
4145
 
                                                                                                if (o->m_bSaveSeparateFiles)
4146
 
                                                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],";     -   ");
4147
 
                                                                                                                else fprintf(o->m_pVDF[zr]->m_fSpeed[0],";     -   ");
4148
 
                                                                                        }
4149
 
                                                                                }
4150
 
 
4151
 
                                                                                if (g_bRDF && (o->m_pRDF[zr] != NULL))
4152
 
                                                                                {
4153
 
                                                                                        if ((ti2 != -1) && (ti != -1))
4154
 
                                                                                        {
4155
 
                                                                                                if (o->m_bSaveSeparateFiles)
4156
 
                                                                                                        fprintf(o->m_pRDF[zr]->m_fDist[ti2],";     -   ");
4157
 
                                                                                                                else fprintf(o->m_pRDF[zr]->m_fDist[0],";     -   ");
4158
 
                                                                                        }
4159
 
                                                                                }
4160
 
                                                                        }
4161
 
                                                                        continue;
4162
 
                                                                }
4163
 
                                                        }
4164
 
 
4165
 
                                                        if (o->m_pConditions != NULL)
4166
 
                                                        {
4167
 
                                                                if (!o->m_pConditions->Contains(z3))
4168
 
                                                                        continue;
4169
 
 
4170
 
                                                                if (o->m_bBinOnlyPassedAtoms)
4171
 
                                                                        o->m_pConditions->MarkPassedAtoms(z3,true);
4172
 
 
4173
 
                                                                if (o->m_bBinOnlyNotPassedAtoms)
4174
 
                                                                        o->m_pConditions->MarkPassedAtoms(z3,false);
4175
 
 
4176
 
                                                                if (g_bSaveCondSnapshot)
4177
 
                                                                {
4178
 
                                                                        g_iSaveCondCount++;
4179
 
                                                                        if (g_bSaveCondWholeBox)
4180
 
                                                                        {
4181
 
                                                                                g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
4182
 
                                                                        } else
4183
 
                                                                        {
4184
 
                                                                                fprintf(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);
4185
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
4186
 
                                                                                {
4187
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
4188
 
                                                                                                continue;
4189
 
                                                                                        for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
4190
 
                                                                                                fprintf(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);
4191
 
                                                                                }
4192
 
                                                                                for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
4193
 
                                                                                {
4194
 
                                                                                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
4195
 
                                                                                                continue;
4196
 
                                                                                        for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
4197
 
                                                                                                fprintf(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);
4198
 
                                                                                }
4199
 
                                                                        }
4200
 
                                                                }
4201
 
                                                        }
4202
 
 
4203
 
                                                        if (g_bVHDF)
4204
 
                                                        {
4205
 
                                                                o->m_pVHDF->BuildAtomList(smfix,sm,NULL,&templa);
4206
 
                                                                for (z4=0;z4<templa.GetSize();z4+=2)
4207
 
                                                                {
4208
 
                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]] + vecc;
4209
 
                                                                        for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
4210
 
                                                                        {
4211
 
                                                                                g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
4212
 
                                                                                if (g_pT2Timestep == NULL)
4213
 
                                                                                        continue;
4214
 
                                                                                vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4215
 
                                                                                vec2 = vec0-vec1;
4216
 
                                                                                while (vec2[0] >   g_fBoxX/2.0) vec2[0] -= g_fBoxX;
4217
 
                                                                                while (vec2[0] <= -g_fBoxX/2.0) vec2[0] += g_fBoxX;
4218
 
                                                                                while (vec2[1] >   g_fBoxY/2.0) vec2[1] -= g_fBoxY;
4219
 
                                                                                while (vec2[1] <= -g_fBoxY/2.0) vec2[1] += g_fBoxY;
4220
 
                                                                                while (vec2[2] >   g_fBoxZ/2.0) vec2[2] -= g_fBoxZ;
4221
 
                                                                                while (vec2[2] <= -g_fBoxZ/2.0) vec2[2] += g_fBoxZ;
4222
 
                                                                                tf = vec2.GetLength();
4223
 
                                                                                o->m_pVHDF->m_pVHDF->AddToBin(tf,z0);
4224
 
                                                                                o->m_pVHDF->m_pCount[z0]++;
4225
 
                                                                        }
4226
 
                                                                } 
4227
 
                                                        } // Ende IF VHDF
4228
 
 
4229
 
                                                        if (g_bADF)
4230
 
                                                        {
4231
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
4232
 
                                                                {
4233
 
                                                                        if (o->m_pADF[zr] == NULL)
4234
 
                                                                                continue;
4235
 
                                                                        if (o->m_bSecondShowMol)
4236
 
                                                                        {
4237
 
                                                                                if (secondmolrun && (zr == 0))
4238
 
                                                                                        continue;
4239
 
                                                                                if (!secondmolrun && (zr == 1))
4240
 
                                                                                        continue;
4241
 
                                                                        }
4242
 
                                                                        o->m_pADF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4243
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=6)
4244
 
                                                                        {
4245
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4246
 
                                                                                {
4247
 
                                                                                        tb = true;
4248
 
                                                                                        if (g_baAtomPassedCondition[templa[z4]] == 0)
4249
 
                                                                                                tb = false;
4250
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+1]] == 0)
4251
 
                                                                                                tb = false;
4252
 
                                                                                        if (o->m_pADF[zr]->m_bOrtho[0])
4253
 
                                                                                                if (g_baAtomPassedCondition[templa[z4+2]] == 0)
4254
 
                                                                                                        tb = false;
4255
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+3]] == 0)
4256
 
                                                                                                tb = false;
4257
 
                                                                                        if (g_baAtomPassedCondition[templa[z4+4]] == 0)
4258
 
                                                                                                tb = false;
4259
 
                                                                                        if (o->m_pADF[zr]->m_bOrtho[1])
4260
 
                                                                                                if (g_baAtomPassedCondition[templa[z4+5]] == 0)
4261
 
                                                                                                        tb = false;
4262
 
                                                                                        if (tb)
4263
 
                                                                                        {
4264
 
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
4265
 
                                                                                        } else
4266
 
                                                                                        {
4267
 
                                                                        //                      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]]);
4268
 
                                                                                                o->m_pADF[zr]->m_baDataEnabled[z3].Add(0);
4269
 
                                                                                        }
4270
 
                                                                                }
4271
 
                                                                                if (o->m_pADF[zr]->m_bOrtho[0])
4272
 
                                                                                {
4273
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4274
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4275
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4276
 
                                                                                        vec1 = CrossP(vec2-vec0,vec3-vec0);
4277
 
                                                                                } else
4278
 
                                                                                {
4279
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4280
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4281
 
                                                                                        vec1 = vec2-vec0;
4282
 
                                                                                }
4283
 
                                                                                if (o->m_pADF[zr]->m_bOrtho[1])
4284
 
                                                                                {
4285
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4286
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4287
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4288
 
                                                                                        vec2 = CrossP(vec3-vec4,vec5-vec4);
4289
 
                                                                                } else
4290
 
                                                                                {
4291
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4292
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4293
 
                                                                                        vec2 = vec3-vec4;
4294
 
                                                                                }
4295
 
 
4296
 
                                                                                tf = Angle_Deg(vec1,vec2);
4297
 
                                                                                if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
4298
 
                                                                                        tf = 180.0f-tf;
4299
 
                                                                                if (o->m_pADF[zr]->m_bCosine)
4300
 
                                                                                        tf = cos(tf/180.0*Pi);
4301
 
 
4302
 
                                                                                if (g_bDeriv)
4303
 
                                                                                {
4304
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6;
4305
 
                                                                                        o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
4306
 
                                                                                        switch(o->m_pADF[zr]->m_iDeriv)
4307
 
                                                                                        {
4308
 
                                                                                                case 0:
4309
 
                                                                                                        tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
4310
 
                                                                                                        break;
4311
 
                                                                                                case 1:
4312
 
                                                                                                        tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
4313
 
                                                                                                        break;
4314
 
                                                                                                case 2:
4315
 
                                                                                                        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);
4316
 
                                                                                                        break;
4317
 
                                                                                        }
4318
 
                                                                                }
4319
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
4320
 
                                                                                {
4321
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4322
 
                                                                                                o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
4323
 
 
4324
 
                                                                                        o->m_pADF[zr]->m_faData[z3].Add(tf);
4325
 
 
4326
 
                                                                                        if (o->m_pADF[zr]->m_bACF)
4327
 
                                                                                                o->m_pADF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
4328
 
 
4329
 
                                                        /*                              if (o->m_pADF[zr]->m_bMirror)
4330
 
                                                                                        {
4331
 
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4332
 
                                                                                                        o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,180.0-tf);
4333
 
                                                                                                o->m_pADF[zr]->m_faData[z3].Add(180.0-tf);
4334
 
                                                                                        }*/
4335
 
 
4336
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4337
 
                                                                                        {
4338
 
                                                                                //              o->m_pAngleStat->AddValue(ti2,ti,tf);
4339
 
                                                                                                if (o->m_bSaveSeparateFiles)
4340
 
                                                                                                        fprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
4341
 
                                                                                                                else fprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
4342
 
                                                                                                if (o->m_bCombinedPlot)
4343
 
                                                                                                        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);
4344
 
                                                                                        }
4345
 
                                                                                        if (o->m_bTimeDiff)
4346
 
                                                                                                ((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);
4347
 
                                                                                }
4348
 
                                                                        }
4349
 
                                                                }
4350
 
                                                        }  // Ende IF ADF
4351
 
 
4352
 
                                                        if (g_bDDF)
4353
 
                                                        {
4354
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
4355
 
                                                                {
4356
 
                                                                        if (o->m_pDDF[zr] == NULL)
4357
 
                                                                                continue;
4358
 
                                                                        if (o->m_bSecondShowMol)
4359
 
                                                                        {
4360
 
                                                                                if (secondmolrun && (zr == 0))
4361
 
                                                                                        continue;
4362
 
                                                                                if (!secondmolrun && (zr == 1))
4363
 
                                                                                        continue;
4364
 
                                                                        }
4365
 
                                                                        o->m_pDDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4366
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=9)
4367
 
                                                                        {
4368
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4369
 
                                                                                {
4370
 
                                                                                        tb = true;
4371
 
                                                                                        for (z5=z4;z5<z4+9;z5++)
4372
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
4373
 
                                                                                                        tb = false;
4374
 
                                                                                        if (tb)
4375
 
                                                                                                o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
4376
 
                                                                                                        else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
4377
 
                                                                                }
4378
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[0])
4379
 
                                                                                {
4380
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4381
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4382
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4383
 
                                                                                        vec1 = CrossP(vec2-vec0,vec3-vec0);
4384
 
                                                                                } else
4385
 
                                                                                {
4386
 
                                                                                        vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4387
 
                                                                                        vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4388
 
                                                                                        vec1 = vec2-vec0;
4389
 
                                                                                }
4390
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[1])
4391
 
                                                                                {
4392
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4393
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4394
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4395
 
                                                                                        vec2 = CrossP(vec3-vec4,vec5-vec4);
4396
 
                                                                                } else
4397
 
                                                                                {
4398
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4399
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4400
 
                                                                                        vec2 = vec3-vec4;
4401
 
                                                                                }
4402
 
                                                                                if (o->m_pDDF[zr]->m_bOrtho[2])
4403
 
                                                                                {
4404
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4405
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4406
 
                                                                                        vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
4407
 
                                                                                        vec3 = CrossP(vec3-vec4,vec5-vec4);
4408
 
                                                                                } else
4409
 
                                                                                {
4410
 
                                                                                        vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4411
 
                                                                                        vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4412
 
                                                                                        vec3 = vec3-vec4;
4413
 
                                                                                }
4414
 
                                                                                tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
4415
 
                                                                                if (o->m_pDDF[zr]->m_bCosine)
4416
 
                                                                                        tf = cos(tf/180.0*Pi);
4417
 
                                                                                if (g_bDeriv)
4418
 
                                                                                {
4419
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9;
4420
 
                                                                                        o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
4421
 
                                                                                        switch(o->m_pDDF[zr]->m_iDeriv)
4422
 
                                                                                        {
4423
 
                                                                                                case 0:
4424
 
                                                                                                        tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
4425
 
                                                                                                        break;
4426
 
                                                                                                case 1:
4427
 
                                                                                                        tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
4428
 
                                                                                                        break;
4429
 
                                                                                                case 2:
4430
 
                                                                                                        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);
4431
 
                                                                                                        break;
4432
 
                                                                                        }
4433
 
                                                                                }
4434
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
4435
 
                                                                                {
4436
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4437
 
                                                                                                o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
4438
 
 
4439
 
                                                                                        o->m_pDDF[zr]->m_faData[z3].Add(tf);
4440
 
 
4441
 
                                                                                        if (o->m_pDDF[zr]->m_bACF)
4442
 
                                                                                                o->m_pDDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
4443
 
 
4444
 
                                                                                        if ((!o->m_pDDF[zr]->m_bAbs) && o->m_pDDF[zr]->m_bSymm)
4445
 
                                                                                        {
4446
 
                                                                                                o->m_pDDF[zr]->m_faData[z3].Add(-tf);
4447
 
                                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4448
 
                                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,-tf);
4449
 
                                                                                        }
4450
 
 
4451
 
                                                                                        if (o->m_bTimeDiff)
4452
 
                                                                                                ((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);
4453
 
 
4454
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4455
 
                                                                                        {
4456
 
                                                                                                if (o->m_pDDF[zr]->m_bRotate)
4457
 
                                                                                                {
4458
 
                                                                                                        if (g_iSteps > 1)
4459
 
                                                                                                        {
4460
 
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
4461
 
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
4462
 
                                                                                                                if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
4463
 
                                                                                                                        o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
4464
 
                                                                                                        }
4465
 
                                                                                                        o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
4466
 
                                                                                                        tf2 = tf + o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
4467
 
                                                                                                } else tf2 = tf;
4468
 
                                                                                                if (o->m_bSaveSeparateFiles)
4469
 
                                                                                                        fprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
4470
 
                                                                                                                else fprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
4471
 
                                                                                                if (o->m_bCombinedPlot)
4472
 
                                                                                                        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);
4473
 
                                                                                        }
4474
 
                                                                                }
4475
 
                                                                        }
4476
 
                                                                }
4477
 
                                                        }  // Ende IF DDF
4478
 
 
4479
 
                                                        if (g_bDipDF)
4480
 
                                                        {
4481
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
4482
 
                                                                {
4483
 
                                                                        if (o->m_pDipDF[zr] == NULL)
4484
 
                                                                                continue;
4485
 
                                                                        if (o->m_bSecondShowMol)
4486
 
                                                                        {
4487
 
                                                                                if (secondmolrun && (zr == 0))
4488
 
                                                                                        continue;
4489
 
                                                                                if (!secondmolrun && (zr == 1))
4490
 
                                                                                        continue;
4491
 
                                                                        }
4492
 
                                                                        if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
4493
 
                                                                                tf = smfix->m_vDipole.GetLength();
4494
 
                                                                                        else tf = sm->m_vDipole.GetLength();
4495
 
                                                                        if (g_bDeriv)
4496
 
                                                                        {
4497
 
                                                                                zi = z2*o->m_iShowMolCount+z3;
4498
 
                                                                                o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
4499
 
                                                                                switch(o->m_pDipDF[zr]->m_iDeriv)
4500
 
                                                                                {
4501
 
                                                                                        case 0:
4502
 
                                                                                                tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
4503
 
                                                                                                break;
4504
 
                                                                                        case 1:
4505
 
                                                                                                tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
4506
 
                                                                                                break;
4507
 
                                                                                        case 2:
4508
 
                                                                                                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);
4509
 
                                                                                                break;
4510
 
                                                                                }
4511
 
                                                                        }
4512
 
                                                                        if (!g_bDeriv || (g_iSteps > 2))
4513
 
                                                                        {
4514
 
                                                                                if (o->m_bObsCertain && o->m_bDecompDist)
4515
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
4516
 
 
4517
 
                                                                                o->m_pDipDF[zr]->m_faData[z3].Add(tf);
4518
 
 
4519
 
                                                                                if (o->m_pDipDF[zr]->m_bACF)
4520
 
                                                                                        o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
4521
 
 
4522
 
                                                                                if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4523
 
                                                                                {
4524
 
                                                                                        if (o->m_bSaveSeparateFiles)
4525
 
                                                                                                fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
4526
 
                                                                                                        else fprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
4527
 
                                                                                        if (o->m_bCombinedPlot)
4528
 
                                                                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_waSaveShowList.GetSize()+ti,g_iSteps*g_fTimestepLength/1000.0,tf);
4529
 
                                                                                }
4530
 
                                                                                if (o->m_bTimeDiff)
4531
 
                                                                                        ((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
4532
 
                                                                        }
4533
 
                                                                }
4534
 
                                                        } // Ende IF DIPOLE
4535
 
 
4536
 
                                                        if (g_bVDF)
4537
 
                                                        {
4538
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
4539
 
                                                                {
4540
 
                                                                        if (o->m_pVDF[zr] == NULL)
4541
 
                                                                                continue;
4542
 
                                                                        if (o->m_bSecondShowMol)
4543
 
                                                                        {
4544
 
                                                                                if (secondmolrun && (zr == 0))
4545
 
                                                                                        continue;
4546
 
                                                                                if (!secondmolrun && (zr == 1))
4547
 
                                                                                        continue;
4548
 
                                                                        }
4549
 
                                                                        o->m_pVDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4550
 
                                                                        for (z4=0;z4<templa.GetSize();z4++)
4551
 
                                                                        {
4552
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4553
 
                                                                                {
4554
 
                                                                                        tb = true;
4555
 
                                                                                        for (z5=z4;z5<z4+2;z5++)
4556
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
4557
 
                                                                                                        tb = false;
4558
 
                                                                                        if (tb)
4559
 
                                                                                                o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
4560
 
                                                                                                        else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
4561
 
                                                                                }
4562
 
                                                                                tf = tempvel[templa[z4]].GetLength();
4563
 
                                                                                if (g_bDeriv)
4564
 
                                                                                {
4565
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2;
4566
 
                                                                                        o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
4567
 
                                                                                        switch(o->m_pVDF[zr]->m_iDeriv)
4568
 
                                                                                        {
4569
 
                                                                                                case 0:
4570
 
                                                                                                        tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
4571
 
                                                                                                        break;
4572
 
                                                                                                case 1:
4573
 
                                                                                                        tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
4574
 
                                                                                                        break;
4575
 
                                                                                                case 2:
4576
 
                                                                                                        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);
4577
 
                                                                                                        break;
4578
 
                                                                                        }
4579
 
                                                                                }
4580
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
4581
 
                                                                                {
4582
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4583
 
                                                                                                o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
4584
 
 
4585
 
                                                                                        o->m_pVDF[zr]->m_faData[z3].Add(tf);
4586
 
 
4587
 
                                                                                        if (o->m_pVDF[zr]->m_bACF)
4588
 
                                                                                                o->m_pVDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
4589
 
 
4590
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4591
 
                                                                                        {
4592
 
                                                                                                if (o->m_bSaveSeparateFiles)
4593
 
                                                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
4594
 
                                                                                                                else fprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
4595
 
                                                                                                if (o->m_bCombinedPlot)
4596
 
                                                                                                        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);
4597
 
                                                                                        }
4598
 
                                                                                        if (o->m_bTimeDiff)
4599
 
                                                                                                ((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);
4600
 
                                                                                }
4601
 
                                                                        }
4602
 
                                                                }
4603
 
                                                        } // Ende IF VDF
4604
 
 
4605
 
                                                        if (g_bRDF)
4606
 
                                                        {
4607
 
                                                                for (zr=0;zr<g_iCDFChannels;zr++)
4608
 
                                                                {
4609
 
                                                                        if (o->m_pRDF[zr] == NULL)
4610
 
                                                                                continue;
4611
 
                                                                        if (o->m_bSecondShowMol)
4612
 
                                                                        {
4613
 
                                                                                if (secondmolrun && (zr == 0))
4614
 
                                                                                        continue;
4615
 
                                                                                if (!secondmolrun && (zr == 1))
4616
 
                                                                                        continue;
4617
 
                                                                        }
4618
 
                                                                        o->m_pRDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4619
 
                                                                        for (z4=0;z4<templa.GetSize();z4+=2)
4620
 
                                                                        {
4621
 
                                                                                if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4622
 
                                                                                {
4623
 
                                                                                        tb = true;
4624
 
                                                                                        for (z5=z4;z5<z4+2;z5++)
4625
 
                                                                                                if (g_baAtomPassedCondition[templa[z5]] == 0)
4626
 
                                                                                                        tb = false;
4627
 
                                                                                        if (tb)
4628
 
                                                                                                o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
4629
 
                                                                                                        else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
4630
 
                                                                                }
4631
 
                                                                                vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4632
 
                                                                                vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4633
 
                                                                                vec2 = vec0-vec1;
4634
 
                                                                                tf = vec2.GetLength();
4635
 
                                                                //              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);
4636
 
                                                                //              mprintf("\n  vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
4637
 
                                                                                if (g_bDeriv)
4638
 
                                                                                {
4639
 
                                                                                        zi = (z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2;
4640
 
                                                                                        o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
4641
 
                                                                                        switch(o->m_pRDF[zr]->m_iDeriv)
4642
 
                                                                                        {
4643
 
                                                                                                case 0:
4644
 
                                                                                                        tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
4645
 
                                                                                                        break;
4646
 
                                                                                                case 1:
4647
 
                                                                                                        tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
4648
 
                                                                                                        break;
4649
 
                                                                                                case 2:
4650
 
                                                                                                        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);
4651
 
                                                                                                        break;
4652
 
                                                                                        }
4653
 
                                                                                }
4654
 
                                                                                if (!g_bDeriv || (g_iSteps > 2))
4655
 
                                                                                {
4656
 
                                                                                        if (o->m_bObsCertain && o->m_bDecompDist)
4657
 
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
4658
 
 
4659
 
                                                                                        if (o->m_bDecompType)
4660
 
                                                                                                o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
4661
 
 
4662
 
                                                                                        o->m_pRDF[zr]->m_faData[z3].Add(tf);
4663
 
 
4664
 
                                                                                        if (o->m_pRDF[zr]->m_bACF)
4665
 
                                                                                                o->m_pRDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
4666
 
 
4667
 
                                                                                        if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4668
 
                                                                                        {
4669
 
                                                                                                if (o->m_bSaveSeparateFiles)
4670
 
                                                                                                        fprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
4671
 
                                                                                                                else fprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
4672
 
                                                                                                if (o->m_bCombinedPlot)
4673
 
                                                                                                        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);
4674
 
                                                                                        }
4675
 
                                                                                        if (o->m_bTimeDiff)
4676
 
                                                                                                ((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);
4677
 
                                                                                }
4678
 
                                                                        } 
4679
 
                                                                }
4680
 
                                                        } // Ende IF RDF
4681
 
 
4682
 
                                                        if (g_bSDF)
4683
 
                                                        {
4684
 
                                                                o->m_pSDF->BuildAtomList(smfix,sm,NULL,&templa);
4685
 
                                                                for (z4=0;z4<templa.GetSize();z4++)
4686
 
                                                                {
4687
 
                                                                        o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4688
 
 
4689
 
                                                                        if (o->m_pSDF->m_bVdWSpheres)
4690
 
                                                                                o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
4691
 
                                                                }
4692
 
                                                        } // Ende IF SDF
4693
 
 
4694
 
                                                        if (g_bRevSDF)
4695
 
                                                        {
4696
 
                                                                o->m_pRevSDF->BuildAtomList(smfix,sm,NULL,&templa);
4697
 
                                                                for (z4=0;z4<templa.GetSize();z4++)
4698
 
                                                                        o->m_pRevSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4699
 
                                                        } // Ende IF RevSDF
4700
 
 
4701
 
                                                } // Ende FOR Alle anderen Molekuele durchgehen
4702
 
                                                if (o->m_bSecondShowMol && (!secondmolrun))
4703
 
                                                {
4704
 
                                                        secondmolrun = true;
4705
 
                                                        goto _secondmolstart;
4706
 
                                                }
4707
 
                                        } // Ende IF m_bOthers
4708
 
 
4709
 
                                        if (g_bSDF)
4710
 
                                        {
4711
 
                                                if (o->m_pSDF->m_bSDFMirrorBisect)
4712
 
                                                {
4713
 
                                                        vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
4714
 
                                                        vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
4715
 
                                                        vec1 = CrossP(vec2,vec3);
4716
 
                                                        vec2 += vec3;
4717
 
                                                }
4718
 
 
4719
 
                                                if (o->m_pSDF->m_bCutPlane)
4720
 
                                                {
4721
 
                                                        o->m_pSDF->m_fAtom2PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])][0];
4722
 
                                                        o->m_pSDF->m_fAtom3PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][0];
4723
 
                                                        o->m_pSDF->m_fAtom3PosY += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][1];
4724
 
                                                        o->m_pSDF->m_fPosCounter++;
4725
 
                                                }
4726
 
 
4727
 
                                                if (o->m_bSelf)
4728
 
                                                {
4729
 
                                                        for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
4730
 
                                                        {
4731
 
                                                                vec0 = o->m_pSDF->m_vaData[0][z5];
4732
 
 
4733
 
                                                                if (o->m_pSDF->m_bVdWSpheres)
4734
 
                                                                        o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[0][z5]);
4735
 
                                                                                else o->m_pSDF->m_pSDF->AddToBin(vec0);
4736
 
 
4737
 
                                                                if (o->m_pSDF->m_bSDFMirrorXY)
4738
 
                                                                {
4739
 
                                                                        vec0[2] = -vec0[2];
4740
 
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
4741
 
                                                                }
4742
 
 
4743
 
                                                                if (o->m_pSDF->m_bSDFMirrorBisect)
4744
 
                                                                {
4745
 
                                                                        vec3.PointRoot(vec1,vec2,vec0);
4746
 
                                                                        vec3 -= vec0;
4747
 
                                                                        vec3 *= 2.0f;
4748
 
                                                                        vec0 += vec3;
4749
 
                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
4750
 
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
4751
 
                                                                        {
4752
 
                                                                                vec0[2] = -vec0[2];
4753
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
4754
 
                                                                        }
4755
 
                                                                }
4756
 
                                                        }
4757
 
                                                } else
4758
 
                                                {
4759
 
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
4760
 
                                                        {
4761
 
                                                                for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
4762
 
                                                                {
4763
 
                                                                        vec0 = o->m_pSDF->m_vaData[z4][z5];
4764
 
 
4765
 
                                                                        if (o->m_pSDF->m_bVdWSpheres)
4766
 
                                                                                o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[z4][z5]);
4767
 
                                                                                        else o->m_pSDF->m_pSDF->AddToBin(vec0);
4768
 
 
4769
 
                                                                        if (o->m_pSDF->m_bSDFMirrorXY)
4770
 
                                                                        {
4771
 
                                                                                vec0[2] = -vec0[2];
4772
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
4773
 
                                                                        }
4774
 
 
4775
 
                                                                        if (o->m_pSDF->m_bSDFMirrorBisect)
4776
 
                                                                        {
4777
 
                                                                                vec3.PointRoot(vec1,vec2,vec0);
4778
 
                                                                                vec3 -= vec0;
4779
 
                                                                                vec3 *= 2.0f;
4780
 
                                                                                vec0 += vec3;
4781
 
                                                                                o->m_pSDF->m_pSDF->AddToBin(vec0);
4782
 
                                                                                if (o->m_pSDF->m_bSDFMirrorXY)
4783
 
                                                                                {
4784
 
                                                                                        vec0[2] = -vec0[2];
4785
 
                                                                                        o->m_pSDF->m_pSDF->AddToBin(vec0);
4786
 
                                                                                }
4787
 
                                                                        }
4788
 
                                                                }
4789
 
                                                        }
4790
 
                                                }
4791
 
                                        }
4792
 
 
4793
 
                                        if (g_bRevSDF)
4794
 
                                        {
4795
 
                                                vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
4796
 
                                                tf4 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])].GetLength();
4797
 
                                                o->m_pRevSDF->m_fSecondAtomPosX += tf4;
4798
 
                                                o->m_pRevSDF->m_fSecondAtomCount++;
4799
 
                                                if (o->m_bSelf)
4800
 
                                                {
4801
 
                                                        for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
4802
 
                                                        {
4803
 
                                                                vec0 = o->m_pRevSDF->m_vaData[0][z5];
4804
 
                                                                tf = fabs(Angle(vec2,vec0));
4805
 
                                                                tf2 = vec0.GetLength();
4806
 
                                                                tf3 = 1.0;
4807
 
                                                                if (o->m_pRevSDF->m_bCorrectAngle)
4808
 
                                                                {
4809
 
                                                                        if ((tf < 0.001) || (tf > Pi-0.001))
4810
 
                                                                                tf3 /= 0.001;
4811
 
                                                                                        else tf3 /= sin(tf);
4812
 
                                                                }
4813
 
                                                                if (o->m_pRevSDF->m_bCorrectRadial)
4814
 
                                                                        tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
4815
 
                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
4816
 
                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
4817
 
                                                                if (o->m_pRevSDF->m_bMirrorY)
4818
 
                                                                {
4819
 
                                                                        if (o->m_pRevSDF->m_bMirrorBond)
4820
 
                                                                        {
4821
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
4822
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
4823
 
                                                                        } else
4824
 
                                                                        {
4825
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
4826
 
                                                                                o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
4827
 
                                                                        }
4828
 
                                                                }
4829
 
                                                        }
4830
 
                                                } else
4831
 
                                                {
4832
 
                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
4833
 
                                                        {
4834
 
                                                                for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
4835
 
                                                                {
4836
 
                                                                        vec0 = o->m_pRevSDF->m_vaData[z4][z5];
4837
 
                                                                        tf = fabs(Angle(vec2,vec0));
4838
 
                                                                        tf2 = vec0.GetLength();
4839
 
                                                                        tf3 = 1.0;
4840
 
                                                                        if (o->m_pRevSDF->m_bCorrectAngle)
4841
 
                                                                        {
4842
 
                                                                                if ((tf < 0.001) || (tf > Pi-0.001))
4843
 
                                                                                        tf3 /= 0.001;
4844
 
                                                                                                else tf3 /= sin(tf);
4845
 
                                                                        }
4846
 
                                                                        if (o->m_pRevSDF->m_bCorrectRadial)
4847
 
                                                                                tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
4848
 
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
4849
 
                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
4850
 
                                                                        if (o->m_pRevSDF->m_bMirrorY)
4851
 
                                                                        {
4852
 
                                                                                if (o->m_pRevSDF->m_bMirrorBond)
4853
 
                                                                                {
4854
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
4855
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
4856
 
                                                                                } else
4857
 
                                                                                {
4858
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
4859
 
                                                                                        o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
4860
 
                                                                                }
4861
 
                                                                        }
4862
 
                                                                }
4863
 
                                                        }
4864
 
                                                }
4865
 
                                        } // END IF REVSDF
4866
 
 
4867
 
                                        if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
4868
 
                                        {
4869
 
                                                if (o->m_bSecondShowMol)
4870
 
                                                {
4871
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4872
 
                                                                switch(g_iObsChannel[zr])
4873
 
                                                                {
4874
 
                                                                        case 0: apfa[zr] = o->m_pRDF[zr]->m_faData; break;
4875
 
                                                                        case 1: apfa[zr] = o->m_pADF[zr]->m_faData; break;
4876
 
                                                                        case 2: apfa[zr] = o->m_pDDF[zr]->m_faData; break;
4877
 
                                                                        case 3: apfa[zr] = o->m_pDipDF[zr]->m_faData; break;
4878
 
                                                                        case 4: apfa[zr] = o->m_pVDF[zr]->m_faData; break;
4879
 
                                                                }
4880
 
 
4881
 
                                                        if (g_iCDFChannels == 2)
4882
 
                                                        {
4883
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
4884
 
                                                                {
4885
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4886
 
                                                                        {
4887
 
                                                                                for (z6=0;z6<o->m_iShowMol2Count;z6++)
4888
 
                                                                                {
4889
 
                                                                                        if (o->m_bExclude1eq2 && (z4 == z6))
4890
 
                                                                                                continue;
4891
 
                                                                                        for (z7=0;z7<apfa[1][z6].GetSize();z7++)
4892
 
                                                                                        {
4893
 
                                                                                                if (o->m_pCDF->m_bDumpDat)
4894
 
                                                                                                        fprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  %d;  %10.3f;  %10.3f\n",g_iSteps,z2+1,z4+1,z5+1,apfa[0][z4][z5],apfa[1][z6][z7]);
4895
 
                                                                                                o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z6][z7]);
4896
 
                                                                                        }
4897
 
                                                                                }
4898
 
                                                                        }
4899
 
                                                                }
4900
 
                                                        }
4901
 
                                                } else // IF NOT SECOND_OM
4902
 
                                                {
4903
 
                                                        for (zr=0;zr<g_iCDFChannels;zr++)
4904
 
                                                                switch(g_iObsChannel[zr])
4905
 
                                                                {
4906
 
                                                                        case 0: 
4907
 
                                                                                apfa[zr] = o->m_pRDF[zr]->m_faData; 
4908
 
                                                                                apba[zr] = o->m_pRDF[zr]->m_baDataEnabled; 
4909
 
                                                                                break;
4910
 
                                                                        case 1: 
4911
 
                                                                                apfa[zr] = o->m_pADF[zr]->m_faData; 
4912
 
                                                                                apba[zr] = o->m_pADF[zr]->m_baDataEnabled; 
4913
 
                                                                                break;
4914
 
                                                                        case 2: 
4915
 
                                                                                apfa[zr] = o->m_pDDF[zr]->m_faData; 
4916
 
                                                                                apba[zr] = o->m_pDDF[zr]->m_baDataEnabled; 
4917
 
                                                                                break;
4918
 
                                                                        case 3: 
4919
 
                                                                                apfa[zr] = o->m_pDipDF[zr]->m_faData; 
4920
 
                                                                                apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled; 
4921
 
                                                                                break;
4922
 
                                                                        case 4: 
4923
 
                                                                                apfa[zr] = o->m_pVDF[zr]->m_faData; 
4924
 
                                                                                apba[zr] = o->m_pVDF[zr]->m_baDataEnabled; 
4925
 
                                                                                break;
4926
 
                                                                }
4927
 
 
4928
 
                                                        if (g_iCDFChannels == 2)
4929
 
                                                        {
4930
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
4931
 
                                                                {
4932
 
                                                                        ticomb = 0;
4933
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4934
 
                                                                        {
4935
 
                                                                                for (z7=0;z7<apfa[1][z4].GetSize();z7++)
4936
 
                                                                                {
4937
 
                                                                                        if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
4938
 
                                                                                                continue;
4939
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
4940
 
                                                                                        {
4941
 
                                                                                                if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
4942
 
                                                                                                        goto _nocdfbin;
4943
 
                                                                                        }
4944
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
4945
 
                                                                                        {
4946
 
                                                                                                if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
4947
 
                                                                                                        goto _nocdfbin;
4948
 
                                                                                        }
4949
 
                                                                                        o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
4950
 
_nocdfbin:;
4951
 
                                                                                        if (o->m_pCDF->m_bDumpDat)
4952
 
                                                                                                fprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f\n",g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z7]);
4953
 
                                                                                        if (o->m_bTimeDev)
4954
 
                                                                                        {
4955
 
                                                                                                ti = o->m_waSaveShowList.GetPosition(z4);
4956
 
                                                                                                if ((ti2 != -1) && (ti != -1))
4957
 
                                                                                                {
4958
 
                                                                                                        if (o->m_bSaveSeparateFiles)
4959
 
                                                                                                                fprintf(o->m_pCDF->m_fTimeDev[ti2],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
4960
 
                                                                                                                        else fprintf(o->m_pCDF->m_fTimeDev[0],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
4961
 
                                                                                                        if (o->m_pCDF->m_bTDAnimation)
4962
 
                                                                                                                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]);
4963
 
                                                                                                }
4964
 
                                                                                                ticomb++;
4965
 
                                                                                        }
4966
 
                                                                                }
4967
 
                                                                        }
4968
 
                                                                }
4969
 
                                                                if (o->m_bTimeDev && (ti2 != -1))
4970
 
                                                                {
4971
 
                                                                        if (o->m_bSaveSeparateFiles)
4972
 
                                                                                fprintf(o->m_pCDF->m_fTimeDev[ti2],"\n");
4973
 
                                                                                        else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
4974
 
                                                                                                fprintf(o->m_pCDF->m_fTimeDev[0],"\n");
4975
 
                                                                }
4976
 
                                                        } // END IF CHANNELS == 2
4977
 
 
4978
 
                                                        if (g_iCDFChannels == 3)
4979
 
                                                        {
4980
 
                                                                for (z4=0;z4<o->m_iShowMolCount;z4++)
4981
 
                                                                {
4982
 
                                                                        ticomb = 0;
4983
 
                                                                        for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4984
 
                                                                        {
4985
 
                                                                                for (z6=0;z6<apfa[1][z4].GetSize();z6++)
4986
 
                                                                                {
4987
 
                                                                                        for (z7=0;z7<apfa[2][z4].GetSize();z7++)
4988
 
                                                                                        {
4989
 
                                                                                                if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]*o->m_pCDF->m_iCombinations[2]+z6*o->m_pCDF->m_iCombinations[1]+z7] == 0)
4990
 
                                                                                                        continue;
4991
 
                                                                                                if (o->m_bBinOnlyPassedAtoms)
4992
 
                                                                                                {
4993
 
                                                                                                        if ((apba[0][z4][z5] == 0) || (apba[1][z4][z6] == 0) || (apba[2][z4][z7] == 0))
4994
 
                                                                                                                goto _3nocdfbin;
4995
 
                                                                                                }
4996
 
                                                                                                if (o->m_bBinOnlyNotPassedAtoms)
4997
 
                                                                                                {
4998
 
                                                                                                        if ((apba[0][z4][z5] != 0) && (apba[1][z4][z6] != 0) && (apba[2][z4][z7] != 0))
4999
 
                                                                                                                goto _3nocdfbin;
5000
 
                                                                                                }
5001
 
                                                                                                o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z6],apfa[2][z4][z7]);
5002
 
 
5003
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[0]->AddToBin(apfa[0][z4][z5],apfa[1][z4][z6]);
5004
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[1]->AddToBin(apfa[0][z4][z5],apfa[2][z4][z7]);
5005
 
                                                                                                o->m_pCDF->m_p3DF->m_p2DF[2]->AddToBin(apfa[1][z4][z6],apfa[2][z4][z7]);
5006
 
_3nocdfbin:;
5007
 
                                                                                                if (o->m_pCDF->m_bDumpDat)
5008
 
                                                                                                        fprintf(o->m_pCDF->m_fDump,"%d;  %d;  %d;  ;  %10.3f;  %10.3f;  %10.3f\n",g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z6],apfa[2][z4][z7]);
5009
 
                                                                                        }
5010
 
                                                                                }
5011
 
                                                                        }
5012
 
                                                                }
5013
 
                                                        } // END IF CHANNELS == 3
5014
 
                                                } // IF NOT SECOND_OM
5015
 
                                        } // IF CDF
5016
 
 
5017
 
                                        for (zr=0;zr<g_iCDFChannels;zr++)
5018
 
                                        {
5019
 
                                                if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5020
 
                                                {
5021
 
                                                        if (o->m_bOthers)
5022
 
                                                        {
5023
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
5024
 
                                                                {
5025
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
5026
 
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
5027
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
5028
 
                                                                } else
5029
 
                                                                {
5030
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5031
 
                                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
5032
 
                                                                                {
5033
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
5034
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
5035
 
                                                                                                        continue;
5036
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
5037
 
                                                                                                if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
5038
 
                                                                                                        continue;
5039
 
                                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
5040
 
                                                                                }
5041
 
                                                                }
5042
 
                                                        } else
5043
 
                                                        {
5044
 
                                                                for (z5=0;z5<o->m_pRDF[zr]->m_faData[0].GetSize();z5++)
5045
 
                                                                        o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[0][z5]);
5046
 
                                                        }
5047
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
5048
 
                                                        {
5049
 
                                                                if (o->m_bSaveSeparateFiles)
5050
 
                                                                        fprintf(o->m_pRDF[zr]->m_fDist[ti2],"\n");
5051
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
5052
 
                                                                                        fprintf(o->m_pRDF[zr]->m_fDist[0],"\n");
5053
 
                                                        }
5054
 
                                                }
5055
 
 
5056
 
                                                if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5057
 
                                                {
5058
 
                                                        if (o->m_bOthers)
5059
 
                                                        {
5060
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
5061
 
                                                                {
5062
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
5063
 
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
5064
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
5065
 
                                                                } else
5066
 
                                                                {
5067
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5068
 
                                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
5069
 
                                                                                {
5070
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
5071
 
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
5072
 
                                                                                                        continue;
5073
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
5074
 
                                                                                                if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
5075
 
                                                                                                        continue;
5076
 
                                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
5077
 
                                                                                }
5078
 
                                                                }
5079
 
                                                        } else
5080
 
                                                        {
5081
 
                                                                for (z5=0;z5<o->m_pVDF[zr]->m_faData[0].GetSize();z5++)
5082
 
                                                                        o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[0][z5]);
5083
 
                                                        }
5084
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
5085
 
                                                        {
5086
 
                                                                if (o->m_bSaveSeparateFiles)
5087
 
                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"\n");
5088
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
5089
 
                                                                                        fprintf(o->m_pVDF[zr]->m_fSpeed[0],"\n");
5090
 
                                                        }
5091
 
                                                }
5092
 
 
5093
 
                                                if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5094
 
                                                {
5095
 
                                                        if (o->m_bOthers)
5096
 
                                                        {
5097
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
5098
 
                                                                {
5099
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
5100
 
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
5101
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
5102
 
                                                                } else
5103
 
                                                                {
5104
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5105
 
                                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
5106
 
                                                                                {
5107
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
5108
 
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
5109
 
                                                                                                        continue;
5110
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
5111
 
                                                                                                if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
5112
 
                                                                                                        continue;
5113
 
                                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
5114
 
                                                                                }
5115
 
                                                                }
5116
 
                                                        } else
5117
 
                                                        {
5118
 
                                                                for (z5=0;z5<o->m_pDipDF[zr]->m_faData[0].GetSize();z5++)
5119
 
                                                                        o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[0][z5]);
5120
 
                                                        }
5121
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
5122
 
                                                        {
5123
 
                                                                if (o->m_bSaveSeparateFiles)
5124
 
                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"\n");
5125
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
5126
 
                                                                                        fprintf(o->m_pDipDF[zr]->m_fDipole[0],"\n");
5127
 
                                                        }
5128
 
                                                }
5129
 
 
5130
 
                                                if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5131
 
                                                {
5132
 
                                                        if (o->m_bOthers)
5133
 
                                                        {
5134
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
5135
 
                                                                {
5136
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
5137
 
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
5138
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
5139
 
                                                                } else
5140
 
                                                                {
5141
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5142
 
                                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
5143
 
                                                                                {
5144
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
5145
 
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
5146
 
                                                                                                        continue;
5147
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
5148
 
                                                                                                if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
5149
 
                                                                                                        continue;
5150
 
                                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
5151
 
                                                                                }
5152
 
                                                                }
5153
 
                                                        } else
5154
 
                                                        {
5155
 
                                                                for (z5=0;z5<o->m_pADF[zr]->m_faData[0].GetSize();z5++)
5156
 
                                                                        o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[0][z5]);
5157
 
                                                        }
5158
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
5159
 
                                                        {
5160
 
                                                                if (o->m_bSaveSeparateFiles)
5161
 
                                                                        fprintf(o->m_pADF[zr]->m_fAngle[ti2],"\n");
5162
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
5163
 
                                                                                        fprintf(o->m_pADF[zr]->m_fAngle[0],"\n");
5164
 
                                                        }
5165
 
                                                }
5166
 
 
5167
 
                                                if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5168
 
                                                {
5169
 
                                                        if (o->m_bOthers)
5170
 
                                                        {
5171
 
                                                                if (o->m_bSecondShowMol && (zr == 1))
5172
 
                                                                {
5173
 
                                                                        for (z4=0;z4<o->m_iShowMol2Count;z4++)
5174
 
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
5175
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
5176
 
                                                                } else
5177
 
                                                                {
5178
 
                                                                        for (z4=0;z4<o->m_iShowMolCount;z4++)
5179
 
                                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
5180
 
                                                                                {
5181
 
                                                                                        if (o->m_bBinOnlyPassedAtoms)
5182
 
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
5183
 
                                                                                                        continue;
5184
 
                                                                                        if (o->m_bBinOnlyNotPassedAtoms)
5185
 
                                                                                                if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
5186
 
                                                                                                        continue;
5187
 
                                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
5188
 
                                                                                }
5189
 
                                                                }
5190
 
                                                        } else
5191
 
                                                        {
5192
 
                                                                for (z5=0;z5<o->m_pDDF[zr]->m_faData[0].GetSize();z5++)
5193
 
                                                                        o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[0][z5]);
5194
 
                                                        }
5195
 
                                                        if (o->m_bTimeDev && (ti2 != -1))
5196
 
                                                        {
5197
 
                                                                if (o->m_bSaveSeparateFiles)
5198
 
                                                                        fprintf(o->m_pDDF[zr]->m_fAngle[ti2],"\n");
5199
 
                                                                                else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
5200
 
                                                                                        fprintf(o->m_pDDF[zr]->m_fAngle[0],"\n");
5201
 
                                                        }
5202
 
                                                }
5203
 
                                        } // FOR CDFChannels
5204
 
 
5205
 
                                } // Ende FOR g_oaObserv.GetSize
5206
 
                        } // Ende IF [blabla]   
5207
 
        
5208
 
                        if (g_bMiddleAvg) // Referenzmolekuel mitteln
5209
 
                        {
5210
 
                                cc = 0;
5211
 
                                ti2 = (g_iSteps-2)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()+z2;
5212
 
                                // Jeden Atomtyp des Zielmolekuels durchgehen
5213
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
5214
 
                                {
5215
 
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
5216
 
                                        {
5217
 
                                                // Atome vertauschen, aber nicht im allerersten Durchgang hier, und nur wenn mehr als 1 Atom dieser Sorte
5218
 
                                                if ((g_iSwapAtoms) && (ti2 != 0) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3]>1))
5219
 
                                                {
5220
 
                                                        vec4 = g_pRefMol[cc];
5221
 
                                                        vec4 /= (float)ti2; // der bisherige Mittelwert des Referenzmolekuels
5222
 
                                                        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
5223
 
                                                        ti3 = -1;
5224
 
                                                        for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
5225
 
                                                        {
5226
 
                                                                tf2 = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z5)],vec4);
5227
 
                                                                if (tf2 < tf) // Das andere Atom ist naeher am Platz im Referenzmolekuel als das eigentlich vorgesehene
5228
 
                                                                {
5229
 
                                                                        ti3 = z5;
5230
 
                                                                        tf = tf2;
5231
 
                                                                }
5232
 
                                                        }
5233
 
                                                        if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
5234
 
                                                        {
5235
 
                                                                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)]);
5236
 
                                                                g_pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+(cc-z4+ti3)] += 1;
5237
 
                                                                g_pSwapMatrix[(cc-z4+ti3)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc] += 1;
5238
 
                                                        }
5239
 
                                                } // Ende IF SwapAtoms
5240
 
                                                g_pRefMol[cc] += g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)];
5241
 
                                                cc++;
5242
 
                                        } // Ende FOR Atom des Referenzmolekuels
5243
 
                                } // Ende FOR Atomtyp des Referenzmolekuels
5244
 
                        } // Ende IF Referenzmolekuel mitteln
5245
 
                } // Ende FOR RefMol (z2)
5246
 
 
5247
 
                for (z6=0;z6<g_oaObserv.GetSize();z6++)
5248
 
                {
5249
 
                        o = (CObservation*)g_oaObserv[z6];
5250
 
                        if (o->m_pConditions != NULL)
5251
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
5252
 
                                        if (o->m_pConditions->m_iPassCounter[z2] != 0)
5253
 
                                                o->m_pConditions->m_iOMPassCounter[z2]++;
5254
 
                }
5255
 
 
5256
 
 
5257
 
//_end:;
5258
 
_endstep:
5259
 
_norefmol:
5260
 
                if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
5261
 
                {
5262
 
                        mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
5263
 
                        break;
5264
 
                }
5265
 
        } // Ende while
5266
 
 
5267
 
/*************************************************************************
5268
 
*************** Ende Hauptschleife ***************************************
5269
 
*************************************************************************/
5270
 
 
5271
 
//      fclose(fff);
5272
 
 
5273
 
_endmainloop:
5274
 
        if (g_bUseVelocities)
5275
 
                g_iSteps -= 2;
5276
 
 
5277
 
        mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
5278
 
 
5279
 
        if (g_iStride != 1)
5280
 
                mprintf("\n%d time steps processed (every %dth from %d).\n\n",g_iSteps/g_iStride,g_iStride,g_iSteps);
5281
 
                        else mprintf("\n%d time steps processed.\n\n",g_iSteps);
5282
 
 
5283
 
        fclose(g_fPos);
5284
 
        if (g_fVel != NULL)
5285
 
                fclose(g_fVel);
5286
 
        if (g_fForce != NULL)
5287
 
                fclose(g_fForce);
5288
 
        if ((g_bNPT) && (g_sNPTFile[0] != 0))
5289
 
                fclose(g_fNPTFile);
5290
 
 
5291
 
        if (g_bVoro)
5292
 
        {
5293
 
                g_pVoroWrapper->Finish();
5294
 
        }
5295
 
 
5296
 
        if (g_bVoid)
5297
 
        {
5298
 
                g_pVoroAnalysis->Finish();
5299
 
        }
5300
 
 
5301
 
        if (g_bReact)
5302
 
        {
5303
 
                if (!ReactSecondRun)
5304
 
                {
5305
 
                        g_pReact->Finish();
5306
 
                        g_pReact->DumpMolecules();
5307
 
                        g_pReact->CreateOutput();
5308
 
                }
5309
 
                if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
5310
 
                {
5311
 
                        if (!ReactSecondRun)
5312
 
                        {
5313
 
                                mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
5314
 
                                ReactSecondRun = true;
5315
 
                                goto _beginmain;
5316
 
                        } else
5317
 
                        {
5318
 
                                mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
5319
 
                        }
5320
 
                }
5321
 
        }
5322
 
        g_bAbortAnalysis = true;
5323
 
 
5324
 
        if (g_bSaveCondSnapshot)
5325
 
        {
5326
 
                fclose(g_fSaveCondFile);
5327
 
                mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
5328
 
        }
5329
 
 
5330
 
        if (g_bMicroHet)
5331
 
        {
5332
 
                mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
5333
 
                for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
5334
 
                {
5335
 
                        mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
5336
 
                        mprintf(WHITE,"  * Observation %d: %s\n",z+1,mho->m_sName);
5337
 
 
5338
 
                        mprintf("      Creating Microheterogeneity plot...\n");
5339
 
                        sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
5340
 
                        mho->BuildSlices(buf);
5341
 
 
5342
 
                        mprintf("      Creating entry plot...\n");
5343
 
                        sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
5344
 
                        mho->BuildZeroPlot(buf,true);
5345
 
 
5346
 
                        if (mho->m_bCDF)
5347
 
                        {
5348
 
                                mprintf("      Creating CDF...\n");
5349
 
                                mho->BuildCDF();
5350
 
 
5351
 
                                sprintf(buf,"microhet_cdf_obs%d%s.csv",z+1,multibuf);
5352
 
                                mprintf("      Saving CDF as %s ...\n",buf);
5353
 
                                mho->m_pCDF->Write("",buf,"");
5354
 
                                sprintf(buf,"microhet_cdf_obs%d%s.nb",z+1,multibuf);
5355
 
                                mprintf("      Saving CDF Mathematica notebook as %s ...\n",buf);
5356
 
                                mho->m_pCDF->WriteMathematicaNb("",buf,"",false);
5357
 
 
5358
 
 
5359
 
                        }
5360
 
                }
5361
 
                mprintf("\n");
5362
 
        }
5363
 
 
5364
 
        if (g_bClusterAnalysis)
5365
 
        {
5366
 
                mprintf(WHITE,"*** Cluster Analysis\n\n");
5367
 
 
5368
 
                g_pClusterAnalysis->BuildClusterDistribution();
5369
 
 
5370
 
                mprintf(WHITE,"  * Cluster Distance Distribution\n");
5371
 
//              mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",g_pClusterAnalysis->m_pClusterDistanceDF->m_fBinEntries,g_pClusterAnalysis->m_pClusterDistanceDF->m_fSkipEntries,ZeroDivide(g_pClusterAnalysis->m_pClusterDistanceDF->m_fSkipEntries,g_pClusterAnalysis->m_pClusterDistanceDF->m_fBinEntries+g_pClusterAnalysis->m_pClusterDistanceDF->m_fSkipEntries)*100.0);
5372
 
//              g_pClusterAnalysis->m_pClusterDistanceDF->CalcMeanSD();
5373
 
                g_pClusterAnalysis->m_pClusterDistanceDF->MultiplyBin(100.0/g_pClusterAnalysis->m_iCounter);
5374
 
//              mprintf("    Mean value: %.10G pm    Standard deviation: %.10G pm\n",g_pClusterAnalysis->m_pClusterDistanceDF->m_fMean,g_pClusterAnalysis->m_pClusterDistanceDF->m_fSD);
5375
 
//              mprintf("    Min. value: %.10G pm    Max. value:         %.10G pm\n",g_pClusterAnalysis->m_pClusterDistanceDF->m_fMinInput,g_pClusterAnalysis->m_pClusterDistanceDF->m_fMaxInput);
5376
 
                sprintf(buf,"cluster_distance_df%s.csv",multibuf);
5377
 
                mprintf("    Saving Cluster Distance distribution as %s ...\n",buf);
5378
 
                g_pClusterAnalysis->m_pClusterDistanceDF->Write("",buf,"",false);
5379
 
                sprintf(buf,"cluster_distance_df%s.agr",multibuf);
5380
 
                mprintf("    Saving Cluster Distance distribution AGR file as \"%s\"...\n",buf);
5381
 
                g_pClusterAnalysis->m_pClusterDistanceDF->WriteAgr("",buf,"","Cluster Distance distribution",false);
5382
 
 
5383
 
                mprintf(WHITE,"\n  * Cluster Significance Distribution\n");
5384
 
                sprintf(buf,"cluster_significance_df%s.csv",multibuf);
5385
 
                mprintf("    Saving Cluster Significance distribution as %s ...\n",buf);
5386
 
                g_pClusterAnalysis->m_pClusterDistributionDF->WriteMulti("",buf,"");
5387
 
                sprintf(buf,"cluster_significance_df%s.agr",multibuf);
5388
 
                mprintf("    Saving Cluster Significance distribution AGR file as \"%s\"...\n",buf);
5389
 
                g_pClusterAnalysis->m_pClusterDistributionDF->WriteMultiAgr("",buf,"","Cluster Significance distribution",false);
5390
 
 
5391
 
/*              sprintf(buf,"cluster_sizeX_df%s.csv",multibuf);
5392
 
                mprintf("    Saving Cluster size X distribution as %s ...\n",buf);
5393
 
                g_pClusterAnalysis->m_pClusterDistribution2DF->WriteMulti("",buf,"");
5394
 
                sprintf(buf,"cluster_sizeX_df%s.agr",multibuf);
5395
 
                mprintf("    Saving Cluster size X distribution AGR file as \"%s\"...\n",buf);
5396
 
                g_pClusterAnalysis->m_pClusterDistribution2DF->WriteMultiAgr("",buf,"","Cluster size X distribution",false);*/
5397
 
 
5398
 
                mprintf(WHITE,"\n  * Cluster Size Distribution\n");
5399
 
                sprintf(buf,"cluster_size_df%s.csv",multibuf);
5400
 
                mprintf("    Saving Cluster Size distribution as %s ...\n",buf);
5401
 
                g_pClusterAnalysis->m_pClusterSizeDF->WriteMulti("",buf,"");
5402
 
                sprintf(buf,"cluster_size_df%s.agr",multibuf);
5403
 
                mprintf("    Saving Cluster Size distribution AGR file as \"%s\"...\n",buf);
5404
 
                g_pClusterAnalysis->m_pClusterSizeDF->WriteMultiAgr("",buf,"","Cluster Size distribution",false);
5405
 
 
5406
 
                mprintf(WHITE,"\n  * Cluster Count Distribution\n");
5407
 
//              mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",g_pClusterAnalysis->m_pClusterCountDF->m_fBinEntries,g_pClusterAnalysis->m_pClusterCountDF->m_fSkipEntries,ZeroDivide(g_pClusterAnalysis->m_pClusterCountDF->m_fSkipEntries,g_pClusterAnalysis->m_pClusterCountDF->m_fBinEntries+g_pClusterAnalysis->m_pClusterCountDF->m_fSkipEntries)*100.0);
5408
 
//              g_pClusterAnalysis->m_pClusterCountDF->CalcMeanSD();
5409
 
                g_pClusterAnalysis->m_pClusterCountDF->MultiplyBin(1.0/g_pClusterAnalysis->m_iCounter);
5410
 
//              mprintf("    Mean value: %.10G pm    Standard deviation: %.10G pm\n",g_pClusterAnalysis->m_pClusterCountDF->m_fMean,g_pClusterAnalysis->m_pClusterCountDF->m_fSD);
5411
 
//              mprintf("    Min. value: %.10G pm    Max. value:         %.10G pm\n",g_pClusterAnalysis->m_pClusterCountDF->m_fMinInput,g_pClusterAnalysis->m_pClusterCountDF->m_fMaxInput);
5412
 
                sprintf(buf,"cluster_count_df%s.csv",multibuf);
5413
 
                mprintf("    Saving Cluster Count distribution as %s ...\n",buf);
5414
 
                g_pClusterAnalysis->m_pClusterCountDF->Write("",buf,"",false);
5415
 
                sprintf(buf,"cluster_count_df%s.agr",multibuf);
5416
 
                mprintf("    Saving Cluster Count distribution AGR file as \"%s\"...\n",buf);
5417
 
                g_pClusterAnalysis->m_pClusterCountDF->WriteAgr("",buf,"","Cluster Count distribution",false);
5418
 
 
5419
 
                mprintf(WHITE,"\n  * Polymer Distribution\n");
5420
 
//              mprintf("    %.0f bin entries, %.0f out of bin range (%.2f percent).\n",g_pClusterAnalysis->m_pPolymerDF->m_fBinEntries,g_pClusterAnalysis->m_pPolymerDF->m_fSkipEntries,ZeroDivide(g_pClusterAnalysis->m_pPolymerDF->m_fSkipEntries,g_pClusterAnalysis->m_pPolymerDF->m_fBinEntries+g_pClusterAnalysis->m_pPolymerDF->m_fSkipEntries)*100.0);
5421
 
//              g_pClusterAnalysis->m_pPolymerDF->CalcMeanSD();
5422
 
                g_pClusterAnalysis->m_pPolymerDF->MultiplyBin(1.0/g_pClusterAnalysis->m_iCounter);
5423
 
//              mprintf("    Mean value: %.10G pm    Standard deviation: %.10G pm\n",g_pClusterAnalysis->m_pPolymerDF->m_fMean,g_pClusterAnalysis->m_pPolymerDF->m_fSD);
5424
 
//              mprintf("    Min. value: %.10G pm    Max. value:         %.10G pm\n",g_pClusterAnalysis->m_pPolymerDF->m_fMinInput,g_pClusterAnalysis->m_pPolymerDF->m_fMaxInput);
5425
 
                sprintf(buf,"cluster_polymer_df%s.csv",multibuf);
5426
 
                mprintf("    Saving Polymer distribution as %s ...\n",buf);
5427
 
                g_pClusterAnalysis->m_pPolymerDF->WriteMulti("",buf,"");
5428
 
                sprintf(buf,"cluster_polymer_df_cumulative%s.csv",multibuf);
5429
 
                mprintf("    Saving cumulative Polymer distribution as %s ...\n",buf);
5430
 
                g_pClusterAnalysis->m_pPolymerDF->WriteMulti_Cumulative("",buf,"");
5431
 
                sprintf(buf,"cluster_polymer_df%s.agr",multibuf);
5432
 
                mprintf("    Saving Polymer distribution AGR file as \"%s\"...\n",buf);
5433
 
                g_pClusterAnalysis->m_pPolymerDF->WriteMultiAgr("",buf,"","Polymer distribution",false);
5434
 
                sprintf(buf,"cluster_polymer_df_cumulative%s.agr",multibuf);
5435
 
                mprintf("    Saving cumulative Polymer distribution AGR file as \"%s\"...\n",buf);
5436
 
                g_pClusterAnalysis->m_pPolymerDF->WriteMultiAgr_Cumulative("",buf,"","Cumulative Polymer distribution",false);
5437
 
 
5438
 
                if (g_pClusterAnalysis->m_bAnim)
5439
 
                {
5440
 
                        mprintf("\n");
5441
 
                        a = OpenFileWrite("gracebatch",true);
5442
 
                        fprintf(a,"PRINT TO \"output.png\"\n");
5443
 
                        fprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
5444
 
                        fprintf(a,"PAGE SIZE %d, %d\n",g_pClusterAnalysis->m_iResX,g_pClusterAnalysis->m_iResY);
5445
 
                        fprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
5446
 
                        fprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
5447
 
                        fprintf(a,"PRINT\n");
5448
 
                        fclose(a);
5449
 
                        mprintf("    Saved batch script as \"render_cluster_anim\".\n");
5450
 
                        fclose(g_pClusterAnalysis->m_fAnim);
5451
 
                }
5452
 
                mprintf("\n");
5453
 
        }
5454
 
 
5455
 
        if (g_bBondACF)
5456
 
        {
5457
 
                mprintf(WHITE,"*** Bond autocorrelation function\n");
5458
 
                if (g_bBondACFDebug)
5459
 
                {
5460
 
                        mprintf("    Writing \"bondacf.agr\"...\n");
5461
 
 
5462
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
5463
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5464
 
                        
5465
 
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
5466
 
                        gc->SetRangeY(0,250);
5467
 
                        gc->MakeTicks();
5468
 
                        gc->SetLabelX("Time [ps]");
5469
 
                        gc->SetLabelY("Bond length [pm]");
5470
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5471
 
                        {
5472
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5473
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5474
 
                                {
5475
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
5476
 
                                        gc->AddDataset();
5477
 
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
5478
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5479
 
                                }
5480
 
                        }
5481
 
                        gc->WriteAgr("bondacf.agr",false);
5482
 
                        delete gc;
5483
 
                }
5484
 
                mprintf("    Differentiating bond length developments...\n");
5485
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5486
 
                {
5487
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5488
 
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5489
 
                        {
5490
 
                                bond = (CMolBond*)sm->m_oaBonds[z3];
5491
 
                                for (z4=0;z4<bond->m_faData.GetSize()-1;z4++)
5492
 
                                        bond->m_faData[z4] = bond->m_faData[z4+1] - bond->m_faData[z4];
5493
 
                        }
5494
 
                }
5495
 
                if (g_bBondACFDebug)
5496
 
                {
5497
 
                        mprintf("    Writing \"bondacf_diff.agr\"...\n");
5498
 
 
5499
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
5500
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5501
 
                        
5502
 
                        gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
5503
 
                        gc->SetRangeY(-15,15);
5504
 
                        gc->MakeTicks();
5505
 
                        gc->SetLabelX("Time [ps]");
5506
 
                        gc->SetLabelY("Bond length change rate");
5507
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5508
 
                        {
5509
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5510
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5511
 
                                {
5512
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
5513
 
                                        gc->AddDataset();
5514
 
                                        for (z4=0;z4<bond->m_faData.GetSize();z4++)
5515
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5516
 
                                }
5517
 
                        }
5518
 
                        gc->WriteAgr("bondacf_diff.agr",false);
5519
 
                        delete gc;
5520
 
                }
5521
 
                mprintf("    Autocorrelating bond length developments...\n");
5522
 
                mprintf(WHITE,"      [");
5523
 
                tfs = 0;
5524
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5525
 
                {
5526
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5527
 
                        tfs += sm->m_oaBonds.GetSize();
5528
 
                }
5529
 
                tfs /= 60.0;
5530
 
                ti2 = 0;
5531
 
/*              fft = new CFFT();
5532
 
                fft->PrepareFFT_C2C(g_iSteps*2);
5533
 
                fft2 = new CFFT();
5534
 
                fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
5535
 
 
5536
 
                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
5537
 
                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5538
 
                
5539
 
                ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
5540
 
                for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5541
 
                {
5542
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5543
 
                        for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5544
 
                        {
5545
 
                                if (fmod(ti2,tfs) < 1.0)
5546
 
                                        mprintf(WHITE,"#");
5547
 
                                bond = (CMolBond*)sm->m_oaBonds[z3];
5548
 
                                ac->AutoCorrelate(&bond->m_faData,&tempfa);
5549
 
                                bond->m_faData.CopyFrom(&tempfa);
5550
 
                                ti2++;
5551
 
                        }
5552
 
                }
5553
 
                delete ac;
5554
 
                mprintf(WHITE,"]\n");
5555
 
                if (g_bBondACFDebug)
5556
 
                {
5557
 
                        mprintf("    Writing \"bondacf_autocorr.agr\"...\n");
5558
 
 
5559
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
5560
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5561
 
                        
5562
 
                        gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
5563
 
                        gc->SetRangeY(-25,25);
5564
 
                        gc->MakeTicks();
5565
 
                        gc->SetLabelX("Time [ps]");
5566
 
                        gc->SetLabelY("ACF(Bond length change rate)");
5567
 
                        for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5568
 
                        {
5569
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5570
 
                                for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5571
 
                                {
5572
 
                                        bond = (CMolBond*)sm->m_oaBonds[z3];
5573
 
                                        gc->AddDataset();
5574
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5575
 
                                                gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5576
 
                                }
5577
 
                        }
5578
 
                        gc->WriteAgr("bondacf_autocorr.agr",false);
5579
 
                        delete gc;
5580
 
                }
5581
 
                mprintf("    Merging equivalent Bonds...\n");
5582
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5583
 
                {
5584
 
                        m = (CMolecule*)g_oaMolecules[z0];
5585
 
                        sm2 = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5586
 
                        for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
5587
 
                        {
5588
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
5589
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5590
 
                                {
5591
 
                                        bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
5592
 
                                        for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
5593
 
                                        {
5594
 
                                                bond = (CMolBond*)bg->m_oaBonds[z4];
5595
 
                                                for (z5=0;z5<g_iBondACFDepth;z5++)
5596
 
                                                        ((CMolBond*)((CMolBondGroup*)sm2->m_oaBondGroups[z3])->m_oaBonds[0])->m_faData[z5] += bond->m_faData[z5];
5597
 
                                        }
5598
 
                                }
5599
 
                        }
5600
 
                }
5601
 
                if (g_bBondACFSymmetrize)
5602
 
                {
5603
 
                        mprintf("    Symmetrizing bond ACFs...\n");
5604
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5605
 
                        {
5606
 
                                m = (CMolecule*)g_oaMolecules[z0];
5607
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5608
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5609
 
                                {
5610
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5611
 
                                        bond->m_faData.SetSize(2*g_iBondACFDepth);
5612
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5613
 
                                                bond->m_faData[z4+g_iBondACFDepth] = bond->m_faData[z4];
5614
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5615
 
                                                bond->m_faData[z4] = bond->m_faData[2*g_iBondACFDepth-z4-1];
5616
 
                                }
5617
 
                        }
5618
 
                        g_iBondACFDepth *= 2;
5619
 
                }
5620
 
                if (g_bBondACFWindow)
5621
 
                {
5622
 
                        mprintf("    Applying Window Function...\n");
5623
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5624
 
                        {
5625
 
                                m = (CMolecule*)g_oaMolecules[z0];
5626
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5627
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5628
 
                                {
5629
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5630
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5631
 
                                                bond->m_faData[z4] *= (float)pow(sin(z4*Pi/(bond->m_faData.GetSize()-1)),2);
5632
 
                                }
5633
 
                        }
5634
 
                }
5635
 
                if (g_bBondACFNormalize)
5636
 
                {
5637
 
                        mprintf("    Normalizing bond ACFs...\n");
5638
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5639
 
                        {
5640
 
                                m = (CMolecule*)g_oaMolecules[z0];
5641
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5642
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5643
 
                                {
5644
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5645
 
                                        tf = 0;
5646
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5647
 
                                                if (tf < bond->m_faData[z4])
5648
 
                                                        tf = bond->m_faData[z4];
5649
 
                                        for (z4=0;z4<g_iBondACFDepth;z4++)
5650
 
                                                bond->m_faData[z4] /= (float)tf;
5651
 
                                }
5652
 
                        }
5653
 
                }
5654
 
                mprintf("    Writing \"bondacf_ac_merged.agr\"...\n");
5655
 
 
5656
 
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
5657
 
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5658
 
                
5659
 
                gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
5660
 
                gc->SetRangeY(-200,200);
5661
 
                gc->MakeTicks();
5662
 
                gc->SetLabelX("Time [ps]");
5663
 
                gc->SetLabelY("Sum ACF(Bond length change rate)");
5664
 
                gc->CurrentGraph()->m_bLegend = true;
5665
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5666
 
                {
5667
 
                        m = (CMolecule*)g_oaMolecules[z0];
5668
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5669
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5670
 
                        {
5671
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5672
 
                                gc->AddDataset();
5673
 
                                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);
5674
 
                                gc->SetDatasetName(buf);
5675
 
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
5676
 
                                for (z4=0;z4<g_iBondACFDepth;z4++)
5677
 
                                        gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5678
 
                        }
5679
 
                }
5680
 
                gc->WriteAgr("bondacf_ac_merged.agr",false);
5681
 
                delete gc;
5682
 
                mprintf("    Applying Fourier Transformation...\n");
5683
 
 
5684
 
                try { fft = new CFFT(); } catch(...) { fft = NULL; }
5685
 
                if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5686
 
                
5687
 
                fft->PrepareFFT_C2C(g_iBondACFDepth);
5688
 
                tf3 = 0;
5689
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5690
 
                {
5691
 
                        m = (CMolecule*)g_oaMolecules[z0];
5692
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5693
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5694
 
                        {
5695
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5696
 
                                for (z4=0;z4<g_iBondACFDepth;z4++)
5697
 
                                {
5698
 
                                        fft->m_pInput[z4*2] = bond->m_faData[z4];
5699
 
                                        fft->m_pInput[z4*2+1] = 0;
5700
 
                                }
5701
 
                                fft->DoFFT();
5702
 
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
5703
 
                                {
5704
 
                                        bond->m_faData[z4] = (float)(pow(fft->m_pOutput[z4*2],2) + pow(fft->m_pOutput[z4*2+1],2)) / g_iBondACFDepth;
5705
 
                                        if (bond->m_faData[z4] > tf3)
5706
 
                                                tf3 = bond->m_faData[z4];
5707
 
                                }
5708
 
                        }
5709
 
                }
5710
 
                delete fft;
5711
 
                mprintf("    Writing \"bond_spectrum.agr\"...\n");
5712
 
 
5713
 
                try { gc = new CGrace(); } catch(...) { gc = NULL; }
5714
 
                if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5715
 
                
5716
 
                gc->SetRangeX(0,4000.0);
5717
 
                gc->SetRangeY(0,tf3*1.1);
5718
 
                gc->MakeTicks();
5719
 
                gc->SetLabelX("Wave number [1/cm]");
5720
 
                gc->SetLabelY("Intensity");
5721
 
                gc->CurrentGraph()->m_bInvertXAxis = true;
5722
 
                gc->CurrentGraph()->m_bLegend = true;
5723
 
                for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5724
 
                {
5725
 
                        m = (CMolecule*)g_oaMolecules[z0];
5726
 
                        sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5727
 
                        for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5728
 
                        {
5729
 
                                bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5730
 
                                gc->AddDataset();
5731
 
                                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);
5732
 
                                gc->SetDatasetName(buf);
5733
 
                                ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
5734
 
                                for (z4=0;z4<g_iBondACFDepth/2;z4++)
5735
 
                                        gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,bond->m_faData[z4]);
5736
 
                        }
5737
 
                }
5738
 
                gc->WriteAgr("bond_spectrum.agr",false);
5739
 
                delete gc;
5740
 
                for (z5=1;z5<5;z5++)
5741
 
                {
5742
 
                        mprintf("    Smoothing spectrum, degree %d...\n",z5);
5743
 
                        mprintf("    Writing \"bond_spectrum_s%d.agr\"...\n",z5);
5744
 
 
5745
 
                        try { gc = new CGrace(); } catch(...) { gc = NULL; }
5746
 
                        if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5747
 
                        
5748
 
                        gc->SetRangeX(0,4000.0);
5749
 
                        gc->SetRangeY(0,tf3*1.1);
5750
 
                        gc->MakeTicks();
5751
 
                        gc->SetLabelX("Wave number [1/cm]");
5752
 
                        gc->SetLabelY("Intensity");
5753
 
                        gc->CurrentGraph()->m_bInvertXAxis = true;
5754
 
                        gc->CurrentGraph()->m_bLegend = true;
5755
 
 
5756
 
                        try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
5757
 
                        if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5758
 
                        
5759
 
                        gc2->SetRangeX(0,4000.0);
5760
 
                        gc2->SetRangeY(0,tf3*1.1);
5761
 
                        gc2->MakeTicks();
5762
 
                        gc2->SetLabelX("Wave number [1/cm]");
5763
 
                        gc2->SetLabelY("Intensity");
5764
 
                        gc2->CurrentGraph()->m_bInvertXAxis = true;
5765
 
                        gc2->CurrentGraph()->m_bLegend = true;
5766
 
                        
5767
 
                        tempfa.SetSize(g_iBondACFDepth/2);
5768
 
                        tempfa2.SetSize(g_iBondACFDepth/2);
5769
 
 
5770
 
                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
5771
 
                                tempfa2[z4] = 0;
5772
 
 
5773
 
                        for (z0=0;z0<g_oaMolecules.GetSize();z0++)
5774
 
                        {
5775
 
                                m = (CMolecule*)g_oaMolecules[z0];
5776
 
                                sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
5777
 
                                for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5778
 
                                {
5779
 
                                        bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5780
 
 
5781
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
5782
 
                                        {
5783
 
                                                tf = 0;
5784
 
                                                tf2 = 0;
5785
 
                                                for (z6=-z5;z6<=z5;z6++)
5786
 
                                                {
5787
 
                                                        if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
5788
 
                                                                continue;
5789
 
                                                        tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
5790
 
                                                        tf2 += 1.0 / (pow((double)z6,2)+1.0);
5791
 
                                                }
5792
 
                                                tempfa[z4] = (float)(tf / tf2);
5793
 
                                                tempfa2[z4] += tempfa[z4];
5794
 
                                        }
5795
 
 
5796
 
                                        gc->AddDataset();
5797
 
                                        gc2->AddDataset();
5798
 
                                        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);
5799
 
                                        gc->SetDatasetName(buf);
5800
 
                                        gc2->SetDatasetName(buf);
5801
 
                                        ((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
5802
 
                                        ((CGraceDataset*)gc2->CurrentGraph()->m_oaDatasets[gc2->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
5803
 
 
5804
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
5805
 
                                                gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa[z4]);
5806
 
 
5807
 
                                        for (z4=0;z4<g_iBondACFDepth/2;z4++)
5808
 
                                                gc2->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa2[z4]);
5809
 
                                }
5810
 
                        }
5811
 
        
5812
 
                        sprintf(buf,"bond_spectrum_s%d.agr",z5);
5813
 
                        gc->WriteAgr(buf,false);
5814
 
                        delete gc;
5815
 
 
5816
 
                        mprintf("    Writing \"bond_spectrum_cumulative_s%d.agr\"...\n",z5);
5817
 
                        sprintf(buf,"bond_spectrum_cumulative_s%d.agr",z5);
5818
 
                        gc2->WriteAgr(buf,false);
5819
 
                        delete gc2;
5820
 
                }
5821
 
        }
5822
 
 
5823
 
        if (g_bSaveRefEnv)
5824
 
        {
5825
 
                fclose(g_fRefEnv);
5826
 
                mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
5827
 
                if (g_bTDO)
5828
 
                {
5829
 
#ifdef TARGET_WINDOWS
5830
 
                        sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
5831
 
#else
5832
 
                        sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
5833
 
#endif
5834
 
                        mprintf("Saving TDO PyMol script as %s.\n",buf);
5835
 
                        tfi = OpenFileWrite(buf,true);
5836
 
#ifdef TARGET_WINDOWS
5837
 
                        fprintf(tfi,"pymolwin ");
5838
 
#else
5839
 
                        fprintf(tfi,"pymol ");
5840
 
#endif
5841
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
5842
 
                                fprintf(tfi,"tdo_%s_%d_%06d%s.xyz ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],multibuf);
5843
 
                        fprintf(tfi,"-d \"set sphere_scale,0.25\" ");
5844
 
                        fprintf(tfi,"-d \"set stick_radius,0.17\" ");
5845
 
                        fprintf(tfi,"-d \"set ray_trace_mode,1\" ");
5846
 
                        fprintf(tfi,"-d \"set fog,0\" ");
5847
 
                        fprintf(tfi,"-d \"set ray_trace_fog,0\" ");
5848
 
                        fprintf(tfi,"-d \"set bg_rgb,(1,1,1)\" ");
5849
 
                        fprintf(tfi,"-d \"set ray_shadow,0\" ");
5850
 
                        fprintf(tfi,"-d \"set ray_shadows,0\" ");
5851
 
                        fprintf(tfi,"-d \"set ray_interior_shadows,0\" ");
5852
 
                        fprintf(tfi,"-d \"show sticks; show spheres\" ");
5853
 
                        
5854
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
5855
 
                        {
5856
 
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
5857
 
                                {
5858
 
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
5859
 
                                                continue;
5860
 
                                        fprintf(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));
5861
 
                                }
5862
 
                        }
5863
 
                        for (z=0;z<g_laTDOSteps.GetSize();z++)
5864
 
                        {
5865
 
                                for (z2=0;z2<g_oaAtoms.GetSize();z2++)
5866
 
                                {
5867
 
                                        if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
5868
 
                                                continue;
5869
 
                                        fprintf(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);
5870
 
                                }
5871
 
                        }
5872
 
                        fprintf(tfi,"\n");
5873
 
                        fclose(tfi);
5874
 
#ifdef TARGET_LINUX
5875
 
                        sprintf(buf,"chmod 755 tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
5876
 
                        mprintf("Executing \"%s\"...\n",buf);
5877
 
                        system(buf);
5878
 
#endif
5879
 
                }
5880
 
        }
5881
 
        if (g_bCutCluster)
5882
 
        {
5883
 
                fclose(g_fRefEnv);
5884
 
                mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
5885
 
        }
5886
 
 
5887
 
        if (g_bSaveJustTraj)
5888
 
        {
5889
 
                fclose(g_fSaveJustTraj);
5890
 
/*              strcpy(buf,g_sInputTraj);
5891
 
                p = strrchr(buf,'.');
5892
 
                *p = 0;
5893
 
                strcat(buf,multibuf);
5894
 
                strcat(buf,".out.xyz");*/
5895
 
//              mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
5896
 
        }
5897
 
 
5898
 
        if (g_bVACF && g_bGlobalVACF)
5899
 
        {
5900
 
                mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
5901
 
                if (g_pGlobalVACF->m_bDerivative)
5902
 
                {
5903
 
                        mprintf("    Deriving velocities...\n");
5904
 
                        mprintf(WHITE,"      [");
5905
 
                        tfs = g_iGesAtomCount/60.0;
5906
 
                        for (z2=0;z2<g_iGesAtomCount;z2++)
5907
 
                        {
5908
 
                                if (fmod(z2,tfs) < 1)
5909
 
                                        mprintf(WHITE,"#");
5910
 
                                ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
5911
 
 
5912
 
                                for (z3=0;z3<(int)g_iSteps*3-3;z3++)
5913
 
                                        (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
5914
 
                        }
5915
 
                        mprintf(WHITE,"]\n");
5916
 
                }
5917
 
                if (g_bVACFCacheMode)
5918
 
                {
5919
 
                        tfs = g_iGesAtomCount/60.0;
5920
 
/*                      if (g_bACFFFT)
5921
 
                        {*/
5922
 
                                mprintf("    Autocorrelating cached vectors...\n");
5923
 
                                mprintf(WHITE,"      [");
5924
 
/*                              fft = new CFFT();
5925
 
                                fft->PrepareFFT_C2C(2*g_iSteps);
5926
 
                                fft2 = new CFFT();
5927
 
                                fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
5928
 
 
5929
 
                                try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
5930
 
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5931
 
                                
5932
 
                                ptfa2->SetSize(g_iSteps);
5933
 
 
5934
 
                                try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
5935
 
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5936
 
                                
5937
 
                                ptfa3->SetSize(g_iSteps);
5938
 
 
5939
 
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
5940
 
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5941
 
                                
5942
 
                                ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
5943
 
                                for (z2=0;z2<g_iGesAtomCount;z2++)
5944
 
                                {
5945
 
                                        if (fmod(z2,tfs) < 1.0)
5946
 
                                                mprintf(WHITE,"#");
5947
 
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
5948
 
 
5949
 
                                        if (g_pGlobalVACF->m_bMassWeight)
5950
 
                                                tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
5951
 
                                                        else tf = 1.0f;
5952
 
 
5953
 
                                        /* X */
5954
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
5955
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3];
5956
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
5957
 
                //                      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);
5958
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
5959
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
5960
 
 
5961
 
                                        /* Y */
5962
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
5963
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+1];
5964
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
5965
 
                //                      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);
5966
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
5967
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
5968
 
 
5969
 
                                        /* Z */
5970
 
                                        for (z3=0;z3<(int)g_iSteps;z3++)
5971
 
                                                (*ptfa2)[z3] = (*ptfa)[z3*3+2];
5972
 
                                        ac->AutoCorrelate(ptfa2,ptfa3);
5973
 
                //                      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);
5974
 
                                        for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
5975
 
                                                g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
5976
 
                                }
5977
 
                                delete ac;
5978
 
                                delete ptfa2;
5979
 
                                delete ptfa3;
5980
 
        /*                      delete fft2;
5981
 
                                delete fft;*/
5982
 
/*                      } else
5983
 
                        {
5984
 
                                mprintf("    Autocorrelating cached vectors...\n");
5985
 
                                mprintf(WHITE,"      [");
5986
 
                                for (z2=0;z2<g_iGesAtomCount;z2++)
5987
 
                                {
5988
 
                                        if (fmod(z2,tfs) < 1.0)
5989
 
                                                mprintf(WHITE,"#");
5990
 
                                        ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
5991
 
                                        for (z3=0;z3<g_pGlobalVACF->m_iSize;z3+=g_pGlobalVACF->m_iStride) // Das ist das Tau
5992
 
                                        {
5993
 
                                                tf = 0;
5994
 
                                                for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
5995
 
                                                        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];
5996
 
                                                g_pGlobalVACF->m_pData[z3/g_pGlobalVACF->m_iStride] += tf/(g_iSteps-z3);
5997
 
                                        }
5998
 
                                }
5999
 
                        }*/
6000
 
                        mprintf(WHITE,"]\n");
6001
 
                        mprintf("      %d atoms and %d frames processed.\n",g_iGesAtomCount,g_pGlobalVACF->m_iSize);
6002
 
                        g_pGlobalVACF->MultiplyCached(1.0/g_iGesAtomCount);
6003
 
                } else g_pGlobalVACF->Multiply(1.0/g_iGesAtomCount);
6004
 
 
6005
 
                mprintf("    Saving global VACF as acf_global%s.csv ...\n",multibuf);
6006
 
                g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
6007
 
 
6008
 
                if (g_pGlobalVACF->m_iMirror != 0)
6009
 
                {
6010
 
                        mprintf("    Mirroring global VACF...\n");
6011
 
                        g_pGlobalVACF->Mirror(g_pGlobalVACF->m_iMirror);
6012
 
                        mprintf("    Saving mirrored global VACF as acf_global.m%s.csv ...\n",multibuf);
6013
 
                        g_pGlobalVACF->WriteACF("acf_global.m",multibuf,".csv");
6014
 
                }
6015
 
 
6016
 
                if (g_pGlobalVACF->m_bWindowFunction)
6017
 
                {
6018
 
                        mprintf("    Applying window function...\n");
6019
 
                        g_pGlobalVACF->Window();
6020
 
                        mprintf("    Saving windowed global VACF as acf_global.w%s.csv ...\n",multibuf);
6021
 
                        g_pGlobalVACF->WriteACF("acf_global.w",multibuf,".csv");
6022
 
                }
6023
 
 
6024
 
                if (g_pGlobalVACF->m_bSpectrum)
6025
 
                {
6026
 
                        mprintf("    Performing Fourier transformation...\n");
6027
 
 
6028
 
                        try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6029
 
                        if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6030
 
                        
6031
 
                        g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
6032
 
                        g_pGlobalVACF->Transform(g_pFFT);
6033
 
                        delete g_pFFT;
6034
 
                        g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
6035
 
                        if (g_pGlobalVACF->m_bACF_DB)
6036
 
                        {
6037
 
                                mprintf("    Normalising spectrum to decibel...\n");
6038
 
                                g_pGlobalVACF->m_pSpectrum->MakeDB();
6039
 
                        }/* else
6040
 
                        {
6041
 
                                mprintf("    Normalising integral of spectrum...\n");
6042
 
                                g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
6043
 
                        }*/
6044
 
                        if (g_pGlobalVACF->m_bWindowFunction)
6045
 
                        {
6046
 
                                mprintf("    Saving spectrum as power_global_w%s.csv ...\n",multibuf);
6047
 
                                g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
6048
 
                        } else
6049
 
                        {
6050
 
                                mprintf("    Saving spectrum as power_global%s.csv ...\n",multibuf);
6051
 
                                g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
6052
 
                        }
6053
 
                }
6054
 
                mprintf("\n");
6055
 
        }
6056
 
 
6057
 
        if (g_bVFDF)
6058
 
        {
6059
 
                for (z=0;z<g_iVFCorrCount;z++)
6060
 
                        fclose(g_fVFCorr[z]);
6061
 
        }
6062
 
 
6063
 
 
6064
 
//      fclose(ff);
6065
 
 
6066
 
        for (z=0;z<g_oaObserv.GetSize();z++)
6067
 
        {
6068
 
                o = (CObservation*)g_oaObserv[z];
6069
 
                mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
6070
 
 
6071
 
                if (o->m_pConditions != NULL)
6072
 
                {
6073
 
                        o->m_pConditions->PrintData();
6074
 
                        if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
6075
 
                                o->m_pConditions->PrintTable();
6076
 
                }
6077
 
 
6078
 
                if (g_bAggregation)
6079
 
                {
6080
 
                        mprintf(WHITE,"* Aggregation Functions\n");
6081
 
                        if ((g_iMaxStep > 0) && (((int)g_iSteps*g_iStride) >= g_iMaxStep))
6082
 
                                g_pTempTimestep->CopyFrom(GetTimeStep(0)); // Max. Schrittzahl
6083
 
                                        else g_pTempTimestep->CopyFrom(GetTimeStep(1)); // End Of File
6084
 
                        for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
6085
 
                        {
6086
 
                                dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
6087
 
                                mprintf(WHITE,"\n  > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
6088
 
 
6089
 
                                o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
6090
 
 
6091
 
                                sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
6092
 
                                dacfsub->m_pCondition->PrintData(buf);
6093
 
 
6094
 
                                mprintf(WHITE,"Neighbour Count Distribution\n");
6095
 
                                mprintf("    %.0f Bin entries have been made.\n",dacfsub->m_pNDF->m_fBinEntries);
6096
 
                                sprintf(buf,"ncd_%s%s.csv",dacfsub->m_sName,multibuf);
6097
 
                                mprintf("    Writing Neighbor Count Distribution File \"%s\"...\n",buf);
6098
 
                                dacfsub->m_pNDF->Write_Int("",buf,"");
6099
 
 
6100
 
                                if (g_bDDisp)
6101
 
                                {
6102
 
                                        mprintf(WHITE,"\nDimer Displacement Distribution Function\n");
6103
 
                                        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);
6104
 
                                        sprintf(buf,"ddisp_%s%s.csv",dacfsub->m_sName,multibuf);
6105
 
                                        mprintf("    Saving DDisp File as \"%s\"...\n",buf);
6106
 
                                        dacfsub->m_pDDisp->Write("",buf,"",false);
6107
 
                                        sprintf(buf,"ddisp_%s%s.agr",dacfsub->m_sName,multibuf);
6108
 
                                        mprintf("    Saving DDisp Agr File as \"%s\"...\n",buf);
6109
 
                                        dacfsub->m_pDDisp->WriteAgr("",buf,"","",false);
6110
 
                                }
6111
 
 
6112
 
                                if (g_bDACF)
6113
 
                                {
6114
 
                                        mprintf(WHITE,"\nDimer Existence Autocorrelation Function\n");
6115
 
                                        mprintf("    %.0f Bin entries have beend 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);
6116
 
                                        dacfsub->m_pDACF->MultiplyBin(1.0/dacfsub->m_pDACF->m_pBin[0]);
6117
 
                                        if (o->m_pDACF->m_bFitDACF)
6118
 
                                        {
6119
 
                                                mprintf("\n");
6120
 
 
6121
 
                                                try { dacfsub->m_pDACF->m_pParameters = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pParameters = NULL; }
6122
 
                                                if (dacfsub->m_pDACF->m_pParameters == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6123
 
                                                
6124
 
                                                try { dacfsub->m_pDACF->m_pFitIntegral = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pFitIntegral = NULL; }
6125
 
                                                if (dacfsub->m_pDACF->m_pFitIntegral == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6126
 
                                                
6127
 
                                                try { dacfsub->m_pDACF->m_pCorrCoeff = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pCorrCoeff = NULL; }
6128
 
                                                if (dacfsub->m_pDACF->m_pCorrCoeff == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6129
 
                                                
6130
 
                                                try { dacfsub->m_pDACF->m_pAdditionalSets = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSets = NULL; }
6131
 
                                                if (dacfsub->m_pDACF->m_pAdditionalSets == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6132
 
                                                
6133
 
                                                try { dacfsub->m_pDACF->m_pAdditionalSetLabels = new char*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSetLabels = NULL; }
6134
 
                                                if (dacfsub->m_pDACF->m_pAdditionalSetLabels == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6135
 
                                                
6136
 
                                                dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
6137
 
 
6138
 
                                                for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6139
 
                                                {
6140
 
                                                        dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
6141
 
                                                        dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
6142
 
                                                }
6143
 
 
6144
 
                                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6145
 
                                                        dacfsub->m_pDACF->Fit_PolyExp(z2);
6146
 
 
6147
 
                                                if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
6148
 
                                                {
6149
 
                                                        mprintf("    Fitting overview:\n");
6150
 
                                                        mprintf("      Degree  R             Integral\n");
6151
 
                                                        for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6152
 
                                                        {
6153
 
                                                                if (dacfsub->m_pDACF->m_pFitIntegral[z2] >= 0)
6154
 
                                                                        mprintf("      %d       %10.8f    %.8G\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2],dacfsub->m_pDACF->m_pFitIntegral[z2]);
6155
 
                                                                                else mprintf("      %d       %8.6f             -\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2]);
6156
 
                                                        }
6157
 
                                                        mprintf("\n");
6158
 
                                                }
6159
 
                                        }
6160
 
                                        sprintf(buf,"dacf_%s%s.csv",dacfsub->m_sName,multibuf);
6161
 
                                        mprintf("    Saving DACF File as \"%s\"...\n",buf);
6162
 
                                        dacfsub->m_pDACF->Write("",buf,"",false);
6163
 
                                        sprintf(buf,"dacf_%s%s.agr",dacfsub->m_sName,multibuf);
6164
 
                                        mprintf("    Saving DACF Agr File as \"%s\"...\n",buf);
6165
 
                                        dacfsub->m_pDACF->WriteAgr("",buf,"","",false);
6166
 
                                }
6167
 
 
6168
 
                                if (g_bDLDF)
6169
 
                                {
6170
 
                                        mprintf(WHITE,"\nDimer Lifetime Distribution Function\n");
6171
 
                                        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);
6172
 
                                        sprintf(buf,"dldf_%s%s.csv",dacfsub->m_sName,multibuf);
6173
 
                                        mprintf("    Saving DLDF File as \"%s\"...\n",buf);
6174
 
                                        dacfsub->m_pDLDF->Write("",buf,"",false);
6175
 
                                        sprintf(buf,"dldf_%s%s.agr",dacfsub->m_sName,multibuf);
6176
 
                                        mprintf("    Saving DLDF Agr File as \"%s\"...\n",buf);
6177
 
                                        dacfsub->m_pDLDF->WriteAgr("",buf,"","",false);
6178
 
                                }
6179
 
 
6180
 
                                if (g_bDLDisp)
6181
 
                                {
6182
 
                                        mprintf(WHITE,"\nDimer Lifetime Displacement Distribution Function\n");
6183
 
                                        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);
6184
 
                                        mprintf("    Normalizing bin integral to 1000000...\n");
6185
 
                                        dacfsub->m_pDLDisp->NormalizeBinIntegral(1000000.0);
6186
 
                                        sprintf(buf,"dldisp_%s%s",dacfsub->m_sName,multibuf);
6187
 
                                        mprintf("    Saving DLDisp triples as \"%s_triples.csv\"...\n",buf);
6188
 
                                        dacfsub->m_pDLDisp->Write("",buf,"_triples.csv");
6189
 
                                        mprintf("    Saving DLDisp matrix as \"%s_matrix.csv\"...\n",buf);
6190
 
                                        dacfsub->m_pDLDisp->WriteCSV("",buf,"_matrix.csv");
6191
 
                                        mprintf("    Saving DLDisp Mathematica Notebook \"%s.nb\"...\n",buf);
6192
 
                                        dacfsub->m_pDLDisp->WriteMathematicaNb("",buf,".nb",false);
6193
 
                                }
6194
 
                        }
6195
 
                        if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
6196
 
                        {
6197
 
                                mprintf(WHITE,"\n*** Condition Grid fitting overview:\n\n");
6198
 
                                mprintf("      Degree    R(min)        R(avg)        R(max)\n");
6199
 
                                o->m_pDACF->CalcGridFitParms();
6200
 
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6201
 
                                        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]);
6202
 
                                mprintf("\n");
6203
 
 
6204
 
                                for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6205
 
                                {
6206
 
                                        if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
6207
 
                                        {
6208
 
                                                if (o->m_pDACF->m_bGridCon)
6209
 
                                                {
6210
 
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
6211
 
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6212
 
                                                        
6213
 
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,false);
6214
 
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp",o->m_pDACF->m_sName,multibuf,z2);
6215
 
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
6216
 
                                                        temp2df->Write("",buf,"_triples.csv");
6217
 
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
6218
 
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
6219
 
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
6220
 
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
6221
 
                                                        delete temp2df;
6222
 
                                                }
6223
 
                                                if (o->m_pDACF->m_bGridInt)
6224
 
                                                {
6225
 
                                                        try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
6226
 
                                                        if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6227
 
                                                        
6228
 
                                                        o->m_pDACF->CreateGridFit2DF(temp2df,z2,true);
6229
 
                                                        sprintf(buf,"dacf_gridint_%s%s_%dexp_int%.2f",o->m_pDACF->m_sName,multibuf,z2,o->m_pDACF->m_fGridIntGap);
6230
 
                                                        mprintf("    Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
6231
 
                                                        temp2df->Write("",buf,"_triples.csv");
6232
 
                                                        mprintf("    Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
6233
 
                                                        temp2df->WriteCSV("",buf,"_matrix.csv");
6234
 
                                                        mprintf("    Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
6235
 
                                                        temp2df->WriteMathematicaNb("",buf,".nb",false);
6236
 
                                                        delete temp2df;
6237
 
                                                }
6238
 
                                        } else
6239
 
                                        {
6240
 
                                                if (o->m_pDACF->m_bGridCon)
6241
 
                                                {
6242
 
                                                        try { tdf = new CDF(); } catch(...) { tdf = NULL; }
6243
 
                                                        if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6244
 
                                                        
6245
 
                                                        o->m_pDACF->CreateGridFitDF(tdf,z2,false);
6246
 
                                                        delete tdf;
6247
 
                                                }
6248
 
                                        }
6249
 
                                }
6250
 
                        }
6251
 
                }
6252
 
 
6253
 
                if (g_bRDyn)
6254
 
                {
6255
 
                        mprintf(WHITE,"* Vector Reorientation Dynamics\n");
6256
 
                        if (g_bRDynCacheMode)
6257
 
                        {
6258
 
                                mprintf("    Autocorrelating cached vectors...\n");
6259
 
                                mprintf(WHITE,"      [");
6260
 
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations)/60.0;
6261
 
                /*              if (g_bACFFFT)
6262
 
                                {*/
6263
 
                /*                      fft = new CFFT();
6264
 
                                        fft->PrepareFFT_C2C(2*g_iSteps);
6265
 
                                        fft2 = new CFFT();
6266
 
                                        fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
6267
 
 
6268
 
                                        try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
6269
 
                                        if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6270
 
                                        
6271
 
                                        ptfa2->SetSize(g_iSteps/g_iStride);
6272
 
 
6273
 
                                        try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
6274
 
                                        if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6275
 
                                        
6276
 
                                        ptfa3->SetSize(g_iSteps/g_iStride);
6277
 
 
6278
 
                                        try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6279
 
                                        if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6280
 
                                        
6281
 
                                        ac->Init(g_iSteps/g_iStride,o->m_pRDyn->m_iDepth,g_bACFFFT);
6282
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
6283
 
                                        {
6284
 
                                                if (fmod(z2,tfs) < 1.0)
6285
 
                                                        mprintf(WHITE,"#");
6286
 
                                                ptfa = (CxFloatArray*)o->m_pRDyn->m_oaCache[z2];
6287
 
 
6288
 
                                                /* X */
6289
 
                                                for (z3=0;z3<(int)g_iSteps/g_iStride;z3++)
6290
 
                                                        (*ptfa2)[z3] = (*ptfa)[z3*3];
6291
 
//                                                      (*ptfa2)[z3] = sqrt((*ptfa)[z3*3]*(*ptfa)[z3*3] + (*ptfa)[z3*3+1]*(*ptfa)[z3*3+1] + (*ptfa)[z3*3+2]*(*ptfa)[z3*3+2]);
6292
 
 
6293
 
                                                ac->AutoCorrelate(ptfa2,ptfa3);
6294
 
                                                for (z3=0;z3<(int)o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z3++)
6295
 
                                                        o->m_pRDyn->m_pRDyn->AddToBin_Int(z3,(*ptfa3)[z3*o->m_pRDyn->m_iStride]);
6296
 
 
6297
 
                                                /* Y */
6298
 
                                                for (z3=0;z3<(int)g_iSteps/g_iStride;z3++)
6299
 
                                                        (*ptfa2)[z3] = (*ptfa)[z3*3+1];
6300
 
                                                ac->AutoCorrelate(ptfa2,ptfa3);
6301
 
                                                for (z3=0;z3<(int)o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z3++)
6302
 
                                                        o->m_pRDyn->m_pRDyn->AddToBin_Int(z3,(*ptfa3)[z3*o->m_pRDyn->m_iStride]);
6303
 
 
6304
 
                                                /* Z */
6305
 
                                                for (z3=0;z3<(int)g_iSteps/g_iStride;z3++)
6306
 
                                                        (*ptfa2)[z3] = (*ptfa)[z3*3+2];
6307
 
                                                ac->AutoCorrelate(ptfa2,ptfa3);
6308
 
 
6309
 
                                                for (z3=0;z3<(int)o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z3++)
6310
 
                                                {
6311
 
                                                        o->m_pRDyn->m_pRDyn->AddToBin_Int(z3,(*ptfa3)[z3*o->m_pRDyn->m_iStride]);
6312
 
                                                        o->m_pRDyn->m_pRDyn->m_fBinEntries += (double)(g_iSteps-z3*o->m_pRDyn->m_iStride) - 3.0;
6313
 
                                                }
6314
 
                                        }
6315
 
                                        delete ac;
6316
 
                                        delete ptfa2;
6317
 
                                        delete ptfa3;
6318
 
        /*                              delete fft2;
6319
 
                                        delete fft;*/
6320
 
                        /*      } else
6321
 
                                {
6322
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
6323
 
                                        {
6324
 
                                                if (fmod(z2,tfs) < 1.0)
6325
 
                                                        mprintf(WHITE,"#");
6326
 
                                                ptfa = (CxFloatArray*)o->m_pRDyn->m_oaCache[z2];
6327
 
                                                for (z3=0;z3<o->m_pRDyn->m_iDepth;z3+=o->m_pRDyn->m_iStride) // Das ist das Tau
6328
 
                                                {
6329
 
                                                        tf = 0;
6330
 
                                                        for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
6331
 
                                                                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];
6332
 
                                                        o->m_pRDyn->m_pRDyn->AddToBin(z3/o->m_pRDyn->m_iStride,tf/(g_iSteps-z3));
6333
 
                                                        o->m_pRDyn->m_pRDyn->m_fBinEntries += g_iSteps-z3-1;
6334
 
                                                }
6335
 
                                        }
6336
 
                                }*/
6337
 
                                mprintf(WHITE,"]\n");
6338
 
                        } else
6339
 
                        {
6340
 
                                for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
6341
 
                                        o->m_pRDyn->m_pRDyn->m_pBin[z2] /= o->m_pRDyn->m_pCount[z2];
6342
 
                        }
6343
 
                        mprintf("    %.0f bin entries.\n",o->m_pRDyn->m_pRDyn->m_fBinEntries);
6344
 
                        o->m_pRDyn->m_pRDyn->MultiplyBin(1.0/o->m_pRDyn->m_pRDyn->m_pBin[0]);
6345
 
                        sprintf(buf,"rdyn_%s%s.csv",o->m_pRDyn->m_sName,multibuf);
6346
 
                        mprintf("    Saving result as %s ...\n",buf);
6347
 
                        o->m_pRDyn->m_pRDyn->Write("",buf,"",false);
6348
 
 
6349
 
                        if (o->m_pRDyn->m_bSpectrum)
6350
 
                        {
6351
 
                                mprintf("\n    Creating reorientation spectrum:\n");
6352
 
 
6353
 
                                for (z=0;z<o->m_pRDyn->m_iDepth;z++)
6354
 
                                        o->m_pRDyn->m_pACF->m_pData[z] = o->m_pRDyn->m_pRDyn->m_pBin[z];
6355
 
 
6356
 
                                if (o->m_pRDyn->m_pACF->m_bDerivative)
6357
 
                                {
6358
 
                                        mprintf("    Deriving ACF...\n");
6359
 
 
6360
 
                                        for (z=0;z<o->m_pRDyn->m_iDepth-2;z++)
6361
 
                                                o->m_pRDyn->m_pACF->m_pData[z] = -2.0 * o->m_pRDyn->m_pACF->m_pData[z+1] + o->m_pRDyn->m_pACF->m_pData[z+2] + o->m_pRDyn->m_pACF->m_pData[z];
6362
 
                        //                      o->m_pRDyn->m_pACF->m_pData[z] = o->m_pRDyn->m_pACF->m_pData[z+2] - o->m_pRDyn->m_pACF->m_pData[z];
6363
 
 
6364
 
                                        o->m_pRDyn->m_pACF->m_pData[o->m_pRDyn->m_iDepth-2] = 0;
6365
 
                                        o->m_pRDyn->m_pACF->m_pData[o->m_pRDyn->m_iDepth-1] = 0;
6366
 
 
6367
 
                                        sprintf(buf,"acf_%s%s.d.csv",o->m_pRDyn->m_sName,multibuf);
6368
 
                                        mprintf("    Saving derived ACF as %s ...\n",buf);
6369
 
                                        o->m_pRDyn->m_pACF->WriteACF("",buf,"");
6370
 
                                }
6371
 
 
6372
 
                                if (o->m_pRDyn->m_pACF->m_iMirror != 0)
6373
 
                                {
6374
 
                                        mprintf("    Mirroring ACF...\n");
6375
 
                                        o->m_pRDyn->m_pACF->Mirror(o->m_pRDyn->m_pACF->m_iMirror);
6376
 
                                        sprintf(buf,"acf_%s%s.m.csv",o->m_pRDyn->m_sName,multibuf);
6377
 
                                        mprintf("    Saving mirrored ACF as %s ...\n",buf);
6378
 
                                        o->m_pRDyn->m_pACF->WriteACF("",buf,"");
6379
 
                                }
6380
 
 
6381
 
                                if (o->m_pRDyn->m_pACF->m_bWindowFunction)
6382
 
                                {
6383
 
                                        mprintf("    Applying window function to ACF...\n");
6384
 
                                        o->m_pRDyn->m_pACF->Window();
6385
 
                                        sprintf(buf,"acf_%s%s.w.csv",o->m_pRDyn->m_sName,multibuf);
6386
 
                                        mprintf("    Saving windowed ACF as %s ...\n",buf);
6387
 
                                        o->m_pRDyn->m_pACF->WriteACF("",buf,"");
6388
 
                                }
6389
 
 
6390
 
                                mprintf("    Performing fourier transformation...\n");
6391
 
 
6392
 
                                try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6393
 
                                if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6394
 
                                
6395
 
/*                              if (o->m_pVACF->m_bMirror)
6396
 
                                        g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
6397
 
                                                else */g_pFFT->PrepareFFT_C2C(o->m_pRDyn->m_pACF->m_iSize+o->m_pRDyn->m_pACF->m_iZeroPadding);
6398
 
                                o->m_pRDyn->m_pACF->Transform(g_pFFT);
6399
 
                                delete g_pFFT;
6400
 
                                o->m_pRDyn->m_pACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
6401
 
                                if (o->m_pRDyn->m_pACF->m_bACF_DB)
6402
 
                                {
6403
 
                                        mprintf("    Normalising spectrum to decibel...\n");
6404
 
                                        o->m_pRDyn->m_pACF->m_pSpectrum->MakeDB();
6405
 
                                }/* else
6406
 
                                {
6407
 
                                        mprintf("    Normalising integral of spectrum...\n");
6408
 
                                        o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
6409
 
                                }*/
6410
 
/*                              if (o->m_pVACF->m_bWindowFunction)
6411
 
                                {
6412
 
                                        sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
6413
 
                                        mprintf("    Saving spectrum as %s ...\n",buf);
6414
 
                                        o->m_pVACF->m_pSpectrum->Write("",buf,"");
6415
 
                                } else
6416
 
                                {*/
6417
 
                                sprintf(buf,"power_%s%s.csv",o->m_pRDyn->m_sName,multibuf);
6418
 
                                mprintf("    Saving spectrum as %s ...\n",buf);
6419
 
                                o->m_pRDyn->m_pACF->m_pSpectrum->Write("",buf,"");
6420
 
//                              }
6421
 
                        } // END IF SPECTRUM
6422
 
                }
6423
 
 
6424
 
                if (g_bVACF)
6425
 
                {
6426
 
                        mprintf(WHITE,"* Velocity Autocorrelation Function\n");
6427
 
                        if (o->m_pVACF->m_bDerivative)
6428
 
                        {
6429
 
                                mprintf("    Deriving velocities...\n");
6430
 
                                mprintf(WHITE,"      [");
6431
 
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
6432
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
6433
 
                                {
6434
 
                                        if (fmod(z2,tfs) < 1)
6435
 
                                                mprintf(WHITE,"#");
6436
 
                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
6437
 
 
6438
 
                                        for (z3=0;z3<(int)g_iSteps*3-3;z3++)
6439
 
                                                (*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
6440
 
                                }
6441
 
                                mprintf(WHITE,"]\n");
6442
 
                        }
6443
 
                        if (g_bVACFCacheMode)
6444
 
                        {
6445
 
                                mprintf("    Autocorrelating cached vectors...\n");
6446
 
                                mprintf(WHITE,"      [");
6447
 
                                tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
6448
 
 
6449
 
                                try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
6450
 
                                if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6451
 
                                
6452
 
                                ptfa2->SetSize(g_iSteps);
6453
 
 
6454
 
                                try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
6455
 
                                if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6456
 
                                
6457
 
                                ptfa3->SetSize(g_iSteps);
6458
 
 
6459
 
                                try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6460
 
                                if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6461
 
                                
6462
 
                                ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
6463
 
                                ti = 0;
6464
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6465
 
                                {
6466
 
                                        for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
6467
 
                                        {
6468
 
                                                if (o->m_pVACF->m_bMassWeight)
6469
 
                                                        tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
6470
 
                                                                else tf = 1.0;
6471
 
                                                for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
6472
 
                                                {
6473
 
                                                        if (fmod(ti,tfs) < 1)
6474
 
                                                                mprintf(WHITE,"#");
6475
 
                                                        ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
6476
 
 
6477
 
                                                        /* X */
6478
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
6479
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3];
6480
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
6481
 
                        //                              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);
6482
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
6483
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
6484
 
 
6485
 
                                                        /* Y */
6486
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
6487
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+1];
6488
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
6489
 
                        //                              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);
6490
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
6491
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
6492
 
 
6493
 
                                                        /* Z */
6494
 
                                                        for (z5=0;z5<(int)g_iSteps;z5++)
6495
 
                                                                (*ptfa2)[z5] = (*ptfa)[z5*3+2];
6496
 
                                                        ac->AutoCorrelate(ptfa2,ptfa3);
6497
 
                        //                              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);
6498
 
                                                        for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
6499
 
                                                                o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
6500
 
 
6501
 
                                                        ti++;
6502
 
                                                }
6503
 
                                        }
6504
 
                                }
6505
 
                                delete ac;
6506
 
                                delete ptfa2;
6507
 
                                delete ptfa3;
6508
 
 
6509
 
                        /*      } else
6510
 
                                {
6511
 
                                        for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
6512
 
                                        {
6513
 
                                                if (fmod(z2,tfs) < 1)
6514
 
                                                        mprintf(WHITE,"#");
6515
 
                                                ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
6516
 
                                                for (z3=0;z3<o->m_pVACF->m_iSize;z3+=o->m_pVACF->m_iStride) // Das ist das Tau
6517
 
                                                {
6518
 
                                                        tf = 0;
6519
 
                                                        for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
6520
 
                                                                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];
6521
 
                                                        o->m_pVACF->m_pData[z3/o->m_pVACF->m_iStride] += tf/(g_iSteps-z3);
6522
 
                                                }
6523
 
                                        }
6524
 
                                }*/
6525
 
                                mprintf(WHITE,"]\n");
6526
 
                                mprintf("      %d atoms and %d frames processed.\n",ti,o->m_pVACF->m_iSize);
6527
 
                                o->m_pVACF->MultiplyCached(1.0/g_iGesAtomCount);
6528
 
                        } else o->m_pVACF->Multiply(1.0/g_iGesAtomCount);
6529
 
/*                      sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
6530
 
                        mprintf("    Saving ACF as %s ...\n",buf);
6531
 
                        o->m_pVACF->WriteACF("",buf,"");*/
6532
 
 
6533
 
                        sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
6534
 
                        mprintf("    Saving ACF as %s ...\n",buf);
6535
 
                        o->m_pVACF->WriteACF("",buf,"");
6536
 
 
6537
 
                        if (o->m_pVACF->m_iMirror != 0)
6538
 
                        {
6539
 
                                mprintf("    Mirroring ACF...\n");
6540
 
                                o->m_pVACF->Mirror(o->m_pVACF->m_iMirror);
6541
 
                                sprintf(buf,"acf_%s%s.m.csv",o->m_pVACF->m_sName,multibuf);
6542
 
                                mprintf("    Saving mirrored ACF as %s ...\n",buf);
6543
 
                                o->m_pVACF->WriteACF("",buf,"");
6544
 
                        }
6545
 
 
6546
 
                        if (o->m_pVACF->m_bWindowFunction)
6547
 
                        {
6548
 
                                mprintf("    Applying window function to ACF...\n");
6549
 
                                o->m_pVACF->Window();
6550
 
                                sprintf(buf,"acf_%s%s.w.csv",o->m_pVACF->m_sName,multibuf);
6551
 
                                mprintf("    Saving windowed ACF as %s ...\n",buf);
6552
 
                                o->m_pVACF->WriteACF("",buf,"");
6553
 
                        }
6554
 
 
6555
 
                        if (o->m_pVACF->m_bSpectrum)
6556
 
                        {
6557
 
                                mprintf("    Performing fourier transformation...\n");
6558
 
 
6559
 
                                try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6560
 
                                if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6561
 
                                
6562
 
/*                              if (o->m_pVACF->m_bMirror)
6563
 
                                        g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
6564
 
                                                else */g_pFFT->PrepareFFT_C2C(o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding);
6565
 
                                o->m_pVACF->Transform(g_pFFT);
6566
 
                                delete g_pFFT;
6567
 
                                o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
6568
 
                                if (o->m_pVACF->m_bACF_DB)
6569
 
                                {
6570
 
                                        mprintf("    Normalising spectrum to decibel...\n");
6571
 
                                        o->m_pVACF->m_pSpectrum->MakeDB();
6572
 
                                }/* else
6573
 
                                {
6574
 
                                        mprintf("    Normalising integral of spectrum...\n");
6575
 
                                        o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
6576
 
                                }*/
6577
 
/*                              if (o->m_pVACF->m_bWindowFunction)
6578
 
                                {
6579
 
                                        sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
6580
 
                                        mprintf("    Saving spectrum as %s ...\n",buf);
6581
 
                                        o->m_pVACF->m_pSpectrum->Write("",buf,"");
6582
 
                                } else
6583
 
                                {*/
6584
 
                                sprintf(buf,"power_%s%s.csv",o->m_pVACF->m_sName,multibuf);
6585
 
                                mprintf("    Saving spectrum as %s ...\n",buf);
6586
 
                                o->m_pVACF->m_pSpectrum->Write("",buf,"");
6587
 
//                              }
6588
 
                        }
6589
 
                } // End IF VACF
6590
 
 
6591
 
                if (g_bMSD)
6592
 
                {
6593
 
                        mprintf(WHITE,"* Mean Square Displacement\n");
6594
 
                        if (g_bMSDCacheMode)
6595
 
                        {
6596
 
                                mprintf("    Autocorrelating cached vectors...\n");
6597
 
//                              mprintf(WHITE,"      [");
6598
 
//                              tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms)/60.0;
6599
 
                                for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
6600
 
                                {
6601
 
//                                      if (fmod(z2,tfs) < 1.0)
6602
 
//                                              mprintf(WHITE,"#");
6603
 
                                        mprintf("      %4d/%d:  [",z2+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms);
6604
 
                                        tfs = o->m_pMSD->m_iResolution/50.0;
6605
 
                                        ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[z2];
6606
 
                                        for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
6607
 
                                        {
6608
 
                                                if (fmod(z3,tfs) < 1.0)
6609
 
                                                        mprintf(WHITE,"#");
6610
 
                                                tf = 0;
6611
 
 
6612
 
                                                for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
6613
 
                                                        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);
6614
 
 
6615
 
                                                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);
6616
 
                                                o->m_pMSD->m_pMSD->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
6617
 
                                                if (o->m_pMSD->m_bSplit)
6618
 
                                                {
6619
 
                                                        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);
6620
 
                                                        o->m_pMSD->m_pSplitMSD[z2]->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
6621
 
                                                }
6622
 
                                        }
6623
 
                                        mprintf("]\n");
6624
 
                                }
6625
 
                                for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
6626
 
                                        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;
6627
 
//                              mprintf(WHITE,"]\n");
6628
 
                        } else
6629
 
                        {
6630
 
                                o->m_pMSD->m_pMSD->BuildAverage();
6631
 
                        }
6632
 
                        mprintf("    %.0f bin entries.\n",o->m_pMSD->m_pMSD->m_fBinEntries);
6633
 
                        o->m_pMSD->m_pMSD->CalcDeriv(1.0f);
6634
 
                        sprintf(buf,"msd_%s%s.csv",o->m_pMSD->m_sName,multibuf);
6635
 
                        mprintf("    Saving result as %s ...\n",buf);
6636
 
                        if (o->m_pMSD->m_bSplit)
6637
 
                        {
6638
 
                                o->m_pMSD->WriteSplit(buf);
6639
 
                        } else o->m_pMSD->m_pMSD->Write("",buf,"");
6640
 
                        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);
6641
 
                        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);
6642
 
                        mprintf("      MSD(t) = %.6f + %.6f * t   (units: [MSD] = pm^2, [t] = ps).\n",c0,c1);
6643
 
                        mprintf("           R = %.6f\n",r);
6644
 
                        mprintf("      Diffusion coefficient D = %.6f pm^2/ps  =  %G m^2/s.\n",c1/6.0,c1/6.0e12);
6645
 
                        mprintf("        (assuming <x^2> = 6 * D * t)\n\n");
6646
 
                }
6647
 
 
6648
 
                if (g_bNbAnalysis)
6649
 
                {
6650
 
                        mprintf(WHITE,"* Neighborhood Analysis\n");
6651
 
                        mprintf("    %.0f bin entries.\n",o->m_pNbAnalysis->m_fBinEntries);
6652
 
/*                      for (z2=0;z2<o->m_pNbAnalysis->m_iMaxNbCount-o->m_pNbAnalysis->m_iMinNbCount;z2++)
6653
 
                                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);
6654
 
*/                      
6655
 
 
6656
 
                        try { pf = new float[o->m_pNbAnalysis->m_iNbCount]; } catch(...) { pf = NULL; }
6657
 
                        if (pf == NULL) NewException((double)o->m_pNbAnalysis->m_iNbCount*sizeof(float),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6658
 
                        
6659
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6660
 
                                pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
6661
 
 
6662
 
                        sprintf(buf,"nbh_ncf_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
6663
 
                        mprintf("    Saving neighbor count function as %s ...\n",buf);
6664
 
                        a = OpenFileWrite(buf,true);
6665
 
                        fprintf(a,"# distance [pm]; ");
6666
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
6667
 
                        {
6668
 
                                fprintf(a,"%d neighbors",z3);
6669
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount)
6670
 
                                        fprintf(a,";  ");
6671
 
                        }
6672
 
                        fprintf(a,"\n");
6673
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
6674
 
                        {
6675
 
                                fprintf(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);
6676
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
6677
 
                                {
6678
 
                                        fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaNPF[z3])->m_pBin[z2]/o->m_pNbAnalysis->m_pNPFCount->m_pBin[z2]*100.0f);
6679
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount)
6680
 
                                                fprintf(a,";  ");
6681
 
                                }
6682
 
                                fprintf(a,"\n");
6683
 
                        }
6684
 
                        fclose(a);
6685
 
 
6686
 
                        sprintf(buf,"nbh_dist_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
6687
 
                        mprintf("    Calculating mean values and standard deviation...\n");
6688
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6689
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CalcMeanSD();
6690
 
                        mprintf("    Saving neighborhood distribution as %s ...\n",buf);
6691
 
                        a = OpenFileWrite(buf,true);
6692
 
                        fprintf(a,"# distance [pm]; ");
6693
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6694
 
                        {
6695
 
                                fprintf(a,"%d. neighbor",z3+1);
6696
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6697
 
                                        fprintf(a,";  ");
6698
 
                        }
6699
 
                        fprintf(a,"\n");
6700
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
6701
 
                        {
6702
 
                                fprintf(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);
6703
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6704
 
                                {
6705
 
                                        fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6706
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6707
 
                                                fprintf(a,";  ");
6708
 
                                }
6709
 
                                fprintf(a,"\n");
6710
 
                        }
6711
 
                        fclose(a);
6712
 
 
6713
 
                        sprintf(buf,"nbh_minmaxavgsd_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
6714
 
                        mprintf("    Saving neighborhood min/max/avg/sd as %s ...\n",buf);
6715
 
                        a = OpenFileWrite(buf,true);
6716
 
                        fprintf(a,"# n-th neighbor;  min. dist [pm]; max. dist [pm]; avg. dist [pm]; standard deviation [pm]\n");
6717
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iNbCount;z2++)
6718
 
                        {
6719
 
                                fprintf(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);
6720
 
                                fprintf(a,"\n");
6721
 
                        }
6722
 
                        fclose(a);
6723
 
 
6724
 
                        sprintf(buf,"nbh_rdf_decomp_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
6725
 
                        mprintf("    Saving neighborhood RDF decomposition as %s ...\n",buf);
6726
 
                        a = OpenFileWrite(buf,true);
6727
 
                        fprintf(a,"# distance [pm]; ");
6728
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6729
 
                        {
6730
 
                                fprintf(a,"%d. neighbor",z3+1);
6731
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6732
 
                                        fprintf(a,";  ");
6733
 
                        }
6734
 
                        fprintf(a,"\n");
6735
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6736
 
                        {
6737
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
6738
 
                                ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
6739
 
                        }
6740
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6741
 
                        {
6742
 
                                ((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());
6743
 
                                if (g_bDoubleBox)
6744
 
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
6745
 
                        }
6746
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
6747
 
                        {
6748
 
                                fprintf(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);
6749
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6750
 
                                {
6751
 
                                        fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6752
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6753
 
                                                fprintf(a,";  ");
6754
 
                                }
6755
 
                                fprintf(a,"\n");
6756
 
                        }
6757
 
                        fclose(a);
6758
 
 
6759
 
                        sprintf(buf,"nbh_rdf_decomp_cumulative_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
6760
 
                        mprintf("    Saving cumulative neighborhood RDF decomposition as %s ...\n",buf);
6761
 
                        a = OpenFileWrite(buf,true);
6762
 
                        fprintf(a,"# distance [pm]; ");
6763
 
                        for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6764
 
                        {
6765
 
                                fprintf(a,"%d. neighbor",z3+1);
6766
 
                                if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6767
 
                                        fprintf(a,";  ");
6768
 
                        }
6769
 
                        fprintf(a,"\n");
6770
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
6771
 
                                for (z3=1;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6772
 
                                        ((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2] += ((CDF*)o->m_pNbAnalysis->m_oaDF[z3-1])->m_pBin[z2];
6773
 
                        for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
6774
 
                        {
6775
 
                                fprintf(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);
6776
 
                                for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6777
 
                                {
6778
 
                                        fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6779
 
                                        if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6780
 
                                                fprintf(a,";  ");
6781
 
                                }
6782
 
                                fprintf(a,"\n");
6783
 
                        }
6784
 
                        fclose(a);
6785
 
                        delete[] pf;
6786
 
                }
6787
 
 
6788
 
                if (g_bDipDF)
6789
 
                {
6790
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
6791
 
                        {
6792
 
                                if (o->m_pDipDF[zr] == NULL)
6793
 
                                        continue;
6794
 
                                mprintf(WHITE,"* Dipole Distribution Function\n");
6795
 
                                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);
6796
 
                                o->m_pDipDF[zr]->m_pDipoleDF->CalcMeanSD();
6797
 
                                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);
6798
 
                                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);
6799
 
                                o->m_pDipDF[zr]->m_pDipoleDF->NormBinIntegral();
6800
 
                                sprintf(buf,"dipole_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
6801
 
                                mprintf("    Saving dipole distribution as %s ...\n",buf);
6802
 
                                o->m_pDipDF[zr]->m_pDipoleDF->Write("",buf,"",false);
6803
 
                                sprintf(buf,"dipole_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
6804
 
                                mprintf("    Saving dipole distribution AGR file as \"%s\"...\n",buf);
6805
 
                                o->m_pDipDF[zr]->m_pDipoleDF->WriteAgr("",buf,"",o->m_pDipDF[zr]->m_sName,false);
6806
 
                                if (o->m_pDipDF[zr]->m_iHistogramRes != 0)
6807
 
                                {
6808
 
                                        mprintf("    Calculating Histogram...\n");
6809
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->CalcHistogram();
6810
 
                                        sprintf(buf,"his_dipdf_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
6811
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
6812
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteHistogram("",buf,"");
6813
 
                                }
6814
 
                                if (o->m_bTimeDev)
6815
 
                                {
6816
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
6817
 
                                        {
6818
 
                                                fclose(o->m_pDipDF[zr]->m_fDipole[0]);
6819
 
                                                mprintf("    Saving temporal development as dipole_timedev_%s%s.csv\n",o->m_pDipDF[zr]->m_sName,multibuf);
6820
 
                                        } else
6821
 
                                        {
6822
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
6823
 
                                                {
6824
 
                                                        fclose(o->m_pDipDF[zr]->m_fDipole[z2]);
6825
 
                                                        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);
6826
 
                                                }
6827
 
                                        }
6828
 
                                        if (o->m_bCombinedPlot)
6829
 
                                        {
6830
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
6831
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
6832
 
                                                o->m_pDipDF[zr]->m_pDipoleDF->CreateCombinedPlot(false);
6833
 
                                                o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->WriteAgr(buf,false);
6834
 
                                        }
6835
 
                                } // END IF TIMEDEV
6836
 
 
6837
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
6838
 
                                {
6839
 
                                        sprintf(buf,"dipdf_decomp_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
6840
 
                                        mprintf("    Saving DipDF decomposition as \"%s\"...\n",buf);
6841
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti("",buf,"");
6842
 
                                        sprintf(buf,"dipdf_decomp_%s%s_cumulative.csv",o->m_pDipDF[zr]->m_sName,multibuf);
6843
 
                                        mprintf("    Saving cumulative DipoleDF decomposition as \"%s\"...\n",buf);
6844
 
                                        o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti_Cumulative("",buf,"");
6845
 
                                }
6846
 
 
6847
 
                                if (o->m_bTimeDiff)
6848
 
                                        o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
6849
 
                        }
6850
 
                } // END IF DIPOLE
6851
 
 
6852
 
                if (g_bVDF)
6853
 
                {
6854
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
6855
 
                        {
6856
 
                                if (o->m_pVDF[zr] == NULL)
6857
 
                                        continue;
6858
 
                                mprintf(WHITE,"* Velocity Distribution Function\n");
6859
 
                                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);
6860
 
                                o->m_pVDF[zr]->m_pVDF->CalcMeanSD();
6861
 
                                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);
6862
 
                                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);
6863
 
                                o->m_pVDF[zr]->m_pVDF->NormBinIntegral();
6864
 
                                sprintf(buf,"vdf_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
6865
 
                                mprintf("    Saving velocity distribution as %s ...\n",buf);
6866
 
                                o->m_pVDF[zr]->m_pVDF->Write("",buf,"",false);
6867
 
                                sprintf(buf,"vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
6868
 
                                mprintf("    Saving velocity distribution AGR file as \"%s\"...\n",buf);
6869
 
                                o->m_pVDF[zr]->m_pVDF->WriteAgr("",buf,"",o->m_pVDF[zr]->m_sName,false);
6870
 
                                if (o->m_pADF[zr]->m_iHistogramRes != 0)
6871
 
                                {
6872
 
                                        mprintf("    Calculating Histogram...\n");
6873
 
                                        o->m_pVDF[zr]->m_pVDF->CalcHistogram();
6874
 
                                        sprintf(buf,"his_vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
6875
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
6876
 
                                        o->m_pVDF[zr]->m_pVDF->WriteHistogram("",buf,"");
6877
 
                                }
6878
 
                                if (o->m_bTimeDev)
6879
 
                                {
6880
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
6881
 
                                        {
6882
 
                                                fclose(o->m_pVDF[zr]->m_fSpeed[0]);
6883
 
                                                mprintf("    Saving temporal development as vdf_timedev_%s%s.csv\n",o->m_pVDF[zr]->m_sName,multibuf);
6884
 
                                        } else
6885
 
                                        {
6886
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
6887
 
                                                {
6888
 
                                                        fclose(o->m_pVDF[zr]->m_fSpeed[z2]);
6889
 
                                                        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);
6890
 
                                                }
6891
 
                                        }
6892
 
                                        if (o->m_bCombinedPlot)
6893
 
                                        {
6894
 
                                                sprintf(buf,"combined_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
6895
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
6896
 
                                                o->m_pVDF[zr]->m_pVDF->CreateCombinedPlot(false);
6897
 
                                                o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->WriteAgr(buf,false);
6898
 
                                        }
6899
 
                                } // END IF TIMEDEV
6900
 
 
6901
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
6902
 
                                {
6903
 
                                        sprintf(buf,"vdf_decomp_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
6904
 
                                        mprintf("    Saving VDF decomposition as \"%s\"...\n",buf);
6905
 
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti("",buf,"");
6906
 
                                        sprintf(buf,"vdf_decomp_%s%s_cumulative.csv",o->m_pVDF[zr]->m_sName,multibuf);
6907
 
                                        mprintf("    Saving cumulative VDF decomposition as \"%s\"...\n",buf);
6908
 
                                        o->m_pVDF[zr]->m_pVDF->WriteMulti_Cumulative("",buf,"");
6909
 
                                }
6910
 
 
6911
 
                                if (o->m_bTimeDiff)
6912
 
                                        o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
6913
 
                        }
6914
 
                } // END IF VDF
6915
 
 
6916
 
                if (g_bADF)
6917
 
                {
6918
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
6919
 
                        {
6920
 
                                if (o->m_pADF[zr] == NULL)
6921
 
                                        continue;
6922
 
                                mprintf(WHITE,"* Angular Distribution Function\n");
6923
 
                                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);
6924
 
                                o->m_pADF[zr]->m_pADF->CalcMeanSD();
6925
 
                                if (o->m_pADF[zr]->m_bCosine)
6926
 
                                {
6927
 
                                        mprintf("    Mean value: %.10G    Standard deviation: %.10G\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
6928
 
                                        mprintf("    Min. value: %.10G    Max. value:         %.10G\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
6929
 
                                } else
6930
 
                                {
6931
 
                                        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);
6932
 
                                        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);
6933
 
                                }
6934
 
                                if (o->m_pADF[zr]->m_bStat)
6935
 
                                {
6936
 
                                        mprintf("    Applying cone correction...\n");
6937
 
                                        o->m_pADF[zr]->m_pADF->AngleCorrect();
6938
 
                                }
6939
 
                        /*      if (o->m_pADF[zr]->m_bMirror)
6940
 
                                {
6941
 
                                        mprintf("    Making ADF mirror-symmetric...\n");
6942
 
                                        if (o->m_pADF[zr]->m_bCosine)
6943
 
                                                o->m_pADF[zr]->m_pADF->Mirror(0.0f);
6944
 
                                                        else o->m_pADF[zr]->m_pADF->Mirror(90.0f);
6945
 
                                }*/
6946
 
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
6947
 
                                if (o->m_bTimeDev)
6948
 
                                {
6949
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
6950
 
                                        {
6951
 
                                                fclose(o->m_pADF[zr]->m_fAngle[0]);
6952
 
                                                mprintf("    Saving temporal development as adf_timedev_%s%s.csv\n",o->m_pADF[zr]->m_sName,multibuf);
6953
 
                                        } else
6954
 
                                        {
6955
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
6956
 
                                                {
6957
 
                                                        fclose(o->m_pADF[zr]->m_fAngle[z2]);
6958
 
                                                        sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
6959
 
                                                        mprintf("    Saving temporal development as %s\n",buf);
6960
 
                                                }
6961
 
                                        }
6962
 
        //                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_pADF->m_sName);
6963
 
        //                              FreeFileName("",o->m_pADF->m_sName,"_angle_stat.txt");
6964
 
        //                              o->m_pADF->m_pAngleStat->Evaluate();
6965
 
        //                              o->m_pADF->m_pAngleStat->Write("",o->m_pADF->m_sName,"_angle_stat.txt");
6966
 
        //                              delete o->m_pAngleStat;
6967
 
                                        delete[] o->m_pADF[zr]->m_fAngle;
6968
 
                                        o->m_pADF[zr]->m_fAngle = NULL;
6969
 
                                        if (o->m_bCombinedPlot)
6970
 
                                        {
6971
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
6972
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
6973
 
                                                o->m_pADF[zr]->m_pADF->CreateCombinedPlot(false);
6974
 
                                                o->m_pADF[zr]->m_pADF->m_pCombinedPlot->WriteAgr(buf,false);
6975
 
                                        }
6976
 
                                } // END IF TIMEDEV
6977
 
                                sprintf(buf,"adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
6978
 
                                mprintf("    Saving ADF as %s ...\n",buf);
6979
 
                                o->m_pADF[zr]->m_pADF->NormBinIntegral();
6980
 
                                o->m_pADF[zr]->m_pADF->Write("",buf,"",false);
6981
 
                                sprintf(buf,"adf_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
6982
 
                                mprintf("    Saving ADF AGR file as \"%s\"...\n",buf);
6983
 
                                if (o->m_pADF[zr]->m_bCosine)
6984
 
                                        o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
6985
 
                                                else o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
6986
 
                                if (o->m_pADF[zr]->m_iHistogramRes != 0)
6987
 
                                {
6988
 
                                        mprintf("    Calculating Histogram...\n");
6989
 
                                        o->m_pADF[zr]->m_pADF->CalcHistogram();
6990
 
                                        sprintf(buf,"his_adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
6991
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
6992
 
                                        o->m_pADF[zr]->m_pADF->WriteHistogram("",buf,"");
6993
 
                                }
6994
 
 
6995
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
6996
 
                                {
6997
 
                                        sprintf(buf,"adf_decomp_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
6998
 
                                        mprintf("    Saving ADF decomposition as \"%s\"...\n",buf);
6999
 
                                        o->m_pADF[zr]->m_pADF->WriteMulti("",buf,"");
7000
 
                                        sprintf(buf,"adf_decomp_%s%s_cumulative.csv",o->m_pADF[zr]->m_sName,multibuf);
7001
 
                                        mprintf("    Saving cumulative ADF decomposition as \"%s\"...\n",buf);
7002
 
                                        o->m_pADF[zr]->m_pADF->WriteMulti_Cumulative("",buf,"");
7003
 
                                }
7004
 
 
7005
 
                                if (o->m_bTimeDiff)
7006
 
                                        o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
7007
 
                        }
7008
 
                } // END IF ADF
7009
 
 
7010
 
                if (g_bDDF)
7011
 
                {
7012
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
7013
 
                        {
7014
 
                                if (o->m_pDDF[zr] == NULL)
7015
 
                                        continue;
7016
 
                                mprintf(WHITE,"* Dihedral Distribution Function\n");
7017
 
                                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);
7018
 
                                o->m_pDDF[zr]->m_pDDF->CalcMeanSD();
7019
 
                                if (o->m_pDDF[zr]->m_bCosine)
7020
 
                                {
7021
 
                                        mprintf("    Mean value: %.10G    Standard deviation: %.10G\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
7022
 
                                        mprintf("    Min. value: %.10G    Max.value:          %.10G\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
7023
 
                                } else
7024
 
                                {
7025
 
                                        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);
7026
 
                                        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);
7027
 
                                }
7028
 
                                if (o->m_bTimeDev)
7029
 
                                {
7030
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
7031
 
                                        {
7032
 
                                                fclose(o->m_pDDF[zr]->m_fAngle[0]);
7033
 
                                                mprintf("    Saving temporal development as ddf_timedev_%s%s.csv\n",o->m_pDDF[zr]->m_sName,multibuf);
7034
 
                                        } else
7035
 
                                        {
7036
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
7037
 
                                                {
7038
 
                                                        fclose(o->m_pDDF[zr]->m_fAngle[z2]);
7039
 
                                                        sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
7040
 
                                                        mprintf("    Saving temporal development as %s\n",buf);
7041
 
                                                }
7042
 
                                        }
7043
 
        /*                              mprintf("        Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_sName);
7044
 
                                        FreeFileName("",o->m_sName,"_angle_stat.txt");
7045
 
                                        o->m_pAngleStat->Evaluate();
7046
 
                                        o->m_pAngleStat->Write("",o->m_sName,"_angle_stat.txt");
7047
 
        //                              delete o->m_pAngleStat;*/
7048
 
                                        delete[] o->m_pDDF[zr]->m_fAngle;
7049
 
                                        o->m_pDDF[zr]->m_fAngle = NULL;
7050
 
                                        if (o->m_bCombinedPlot)
7051
 
                                        {
7052
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
7053
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
7054
 
                                                o->m_pDDF[zr]->m_pDDF->CreateCombinedPlot(false);
7055
 
                                                o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->WriteAgr(buf,false);
7056
 
                                        }
7057
 
                                } // END IF TIMEDEV
7058
 
        /*                      if (o->m_pDDF->m_iStat != 0)
7059
 
                                {
7060
 
                                        mprintf("        Korrigiere statistische Verteilung...\n");
7061
 
                                        o->m_pDDF->m_pDDF->AngleCorrect();
7062
 
                                }*/
7063
 
                                sprintf(buf,"ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
7064
 
                                mprintf("    Saving DDF as %s ...\n",buf);
7065
 
                                o->m_pDDF[zr]->m_pDDF->NormBinIntegral();
7066
 
                                o->m_pDDF[zr]->m_pDDF->Write("",buf,"",false);
7067
 
                                sprintf(buf,"ddf_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
7068
 
                                mprintf("    Saving DDF AGR file as \"%s\"...\n",buf);
7069
 
                                if (o->m_pDDF[zr]->m_bCosine)
7070
 
                                        o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
7071
 
                                                else o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
7072
 
                                if (o->m_pDDF[zr]->m_iHistogramRes != 0)
7073
 
                                {
7074
 
                                        mprintf("    Calculating Histogram...\n");
7075
 
                                        o->m_pDDF[zr]->m_pDDF->CalcHistogram();
7076
 
                                        sprintf(buf,"his_ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
7077
 
                                        mprintf("    Saving Histogram as \"%s\"...\n",buf);
7078
 
                                        o->m_pDDF[zr]->m_pDDF->WriteHistogram("",buf,"");
7079
 
                                }
7080
 
 
7081
 
                                if (o->m_bObsCertain && o->m_bDecompDist)
7082
 
                                {
7083
 
                                        sprintf(buf,"ddf_decomp_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
7084
 
                                        mprintf("    Saving DDF decomposition as \"%s\"...\n",buf);
7085
 
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti("",buf,"");
7086
 
                                        sprintf(buf,"ddf_decomp_%s%s_cumulative.csv",o->m_pDDF[zr]->m_sName,multibuf);
7087
 
                                        mprintf("    Saving cumulative DDF decomposition as \"%s\"...\n",buf);
7088
 
                                        o->m_pDDF[zr]->m_pDDF->WriteMulti_Cumulative("",buf,"");
7089
 
                                }
7090
 
 
7091
 
                                if (o->m_bTimeDiff)
7092
 
                                        o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
7093
 
                        }
7094
 
                } // END IF DDF
7095
 
 
7096
 
                if (g_bSDF)
7097
 
                {       
7098
 
                        mprintf(WHITE,"* Spatial Distribution Function\n");
7099
 
                        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);
7100
 
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
7101
 
                        mprintf("    Raw data range from %.0f to %.0f hits.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry);
7102
 
                        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));
7103
 
                        mprintf("    The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pSDF->m_fParticleDensity);
7104
 
/*                      switch(g_iSDFScale)
7105
 
                        {
7106
 
                                case 0:
7107
 
                                        mprintf("    Scaling values to ppm...\n");
7108
 
                                        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));
7109
 
                                        break;
7110
 
                                case 1:
7111
 
                                        mprintf("    Scaling values to pm^-3...\n");
7112
 
                                        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));
7113
 
                                        break;
7114
 
                                case 2:
7115
 
                                        mprintf("    Scaling values to nm^-3...\n");*/
7116
 
/*                                      break;
7117
 
                                case 3:
7118
 
                                        mprintf("    Scaling values relative to average particle density...\n");
7119
 
                                        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));
7120
 
                                        break;
7121
 
                        }*/
7122
 
 
7123
 
                        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));
7124
 
 
7125
 
                        if (g_bSDFUniform)
7126
 
                        {
7127
 
                                o->m_pSDF->m_pSDF->MultiplyBin(1.0/o->m_pSDF->m_fParticleDensity);
7128
 
                                mprintf(WHITE,"    Bin values are given relative to this uniform particle density.\n");
7129
 
                        } else
7130
 
                        {
7131
 
                                mprintf(WHITE,"    Bin values are given in nm^-3 (particle density).\n");
7132
 
                        }
7133
 
                        o->m_pSDF->m_pSDF->CalcMaxEntry();
7134
 
                        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");
7135
 
 
7136
 
                        if (o->m_pSDF->m_bInvert)
7137
 
                        {
7138
 
                                mprintf("    Inverting SDF...\n");
7139
 
                                o->m_pSDF->m_pSDF->Invert();
7140
 
                        }
7141
 
                        if (o->m_pSDF->m_bCutPlane)
7142
 
                        {
7143
 
                                mprintf("    Creating Cut Plane...\n");
7144
 
                                o->m_pSDF->CreateCutPlane();
7145
 
                                sprintf(buf,"sdf_cut_%s%s",o->m_pSDF->m_sName,multibuf);
7146
 
                                mprintf("    Saving SDF Cut Plane triples as \"%s_triples.csv\"...\n",buf);
7147
 
                                o->m_pSDF->m_pCutPlane->Write("",buf,"_triples.csv");
7148
 
                                mprintf("    Saving SDF Cut Plane matrix as \"%s_matrix.csv\"...\n",buf);
7149
 
                                o->m_pSDF->m_pCutPlane->WriteCSV("",buf,"_matrix.csv");
7150
 
                                mprintf("    Saving CDF Mathematica Notebook as \"%s.nb\"...\n",buf);
7151
 
                                o->m_pSDF->m_pCutPlane->WriteMathematicaNb("",buf,".nb",false);
7152
 
                        }
7153
 
                        for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7154
 
                        {
7155
 
                                try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
7156
 
                                if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7157
 
                                
7158
 
                                tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
7159
 
                                if (z2 != 0)
7160
 
                                {
7161
 
                                        tempSDF->Smooth(z2);
7162
 
                                        sprintf(buf,".s%d%s.plt",z2,multibuf);
7163
 
                                } else sprintf(buf,"%s.plt",multibuf);
7164
 
                                tempSDF->CalcMaxEntry();
7165
 
                                mprintf("        Data range from %.6f to %.6f%s.\n",tempSDF->m_fMinEntry,tempSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
7166
 
                                if (o->m_pSDF->m_bClipPlane)
7167
 
                                {
7168
 
                                        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);
7169
 
                                        o->m_pSDF->m_pSDF->ClipPlane(o->m_pSDF->m_iClipDirection,o->m_pSDF->m_fClipValue);
7170
 
                                }
7171
 
                                mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
7172
 
                                tempSDF->WritePLT("sdf_",o->m_pSDF->m_sName,buf,true);
7173
 
 
7174
 
                                if (z2 != 0)
7175
 
                                        sprintf(buf,".s%d%s.cube",z2,multibuf);
7176
 
                                                else sprintf(buf,"%s.cube",multibuf);
7177
 
                                mprintf("        Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
7178
 
                                tempSDF->WriteCube("sdf_",o->m_pSDF->m_sName,buf,true);
7179
 
 
7180
 
                                if (o->m_pSDF->m_iHistogramRes != 0)
7181
 
                                {
7182
 
                                        if (z2 != 0)
7183
 
                                                sprintf(buf,".s%d%s.csv",z2,multibuf);
7184
 
                                                        else sprintf(buf,"%s.csv",multibuf);
7185
 
                                        mprintf("        Saving SDF Histogram as \"his_sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
7186
 
                                        tempSDF->CalcHistogram();
7187
 
                                        tempSDF->WriteHistogram("his_sdf_",o->m_pSDF->m_sName,buf);
7188
 
                                }
7189
 
                        }
7190
 
                        mprintf(YELLOW,"\n    Important: ");
7191
 
                        mprintf(WHITE,"The PLT/CUBE files only contain the volumetric data.\n");
7192
 
                        mprintf(WHITE,"    The atoms of the reference molecule are saved in the ref_*.xyz file!\n");
7193
 
                        mprintf(WHITE,"    You need to load *both files* into the visualization program (e.g. VMD).\n");
7194
 
                } // END IF SDF
7195
 
 
7196
 
                if (g_bRDF)
7197
 
                {
7198
 
                        for (zr=0;zr<g_iCDFChannels;zr++)
7199
 
                        {
7200
 
                                if (o->m_pRDF[zr] == NULL)
7201
 
                                        continue;
7202
 
                                mprintf(WHITE,"* Radial Distribution Function\n");
7203
 
                                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);
7204
 
                                o->m_pRDF[zr]->m_pRDF->CalcMeanSD();
7205
 
                                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);
7206
 
                                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);
7207
 
                                if (o->m_pRDF[zr]->m_bAdaptive)
7208
 
                                {
7209
 
//                                      o->m_pRDF[zr]->m_pRDF->WriteHenry("rdf_",o->m_pRDF[zr]->m_sName,".csv");
7210
 
                                        o->m_pRDF[zr]->m_pRDF->PrepareAdapt();
7211
 
                                        o->m_pRDF[zr]->m_pRDF->BinTree_RadialDist();
7212
 
                                        if (o->m_iShowMol == g_iFixMol)
7213
 
                                                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);
7214
 
                                                        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);
7215
 
 
7216
 
                                        mprintf("    Saving RDF as \"rdf_%s.csv\"...\n",o->m_pRDF[zr]->m_sName);
7217
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".001.csv",5,10,0.001,true);
7218
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".002.csv",5,10,0.002,true);
7219
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".005.csv",5,10,0.005,true);
7220
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".010.csv",5,10,0.01,true);
7221
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".020.csv",5,10,0.02,true);
7222
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".050.csv",5,10,0.05,true);
7223
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",5,10,0.1,true);
7224
 
 
7225
 
/*                                      o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".50.csv",16,0,50,true);
7226
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",16,0,100,true);
7227
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".500.csv",16,0,500,true);
7228
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".1000.csv",16,0,1000,true);*/
7229
 
                                } else
7230
 
                                {
7231
 
                                        if (o->m_pRDF[zr]->m_bRadialCorrect)
7232
 
                                        {
7233
 
                                                mprintf("    Correcting radial distribution...\n");
7234
 
                                                o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
7235
 
                                        }
7236
 
                                        if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
7237
 
                                        {
7238
 
                                                mprintf("    Scaling RDF to uniform density...\n");
7239
 
                                                if (o->m_bObsCertain)
7240
 
                                                {
7241
 
                                                        o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / g_iSteps / o->m_waObsRefList.GetSize());
7242
 
                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
7243
 
                                                } else
7244
 
                                                {
7245
 
                                                        o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
7246
 
                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((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);
7247
 
                                                }
7248
 
                                                if (g_bDoubleBox)
7249
 
                                                {
7250
 
                                                        o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
7251
 
                                                        o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
7252
 
                                                }
7253
 
                                        } else
7254
 
                                        {
7255
 
                                                mprintf("    Scaling RDF to integral value 1...\n");
7256
 
                                                o->m_pRDF[zr]->m_pRDF->NormBinIntegral(1.0);
7257
 
                                                o->m_pRDF[zr]->m_pRDF->Integrate(false,1.0);
7258
 
                                        }
7259
 
                                        sprintf(buf,"rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
7260
 
                                        mprintf("    Saving RDF as \"%s\"...\n",buf);
7261
 
                                        o->m_pRDF[zr]->m_pRDF->Write("",buf,"",true);
7262
 
                                        sprintf(buf,"rdf_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
7263
 
                                        mprintf("    Saving RDF AGR file as \"%s\"...\n",buf);
7264
 
                                        o->m_pRDF[zr]->m_pRDF->WriteAgr("",buf,"",o->m_pRDF[zr]->m_sName,true);
7265
 
                                        if (o->m_pRDF[zr]->m_iHistogramRes != 0)
7266
 
                                        {
7267
 
                                                mprintf("    Calculating Histogram...\n");
7268
 
                                                o->m_pRDF[zr]->m_pRDF->CalcHistogram();
7269
 
                                                sprintf(buf,"his_rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
7270
 
                                                mprintf("    Saving Histogram as \"%s\"...\n",buf);
7271
 
                                                o->m_pRDF[zr]->m_pRDF->WriteHistogram("",buf,"");
7272
 
                                        }
7273
 
                                        if (o->m_bObsCertain && o->m_bDecompDist)
7274
 
                                        {
7275
 
                                                sprintf(buf,"rdf_decomp_mol_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
7276
 
                                                mprintf("    Saving RDF molecule decomposition as \"%s.csv\"...\n",buf);
7277
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
7278
 
                                                mprintf("    Saving RDF molecule decomposition as \"%s.agr\"...\n",buf);
7279
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
7280
 
 
7281
 
                                                sprintf(buf,"rdf_decomp_nb_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
7282
 
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.csv\"...\n",buf);
7283
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
7284
 
                                                mprintf("    Saving cumulative RDF molecule decomposition as \"%s.agr\"...\n",buf);
7285
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
7286
 
                                        }
7287
 
                                        if (o->m_bDecompType)
7288
 
                                        {
7289
 
                                                sprintf(buf,"rdf_decomp_type_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
7290
 
                                                mprintf("    Saving RDF type decomposition as \"%s.csv\"...\n",buf);
7291
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
7292
 
                                                mprintf("    Saving RDF type decomposition as \"%s.agr\"...\n",buf);
7293
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
7294
 
 
7295
 
                                                sprintf(buf,"rdf_decomp_type_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
7296
 
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.csv\"...\n",buf);
7297
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
7298
 
                                                mprintf("    Saving cumulative RDF type decomposition as \"%s.agr\"...\n",buf);
7299
 
                                                o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
7300
 
                                        }
7301
 
 
7302
 
                                        if (o->m_bTimeDiff)
7303
 
                                                o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
7304
 
 
7305
 
                                        if (o->m_pRDF[zr]->m_bACF)
7306
 
                                        {
7307
 
                                                o->m_pRDF[zr]->Autocorrelate();
7308
 
                                        }
7309
 
                                }
7310
 
                                if (o->m_bTimeDev)
7311
 
                                {
7312
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
7313
 
                                        {
7314
 
                                                fclose(o->m_pRDF[zr]->m_fDist[0]);
7315
 
                                                mprintf("    Saving temporal development as \"rdf_timedev_%s%s.csv\"...\n",o->m_pRDF[zr]->m_sName,multibuf);
7316
 
                                        } else
7317
 
                                        {
7318
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
7319
 
                                                {
7320
 
                                                        fclose(o->m_pRDF[zr]->m_fDist[z2]);
7321
 
                                                        sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
7322
 
                                                        mprintf("    Saving temporal development as \"%s\"...\n",buf);
7323
 
                                                }
7324
 
                                        }
7325
 
                                        delete[] o->m_pRDF[zr]->m_fDist;
7326
 
                                        o->m_pRDF[zr]->m_fDist = NULL;
7327
 
                                        if (o->m_bCombinedPlot)
7328
 
                                        {
7329
 
                                                sprintf(buf,"combined_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
7330
 
                                                mprintf("    Saving combined plot as \"%s\"...\n",buf);
7331
 
                                                o->m_pRDF[zr]->m_pRDF->CreateCombinedPlot(true);
7332
 
                                                o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->WriteAgr(buf,false);
7333
 
                                        }
7334
 
                                }
7335
 
                        }
7336
 
                } // END IF RDF
7337
 
 
7338
 
                if (g_bVHDF)
7339
 
                {
7340
 
                        mprintf(WHITE,"* Van Hove Correlation Function\n");
7341
 
                        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);
7342
 
                        o->m_pVHDF->CorrectCount();
7343
 
                        if (o->m_pVHDF->m_bRadialCorrect)
7344
 
                        {
7345
 
                                mprintf("    Correcting radial distribution...\n");
7346
 
                                o->m_pVHDF->m_pVHDF->CorrectRadialDist(0);
7347
 
                                mprintf("    Normalizing bin to uniform density...\n");
7348
 
                                o->m_pVHDF->m_pVHDF->MultiplyBin(3.0f/4.0f/Pi*g_fBoxX*g_fBoxY*g_fBoxZ);
7349
 
                                if (g_bDoubleBox)
7350
 
                                        o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
7351
 
                        } else
7352
 
                        {
7353
 
                                mprintf("    Normalizing bin integral to 1000000...\n");
7354
 
                                o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
7355
 
                        }
7356
 
                        sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
7357
 
                        mprintf("    Saving VHCF triples as \"%s_triples.csv\"...\n",buf);
7358
 
                        o->m_pVHDF->m_pVHDF->Write("",buf,"_triples.csv");
7359
 
                        mprintf("    Saving VHCF matrix as \"%s_matrix.csv\"...\n",buf);
7360
 
                        o->m_pVHDF->m_pVHDF->WriteCSV("",buf,"_matrix.csv");
7361
 
                        if (o->m_pVHDF->m_iGraceBunchDist > 0)
7362
 
                        {
7363
 
                                sprintf(buf,"vhcf_dist_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
7364
 
                                mprintf("    Saving VHCF distance Grace Stack as \"%s\"...\n",buf);
7365
 
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(0,o->m_pVHDF->m_iGraceBunchDist,1.0f,"",buf,"");
7366
 
                        }
7367
 
                        if (o->m_pVHDF->m_iGraceBunchTime > 0)
7368
 
                        {
7369
 
                                sprintf(buf,"vhcf_time_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
7370
 
                                mprintf("    Saving VHCF time Grace Stack as \"%s\"...\n",buf);
7371
 
                                o->m_pVHDF->m_pVHDF->WriteGraceBunch(1,o->m_pVHDF->m_iGraceBunchTime,1.0f,"",buf,"");
7372
 
                        }
7373
 
                        if (o->m_pVHDF->m_bSwapAxes)
7374
 
                        {
7375
 
                                mprintf("    Swapping time and distance axes...\n");
7376
 
                                o->m_pVHDF->m_pVHDF->SwapAxes();
7377
 
                        }
7378
 
                        sprintf(buf,"vhcf_%s%s.nb",o->m_pVHDF->m_sName,multibuf);
7379
 
                        mprintf("    Saving VHCF Mathematica Notebook as \"%s\"...\n",buf);
7380
 
                        o->m_pVHDF->m_pVHDF->WriteMathematicaNb("",buf,"",false);
7381
 
                } // END IF VHDF
7382
 
 
7383
 
                if (g_bCDF)
7384
 
                {
7385
 
                        if (g_iCDFChannels == 2)
7386
 
                        {
7387
 
                                mprintf(WHITE,"* Combined Distribution Function (2D)\n");
7388
 
                        /*      if (o->m_pConditions != NULL)
7389
 
                                {
7390
 
                                        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);
7391
 
                                        mprintf("    After conditions: ");
7392
 
                                } else mprintf("    ");*/
7393
 
                                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);
7394
 
                                if (o->m_pCDF->m_p2DF->m_fBinEntries == 0)
7395
 
                                {
7396
 
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
7397
 
                                        goto _skipsdf;
7398
 
                                }
7399
 
                                for (z2=0;z2<2;z2++)
7400
 
                                {
7401
 
                                        if (g_iObsChannel[z2] == 0)
7402
 
                                        {
7403
 
                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
7404
 
                                                {
7405
 
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
7406
 
                                                        o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
7407
 
                                                }
7408
 
                                        }
7409
 
                                        if (g_iObsChannel[z2] == 1)
7410
 
                                        {
7411
 
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
7412
 
                                                {
7413
 
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
7414
 
                                                        o->m_pCDF->m_p2DF->CorrectAngle(z2);
7415
 
                                                }
7416
 
                                                if (o->m_pADF[z2]->m_bMirror)
7417
 
                                                {
7418
 
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
7419
 
                                                        if (o->m_pADF[z2]->m_bCosine)
7420
 
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
7421
 
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
7422
 
                                                }
7423
 
                                        }
7424
 
                                }
7425
 
                                o->m_pCDF->m_fFactor = 1.0;
7426
 
                                switch(o->m_pCDF->m_iNormalize)
7427
 
                                {
7428
 
                                        case 2:
7429
 
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
7430
 
                                                o->m_pCDF->m_p2DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7431
 
                                                break;
7432
 
                                        case 1:
7433
 
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
7434
 
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p2DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7435
 
                                                break;
7436
 
                                        case 0:
7437
 
                                                mprintf("    Not normalizing this CDF.\n");
7438
 
                                                break;
7439
 
                                }
7440
 
                                mprintf("    Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_sName,multibuf);
7441
 
                                o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_triples.csv");
7442
 
                                mprintf("    Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_sName,multibuf);
7443
 
                                o->m_pCDF->m_p2DF->WriteCSV(o->m_pCDF->m_sName,multibuf,"_matrix.csv");
7444
 
                                mprintf("    Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7445
 
                                o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,".nb",false);
7446
 
                                mprintf("    Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_sName,multibuf);
7447
 
                                o->m_pCDF->m_p2DF->WriteCombinedPlot(o->m_pCDF->m_sName,multibuf,"_combined.agr");
7448
 
                                if (o->m_pCDF->m_iHistogramRes != 0)
7449
 
                                {
7450
 
                                        mprintf("    Calculating Histogram...\n");
7451
 
                                        o->m_pCDF->m_p2DF->CalcHistogram();
7452
 
                                        sprintf(buf,"his_%s",o->m_pCDF->m_sName);
7453
 
                                        mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
7454
 
                                        o->m_pCDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
7455
 
                                }
7456
 
 
7457
 
                                if (o->m_pCDF->m_bGraceBunch)
7458
 
                                {
7459
 
                                        if (o->m_pCDF->m_iGraceBunchC1 > 0)
7460
 
                                        {
7461
 
                                                if ((g_iObsChannel[1] == 0) && (o->m_bOthers))
7462
 
                                                        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;
7463
 
                                                                else tf = 1;
7464
 
                                                sprintf(buf,"cdf_c1_%s%s.agr",o->m_pCDF->m_sName,multibuf);
7465
 
                                                mprintf("    Saving CDF Channel 1 Grace Stack as \"%s\"...\n",buf);
7466
 
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(0,o->m_pCDF->m_iGraceBunchC1,(float)tf,"",buf,"");
7467
 
                                        }
7468
 
                                        if (o->m_pCDF->m_iGraceBunchC2 > 0)
7469
 
                                        {
7470
 
                                                if ((g_iObsChannel[0] == 0) && (o->m_bOthers))
7471
 
                                                        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;
7472
 
                                                                else tf = 1;
7473
 
                                                sprintf(buf,"cdf_c2_%s%s.agr",o->m_pCDF->m_sName,multibuf);
7474
 
                                                mprintf("    Saving CDF Channel 2 Grace Stack as \"%s\"...\n",buf);
7475
 
                                                o->m_pCDF->m_p2DF->WriteGraceBunch(1,o->m_pCDF->m_iGraceBunchC2,(float)tf,"",buf,"");
7476
 
                                        }
7477
 
                                }
7478
 
 
7479
 
                                if (o->m_pCDF->m_bAxisDivide)
7480
 
                                {
7481
 
                                        mprintf("    Saving CDF X projection as \"%s%s_pX.csv\"...\n",o->m_pCDF->m_sName,multibuf);
7482
 
                                        o->m_pCDF->m_p2DF->WriteXProjection(o->m_pCDF->m_sName,multibuf,"_pX.csv");
7483
 
 
7484
 
                                        mprintf("    Saving CDF Y projection as \"%s%s_pY.csv\"...\n",o->m_pCDF->m_sName,multibuf);
7485
 
                                        o->m_pCDF->m_p2DF->WriteYProjection(o->m_pCDF->m_sName,multibuf,"_pY.csv");
7486
 
 
7487
 
                                        mprintf("    Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7488
 
 
7489
 
                                        try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7490
 
                                        if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7491
 
                                        
7492
 
                                        tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
7493
 
                                        if (g_iObsChannel[0] == 0)
7494
 
                                                if (o->m_pRDF[0]->m_bRadialCorrect)
7495
 
                                                        tempc2df->UnCorrectRadialDist(0);
7496
 
                                        if (g_iObsChannel[0] == 1)
7497
 
                                                if (o->m_pADF[0]->m_bStat && (!o->m_pADF[0]->m_bCosine))
7498
 
                                                        tempc2df->UnCorrectAngle(0);
7499
 
                                        tempc2df->NormalizeXCount();
7500
 
                                        switch(o->m_pCDF->m_iNormalize)
7501
 
                                        {
7502
 
                                                case 2:
7503
 
                                                        tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7504
 
                                                        break;
7505
 
                                                case 1:
7506
 
                                                        tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7507
 
                                                        break;
7508
 
                                                case 0:
7509
 
                                                        break;
7510
 
                                        }
7511
 
                                        tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
7512
 
                                        delete tempc2df;
7513
 
 
7514
 
                                        mprintf("    Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7515
 
 
7516
 
                                        try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7517
 
                                        if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7518
 
                                        
7519
 
                                        tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
7520
 
                                        if (g_iObsChannel[1] == 0)
7521
 
                                                if (o->m_pRDF[1]->m_bRadialCorrect)
7522
 
                                                        tempc2df->UnCorrectRadialDist(1);
7523
 
                                        if (g_iObsChannel[1] == 1)
7524
 
                                                if (o->m_pADF[1]->m_bStat && (!o->m_pADF[1]->m_bCosine))
7525
 
                                                        tempc2df->UnCorrectAngle(1);
7526
 
                                        tempc2df->NormalizeYCount();
7527
 
                                        switch(o->m_pCDF->m_iNormalize)
7528
 
                                        {
7529
 
                                                case 2:
7530
 
                                                        tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7531
 
                                                        break;
7532
 
                                                case 1:
7533
 
                                                        tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7534
 
                                                        break;
7535
 
                                                case 0:
7536
 
                                                        break;
7537
 
                                        }
7538
 
                                        tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
7539
 
                                        delete tempc2df;
7540
 
 
7541
 
                                        mprintf("    Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7542
 
 
7543
 
                                        try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7544
 
                                        if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7545
 
                                        
7546
 
                                        tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
7547
 
                                        for (z2=0;z2<2;z2++)
7548
 
                                        {
7549
 
                                                if (g_iObsChannel[z2] == 0)
7550
 
                                                        if (o->m_pRDF[z2]->m_bRadialCorrect)
7551
 
                                                                tempc2df->UnCorrectRadialDist(z2);
7552
 
                                                if (g_iObsChannel[z2] == 1)
7553
 
                                                        if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
7554
 
                                                                tempc2df->UnCorrectAngle(z2);
7555
 
                                        }
7556
 
                                        tempc2df->NormalizeXCount();
7557
 
                                        tempc2df->NormalizeYCount();
7558
 
                                        switch(o->m_pCDF->m_iNormalize)
7559
 
                                        {
7560
 
                                                case 2:
7561
 
                                                        tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7562
 
                                                        break;
7563
 
                                                case 1:
7564
 
                                                        tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7565
 
                                                        break;
7566
 
                                                case 0:
7567
 
                                                        break;
7568
 
                                        }
7569
 
                                        tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
7570
 
                                        delete tempc2df;
7571
 
 
7572
 
                                        mprintf("    Calculating tensor product of CDF projections...\n");
7573
 
 
7574
 
                                        try { o->m_pCDF->m_pTensorProduct = new C2DF(); } catch(...) { o->m_pCDF->m_pTensorProduct = NULL; }
7575
 
                                        if (o->m_pCDF->m_pTensorProduct == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7576
 
                                        
7577
 
                                        o->m_pCDF->m_pTensorProduct->CopyFrom(o->m_pCDF->m_p2DF);
7578
 
                                        o->m_pCDF->m_pTensorProduct->MakeTensorProduct(o->m_pCDF->m_p2DF);
7579
 
                                        switch(o->m_pCDF->m_iNormalize)
7580
 
                                        {
7581
 
                                                case 2:
7582
 
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7583
 
                                                        break;
7584
 
                                                case 1:
7585
 
                                                        o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7586
 
                                                        break;
7587
 
                                                case 0:
7588
 
                                                        break;
7589
 
                                        }
7590
 
                                        mprintf("    Saving tensor product as \"%s%s_tensor.dat\"...\n",o->m_pCDF->m_sName,multibuf);
7591
 
                                        o->m_pCDF->m_pTensorProduct->Write(o->m_pCDF->m_sName,multibuf,"_tensor.dat");
7592
 
                                        mprintf("    Saving tensor product Mathematica Notebook as \"%s%s_tensor.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7593
 
                                        o->m_pCDF->m_pTensorProduct->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensor.nb",false);
7594
 
                                        mprintf("    Calculating difference between CDF and tensor product...\n");
7595
 
                                        o->m_pCDF->m_p2DF->Subtract(o->m_pCDF->m_pTensorProduct);
7596
 
                                        o->m_pCDF->m_p2DF->CalcMaxEntry();
7597
 
        //                              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;
7598
 
        //                              o->m_pCDF->m_p2DF->m_fMathematicaColorScale = o->m_pCDF->m_p2DF->m_fMathematicaColorOffset  * 2.0;
7599
 
                                        mprintf("    Saving tensor difference as \"%s%s_tensordiff.dat\"...\n",o->m_pCDF->m_sName,multibuf);
7600
 
                                        o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_tensordiff.dat");
7601
 
                                        mprintf("    Saving tensor difference Mathematica Notebook as \"%s%s_tensordiff.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7602
 
                                        o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensordiff.nb",false);
7603
 
                                } // END IF AXISDIVIDE
7604
 
                                if (o->m_pCDF->m_bDumpDat)
7605
 
                                {
7606
 
                                        fclose(o->m_pCDF->m_fDump);
7607
 
                                        mprintf("    CDF raw data saved as cdfdump_%dd_%s%s.csv.\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
7608
 
                                }
7609
 
                                if (o->m_bTimeDev)
7610
 
                                {
7611
 
                                        if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
7612
 
                                        {
7613
 
                                                fclose(o->m_pCDF->m_fTimeDev[0]);
7614
 
//                                              sprintf(buf,"cdf_timedev_%dd_%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
7615
 
                                                mprintf("    Temporal development saved as cdf_timedev_%dd%s%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
7616
 
                                        } else
7617
 
                                        {
7618
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
7619
 
                                                {
7620
 
                                                        fclose(o->m_pCDF->m_fTimeDev[z2]);
7621
 
                                                        mprintf("    Temporal development saved as cdf_timedev_%dd%s_ref%d%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
7622
 
                                                }
7623
 
                                        }
7624
 
                                        if (o->m_pCDF->m_bTDAnimation)
7625
 
                                        {
7626
 
                                                mprintf(WHITE,"  * Time dependent animation *\n");
7627
 
                                                sprintf(buf,"animation_complete_%s%s.agr",o->m_pCDF->m_sName,multibuf);
7628
 
                                                mprintf("    Saving complete Plot as \"%s\"...\n",buf);
7629
 
                                                for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
7630
 
                                                {
7631
 
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
7632
 
                                                        o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
7633
 
                                                }
7634
 
                                                o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
7635
 
                                                sprintf(buf,"render_%s%s",o->m_pCDF->m_sName,multibuf);
7636
 
                                                mprintf("    Saving xmgrace render script for animation as \"%s\"...\n",buf);
7637
 
                                                a = OpenFileWrite("gracebatch",true);
7638
 
                                                fprintf(a,"PRINT TO \"output.png\"\n");
7639
 
                                                fprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
7640
 
                                                fprintf(a,"PAGE SIZE %d, %d\n",o->m_pCDF->m_iTDAResX,o->m_pCDF->m_iTDAResY);
7641
 
                                                fprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
7642
 
                                                fprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
7643
 
                                                fprintf(a,"PRINT\n");
7644
 
                                                fclose(a);
7645
 
                                                a = OpenFileWrite(buf,true);
7646
 
                                                if (o->m_pCDF->m_bTDATrace)
7647
 
                                                {
7648
 
                                                        for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
7649
 
                                                        {
7650
 
                                                                o->m_pCDF->m_pTDAPlot->DuplicateSet(z2);
7651
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
7652
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.7));
7653
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineWidth(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,3.0f);
7654
 
                                                                o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,GraceColor(z2,0.0));
7655
 
                                                        }
7656
 
                                                }
7657
 
                                                for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
7658
 
                                                {
7659
 
                                                        if (o->m_pCDF->m_bTDATrace)
7660
 
                                                        {
7661
 
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
7662
 
                                                                {
7663
 
                                                                        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);
7664
 
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,0,z2*o->m_pCDF->m_iTDAStride);
7665
 
                                                                }
7666
 
                                                        } else
7667
 
                                                        {
7668
 
                                                                for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
7669
 
                                                                        o->m_pCDF->m_pTDAPlot->SetSetRange(z3,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
7670
 
                                                        }
7671
 
 
7672
 
                                                        sprintf(buf,"animation_%05d_%s%s.agr",z2+1,o->m_pCDF->m_sName,multibuf);
7673
 
                                                        mprintf("    Saving frame \"%s\"...\n",buf);
7674
 
                                                        o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
7675
 
                                                        fprintf(a,"echo 'Printing frame %d of %d'\n",z2+1,o->m_pCDF->m_iTDASteps);
7676
 
                                                        fprintf(a,"xmgrace %s -batch gracebatch -nosafe -hardcopy\n",buf);
7677
 
                                                        fprintf(a,"mv output.png frame%04d.png\n",z2+1);
7678
 
                                                }
7679
 
                                                fclose(a);
7680
 
                                        }
7681
 
                                }
7682
 
                        } // END IF CHANNELS == 2
7683
 
 
7684
 
                        if (g_iCDFChannels == 3)
7685
 
                        {
7686
 
                                mprintf(WHITE,"* Combined Distribution Function (3D)\n");
7687
 
                                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);
7688
 
                                if (o->m_pCDF->m_p3DF->m_fBinEntries == 0)
7689
 
                                {
7690
 
                                        eprintf("    There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
7691
 
                                        goto _skipsdf;
7692
 
                                }
7693
 
                                o->m_pCDF->m_p3DF->CalcMaxEntry();
7694
 
                                mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7695
 
                                for (z2=0;z2<g_iCDFChannels;z2++)
7696
 
                                {
7697
 
                                        if (g_iObsChannel[z2] == 0)
7698
 
                                        {
7699
 
                                                if (o->m_pRDF[z2]->m_bRadialCorrect)
7700
 
                                                {
7701
 
                                                        mprintf("    Correcting radial distribution for CDF channel %d...\n",z2+1);
7702
 
                                                        o->m_pCDF->m_p3DF->CorrectRadialDist(z2);
7703
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
7704
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7705
 
                                                }
7706
 
                                        }
7707
 
                                        if (g_iObsChannel[z2] == 1)
7708
 
                                        {
7709
 
                                                if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
7710
 
                                                {
7711
 
                                                        mprintf("    Correcting angular distribution for CDF channel %d...\n",z2+1);
7712
 
                                                        o->m_pCDF->m_p3DF->CorrectAngle(z2);
7713
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
7714
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7715
 
                                                }
7716
 
                                                if (o->m_pADF[z2]->m_bMirror)
7717
 
                                                {
7718
 
                                                        mprintf("    Making channel %d mirror-symmetric...\n",z2+1);
7719
 
                                                        if (o->m_pADF[z2]->m_bCosine)
7720
 
                                                                o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
7721
 
                                                                        else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
7722
 
                                                        o->m_pCDF->m_p3DF->CalcMaxEntry();
7723
 
                                                        mprintf("    Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7724
 
                                                }
7725
 
                                        }
7726
 
                                }
7727
 
//                              o->m_pCDF->m_p3DF->CalcMaxEntry();
7728
 
//                              mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7729
 
                                o->m_pCDF->m_fFactor = 1.0;
7730
 
                                switch(o->m_pCDF->m_iNormalize)
7731
 
                                {
7732
 
                                        case 2:
7733
 
                                                mprintf("    Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
7734
 
                                                o->m_pCDF->m_p3DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7735
 
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
7736
 
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7737
 
                                                break;
7738
 
                                        case 1:
7739
 
                                                mprintf("    Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
7740
 
                                                o->m_pCDF->m_fFactor = o->m_pCDF->m_p3DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7741
 
                                                mprintf("    Factor was %G.\n",o->m_pCDF->m_fFactor);
7742
 
                                                o->m_pCDF->m_p3DF->CalcMaxEntry();
7743
 
                                                mprintf("    Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
7744
 
                                                break;
7745
 
                                        case 0:
7746
 
                                                mprintf("    Not normalizing this CDF.\n");
7747
 
                                                break;
7748
 
                                }
7749
 
 
7750
 
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7751
 
                                {
7752
 
                                        try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
7753
 
                                        if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7754
 
                                        
7755
 
                                        temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
7756
 
                                        if (z2 != 0)
7757
 
                                        {
7758
 
                                                temp3DF->Smooth(z2);
7759
 
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
7760
 
                                        } else sprintf(buf,"%s.plt",multibuf);
7761
 
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
7762
 
                                        temp3DF->WritePLT("",o->m_pCDF->m_sName,buf,false);
7763
 
 
7764
 
                                        if (z2 != 0)
7765
 
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
7766
 
                                                        else sprintf(buf,"%s.cube",multibuf);
7767
 
                                        mprintf("    Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
7768
 
                                        temp3DF->WriteCube("",o->m_pCDF->m_sName,buf,false);
7769
 
                                        if (o->m_pCDF->m_iHistogramRes != 0)
7770
 
                                        {
7771
 
                                                mprintf("    Calculating Histogram...\n");
7772
 
                                                temp3DF->CalcHistogram();
7773
 
                                                if (z2 != 0)
7774
 
                                                        sprintf(buf,"his_%s.s%d",o->m_pCDF->m_sName,z2);
7775
 
                                                                else sprintf(buf,"his_%s",o->m_pCDF->m_sName);
7776
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
7777
 
                                                temp3DF->WriteHistogram(buf,multibuf,".csv");
7778
 
                                        }
7779
 
 
7780
 
                                        if (o->m_pCDF->m_b3DSlices)
7781
 
                                        {
7782
 
                                                for (z3=0;z3<3;z3++)
7783
 
                                                {
7784
 
                                                        if (o->m_pCDF->m_i3DSliceIntervals[z3] != 0)
7785
 
                                                        {
7786
 
                                                                if (z2 != 0)
7787
 
                                                                        mprintf(WHITE,"    * Creating channel %d smooth grade %d slices...\n",z3+1,z2);
7788
 
                                                                                else mprintf(WHITE,"    * Creating channel %d slices...\n",z3+1);
7789
 
 
7790
 
                                                                temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]];
7791
 
 
7792
 
                                                                tf = 0;
7793
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
7794
 
                                                                {
7795
 
                                                                        temp2dfa[z4] = new C2DF();
7796
 
                                                                        temp3DF->CreateSlice(z3,(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3],(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1,temp2dfa[z4]);
7797
 
                                                                        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);
7798
 
                                                                        if (temp2dfa[z4]->m_fMaxEntry > tf)
7799
 
                                                                                tf = temp2dfa[z4]->m_fMaxEntry;
7800
 
                                                                }
7801
 
 
7802
 
                                                                mprintf("      Setting common intensity range to 0 ... %.3f.\n",tf);
7803
 
 
7804
 
                                                                mprintf("      Writing out slice files...\n",z3+1);
7805
 
 
7806
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
7807
 
                                                                {
7808
 
                                                                        temp2dfa[z4]->m_fMinEntry = 0;
7809
 
                                                                        temp2dfa[z4]->m_fMaxEntry = tf;
7810
 
                                                                        if (z2 != 0)
7811
 
                                                                                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);
7812
 
                                                                                        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]));
7813
 
                                                                        mprintf("        %s ...\n",buf);
7814
 
                                                                        temp2dfa[z4]->WriteMathematicaNb("",buf,"",true);
7815
 
                                                                }
7816
 
 
7817
 
                                                                for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
7818
 
                                                                        delete temp2dfa[z4];
7819
 
 
7820
 
                                                                delete[] temp2dfa;
7821
 
                                                        }
7822
 
                                                }
7823
 
                                        }
7824
 
                                }
7825
 
 
7826
 
                                mprintf("    Writing out 2D projections...\n");
7827
 
                                for (z3=0;z3<3;z3++)
7828
 
                                {
7829
 
                                        mprintf(WHITE,"    * CDF 2D projection on channel %d\n",z3+1);
7830
 
                                        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);
7831
 
                                        switch(z3)
7832
 
                                        {
7833
 
                                                case 0:
7834
 
                                                        tia[0] = 0;
7835
 
                                                        tia[1] = 1;
7836
 
                                                        break;
7837
 
                                                case 1:
7838
 
                                                        tia[0] = 0;
7839
 
                                                        tia[1] = 2;
7840
 
                                                        break;
7841
 
                                                case 2:
7842
 
                                                        tia[0] = 1;
7843
 
                                                        tia[1] = 2;
7844
 
                                                        break;
7845
 
                                        }
7846
 
                                        for (z2=0;z2<2;z2++)
7847
 
                                        {
7848
 
                                                if (g_iObsChannel[tia[z2]] == 0)
7849
 
                                                {
7850
 
                                                        if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
7851
 
                                                        {
7852
 
                                                                mprintf("        Correcting radial distribution for CDF channel %d...\n",z2+1);
7853
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
7854
 
                                                        }
7855
 
                                                }
7856
 
                                                if (g_iObsChannel[tia[z2]] == 1)
7857
 
                                                {
7858
 
                                                        if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
7859
 
                                                        {
7860
 
                                                                mprintf("        Correcting angular distribution for CDF channel %d...\n",z2+1);
7861
 
                                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
7862
 
                                                        }
7863
 
                /*                                      if (o->m_pADF[z2]->m_bMirror)
7864
 
                                                        {
7865
 
                                                                mprintf("        Making channel %d mirror-symmetric...\n",z2+1);
7866
 
                                                                if (o->m_pADF[z2]->m_bCosine)
7867
 
                                                                        o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
7868
 
                                                                                else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
7869
 
                                                        }*/
7870
 
                                                }
7871
 
                                        }
7872
 
                                        o->m_pCDF->m_fFactor = 1.0;
7873
 
                                        switch(o->m_pCDF->m_iNormalize)
7874
 
                                        {
7875
 
                                                case 2:
7876
 
                                                        mprintf("        Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
7877
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7878
 
                                                        break;
7879
 
                                                case 1:
7880
 
                                                        mprintf("        Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
7881
 
                                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7882
 
                                                        break;
7883
 
                                                case 0:
7884
 
                                                        mprintf("        Not normalizing this CDF.\n");
7885
 
                                                        break;
7886
 
                                        }
7887
 
                                        mprintf("        Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
7888
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->Write(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_triples.csv");
7889
 
                                        mprintf("        Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
7890
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCSV(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_matrix.csv");
7891
 
                                        mprintf("        Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
7892
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteMathematicaNb(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,".nb",false);
7893
 
                                        mprintf("        Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
7894
 
                                        o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCombinedPlot(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_combined.agr");
7895
 
                                        if (o->m_pCDF->m_iHistogramRes != 0)
7896
 
                                        {
7897
 
                                                mprintf("    Calculating Histogram...\n");
7898
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->CalcHistogram();
7899
 
                                                sprintf(buf,"his_%s",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName);
7900
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
7901
 
                                                o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteHistogram(buf,multibuf,".csv");
7902
 
                                        }
7903
 
                                }
7904
 
                        } // END IF CHANNELS == 3
7905
 
_skipsdf:;
7906
 
                } // END IF CDF
7907
 
 
7908
 
                if (g_bRevSDF)
7909
 
                {
7910
 
                        mprintf(WHITE,"* Pseudo SDF\n");
7911
 
                        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);
7912
 
                        if (o->m_pRevSDF->m_p2DF->m_fBinEntries == 0)
7913
 
                        {
7914
 
                                eprintf("    There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
7915
 
                                goto _skiprevsdf;
7916
 
                        }
7917
 
                        mprintf("    Normalizing integral value to %.2f.\n",1000000.0f);
7918
 
                        o->m_pRevSDF->m_p2DF->NormalizeBinIntegral(1000000.0f);
7919
 
                        if (o->m_pRevSDF->m_bDrawAtoms)
7920
 
                        {
7921
 
                                mprintf("    Inserting reference atoms into the Pseudo SDF plot...\n");
7922
 
 
7923
 
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius == 0)
7924
 
                                        o->m_pRevSDF->m_p2DF->AddCircle(0,0,50.0,0.4,0.4,0.4);
7925
 
                                                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);
7926
 
 
7927
 
                                if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius == 0)
7928
 
                                        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);
7929
 
                                                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);
7930
 
                        }
7931
 
                        mprintf("    Saving PseudoSDF triples as \"%s%s_triples.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
7932
 
                        o->m_pRevSDF->m_p2DF->Write(o->m_pRevSDF->m_sName,multibuf,"_triples.csv");
7933
 
                        mprintf("    Saving PseudoSDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
7934
 
                        o->m_pRevSDF->m_p2DF->WriteCSV(o->m_pRevSDF->m_sName,multibuf,"_matrix.csv");
7935
 
                        mprintf("    Saving PseudoSDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pRevSDF->m_sName,multibuf);
7936
 
                        o->m_pRevSDF->m_p2DF->WriteMathematicaNb(o->m_pRevSDF->m_sName,multibuf,".nb",false);
7937
 
                        if (o->m_pRevSDF->m_iHistogramRes != 0)
7938
 
                        {
7939
 
                                mprintf("    Calculating Histogram...\n");
7940
 
                                o->m_pRevSDF->m_p2DF->CalcHistogram();
7941
 
                                sprintf(buf,"his_%s",o->m_pRevSDF->m_sName);
7942
 
                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
7943
 
                                o->m_pRevSDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
7944
 
                        }
7945
 
                        if (o->m_pRevSDF->m_bCreateRevSDF)
7946
 
                        {
7947
 
                                mprintf("    Creating volumetric Revolution SDF...\n");
7948
 
                                o->m_pRevSDF->CreateRevSDF();
7949
 
                                sprintf(buf,"revsdf_ref_%s.xyz",o->m_pRevSDF->m_sName);
7950
 
                                mprintf("    Saving Revolution SDF reference structure as \"%s\"...\n",buf);
7951
 
                                a = OpenFileWrite(buf,true);
7952
 
                                fprintf(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);
7953
 
                                fclose(a);
7954
 
                                for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7955
 
                                {
7956
 
                                        try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
7957
 
                                        if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7958
 
                                        
7959
 
                                        tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
7960
 
                                        if (z2 != 0)
7961
 
                                        {
7962
 
                                                tempSDF->Smooth(z2);
7963
 
                                                sprintf(buf,".s%d%s.plt",z2,multibuf);
7964
 
                                        } else sprintf(buf,"%s.plt",multibuf);
7965
 
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
7966
 
                                        tempSDF->WritePLT("revsdf_",o->m_pRevSDF->m_sName,buf,true);
7967
 
 
7968
 
                                        if (z2 != 0)
7969
 
                                                sprintf(buf,".s%d%s.cube",z2,multibuf);
7970
 
                                                        else sprintf(buf,"%s.cube",multibuf);
7971
 
                                        mprintf("    Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
7972
 
                                        tempSDF->WriteCube("revsdf_",o->m_pRevSDF->m_sName,buf,true);
7973
 
 
7974
 
                                        if (z2 != 0)
7975
 
                                                sprintf(buf,".s%d%s.his",z2,multibuf);
7976
 
                                                        else sprintf(buf,"%s.his",multibuf);
7977
 
                                        mprintf("    Saving Revolution SDF Histogram as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
7978
 
                                        tempSDF->CalcHistogram();
7979
 
                                        tempSDF->WriteHistogram("revsdf_",o->m_pRevSDF->m_sName,buf);
7980
 
                                        if (o->m_pRevSDF->m_iHistogramRes != 0)
7981
 
                                        {
7982
 
                                                mprintf("    Calculating Histogram...\n");
7983
 
                                                tempSDF->CalcHistogram();
7984
 
                                                sprintf(buf2,"his_revsdf_%s",o->m_pRevSDF->m_sName);
7985
 
                                                mprintf("    Saving Histogram as \"%s%s.csv\"...\n",buf2,buf);
7986
 
                                                tempSDF->WriteHistogram(buf2,buf,".csv");
7987
 
                                        }
7988
 
                                }
7989
 
                        }
7990
 
_skiprevsdf:;
7991
 
                } // END IF REVSDF
7992
 
        }
7993
 
 
7994
 
        if (g_bSDF || g_bAvg || g_bVoidSDF)
7995
 
        {
7996
 
                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);
7997
 
                strtolower(buf);
7998
 
                mprintf("\n*** Reference molecule ***\n");
7999
 
                FreeFileName(buf);
8000
 
                mprintf("Saving reference molecule as \"%s\"...",buf);
8001
 
                a = OpenFileWrite(buf,true);
8002
 
                if (a == NULL)
8003
 
                {
8004
 
                        eprintf("\nError: Could not open %s for writing.\n",buf);
8005
 
                        return 0;
8006
 
                }
8007
 
                if (!g_bSaveVirtAtoms)
8008
 
                        fprintf(a,"  %d \n\n",(int)(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes-((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize()));
8009
 
                                else fprintf(a,"  %d \n\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
8010
 
                cc = 0;
8011
 
                for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
8012
 
                {
8013
 
                        if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
8014
 
                                continue;
8015
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
8016
 
                        {
8017
 
                                if (g_bMiddleAvg)
8018
 
                                {
8019
 
                                        g_pRefMol[cc][0] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8020
 
                                        g_pRefMol[cc][1] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8021
 
                                        g_pRefMol[cc][2] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8022
 
                                }
8023
 
                                if (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType)
8024
 
                                        fprintf(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);
8025
 
                                                else fprintf(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);
8026
 
                                cc++;
8027
 
                        }
8028
 
                }
8029
 
                fclose(a);
8030
 
                mprintf("Done.\n");
8031
 
                if (g_iSwapAtoms)
8032
 
                {
8033
 
                        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);
8034
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
8035
 
                        {
8036
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
8037
 
                                {
8038
 
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
8039
 
                                                mprintf(" ");
8040
 
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);  
8041
 
                                        if (z3 < 10)
8042
 
                                                mprintf(" ");
8043
 
                                }
8044
 
                        }
8045
 
                        mprintf("\n");
8046
 
                        cc = 0;
8047
 
                        for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
8048
 
                        {
8049
 
                                for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
8050
 
                                {
8051
 
                                        mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
8052
 
                                        if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
8053
 
                                                mprintf(" ");
8054
 
                                        if (z3 < 9)
8055
 
                                                mprintf(" ");
8056
 
                                        cc2 = 0;
8057
 
                                        for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
8058
 
                                        {
8059
 
                                                for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
8060
 
                                                {
8061
 
                                                        if ((z2 == z4) && (z3 == z5))
8062
 
                                                        {
8063
 
                                                                mprintf(" *** ");
8064
 
                                                                goto _swm;
8065
 
                                                        }
8066
 
                                                        if (g_pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] != 0)
8067
 
                                                                mprintf("%3.0f%c ",(double)g_pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] * 100.0f / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize(),'%');
8068
 
                                                                        else mprintf("  -  ");
8069
 
_swm:
8070
 
                                                        cc2++;
8071
 
                                                }
8072
 
                                        }       
8073
 
                                        mprintf("\n");
8074
 
                                        cc++;
8075
 
                                }
8076
 
                        }
8077
 
                }
8078
 
        }
8079
 
_ende:
8080
 
 
8081
 
        if (g_bMultiInterval)
8082
 
        {
8083
 
                mprintf("\n");
8084
 
                mprintf(YELLOW,"***********************************************\n");
8085
 
                mprintf(YELLOW,"*** Interval %2d (%6d - %6d) finished. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
8086
 
                mprintf(YELLOW,"***********************************************\n\n");
8087
 
                multicounter++;
8088
 
                if (multicounter < g_laMultiIntervalStart.GetSize())
8089
 
                        goto _multiintervalstart;
8090
 
        }
8091
 
 
8092
 
/*      if (g_bSDF)
8093
 
                delete g_pSDFBin;
8094
 
        if (g_bRDF)
8095
 
                delete g_pRDFBin;*/
8096
 
 
8097
 
        g_iEndTime = time(NULL);
8098
 
        if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
8099
 
        {
8100
 
                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);
8101
 
                mprintf(WHITE,"  (%.3f steps per second)\n\n",g_iSteps/g_iStride/((double)g_iEndTime-g_iStartTime));
8102
 
        } else mprintf("\n");
8103
 
 
8104
 
        WriteCredits();
8105
 
 
8106
 
        if (g_bSMode)
8107
 
        {
8108
 
                PrintSMode();
8109
 
        } else
8110
 
        {
8111
 
                mprintf(WHITE,"*** The End ***\n\n");
8112
 
        }
8113
 
        UninstallSignalHandler();
8114
 
        if (g_fInput != NULL)
8115
 
                fclose(g_fInput);
8116
 
        if (g_pDatabase != NULL)
8117
 
        {
8118
 
                delete g_pDatabase;
8119
 
                g_pDatabase = NULL;
8120
 
        }
8121
 
        if (g_pTempTimestep != NULL)
8122
 
        {
8123
 
                delete g_pTempTimestep;
8124
 
                g_pTempTimestep = NULL;
8125
 
        }
8126
 
        if (apfa != NULL)
8127
 
        {
8128
 
                delete[] apfa;
8129
 
                apfa = NULL;
8130
 
        }
8131
 
        if (tda != NULL)
8132
 
        {
8133
 
                delete[] tda;
8134
 
                tda = NULL;
8135
 
        }
8136
 
        RemoveAllAnalyses();
8137
 
        RemoveAllElements();
8138
 
        RemoveAllAtoms();
8139
 
        RemoveAllMolecules();
8140
 
        RemoveAllObservations();
8141
 
        BTOUT;
8142
 
        return 0;
8143
 
}