1
/*****************************************************************************
2
TRAVIS - Trajectory Analyzer and Visualizer
3
Copyright (C) 2009-2012 Martin Brehm
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.
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.
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
*****************************************************************************/
22
#include "statistics.h"
23
#include "maintools.h"
26
#include "lmwrapper.h"
38
/***************************************************************************************************************
39
********************** Beginn Quellcode ***********************************************************************
40
***************************************************************************************************************/
42
int main(int argc, const char *argv[])
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;
54
CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
56
double tf, tf2, tfr, tf3, tf4, tfs;
61
CSingleMolecule *sm, *smfix, *sm2, *tsm;
63
unsigned long t0, t1, eta;
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"
76
CAtomGroup *atgr, *ag;
79
bool secondmolrun, tb;
85
CxFloatArray tempfa, tempfa2, *ptfa;
86
CxFloatArray *ptfa2, *ptfa3;
89
C2DF *temp2df, *tempc2df, **temp2dfa;
98
CMicroHetObservation *mho;
101
g_bUnknownElements = false;
106
g_iColorIntensity = 1;
107
g_bNPT = true; // Nur anfaenglich
114
g_bClusterAnalysis = false;
115
g_bNeedMoleculeWrap = false;
116
g_bDipoleDefined = false;
117
g_bDipolGrimme = false;
119
g_fTimestepLength = 0;
121
// mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
123
/* CClusterAnalysis *can;
124
can = new CClusterAnalysis();
129
can->AddParticle(rand()%20,rand()%20,rand()%20);
135
can->DumpAgr("C:\\Software\\test.csv");
142
CreateTicks(0,540,maj,min);
145
/* CExtendedCondition *ec;
147
ec = new CExtendedCondition();
164
printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
168
double *px, *py, *pp, r, integral;
170
px = new double[100];
171
py = new double[100];
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);
187
w.Fit_TriExp(100,px,py,pp,r,integral);
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;
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));
211
df3->WritePLT("","C:\\test.plt","",true);
212
df3->WriteCube("","C:\\test.cube","",true);
220
mdf->m_iResolution = 20;
224
for (z=0;z<1000000;z++)
225
mdf->AddToBin(z/999999.0);
226
mdf->Write("","D:\\Software\\out.csv","");
229
/* CAutoCorrelation *ac;
231
ac = new CAutoCorrelation();
237
ptfa = new CxFloatArray();
239
ptfa2 = new CxFloatArray();
243
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
245
ac->AutoCorrelate(ptfa,ptfa2);
247
mprintf("Classic:\n");
249
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
254
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
256
ac->AutoCorrelate(ptfa,ptfa2);
260
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
269
fft->PrepareFFT_R2C(300);
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);
280
mprintf("%03d: % 10.6f % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
285
/* CxVector3 v1, v2, v3, v;
287
v1 = CxVector3(0,0,0);
288
v2 = CxVector3(1,0,0);
289
v3 = CxVector3(1,1,0);
291
v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
299
fft->PrepareFFT_C2C(20);
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));
308
fft->m_pInput[2*z] = 0;
309
fft->m_pInput[2*z+1] = 0;
311
printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
313
printf("Transforming...\n");
316
printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
322
/* vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
323
vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
325
tf = DotP(vec0,vec1);
327
tf2 = Angle_Deg(vec0,vec1);
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);
331
printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
335
/* CxVector3 a1, a2, a3;
337
a1 = CxVector3(0,1.0,0);
338
a2 = CxVector3(0,-1.0,0.0001);
339
a3 = CxVector3(1.0,0,0);
341
mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
348
// g_iMaxMSDDepth = 0;
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__);
355
strcpy(g_sExeName,argv[0]);
359
g_bAbortAnalysis = true;
360
g_bBetaFeatures = false;
362
InstallSignalHandler();
366
g_pLogFile = OpenFileWrite("travis.log",true);
373
#ifdef TARGET_WINDOWS
374
g_sHomeDir = getenv("APPDATA");
375
if (GetComputerName(buf,&tul))
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__);
380
strcpy(g_sHostName,buf);
381
} else g_sHostName = NULL;
383
g_sWorkingDir = _getcwd(NULL,1024);
384
#elif defined(TARGET_LINUX)
385
g_sHomeDir = getenv("HOME");
387
if (gethostname(buf,256)==0)
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__);
392
strcpy(g_sHostName,buf);
393
} else g_sHostName = NULL;
395
g_sWorkingDir = getcwd(NULL,1024);
399
g_sWorkingDir = NULL;
402
try { g_pDatabase = new CDatabase(); } catch(...) { g_pDatabase = NULL; }
403
if (g_pDatabase == NULL) NewException((double)sizeof(CDatabase),__FILE__,__LINE__,__PRETTY_FUNCTION__);
406
// LoadSettings(argv[0]);
408
/* CGrace *g = new CGrace();
410
g->m_fMinValX = 1.37;
411
g->m_fMaxValX = 2.53;
413
g->m_fMaxValY = 8337;
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);
419
/* CDatabaseTable *dt = new CDatabaseTable();
421
dt->AddInt(0,0,12345);
422
dt->AddInt(1,1,123456);
425
dt->AddInt(4,4,123456789);
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);
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,"^^");
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);
446
a = fopen("table.dat","wt");
447
dt->DumpOutputFile(a);
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;
469
g_fSaveCondFile = NULL;
470
g_bSaveCondSnapshot = false;
471
g_bScanVelocities = false;
472
g_bSilentProgress = false;
473
ReactSecondRun = false;
474
g_bCreateRevSDF = false;
477
ParsePassiveArgs(argc,argv);
487
else DipolGrimme(argv[2]);
491
if (!ParseArgs(argc,argv))
494
if (strlen(g_sInputTraj) == 0)
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] ");
506
strcpy(g_sInputTraj,buf);
509
if (!DetermineTrajFormat())
512
g_bInputRedirected = false;
513
if (g_sInputFile != NULL)
515
g_fInputFile = fopen(g_sInputFile,"rt");
516
if (g_fInputFile == NULL)
518
eprintf("Could not open input file \"%s\".\n",g_sInputFile);
521
g_bInputRedirected = true;
524
if (IsTTY(stdin) && (!g_bInputRedirected))
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__);
531
today = localtime(<ime);
532
strcpy(buf,asctime(today));
533
buf[strlen(buf)-1] = 0;
534
inpprintf("! Input file written at %s.\n",buf);
536
} else g_bInputRedirected = true;
538
if (g_sInputTraj[0] != 0)
540
mprintf("Opening position trajectory %s ...",g_sInputTraj);
541
if (!FileExist(g_sInputTraj))
543
eprintf("\nError. File does not exist or cannot be read.\n");
547
if (g_sInputVel[0] != 0)
549
mprintf("Opening velocity trajectory %s ...",g_sInputVel);
550
if (!FileExist(g_sInputVel))
552
eprintf("\nError. File does not exist or cannot be read.\n");
556
if (g_sInputForce[0] != 0)
558
mprintf("Opening Force Trajectory %s ...",g_sInputForce);
559
if (!FileExist(g_sInputForce))
561
eprintf("\nError. File does not exist or cannot be read.\n");
566
if (g_sInputTraj[0] == 0)
568
eprintf("Error: No trajectory file specified.\n");
571
g_fPos = fopen(g_sInputTraj,"rt");
574
eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
578
if (!g_TimeStep.ReadTimestep(g_fPos,true))
580
eprintf("\nError reading first time step from trajectory. Leaving.\n");
584
g_TimeStep.CalcMinMax();
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);
595
mprintf("\nCould not determine trajectory file size.\n\n");
599
g_iTrajSteps = fpos2/fpos;
600
mprintf("\nTrajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
603
g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
605
if (g_iGesAtomCount == 0)
607
eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
611
g_iGesVirtAtomCount = g_iGesAtomCount;
612
g_TimeStep.AddAtoms();
613
if (g_bUnknownElements)
617
mprintf(WHITE,"%d atoms in the system: ",g_iGesAtomCount);
618
for (z=0;z<g_oaAtoms.GetSize();z++)
620
mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
621
if (z < (int)g_oaAtoms.GetSize()-1)
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]);
629
g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
633
/****************************/
638
/************** Beginn Analyse **************/
640
g_iStartTime = time(NULL);
642
if (g_iMaxStep != -1)
644
g_iTrajSteps = g_iMaxStep;
647
if (g_iTrajSteps != -1)
649
g_iTrajSteps -= g_iBeginStep;
650
if (g_iTrajSteps < 1)
655
if (g_bResp || g_bFFGen)
662
if (g_bMultiInterval)
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;
674
mprintf(WHITE,">>> Initialization >>>\n\n");
676
g_bAbortAnalysis = false;
678
g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
681
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
684
if ((g_bNPT) && (g_sNPTFile[0] != 0))
686
g_fNPTFile = fopen(g_sNPTFile,"rt");
687
if (g_fNPTFile == NULL)
689
eprintf("\nCould not open cell vector file.\n");
693
if (g_iBeginStep != 0)
695
mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
697
for (z=0;z<g_iBeginStep;z++)
699
if (fmod(z,g_iBeginStep/50.0) < 1.0)
701
if (!g_TimeStep.SkipTimestep(g_fPos))
703
eprintf("\nError: Unexpected end of position trajectory.\n");
706
if ((g_bNPT) && (g_sNPTFile[0] != 0))
707
fgets(buf,256,g_fNPTFile);
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);
714
// g_fPos = fopen(g_sInputTraj,"rb");
715
// mprintf("Seek: %d.\n",g_iFastForwardPos);
716
// fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
718
g_TimeStep.ReadTimestep(g_fPos,true);
719
if ((g_bNPT) && (g_sNPTFile[0] != 0))
721
g_TimeStep.ReadCellVector(g_fNPTFile);
725
g_TimeStep.CalcCenters();
728
g_TimeStep.UniteMolecules(false);
730
if (g_bScanVelocities)
732
mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
734
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
737
eprintf("Error. Input Trajectory suddenly vanished ^^\n");
740
g_iSteps = 0; // Der Zaehler der Zeitschritte
741
if (g_iScanVelStart != 0)
743
mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
745
for (z=0;z<g_iScanVelStart;z++)
747
if (fmod(z,g_iScanVelStart/60.0) < 1.0)
749
if (!g_TimeStep.SkipTimestep(g_fPos))
752
mprintf(WHITE,"]\n");
755
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
757
if (!g_TimeStep.ReadTimestep(g_fPos,false))
759
if (g_TimeStep.m_iGesAtomCount == 0)
762
g_TimeStep.CalcCenters();
764
if ((g_iSteps % 4) == 0)
766
if ((g_iSteps % 200) == 0)
767
mprintf("\nStep %6d...",g_iSteps);
773
if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
780
mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
781
} // END IF g_bScanVelocities
784
if (g_bSaveRefEnv && (g_iNbhMode == 1))
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)
790
mprintf("Adding reference molecule to neighborhood...\n");
791
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
798
if (g_bVACF && g_bGlobalVACF)
800
mprintf("Initializing Global Velocity Autocorrelation Function...\n");
801
g_pGlobalVACF->Create();
803
if (!g_bVACFCacheMode)
805
if (g_pGlobalVACF->m_iSize > g_iStepHistory)
806
g_iStepHistory = g_pGlobalVACF->m_iSize;
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++)
812
try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
813
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
815
if (g_iTrajSteps != -1)
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);
825
if (g_bSaveCondSnapshot)
826
g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
828
for (z=0;z<g_oaObserv.GetSize();z++)
830
mprintf("Initializing Observation %d...\n",z+1);
831
o = (CObservation*)g_oaObserv[z];
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++)
838
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
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__);
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]");
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__);
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();
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__);
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();
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__);
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();
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__);
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();
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);
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__);
925
if (o->m_pSDF->m_bVdWSpheres)
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__);
931
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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)
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++)
954
try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
955
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
957
if (g_iTrajSteps != -1)
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);
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__);
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)
973
if (o->m_pRDyn->m_iDepth > g_iStepHistory)
974
g_iStepHistory = o->m_pRDyn->m_iDepth;
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();
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__);
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;
1003
mprintf(" Creating Neighborhood Analysis...\n");
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__);
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;
1012
o->m_pNbAnalysis->m_pNPFCount->Create();
1014
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1015
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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");
1023
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1025
for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
1027
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1028
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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");
1036
o->m_pNbAnalysis->m_oaDF.Add(tdf);
1038
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1039
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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");
1047
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1051
for (z0=0;z0<g_iCDFChannels;z0++)
1053
if (g_bRDF && (o->m_pRDF[z0] != NULL))
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)");
1063
if (o->m_bObsCertain && o->m_bDecompDist)
1065
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
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__);
1070
for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
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__);
1076
for (z=0;z<o->m_waObsRefList.GetSize();z++)
1078
for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
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);
1085
sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
1087
o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waObsShowList.GetSize()+z2,buf);
1090
} else if (o->m_bDecompType)
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++)
1096
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z*2];
1097
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1099
for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1100
if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
1102
z3 = o->m_waDecompTypeRefList.GetSize();
1103
o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
1105
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
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;
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++)
1120
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z*2+1];
1121
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1123
for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
1124
if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
1126
z3 = o->m_waDecompTypeObsList.GetSize();
1127
o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
1129
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
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;
1138
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
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__);
1143
for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
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__);
1149
for (z=0;z<o->m_waDecompTypeRefList.GetSize();z++)
1151
for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
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);
1157
} else o->m_pRDF[z0]->m_pRDF->Create();
1159
if (o->m_bSecondShowMol && (z0 == 1))
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__);
1164
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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__);
1174
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
1182
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
1194
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
1200
if (o->m_bCombinedPlot)
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);
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__);
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++)
1215
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1217
/* for (z4=0;z4<templa.GetSize()/2;z4++)
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)
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;
1233
for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
1235
g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
1236
for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
1238
a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
1239
for (z1a=0;z1a<a1->GetSize();z1a++)
1241
g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
1242
for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
1244
a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
1245
for (z2a=0;z2a<a2->GetSize();z2a++)
1247
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
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)
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);
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);
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]");
1282
o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
1285
o->m_pDipDF[z0]->InitDeriv();
1288
if (g_bADF && (o->m_pADF[z0] != NULL))
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))
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__);
1307
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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__);
1317
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
1325
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
1337
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
1343
if (o->m_bCombinedPlot)
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__);
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++)
1352
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1354
for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
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)
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);
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);
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]");
1375
o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
1378
o->m_pDipDF[z0]->InitDeriv();
1381
if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
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))
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__);
1398
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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__);
1408
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
1416
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
1428
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
1434
if (o->m_bCombinedPlot)
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__);
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++)
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)
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);
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]");
1460
o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
1463
o->m_pDipDF[z0]->InitDeriv();
1466
if (g_bVDF && (o->m_pVDF[z0] != NULL))
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))
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__);
1483
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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__);
1493
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
1501
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
1513
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
1519
if (o->m_bCombinedPlot)
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__);
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++)
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)
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);
1539
// o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
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]");
1547
o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
1550
o->m_pVDF[z0]->InitDeriv();
1553
if (g_bDDF && (o->m_pDDF[z0] != NULL))
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))
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__);
1572
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
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__);
1582
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
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__);
1588
if (o->m_pDDF[z0]->m_bRotate)
1590
for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
1592
o->m_pDDF[z0]->m_faLastData.Add(0);
1593
o->m_pDDF[z0]->m_laRotation.Add(0);
1599
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
1611
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
1617
if (o->m_bCombinedPlot)
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__);
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++)
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)
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);
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);
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]");
1645
o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
1648
o->m_pDDF[z0]->InitDeriv();
1654
mprintf(" Creating CDF...\n");
1655
if (g_iCDFChannels == 2)
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__);
1661
for (z2=0;z2<2;z2++)
1663
o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1664
switch(g_iObsChannel[z2])
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;
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;
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;
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;
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;
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])
1708
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
1709
o->m_pCDF->m_p2DF->SetLabelX(buf2);
1712
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
1713
o->m_pCDF->m_p2DF->SetLabelX(buf2);
1716
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
1717
o->m_pCDF->m_p2DF->SetLabelX(buf2);
1720
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
1721
o->m_pCDF->m_p2DF->SetLabelX(buf2);
1724
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
1725
o->m_pCDF->m_p2DF->SetLabelX(buf2);
1728
switch(g_iObsChannel[1])
1731
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
1732
o->m_pCDF->m_p2DF->SetLabelY(buf2);
1735
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
1736
o->m_pCDF->m_p2DF->SetLabelY(buf2);
1739
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
1740
o->m_pCDF->m_p2DF->SetLabelY(buf2);
1743
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
1744
o->m_pCDF->m_p2DF->SetLabelY(buf2);
1747
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
1748
o->m_pCDF->m_p2DF->SetLabelY(buf2);
1751
} // END IF CHANNELS == 2
1753
if (g_iCDFChannels == 3)
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__);
1759
for (z2=0;z2<g_iCDFChannels;z2++)
1761
o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1762
switch(g_iObsChannel[z2])
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;
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;
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;
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;
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;
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])
1806
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
1807
o->m_pCDF->m_p3DF->SetLabelX(buf2);
1810
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
1811
o->m_pCDF->m_p3DF->SetLabelX(buf2);
1814
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
1815
o->m_pCDF->m_p3DF->SetLabelX(buf2);
1818
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
1819
o->m_pCDF->m_p3DF->SetLabelX(buf2);
1822
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
1823
o->m_pCDF->m_p3DF->SetLabelX(buf2);
1826
switch(g_iObsChannel[1])
1829
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
1830
o->m_pCDF->m_p3DF->SetLabelY(buf2);
1833
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
1834
o->m_pCDF->m_p3DF->SetLabelY(buf2);
1837
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
1838
o->m_pCDF->m_p3DF->SetLabelY(buf2);
1841
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
1842
o->m_pCDF->m_p3DF->SetLabelY(buf2);
1845
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
1846
o->m_pCDF->m_p3DF->SetLabelY(buf2);
1849
switch(g_iObsChannel[2])
1852
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
1853
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1856
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
1857
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1860
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
1861
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1864
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
1865
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1868
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
1869
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
1873
// Fuer jede C3DF noch die 3 C2DFs erzeugen
1874
for (z3=0;z3<3;z3++)
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__);
1895
for (z2=0;z2<2;z2++)
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]])
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;
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;
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;
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;
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;
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]])
1942
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
1943
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1946
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
1947
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
1950
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
1951
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
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);
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);
1962
switch(g_iObsChannel[tia[1]])
1965
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
1966
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1969
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
1970
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
1973
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
1974
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
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);
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);
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__);
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);
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__);
1995
strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
1997
} // END IF CHANNELS == 3
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__);
2002
strcpy(o->m_pCDF->m_sShortName,buf);
2003
sprintf(buf,"cdf_%d",g_iCDFChannels);
2004
strcat(buf,o->m_pCDF->m_sShortName);
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__);
2009
strcpy(o->m_pCDF->m_sName,buf);
2010
if (o->m_pCDF->m_bDumpDat)
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");
2018
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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__);
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);
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__);
2030
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
2036
if (o->m_pCDF->m_bTDAnimation)
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__);
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++)
2045
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
2047
for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
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);
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);
2067
mprintf(" Creating VACF...\n");
2068
o->m_pVACF->Create();
2069
if (g_bVACFCacheMode)
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++)
2074
try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
2075
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2077
if (g_iTrajSteps != -1)
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);
2086
if (o->m_pVACF->m_iSize > g_iStepHistory)
2087
g_iStepHistory = o->m_pVACF->m_iSize;
2093
mprintf(" Creating DipACF...\n");
2094
o->m_pDipACF->Create();
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)
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++)
2109
try { ptfa = new CxFloatArray(); } catch(...) { ptfa = NULL; }
2110
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2112
if (g_iTrajSteps != -1)
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);
2119
if (o->m_pMSD->m_bSplit)
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__);
2125
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
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__);
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();
2138
if (!g_bMSDCacheMode)
2140
if (o->m_pMSD->m_iResolution > g_iStepHistory)
2141
g_iStepHistory = o->m_pMSD->m_iResolution;
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();
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__);
2167
mprintf(" Creating BondACF...\n");
2168
for (z=0;z<g_oaSingleMolecules.GetSize();z++)
2170
sm = (CSingleMolecule*)g_oaSingleMolecules[z];
2171
for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
2173
bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
2174
for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
2176
if (g_iTrajSteps != -1)
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);
2186
if (g_bClusterAnalysis)
2188
mprintf(" Creating Cluster Analysis...\n");
2189
g_pClusterAnalysis->Create();
2194
mprintf(" Creating Microheterogeneity Analysis...\n");
2195
g_pMicroHet->Create();
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
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])];
2209
mat.MatUltra(vec2,vec3);
2211
// Jeden Atomtyp des Zielmolekuels durchgehen
2212
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
2214
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
2216
vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[z3])->GetAt(z4)];
2218
g_pRefMol[cc] = mat * vec2;
2223
} // Ende Referenzbestimmung
2225
unsigned int *g_pSwapMatrix;
2229
mprintf("Creating Reference Molecule Swap Matrix...\n");
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__);
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;
2238
g_iCurrentTimeStep = -1;
2239
g_iNextTimeStep = -1;
2240
g_iLastTimeStep = -1;
2242
try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
2243
if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2245
if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
2247
mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
2249
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
2252
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
2255
g_iSteps = 0; // Der Zaehler der Zeitschritte
2256
if (g_iScanNbhStart != 0)
2258
mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
2259
mprintf(WHITE," [");
2260
for (z=0;z<g_iScanNbhStart;z++)
2262
if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
2264
if (!g_TimeStep.SkipTimestep(g_fPos))
2267
mprintf(WHITE,"]\n");
2269
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2271
for (z=0;z<(g_iScanNbhStride-1);z++)
2272
if (!g_TimeStep.SkipTimestep(g_fPos))
2274
if (!g_TimeStep.ReadTimestep(g_fPos,false))
2276
if (g_TimeStep.m_iGesAtomCount == 0)
2278
// g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
2279
// g_TimeStep.UniteMolecules();
2280
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2281
g_TimeStep.CalcCenters();
2283
if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
2285
if ((g_iSteps % (200*g_iScanNbhStride)) == 0)
2286
mprintf("\nStep %6d...",g_iSteps);
2290
g_iSteps+=g_iScanNbhStride;
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])];
2294
// g_TimeStep.CenterPos(vec1);
2297
// g_TimeStep.FoldMolecules();
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);
2302
if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
2308
mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
2309
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
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++)
2316
if (g_pNbSet->m_oaConditionGroups[z] == NULL)
2318
cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
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__);
2323
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2325
cg->m_bAlwaysTrue[z2] = false;
2329
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2332
for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
2334
for (z4=0;z4<z2;z4++)
2337
if (cg->m_iPassCounter[z3] > ti)
2339
ti = cg->m_iPassCounter[z3];
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]]);
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;
2361
cg->m_bInactive = true;
2365
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2366
if (g_bSaveRefWithEnv)
2368
mprintf("Adding reference molecule to neighborhood...\n");
2369
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
2379
for (z=0;z<g_oaMolecules.GetSize();z++)
2381
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
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);
2394
g_pReact->InitMolecules(&g_TimeStep);
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)
2404
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2405
strcat(g_sRefEnv,buf2);
2407
/* if (!g_bDynamicNeighbor)
2408
strcat(g_sRefEnv,"static.");
2409
if (g_bRefEnvCenter)
2410
strcat(g_sRefEnv,"center.");
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);
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)
2430
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2431
strcat(g_sRefEnv,buf2);
2433
/* if (g_bRefEnvCenter)
2434
strcat(g_sRefEnv,"center.");
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);
2445
if (g_bSaveJustTraj)
2447
strcpy(buf,g_sInputTraj);
2448
p = strrchr(buf,'/');
2449
q = strrchr(buf,'\\');
2456
p = strrchr(buf2,'.');
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);
2467
mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
2471
mprintf(WHITE,"\n### Starting Second Pass ###\n");
2472
else mprintf(WHITE,"\n### Starting Main Analysis ###\n");
2475
if (!g_bMultiInterval || (multicounter == 0))
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");
2483
g_fPos = fopen(g_sInputTraj,"rb");
2486
eprintf("\nCould not open position trajectory.\n");
2489
if ((g_bNPT) && (g_sNPTFile[0] != 0))
2491
g_fNPTFile = fopen(g_sNPTFile,"rt");
2492
if (g_fNPTFile == NULL)
2494
eprintf("\nCould not open cell vector file.\n");
2499
if (g_bUseVelocities && (g_sInputVel[0] != 0))
2501
g_fVel = fopen(g_sInputVel,"rt");
2504
eprintf("\nCould not open velocity trajectory.\n");
2508
if (g_bUseForces && (g_sInputForce[0] != 0))
2510
g_fForce = fopen(g_sInputForce,"rt");
2511
if (g_fForce == NULL)
2513
eprintf("\nCould not open force trajectory.\n");
2518
// fff = fopen("dipole.txt","wt");
2520
if (g_iBeginStep != 0)
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)))
2527
mprintf(WHITE," [");
2528
for (z=0;z<g_iBeginStep;z++)
2530
/* if (!g_TimeStep.SkipTimestep(g_fPos))
2532
eprintf("Error. Unexpected end of position trajectory.\n");
2535
if (fmod(z,g_iBeginStep/60.0) < 1.0)
2538
if (!g_TimeStep.SkipTimestep(g_fVel))
2540
eprintf("Error. Unexpected end of velocity trajectory.\n");
2543
if (g_fForce != NULL)
2544
if (!g_TimeStep.SkipTimestep(g_fForce))
2546
eprintf("Error. Unexpected end of force trajectory.\n");
2549
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2550
fgets(buf,256,g_fNPTFile);
2552
mprintf(WHITE,"]\n");
2556
g_oaTimeSteps.SetSize(g_iStepHistory);
2557
for (z=0;z<g_iStepHistory;z++)
2558
g_oaTimeSteps[z] = NULL;
2560
g_iSteps = 0; // Der Zaehler der Zeitschritte
2561
g_iCurrentTimeStep = 0;
2565
g_iSaveCondCount = 0;
2567
try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
2568
if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2570
try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
2571
if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2573
try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
2574
if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2584
/*****************************************************************************
2585
*************** Beginn Hauptschleife *****************************************
2586
*****************************************************************************/
2588
g_iLastTimeStep = -1;
2590
g_bStepSkipped = false;
2591
g_iFirstStepSkipped = -1;
2593
while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2597
mprintf("\nEnd of trajectory file reached.\n");
2600
if (g_bAbortAnalysis)
2602
mprintf("\nAnalysis aborted by user.\n");
2605
g_iCurrentTimeStep++;
2606
if (g_iCurrentTimeStep >= g_iStepHistory)
2607
g_iCurrentTimeStep = 0;
2612
if (g_iDerivNext > 2)
2615
if (g_iDerivCurr > 2)
2618
if (g_iDerivLast > 2)
2622
for (z=0;z<(g_iStride-1);z++)
2624
if (!g_TimeStep.SkipTimestep(g_fPos))
2627
eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
2630
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2631
fgets(buf,256,g_fNPTFile);
2633
if (!g_TimeStep.SkipTimestep(g_fVel))
2635
eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
2638
if (g_fForce != NULL)
2639
if (!g_TimeStep.SkipTimestep(g_fForce))
2641
eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
2646
if (g_bUseVelocities || g_bUseForces)
2648
if (GetTimeStep(-1) == NULL)
2650
try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
2651
if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2653
if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
2657
mprintf("\nEnd of Trajectory File reached.\n");
2660
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
2663
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2664
GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
2665
if (g_bSkipDoubleSteps)
2667
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
2669
if (!g_bStepSkipped)
2671
g_bStepSkipped = true;
2672
g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
2673
mprintf("\nSkipping:");
2677
} else if (g_iFirstStepSkipped != -1)
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));
2683
g_iFirstStepSkipped = -1;
2685
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
2686
g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
2688
if (GetTimeStep(-1)->m_iGesAtomCount == 0)
2690
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
2693
GetTimeStep(-1)->UniteMolecules(false);
2695
GetTimeStep(-1)->CenterCOM();
2696
GetTimeStep(-1)->CalcCenters();
2700
GetTimeStep(-1)->ScanWannier(false);
2701
GetTimeStep(-1)->CalcDipoles();
2705
if (GetTimeStep(0) == NULL)
2707
try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
2708
if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2710
if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
2714
mprintf("\nEnd of trajectory file reached.\n");
2717
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
2720
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
2721
GetTimeStep(0)->ReadCellVector(g_fNPTFile);
2722
if (g_bSkipDoubleSteps)
2724
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
2726
// mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
2727
if (!g_bStepSkipped)
2729
g_bStepSkipped = true;
2730
g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
2731
mprintf("\nSkipping:");
2735
} else if (g_iFirstStepSkipped != -1)
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));
2741
g_iFirstStepSkipped = -1;
2743
// mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
2744
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
2745
g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
2747
if (GetTimeStep(0)->m_iGesAtomCount == 0)
2749
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
2752
if (!g_bSaveCoordsUnchanged)
2754
GetTimeStep(0)->UniteMolecules(false);
2756
GetTimeStep(0)->CenterCOM();
2758
GetTimeStep(0)->CalcCenters();
2762
GetTimeStep(0)->ScanWannier(false);
2763
GetTimeStep(0)->CalcDipoles();
2766
g_bWarnUnsteady = false;
2768
if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
2770
if ((g_iSteps == 0) || g_bStepSkipped)
2772
g_bStepSkipped = false;
2773
if (!g_bSilentProgress)
2774
mprintf("\nStep %6d ",g_iSteps);
2776
if (g_bAsciiArt && (!g_bSilentProgress))
2778
tc = g_oAsciiArt.GetChar();
2781
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
2783
if ((time(NULL) - t0) > 5)
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);
2790
mprintf("\nStep %6d ",g_iSteps);
2792
g_oAsciiArt.NewLine();
2793
} else mprintf("%c",tc);
2796
if (g_iDotCounter >= 50)
2799
if (!g_bSilentProgress)
2801
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
2803
if ((time(NULL) - t0) > 5)
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);
2810
mprintf("\nStep %6d ",g_iSteps);
2814
if (!g_bSilentProgress)
2817
if (FileExist("EXIT"))
2819
mprintf("\n\n*** File \"EXIT\" detected. Aborting analys. ***\n\n");
2825
if ((int)g_iSteps == /*showinterval**/g_iStride*50)
2830
else showinterval = (int)(20.0f/(t1-t0));
2831
if (showinterval == 0)
2836
g_iSteps += g_iStride;
2838
if (GetTimeStep(0)==NULL)
2841
if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
2844
if (g_bUseVelocities)
2849
} else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
2851
eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
2857
if (g_fForce == NULL)
2860
} else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
2862
eprintf("\nError reading force time step %d.\n",g_iSteps+1);
2869
if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
2871
if (g_iClusterPos >= g_iClusterCount)
2873
if (g_iaClusterSteps[g_iClusterPos] != (g_iSteps/g_iStride))
2878
if (g_bUnwrap && ((int)g_iSteps > g_iStride))
2879
// Nicht im ersten Schritt
2881
for (z=0;z<g_oaMolecules.GetSize();z++)
2883
m = (CMolecule*)g_oaMolecules[z];
2884
for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
2886
if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
2888
for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
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;
2910
g_pT2Timestep = GetTimeStep(0);
2911
for (z0=0;z0<g_oaObserv.GetSize();z0++)
2914
o = (CObservation*)g_oaObserv[z0];
2915
if (g_bMSDCacheMode)
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++)
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]);
2928
for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
2930
g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
2931
if (g_pTempTimestep == NULL)
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++)
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)));
2945
if (g_bSaveJustTraj)
2947
g_pTempTimestep->CopyFrom(GetTimeStep(0));
2949
if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
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);
2955
if (g_bFold && (!g_bSaveCoordsUnchanged))
2957
if (g_bFoldAtomwise)
2958
g_pTempTimestep->FoldAtoms();
2959
else g_pTempTimestep->FoldMolecules();
2962
if (!g_bCenterZero && (!g_bSaveCoordsUnchanged))
2963
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
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)
2971
for (z7=0;z7<g_oaAtoms.GetSize();z7++)
2973
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
2975
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
2976
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
2978
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
2980
if (atgr->m_baRealAtomType[z4] != z7)
2982
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
2983
for (z5=0;z5<tla->GetSize();z5++)
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))];
2987
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
2988
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
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);
3000
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3002
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3003
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3005
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3007
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3008
for (z5=0;z5<tla->GetSize();z5++)
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))];
3012
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3013
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
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);
3027
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3028
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
3030
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
3031
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
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]]));
3039
if (g_bKeepUnfoldedCoords)
3040
GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
3042
if (g_bAggregation || g_bNbExchange)
3044
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3046
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3048
o = (CObservation*)g_oaObserv[z0];
3049
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
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;
3056
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3058
o = (CObservation*)g_oaObserv[z0];
3060
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
3062
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
3064
o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix,g_bPeriodic);
3066
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3068
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
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]++;
3077
o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
3080
o->m_pDACF->UpdateNbEx(z2,g_pTempTimestep,dacfsub);
3084
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3086
o = (CObservation*)g_oaObserv[z0];
3087
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
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]++;
3095
} // END IF AGGREGATION OR NBEX
3099
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3100
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3102
o = (CObservation*)g_oaObserv[z6];
3104
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3106
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3108
if (o->m_pRDyn->m_iVecType == 0)
3110
o->m_pRDyn->BuildAtomList(sm,&templa);
3111
for (z4=0;z4<templa.GetSize();z4+=3)
3113
if (o->m_pRDyn->m_bOrtho)
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);
3121
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3122
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3126
if (g_bRDynCacheMode)
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]);
3134
for (z=0;z<o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z++)
3136
g_pT2Timestep = GetTimeStep(z*o->m_pRDyn->m_iStride);
3137
if (g_pT2Timestep == NULL)
3139
if (o->m_pRDyn->m_bOrtho)
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);
3147
vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3148
vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3152
o->m_pRDyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
3153
o->m_pRDyn->m_pCount[z]++;
3157
} else if (o->m_pRDyn->m_iVecType == 1)
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]);
3165
// fprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
3175
g_pT2Timestep = GetTimeStep(0);
3176
// mprintf("\nStep=%d, adding.",g_iSteps);
3179
if (g_bVACFCacheMode)
3181
for (z2=0;z2<g_iGesAtomCount;z2++)
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]);
3190
for (z=0;z<g_pGlobalVACF->m_iSize;z++)
3192
g_pTempTimestep = GetTimeStep(z);
3193
if (g_pTempTimestep == NULL)
3195
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
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]);
3204
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3206
o = (CObservation*)g_oaObserv[z6];
3207
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
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++)
3213
if (g_bVACFCacheMode)
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);
3224
o->m_pVACF->m_pCounter[z5] += o->m_pVACF->m_iShowAtomGes;
3225
for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
3227
g_pTempTimestep = GetTimeStep(z5);
3228
if (g_pTempTimestep == NULL)
3230
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
3232
o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
3242
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3245
g_pReact->WriteTrajec(g_pTempTimestep);
3248
g_pReact->ScanBonds(g_pTempTimestep,false);
3254
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3255
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
3257
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
3258
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3260
o = (CObservation*)g_oaObserv[z6];
3261
o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep,g_bPeriodic);
3262
o->m_pNbAnalysis->AnalyzeStep();
3271
if (g_bClusterAnalysis)
3273
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3274
g_pClusterAnalysis->Process(g_pTempTimestep);
3279
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3280
g_pTempTimestep->FoldAtomsPositive();
3281
g_pMicroHet->Process(g_pTempTimestep);
3286
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3287
g_pTempTimestep->FoldAtomsPositive();
3288
g_pVoroWrapper->Build(g_pTempTimestep);
3293
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3294
g_pTempTimestep->FoldAtomsPositive();
3295
g_pVoroAnalysis->Step(g_pTempTimestep);
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))
3303
if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
3305
g_pVoroAnalysis->m_pTempSDF->Clear();
3306
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3307
g_pTempTimestep->FoldAtomsPositive();
3308
for (z3=0;z3<g_iGesAtomCount;z3++)
3310
vec0 = g_pTempTimestep->m_vaCoords[z3];
3311
g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
3313
// g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
3319
if (g_iFixMol == -1)
3322
for (z6=0;z6<g_oaObserv.GetSize();z6++)
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;
3330
// Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
3331
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
3333
if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
3336
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
3340
if (g_iaClusterMol[g_iClusterPos] != z2)
3343
if (g_iClusterPos >= g_iClusterCount)
3347
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3349
/* for (z3=0;z3<g_iGesAtomCount;z3++)
3351
mprintf("\nAtom %4d: ",z3);
3352
g_pTempTimestep->m_vaCoords[z3].Dump();
3355
vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
3357
/* mprintf("\n\n%d, %d, vecc: ",g_iFixAtomType[0],g_iFixAtom[0]);
3361
if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
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);
3372
if (g_bCutCluster || (g_iNbhMode == 2))
3376
g_pNbSet->ResetAlwaysTrue();
3377
g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3378
if (g_bSaveRefWithEnv)
3379
g_pNbSet->AddMolecule(g_iFixMol,z2);
3381
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3384
if (g_laTDOSteps.Contains(g_iSteps-1))
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);
3395
// Legt vecc genau in den Ursprung des Koordinatensystems
3396
g_pTempTimestep->CenterPos(vecc);
3398
/* if (vecc.GetLength() > 100000.0f)
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]));
3407
if (g_bFoldAtomwise)
3408
g_pTempTimestep->FoldAtoms();
3409
else g_pTempTimestep->FoldMolecules();
3412
if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
3414
if (g_bCutCluster || (g_iNbhMode == 2))
3418
g_pNbSet->ResetAlwaysTrue();
3419
g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3420
if (g_bSaveRefWithEnv)
3421
g_pNbSet->AddMolecule(g_iFixMol,z2);
3424
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3425
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3428
if (g_laTDOSteps.Contains(g_iSteps-1))
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);
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
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);
3447
if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
3449
if (g_bCutCluster || (g_iNbhMode == 2))
3453
g_pNbSet->ResetAlwaysTrue();
3454
g_pNbSet->Scan(smfix,g_pTempTimestep,g_bPeriodic);
3455
if (g_bSaveRefWithEnv)
3456
g_pNbSet->AddMolecule(g_iFixMol,z2);
3459
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3460
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
3464
if (g_laTDOSteps.Contains(g_iSteps-1))
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);
3475
/***************************************************************************************************************************/
3479
if (g_pVoroAnalysis->m_bEmptySpaceSDF)
3481
if (!g_pVoroAnalysis->m_bNewEmptyMode)
3483
g_pVoroAnalysis->m_pTempSDF->Clear();
3485
for (z3=0;z3<g_oaMolecules.GetSize();z3++)
3487
tm = (CMolecule*)g_oaMolecules[z3];
3488
for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
3490
if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
3491
if ((z3 == g_iFixMol) && (z4 == z2))
3494
tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
3496
for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
3498
if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
3501
for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
3503
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
3505
g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
3510
g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
3513
g_pVoroAnalysis->BinEmptySDF();
3517
if (g_pVoroAnalysis->m_bSphereHoleSDF)
3519
g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
3523
if (g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bSDF || g_bSVDF || g_bSFDF || g_bADF || g_bDDF || g_bVDF || g_bCond)
3525
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3527
o = (CObservation*)g_oaObserv[z6];
3528
ti2 = o->m_waSaveRefList.GetPosition(z2);
3530
if (o->m_bObsCertain)
3532
if (!o->m_waObsRefList.Contains(z2))
3534
tic_r = o->m_waObsRefList.GetPosition(z2);
3537
if (g_bUseVelocities)
3539
tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
3540
if (o->m_bVelocityRelToRef)
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;
3548
if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
3550
if (o->m_bSaveSeparateFiles)
3551
fprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
3553
fprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
3556
for (zr=0;zr<g_iCDFChannels;zr++)
3558
if (g_bRDF && (o->m_pRDF[zr] != NULL))
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)))
3567
if (o->m_bSaveSeparateFiles)
3568
fprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
3570
fprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
3574
if (g_bADF && (o->m_pADF[zr] != NULL))
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)))
3583
if (o->m_bSaveSeparateFiles)
3584
fprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
3586
fprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
3590
if (g_bDDF && (o->m_pDDF[zr] != NULL))
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)))
3599
if (o->m_bSaveSeparateFiles)
3600
fprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
3602
fprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
3606
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
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)))
3615
if (o->m_bSaveSeparateFiles)
3616
fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
3618
fprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
3622
if (g_bVDF && (o->m_pVDF[zr] != NULL))
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)))
3631
if (o->m_bSaveSeparateFiles)
3632
fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
3634
fprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
3641
for (z3=0;z3<o->m_iShowMolCount;z3++)
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();
3651
for (z3=0;z3<o->m_iShowMolCount;z3++)
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();
3663
for (zr=0;zr<g_iCDFChannels;zr++)
3665
if (o->m_pADF[zr] == NULL)
3667
o->m_pADF[zr]->BuildAtomList(smfix,NULL,NULL,&templa);
3668
for (z4=0;z4<templa.GetSize();z4+=6)
3670
if (o->m_pADF[zr]->m_bOrtho[0])
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);
3678
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3679
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3682
if (o->m_pADF[zr]->m_bOrtho[1])
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);
3690
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3691
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3694
tf = Angle_Deg(vec1,vec2);
3695
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
3697
if (o->m_pADF[zr]->m_bCosine)
3698
tf = cos(tf/180.0*Pi);
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)
3706
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
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);
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);
3717
if (!g_bDeriv || (g_iSteps > 2))
3719
if (o->m_bObsCertain && o->m_bDecompDist)
3720
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
3722
o->m_pADF[zr]->m_faData[0].Add(tf);
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);
3727
/* if (o->m_pADF[zr]->m_bMirror)
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);
3734
if (o->m_bTimeDev && (ti2 != -1))
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);
3743
((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
3751
for (zr=0;zr<g_iCDFChannels;zr++)
3753
if (o->m_pDDF[zr] == NULL)
3755
o->m_pDDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3756
for (z4=0;z4<templa.GetSize();z4+=9)
3758
if (o->m_pDDF[zr]->m_bOrtho[0])
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);
3766
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3767
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3770
if (o->m_pDDF[zr]->m_bOrtho[1])
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);
3778
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
3779
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
3782
if (o->m_pDDF[zr]->m_bOrtho[2])
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);
3790
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
3791
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
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);
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)
3803
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
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);
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);
3813
if (!g_bDeriv || (g_iSteps > 2))
3815
if (o->m_bObsCertain && o->m_bDecompDist)
3816
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
3818
o->m_pDDF[zr]->m_faData[0].Add(tf);
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);
3823
if ((!o->m_pDDF[zr]->m_bAbs) && o->m_pDDF[zr]->m_bSymm)
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);
3831
((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
3833
if (o->m_bTimeDev && (ti2 != -1))
3835
if (o->m_pDDF[zr]->m_bRotate)
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]++;
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;
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);
3860
o->m_pVHDF->BuildAtomList(smfix,smfix,NULL,&templa);
3861
for (z4=0;z4<templa.GetSize();z4+=2)
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++)
3866
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
3867
if (g_pT2Timestep == NULL)
3869
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
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]++;
3886
for (zr=0;zr<g_iCDFChannels;zr++)
3888
if (o->m_pRDF[zr] == NULL)
3890
o->m_pRDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3891
for (z4=0;z4<templa.GetSize();z4+=2)
3893
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3894
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3896
tf = vec2.GetLength();
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)
3903
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
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);
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);
3913
if (!g_bDeriv || (g_iSteps > 2))
3915
if (o->m_bObsCertain && o->m_bDecompDist)
3916
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
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);
3921
o->m_pRDF[zr]->m_faData[0].Add(tf);
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);
3926
if (o->m_bTimeDev && (ti2 != -1))
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);
3935
((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
3943
for (zr=0;zr<g_iCDFChannels;zr++)
3945
if (o->m_pDipDF[zr] == NULL)
3947
tf = smfix->m_vDipole.GetLength();
3950
o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
3951
switch(o->m_pDipDF[zr]->m_iDeriv)
3954
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
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);
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);
3964
if (!g_bDeriv || (g_iSteps > 2))
3966
if (o->m_bObsCertain && o->m_bDecompDist)
3967
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
3969
o->m_pDipDF[zr]->m_faData[0].Add(tf);
3971
if (o->m_pDipDF[zr]->m_bACF)
3972
o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
3974
if (o->m_bTimeDev && (ti2 != -1))
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);
3983
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
3990
for (zr=0;zr<g_iCDFChannels;zr++)
3992
if (o->m_pVDF[zr] == NULL)
3994
o->m_pVDF[zr]->BuildAtomList(smfix,smfix,NULL,&templa);
3995
for (z4=0;z4<templa.GetSize();z4++)
3997
tf = tempvel[templa[z4]].GetLength();
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)
4004
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
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);
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);
4014
if (!g_bDeriv || (g_iSteps > 2))
4016
if (o->m_bObsCertain && o->m_bDecompDist)
4017
o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
4019
o->m_pVDF[zr]->m_faData[0].Add(tf);
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);
4024
if (o->m_bTimeDev && (ti2 != -1))
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);
4033
((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
4041
o->m_pSDF->BuildAtomList(smfix,smfix,NULL,&templa);
4042
for (z4=0;z4<templa.GetSize();z4++)
4044
o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4046
if (o->m_pSDF->m_bVdWSpheres)
4047
o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
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]]);
4058
} // Ende IF m_bSelf
4062
secondmolrun = false;
4064
if (o->m_pConditions != NULL)
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]++;
4072
for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
4076
if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
4078
if (o->m_bObsCertain)
4080
if (!o->m_waObsShow2List.Contains(z3))
4082
tic_o = o->m_waObsShow2List.GetPosition(z3);
4086
if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
4088
if (o->m_bObsCertain)
4090
if (!o->m_waObsShowList.Contains(z3))
4092
tic_o = o->m_waObsShowList.GetPosition(z3);
4098
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
4101
ti = o->m_waSaveShowList.GetPosition(z3);
4102
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4105
if (o->m_bTimeDev && (o->m_pConditions != NULL))
4107
if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
4109
for (zr=0;zr<g_iCDFChannels;zr++)
4111
if (g_bADF && (o->m_pADF[zr] != NULL))
4113
if ((ti2 != -1) && (ti != -1))
4115
if (o->m_bSaveSeparateFiles)
4116
fprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
4117
else fprintf(o->m_pADF[zr]->m_fAngle[0],"; - ");
4121
if (g_bDDF && (o->m_pDDF[zr] != NULL))
4123
if ((ti2 != -1) && (ti != -1))
4125
if (o->m_bSaveSeparateFiles)
4126
fprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
4127
else fprintf(o->m_pDDF[zr]->m_fAngle[0],"; - ");
4131
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
4133
if ((ti2 != -1) && (ti != -1))
4135
if (o->m_bSaveSeparateFiles)
4136
fprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; - ");
4137
else fprintf(o->m_pDipDF[zr]->m_fDipole[0],"; - ");
4141
if (g_bVDF && (o->m_pVDF[zr] != NULL))
4143
if ((ti2 != -1) && (ti != -1))
4145
if (o->m_bSaveSeparateFiles)
4146
fprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; - ");
4147
else fprintf(o->m_pVDF[zr]->m_fSpeed[0],"; - ");
4151
if (g_bRDF && (o->m_pRDF[zr] != NULL))
4153
if ((ti2 != -1) && (ti != -1))
4155
if (o->m_bSaveSeparateFiles)
4156
fprintf(o->m_pRDF[zr]->m_fDist[ti2],"; - ");
4157
else fprintf(o->m_pRDF[zr]->m_fDist[0],"; - ");
4165
if (o->m_pConditions != NULL)
4167
if (!o->m_pConditions->Contains(z3))
4170
if (o->m_bBinOnlyPassedAtoms)
4171
o->m_pConditions->MarkPassedAtoms(z3,true);
4173
if (o->m_bBinOnlyNotPassedAtoms)
4174
o->m_pConditions->MarkPassedAtoms(z3,false);
4176
if (g_bSaveCondSnapshot)
4179
if (g_bSaveCondWholeBox)
4181
g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
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++)
4187
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
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);
4192
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
4194
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
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);
4205
o->m_pVHDF->BuildAtomList(smfix,sm,NULL,&templa);
4206
for (z4=0;z4<templa.GetSize();z4+=2)
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++)
4211
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
4212
if (g_pT2Timestep == NULL)
4214
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
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]++;
4231
for (zr=0;zr<g_iCDFChannels;zr++)
4233
if (o->m_pADF[zr] == NULL)
4235
if (o->m_bSecondShowMol)
4237
if (secondmolrun && (zr == 0))
4239
if (!secondmolrun && (zr == 1))
4242
o->m_pADF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4243
for (z4=0;z4<templa.GetSize();z4+=6)
4245
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4248
if (g_baAtomPassedCondition[templa[z4]] == 0)
4250
if (g_baAtomPassedCondition[templa[z4+1]] == 0)
4252
if (o->m_pADF[zr]->m_bOrtho[0])
4253
if (g_baAtomPassedCondition[templa[z4+2]] == 0)
4255
if (g_baAtomPassedCondition[templa[z4+3]] == 0)
4257
if (g_baAtomPassedCondition[templa[z4+4]] == 0)
4259
if (o->m_pADF[zr]->m_bOrtho[1])
4260
if (g_baAtomPassedCondition[templa[z4+5]] == 0)
4264
o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
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);
4271
if (o->m_pADF[zr]->m_bOrtho[0])
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);
4279
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4280
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4283
if (o->m_pADF[zr]->m_bOrtho[1])
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);
4291
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4292
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4296
tf = Angle_Deg(vec1,vec2);
4297
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
4299
if (o->m_pADF[zr]->m_bCosine)
4300
tf = cos(tf/180.0*Pi);
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)
4309
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
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);
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);
4319
if (!g_bDeriv || (g_iSteps > 2))
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);
4324
o->m_pADF[zr]->m_faData[z3].Add(tf);
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);
4329
/* if (o->m_pADF[zr]->m_bMirror)
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);
4336
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
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);
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);
4354
for (zr=0;zr<g_iCDFChannels;zr++)
4356
if (o->m_pDDF[zr] == NULL)
4358
if (o->m_bSecondShowMol)
4360
if (secondmolrun && (zr == 0))
4362
if (!secondmolrun && (zr == 1))
4365
o->m_pDDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4366
for (z4=0;z4<templa.GetSize();z4+=9)
4368
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4371
for (z5=z4;z5<z4+9;z5++)
4372
if (g_baAtomPassedCondition[templa[z5]] == 0)
4375
o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
4376
else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
4378
if (o->m_pDDF[zr]->m_bOrtho[0])
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);
4386
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4387
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4390
if (o->m_pDDF[zr]->m_bOrtho[1])
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);
4398
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4399
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4402
if (o->m_pDDF[zr]->m_bOrtho[2])
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);
4410
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4411
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
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);
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)
4424
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
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);
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);
4434
if (!g_bDeriv || (g_iSteps > 2))
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);
4439
o->m_pDDF[zr]->m_faData[z3].Add(tf);
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);
4444
if ((!o->m_pDDF[zr]->m_bAbs) && o->m_pDDF[zr]->m_bSymm)
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);
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);
4454
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
4456
if (o->m_pDDF[zr]->m_bRotate)
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]++;
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;
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);
4481
for (zr=0;zr<g_iCDFChannels;zr++)
4483
if (o->m_pDipDF[zr] == NULL)
4485
if (o->m_bSecondShowMol)
4487
if (secondmolrun && (zr == 0))
4489
if (!secondmolrun && (zr == 1))
4492
if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
4493
tf = smfix->m_vDipole.GetLength();
4494
else tf = sm->m_vDipole.GetLength();
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)
4502
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
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);
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);
4512
if (!g_bDeriv || (g_iSteps > 2))
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);
4517
o->m_pDipDF[zr]->m_faData[z3].Add(tf);
4519
if (o->m_pDipDF[zr]->m_bACF)
4520
o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
4522
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
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);
4531
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
4538
for (zr=0;zr<g_iCDFChannels;zr++)
4540
if (o->m_pVDF[zr] == NULL)
4542
if (o->m_bSecondShowMol)
4544
if (secondmolrun && (zr == 0))
4546
if (!secondmolrun && (zr == 1))
4549
o->m_pVDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4550
for (z4=0;z4<templa.GetSize();z4++)
4552
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4555
for (z5=z4;z5<z4+2;z5++)
4556
if (g_baAtomPassedCondition[templa[z5]] == 0)
4559
o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
4560
else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
4562
tf = tempvel[templa[z4]].GetLength();
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)
4570
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
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);
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);
4580
if (!g_bDeriv || (g_iSteps > 2))
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);
4585
o->m_pVDF[zr]->m_faData[z3].Add(tf);
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);
4590
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
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);
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);
4607
for (zr=0;zr<g_iCDFChannels;zr++)
4609
if (o->m_pRDF[zr] == NULL)
4611
if (o->m_bSecondShowMol)
4613
if (secondmolrun && (zr == 0))
4615
if (!secondmolrun && (zr == 1))
4618
o->m_pRDF[zr]->BuildAtomList(smfix,sm,NULL,&templa);
4619
for (z4=0;z4<templa.GetSize();z4+=2)
4621
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4624
for (z5=z4;z5<z4+2;z5++)
4625
if (g_baAtomPassedCondition[templa[z5]] == 0)
4628
o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
4629
else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
4631
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4632
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
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();
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)
4644
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
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);
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);
4654
if (!g_bDeriv || (g_iSteps > 2))
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);
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);
4662
o->m_pRDF[zr]->m_faData[z3].Add(tf);
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);
4667
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
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);
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);
4684
o->m_pSDF->BuildAtomList(smfix,sm,NULL,&templa);
4685
for (z4=0;z4<templa.GetSize();z4++)
4687
o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
4689
if (o->m_pSDF->m_bVdWSpheres)
4690
o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
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]]);
4701
} // Ende FOR Alle anderen Molekuele durchgehen
4702
if (o->m_bSecondShowMol && (!secondmolrun))
4704
secondmolrun = true;
4705
goto _secondmolstart;
4707
} // Ende IF m_bOthers
4711
if (o->m_pSDF->m_bSDFMirrorBisect)
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);
4719
if (o->m_pSDF->m_bCutPlane)
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++;
4729
for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
4731
vec0 = o->m_pSDF->m_vaData[0][z5];
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);
4737
if (o->m_pSDF->m_bSDFMirrorXY)
4740
o->m_pSDF->m_pSDF->AddToBin(vec0);
4743
if (o->m_pSDF->m_bSDFMirrorBisect)
4745
vec3.PointRoot(vec1,vec2,vec0);
4749
o->m_pSDF->m_pSDF->AddToBin(vec0);
4750
if (o->m_pSDF->m_bSDFMirrorXY)
4753
o->m_pSDF->m_pSDF->AddToBin(vec0);
4759
for (z4=0;z4<o->m_iShowMolCount;z4++)
4761
for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
4763
vec0 = o->m_pSDF->m_vaData[z4][z5];
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);
4769
if (o->m_pSDF->m_bSDFMirrorXY)
4772
o->m_pSDF->m_pSDF->AddToBin(vec0);
4775
if (o->m_pSDF->m_bSDFMirrorBisect)
4777
vec3.PointRoot(vec1,vec2,vec0);
4781
o->m_pSDF->m_pSDF->AddToBin(vec0);
4782
if (o->m_pSDF->m_bSDFMirrorXY)
4785
o->m_pSDF->m_pSDF->AddToBin(vec0);
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++;
4801
for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
4803
vec0 = o->m_pRevSDF->m_vaData[0][z5];
4804
tf = fabs(Angle(vec2,vec0));
4805
tf2 = vec0.GetLength();
4807
if (o->m_pRevSDF->m_bCorrectAngle)
4809
if ((tf < 0.001) || (tf > Pi-0.001))
4811
else tf3 /= sin(tf);
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)
4819
if (o->m_pRevSDF->m_bMirrorBond)
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);
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);
4832
for (z4=0;z4<o->m_iShowMolCount;z4++)
4834
for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
4836
vec0 = o->m_pRevSDF->m_vaData[z4][z5];
4837
tf = fabs(Angle(vec2,vec0));
4838
tf2 = vec0.GetLength();
4840
if (o->m_pRevSDF->m_bCorrectAngle)
4842
if ((tf < 0.001) || (tf > Pi-0.001))
4844
else tf3 /= sin(tf);
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)
4852
if (o->m_pRevSDF->m_bMirrorBond)
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);
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);
4867
if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
4869
if (o->m_bSecondShowMol)
4871
for (zr=0;zr<g_iCDFChannels;zr++)
4872
switch(g_iObsChannel[zr])
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;
4881
if (g_iCDFChannels == 2)
4883
for (z4=0;z4<o->m_iShowMolCount;z4++)
4885
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4887
for (z6=0;z6<o->m_iShowMol2Count;z6++)
4889
if (o->m_bExclude1eq2 && (z4 == z6))
4891
for (z7=0;z7<apfa[1][z6].GetSize();z7++)
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]);
4901
} else // IF NOT SECOND_OM
4903
for (zr=0;zr<g_iCDFChannels;zr++)
4904
switch(g_iObsChannel[zr])
4907
apfa[zr] = o->m_pRDF[zr]->m_faData;
4908
apba[zr] = o->m_pRDF[zr]->m_baDataEnabled;
4911
apfa[zr] = o->m_pADF[zr]->m_faData;
4912
apba[zr] = o->m_pADF[zr]->m_baDataEnabled;
4915
apfa[zr] = o->m_pDDF[zr]->m_faData;
4916
apba[zr] = o->m_pDDF[zr]->m_baDataEnabled;
4919
apfa[zr] = o->m_pDipDF[zr]->m_faData;
4920
apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled;
4923
apfa[zr] = o->m_pVDF[zr]->m_faData;
4924
apba[zr] = o->m_pVDF[zr]->m_baDataEnabled;
4928
if (g_iCDFChannels == 2)
4930
for (z4=0;z4<o->m_iShowMolCount;z4++)
4933
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4935
for (z7=0;z7<apfa[1][z4].GetSize();z7++)
4937
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
4939
if (o->m_bBinOnlyPassedAtoms)
4941
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
4944
if (o->m_bBinOnlyNotPassedAtoms)
4946
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
4949
o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
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]);
4955
ti = o->m_waSaveShowList.GetPosition(z4);
4956
if ((ti2 != -1) && (ti != -1))
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]);
4969
if (o->m_bTimeDev && (ti2 != -1))
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");
4976
} // END IF CHANNELS == 2
4978
if (g_iCDFChannels == 3)
4980
for (z4=0;z4<o->m_iShowMolCount;z4++)
4983
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
4985
for (z6=0;z6<apfa[1][z4].GetSize();z6++)
4987
for (z7=0;z7<apfa[2][z4].GetSize();z7++)
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)
4991
if (o->m_bBinOnlyPassedAtoms)
4993
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z6] == 0) || (apba[2][z4][z7] == 0))
4996
if (o->m_bBinOnlyNotPassedAtoms)
4998
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z6] != 0) && (apba[2][z4][z7] != 0))
5001
o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z6],apfa[2][z4][z7]);
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]);
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]);
5013
} // END IF CHANNELS == 3
5014
} // IF NOT SECOND_OM
5017
for (zr=0;zr<g_iCDFChannels;zr++)
5019
if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5023
if (o->m_bSecondShowMol && (zr == 1))
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]);
5030
for (z4=0;z4<o->m_iShowMolCount;z4++)
5031
for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
5033
if (o->m_bBinOnlyPassedAtoms)
5034
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
5036
if (o->m_bBinOnlyNotPassedAtoms)
5037
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
5039
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
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]);
5047
if (o->m_bTimeDev && (ti2 != -1))
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");
5056
if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5060
if (o->m_bSecondShowMol && (zr == 1))
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]);
5067
for (z4=0;z4<o->m_iShowMolCount;z4++)
5068
for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
5070
if (o->m_bBinOnlyPassedAtoms)
5071
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
5073
if (o->m_bBinOnlyNotPassedAtoms)
5074
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
5076
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
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]);
5084
if (o->m_bTimeDev && (ti2 != -1))
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");
5093
if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5097
if (o->m_bSecondShowMol && (zr == 1))
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]);
5104
for (z4=0;z4<o->m_iShowMolCount;z4++)
5105
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
5107
if (o->m_bBinOnlyPassedAtoms)
5108
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
5110
if (o->m_bBinOnlyNotPassedAtoms)
5111
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
5113
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
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]);
5121
if (o->m_bTimeDev && (ti2 != -1))
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");
5130
if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5134
if (o->m_bSecondShowMol && (zr == 1))
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]);
5141
for (z4=0;z4<o->m_iShowMolCount;z4++)
5142
for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
5144
if (o->m_bBinOnlyPassedAtoms)
5145
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
5147
if (o->m_bBinOnlyNotPassedAtoms)
5148
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
5150
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
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]);
5158
if (o->m_bTimeDev && (ti2 != -1))
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");
5167
if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
5171
if (o->m_bSecondShowMol && (zr == 1))
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]);
5178
for (z4=0;z4<o->m_iShowMolCount;z4++)
5179
for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
5181
if (o->m_bBinOnlyPassedAtoms)
5182
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
5184
if (o->m_bBinOnlyNotPassedAtoms)
5185
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
5187
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
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]);
5195
if (o->m_bTimeDev && (ti2 != -1))
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");
5203
} // FOR CDFChannels
5205
} // Ende FOR g_oaObserv.GetSize
5206
} // Ende IF [blabla]
5208
if (g_bMiddleAvg) // Referenzmolekuel mitteln
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++)
5215
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
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))
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
5224
for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
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
5233
if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
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;
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)];
5242
} // Ende FOR Atom des Referenzmolekuels
5243
} // Ende FOR Atomtyp des Referenzmolekuels
5244
} // Ende IF Referenzmolekuel mitteln
5245
} // Ende FOR RefMol (z2)
5247
for (z6=0;z6<g_oaObserv.GetSize();z6++)
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]++;
5260
if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
5262
mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
5267
/*************************************************************************
5268
*************** Ende Hauptschleife ***************************************
5269
*************************************************************************/
5274
if (g_bUseVelocities)
5277
mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
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);
5286
if (g_fForce != NULL)
5288
if ((g_bNPT) && (g_sNPTFile[0] != 0))
5293
g_pVoroWrapper->Finish();
5298
g_pVoroAnalysis->Finish();
5303
if (!ReactSecondRun)
5306
g_pReact->DumpMolecules();
5307
g_pReact->CreateOutput();
5309
if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
5311
if (!ReactSecondRun)
5313
mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
5314
ReactSecondRun = true;
5318
mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
5322
g_bAbortAnalysis = true;
5324
if (g_bSaveCondSnapshot)
5326
fclose(g_fSaveCondFile);
5327
mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
5332
mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
5333
for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
5335
mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
5336
mprintf(WHITE," * Observation %d: %s\n",z+1,mho->m_sName);
5338
mprintf(" Creating Microheterogeneity plot...\n");
5339
sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
5340
mho->BuildSlices(buf);
5342
mprintf(" Creating entry plot...\n");
5343
sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
5344
mho->BuildZeroPlot(buf,true);
5348
mprintf(" Creating CDF...\n");
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);
5364
if (g_bClusterAnalysis)
5366
mprintf(WHITE,"*** Cluster Analysis\n\n");
5368
g_pClusterAnalysis->BuildClusterDistribution();
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);
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);
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);*/
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);
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);
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);
5438
if (g_pClusterAnalysis->m_bAnim)
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");
5449
mprintf(" Saved batch script as \"render_cluster_anim\".\n");
5450
fclose(g_pClusterAnalysis->m_fAnim);
5457
mprintf(WHITE,"*** Bond autocorrelation function\n");
5458
if (g_bBondACFDebug)
5460
mprintf(" Writing \"bondacf.agr\"...\n");
5462
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5463
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5465
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
5466
gc->SetRangeY(0,250);
5468
gc->SetLabelX("Time [ps]");
5469
gc->SetLabelY("Bond length [pm]");
5470
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5472
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5473
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5475
bond = (CMolBond*)sm->m_oaBonds[z3];
5477
for (z4=0;z4<bond->m_faData.GetSize();z4++)
5478
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5481
gc->WriteAgr("bondacf.agr",false);
5484
mprintf(" Differentiating bond length developments...\n");
5485
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5487
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5488
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
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];
5495
if (g_bBondACFDebug)
5497
mprintf(" Writing \"bondacf_diff.agr\"...\n");
5499
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5500
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5502
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
5503
gc->SetRangeY(-15,15);
5505
gc->SetLabelX("Time [ps]");
5506
gc->SetLabelY("Bond length change rate");
5507
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5509
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5510
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5512
bond = (CMolBond*)sm->m_oaBonds[z3];
5514
for (z4=0;z4<bond->m_faData.GetSize();z4++)
5515
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5518
gc->WriteAgr("bondacf_diff.agr",false);
5521
mprintf(" Autocorrelating bond length developments...\n");
5522
mprintf(WHITE," [");
5524
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5526
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5527
tfs += sm->m_oaBonds.GetSize();
5531
/* fft = new CFFT();
5532
fft->PrepareFFT_C2C(g_iSteps*2);
5534
fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
5536
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
5537
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5539
ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
5540
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5542
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5543
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5545
if (fmod(ti2,tfs) < 1.0)
5547
bond = (CMolBond*)sm->m_oaBonds[z3];
5548
ac->AutoCorrelate(&bond->m_faData,&tempfa);
5549
bond->m_faData.CopyFrom(&tempfa);
5554
mprintf(WHITE,"]\n");
5555
if (g_bBondACFDebug)
5557
mprintf(" Writing \"bondacf_autocorr.agr\"...\n");
5559
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5560
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5562
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
5563
gc->SetRangeY(-25,25);
5565
gc->SetLabelX("Time [ps]");
5566
gc->SetLabelY("ACF(Bond length change rate)");
5567
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
5569
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
5570
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
5572
bond = (CMolBond*)sm->m_oaBonds[z3];
5574
for (z4=0;z4<g_iBondACFDepth;z4++)
5575
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
5578
gc->WriteAgr("bondacf_autocorr.agr",false);
5581
mprintf(" Merging equivalent Bonds...\n");
5582
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
5588
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
5589
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
5591
bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
5592
for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
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];
5601
if (g_bBondACFSymmetrize)
5603
mprintf(" Symmetrizing bond ACFs...\n");
5604
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
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];
5618
g_iBondACFDepth *= 2;
5620
if (g_bBondACFWindow)
5622
mprintf(" Applying Window Function...\n");
5623
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
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);
5635
if (g_bBondACFNormalize)
5637
mprintf(" Normalizing bond ACFs...\n");
5638
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
5644
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[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;
5654
mprintf(" Writing \"bondacf_ac_merged.agr\"...\n");
5656
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5657
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5659
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
5660
gc->SetRangeY(-200,200);
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++)
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++)
5671
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
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]);
5680
gc->WriteAgr("bondacf_ac_merged.agr",false);
5682
mprintf(" Applying Fourier Transformation...\n");
5684
try { fft = new CFFT(); } catch(...) { fft = NULL; }
5685
if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5687
fft->PrepareFFT_C2C(g_iBondACFDepth);
5689
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
5695
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5696
for (z4=0;z4<g_iBondACFDepth;z4++)
5698
fft->m_pInput[z4*2] = bond->m_faData[z4];
5699
fft->m_pInput[z4*2+1] = 0;
5702
for (z4=0;z4<g_iBondACFDepth/2;z4++)
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];
5711
mprintf(" Writing \"bond_spectrum.agr\"...\n");
5713
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5714
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5716
gc->SetRangeX(0,4000.0);
5717
gc->SetRangeY(0,tf3*1.1);
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++)
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++)
5729
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
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]);
5738
gc->WriteAgr("bond_spectrum.agr",false);
5740
for (z5=1;z5<5;z5++)
5742
mprintf(" Smoothing spectrum, degree %d...\n",z5);
5743
mprintf(" Writing \"bond_spectrum_s%d.agr\"...\n",z5);
5745
try { gc = new CGrace(); } catch(...) { gc = NULL; }
5746
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5748
gc->SetRangeX(0,4000.0);
5749
gc->SetRangeY(0,tf3*1.1);
5751
gc->SetLabelX("Wave number [1/cm]");
5752
gc->SetLabelY("Intensity");
5753
gc->CurrentGraph()->m_bInvertXAxis = true;
5754
gc->CurrentGraph()->m_bLegend = true;
5756
try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
5757
if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5759
gc2->SetRangeX(0,4000.0);
5760
gc2->SetRangeY(0,tf3*1.1);
5762
gc2->SetLabelX("Wave number [1/cm]");
5763
gc2->SetLabelY("Intensity");
5764
gc2->CurrentGraph()->m_bInvertXAxis = true;
5765
gc2->CurrentGraph()->m_bLegend = true;
5767
tempfa.SetSize(g_iBondACFDepth/2);
5768
tempfa2.SetSize(g_iBondACFDepth/2);
5770
for (z4=0;z4<g_iBondACFDepth/2;z4++)
5773
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
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++)
5779
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
5781
for (z4=0;z4<g_iBondACFDepth/2;z4++)
5785
for (z6=-z5;z6<=z5;z6++)
5787
if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
5789
tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
5790
tf2 += 1.0 / (pow((double)z6,2)+1.0);
5792
tempfa[z4] = (float)(tf / tf2);
5793
tempfa2[z4] += tempfa[z4];
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);
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]);
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]);
5812
sprintf(buf,"bond_spectrum_s%d.agr",z5);
5813
gc->WriteAgr(buf,false);
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);
5826
mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
5829
#ifdef TARGET_WINDOWS
5830
sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
5832
sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
5834
mprintf("Saving TDO PyMol script as %s.\n",buf);
5835
tfi = OpenFileWrite(buf,true);
5836
#ifdef TARGET_WINDOWS
5837
fprintf(tfi,"pymolwin ");
5839
fprintf(tfi,"pymol ");
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\" ");
5854
for (z=0;z<g_laTDOSteps.GetSize();z++)
5856
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
5858
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
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));
5863
for (z=0;z<g_laTDOSteps.GetSize();z++)
5865
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
5867
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
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);
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);
5884
mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
5887
if (g_bSaveJustTraj)
5889
fclose(g_fSaveJustTraj);
5890
/* strcpy(buf,g_sInputTraj);
5891
p = strrchr(buf,'.');
5893
strcat(buf,multibuf);
5894
strcat(buf,".out.xyz");*/
5895
// mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
5898
if (g_bVACF && g_bGlobalVACF)
5900
mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
5901
if (g_pGlobalVACF->m_bDerivative)
5903
mprintf(" Deriving velocities...\n");
5904
mprintf(WHITE," [");
5905
tfs = g_iGesAtomCount/60.0;
5906
for (z2=0;z2<g_iGesAtomCount;z2++)
5908
if (fmod(z2,tfs) < 1)
5910
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
5912
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
5913
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
5915
mprintf(WHITE,"]\n");
5917
if (g_bVACFCacheMode)
5919
tfs = g_iGesAtomCount/60.0;
5922
mprintf(" Autocorrelating cached vectors...\n");
5923
mprintf(WHITE," [");
5924
/* fft = new CFFT();
5925
fft->PrepareFFT_C2C(2*g_iSteps);
5927
fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
5929
try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
5930
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5932
ptfa2->SetSize(g_iSteps);
5934
try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
5935
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5937
ptfa3->SetSize(g_iSteps);
5939
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
5940
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
5942
ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
5943
for (z2=0;z2<g_iGesAtomCount;z2++)
5945
if (fmod(z2,tfs) < 1.0)
5947
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
5949
if (g_pGlobalVACF->m_bMassWeight)
5950
tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
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;
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;
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;
5984
mprintf(" Autocorrelating cached vectors...\n");
5985
mprintf(WHITE," [");
5986
for (z2=0;z2<g_iGesAtomCount;z2++)
5988
if (fmod(z2,tfs) < 1.0)
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
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);
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);
6005
mprintf(" Saving global VACF as acf_global%s.csv ...\n",multibuf);
6006
g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
6008
if (g_pGlobalVACF->m_iMirror != 0)
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");
6016
if (g_pGlobalVACF->m_bWindowFunction)
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");
6024
if (g_pGlobalVACF->m_bSpectrum)
6026
mprintf(" Performing Fourier transformation...\n");
6028
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6029
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6031
g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
6032
g_pGlobalVACF->Transform(g_pFFT);
6034
g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
6035
if (g_pGlobalVACF->m_bACF_DB)
6037
mprintf(" Normalising spectrum to decibel...\n");
6038
g_pGlobalVACF->m_pSpectrum->MakeDB();
6041
mprintf(" Normalising integral of spectrum...\n");
6042
g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
6044
if (g_pGlobalVACF->m_bWindowFunction)
6046
mprintf(" Saving spectrum as power_global_w%s.csv ...\n",multibuf);
6047
g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
6050
mprintf(" Saving spectrum as power_global%s.csv ...\n",multibuf);
6051
g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
6059
for (z=0;z<g_iVFCorrCount;z++)
6060
fclose(g_fVFCorr[z]);
6066
for (z=0;z<g_oaObserv.GetSize();z++)
6068
o = (CObservation*)g_oaObserv[z];
6069
mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
6071
if (o->m_pConditions != NULL)
6073
o->m_pConditions->PrintData();
6074
if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
6075
o->m_pConditions->PrintTable();
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++)
6086
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
6087
mprintf(WHITE,"\n > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
6089
o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
6091
sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
6092
dacfsub->m_pCondition->PrintData(buf);
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,"");
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);
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)
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__);
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__);
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__);
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__);
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__);
6136
dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
6138
for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6140
dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
6141
dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
6144
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6145
dacfsub->m_pDACF->Fit_PolyExp(z2);
6147
if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
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++)
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]);
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);
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);
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);
6195
if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
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]);
6204
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
6206
if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
6208
if (o->m_pDACF->m_bGridCon)
6210
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
6211
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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);
6223
if (o->m_pDACF->m_bGridInt)
6225
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
6226
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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);
6240
if (o->m_pDACF->m_bGridCon)
6242
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
6243
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6245
o->m_pDACF->CreateGridFitDF(tdf,z2,false);
6255
mprintf(WHITE,"* Vector Reorientation Dynamics\n");
6256
if (g_bRDynCacheMode)
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;
6263
/* fft = new CFFT();
6264
fft->PrepareFFT_C2C(2*g_iSteps);
6266
fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
6268
try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
6269
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6271
ptfa2->SetSize(g_iSteps/g_iStride);
6273
try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
6274
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6276
ptfa3->SetSize(g_iSteps/g_iStride);
6278
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6279
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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++)
6284
if (fmod(z2,tfs) < 1.0)
6286
ptfa = (CxFloatArray*)o->m_pRDyn->m_oaCache[z2];
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]);
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]);
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]);
6305
for (z3=0;z3<(int)g_iSteps/g_iStride;z3++)
6306
(*ptfa2)[z3] = (*ptfa)[z3*3+2];
6307
ac->AutoCorrelate(ptfa2,ptfa3);
6309
for (z3=0;z3<(int)o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;z3++)
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;
6322
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
6324
if (fmod(z2,tfs) < 1.0)
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
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;
6337
mprintf(WHITE,"]\n");
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];
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);
6349
if (o->m_pRDyn->m_bSpectrum)
6351
mprintf("\n Creating reorientation spectrum:\n");
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];
6356
if (o->m_pRDyn->m_pACF->m_bDerivative)
6358
mprintf(" Deriving ACF...\n");
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];
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;
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,"");
6372
if (o->m_pRDyn->m_pACF->m_iMirror != 0)
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,"");
6381
if (o->m_pRDyn->m_pACF->m_bWindowFunction)
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,"");
6390
mprintf(" Performing fourier transformation...\n");
6392
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6393
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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);
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)
6403
mprintf(" Normalising spectrum to decibel...\n");
6404
o->m_pRDyn->m_pACF->m_pSpectrum->MakeDB();
6407
mprintf(" Normalising integral of spectrum...\n");
6408
o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
6410
/* if (o->m_pVACF->m_bWindowFunction)
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,"");
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,"");
6421
} // END IF SPECTRUM
6426
mprintf(WHITE,"* Velocity Autocorrelation Function\n");
6427
if (o->m_pVACF->m_bDerivative)
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++)
6434
if (fmod(z2,tfs) < 1)
6436
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
6438
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
6439
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
6441
mprintf(WHITE,"]\n");
6443
if (g_bVACFCacheMode)
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;
6449
try { ptfa2 = new CxFloatArray(); } catch(...) { ptfa2 = NULL; }
6450
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6452
ptfa2->SetSize(g_iSteps);
6454
try { ptfa3 = new CxFloatArray(); } catch(...) { ptfa3 = NULL; }
6455
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6457
ptfa3->SetSize(g_iSteps);
6459
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6460
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6462
ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
6464
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6466
for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
6468
if (o->m_pVACF->m_bMassWeight)
6469
tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
6471
for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
6473
if (fmod(ti,tfs) < 1)
6475
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
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;
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;
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;
6511
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
6513
if (fmod(z2,tfs) < 1)
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
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);
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,"");*/
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,"");
6537
if (o->m_pVACF->m_iMirror != 0)
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,"");
6546
if (o->m_pVACF->m_bWindowFunction)
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,"");
6555
if (o->m_pVACF->m_bSpectrum)
6557
mprintf(" Performing fourier transformation...\n");
6559
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
6560
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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);
6567
o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
6568
if (o->m_pVACF->m_bACF_DB)
6570
mprintf(" Normalising spectrum to decibel...\n");
6571
o->m_pVACF->m_pSpectrum->MakeDB();
6574
mprintf(" Normalising integral of spectrum...\n");
6575
o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
6577
/* if (o->m_pVACF->m_bWindowFunction)
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,"");
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,"");
6593
mprintf(WHITE,"* Mean Square Displacement\n");
6594
if (g_bMSDCacheMode)
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++)
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
6608
if (fmod(z3,tfs) < 1.0)
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);
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)
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;
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");
6630
o->m_pMSD->m_pMSD->BuildAverage();
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)
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");
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);
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__);
6659
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6660
pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
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++)
6668
fprintf(a,"%d neighbors",z3);
6669
if (z3 < o->m_pNbAnalysis->m_iNbCount)
6673
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
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++)
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)
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++)
6695
fprintf(a,"%d. neighbor",z3+1);
6696
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6700
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
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++)
6705
fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6706
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
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++)
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);
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++)
6730
fprintf(a,"%d. neighbor",z3+1);
6731
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6735
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
6737
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
6738
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
6740
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
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());
6744
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
6746
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
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++)
6751
fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6752
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
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++)
6765
fprintf(a,"%d. neighbor",z3+1);
6766
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
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++)
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++)
6778
fprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
6779
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
6790
for (zr=0;zr<g_iCDFChannels;zr++)
6792
if (o->m_pDipDF[zr] == NULL)
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)
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,"");
6816
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
6822
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
6828
if (o->m_bCombinedPlot)
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);
6837
if (o->m_bObsCertain && o->m_bDecompDist)
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,"");
6848
o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
6854
for (zr=0;zr<g_iCDFChannels;zr++)
6856
if (o->m_pVDF[zr] == NULL)
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)
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,"");
6880
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
6886
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
6892
if (o->m_bCombinedPlot)
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);
6901
if (o->m_bObsCertain && o->m_bDecompDist)
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,"");
6912
o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
6918
for (zr=0;zr<g_iCDFChannels;zr++)
6920
if (o->m_pADF[zr] == NULL)
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)
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);
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);
6934
if (o->m_pADF[zr]->m_bStat)
6936
mprintf(" Applying cone correction...\n");
6937
o->m_pADF[zr]->m_pADF->AngleCorrect();
6939
/* if (o->m_pADF[zr]->m_bMirror)
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);
6946
o->m_pADF[zr]->m_pADF->NormBinIntegral();
6949
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
6955
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
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)
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);
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)
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,"");
6995
if (o->m_bObsCertain && o->m_bDecompDist)
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,"");
7006
o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
7012
for (zr=0;zr<g_iCDFChannels;zr++)
7014
if (o->m_pDDF[zr] == NULL)
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)
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);
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);
7030
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
7036
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
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)
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);
7058
/* if (o->m_pDDF->m_iStat != 0)
7060
mprintf(" Korrigiere statistische Verteilung...\n");
7061
o->m_pDDF->m_pDDF->AngleCorrect();
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)
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,"");
7081
if (o->m_bObsCertain && o->m_bDecompDist)
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,"");
7092
o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
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)
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));
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));
7115
mprintf(" Scaling values to nm^-3...\n");*/
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));
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));
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");
7131
mprintf(WHITE," Bin values are given in nm^-3 (particle density).\n");
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");
7136
if (o->m_pSDF->m_bInvert)
7138
mprintf(" Inverting SDF...\n");
7139
o->m_pSDF->m_pSDF->Invert();
7141
if (o->m_pSDF->m_bCutPlane)
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);
7153
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7155
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
7156
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7158
tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
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)
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);
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);
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);
7180
if (o->m_pSDF->m_iHistogramRes != 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);
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");
7198
for (zr=0;zr<g_iCDFChannels;zr++)
7200
if (o->m_pRDF[zr] == NULL)
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)
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);
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);
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);*/
7231
if (o->m_pRDF[zr]->m_bRadialCorrect)
7233
mprintf(" Correcting radial distribution...\n");
7234
o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
7236
if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
7238
mprintf(" Scaling RDF to uniform density...\n");
7239
if (o->m_bObsCertain)
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);
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);
7250
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
7251
o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
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);
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)
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,"");
7273
if (o->m_bObsCertain && o->m_bDecompDist)
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);
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);
7287
if (o->m_bDecompType)
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);
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);
7303
o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
7305
if (o->m_pRDF[zr]->m_bACF)
7307
o->m_pRDF[zr]->Autocorrelate();
7312
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
7318
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
7325
delete[] o->m_pRDF[zr]->m_fDist;
7326
o->m_pRDF[zr]->m_fDist = NULL;
7327
if (o->m_bCombinedPlot)
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);
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)
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);
7350
o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
7353
mprintf(" Normalizing bin integral to 1000000...\n");
7354
o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
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)
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,"");
7367
if (o->m_pVHDF->m_iGraceBunchTime > 0)
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,"");
7373
if (o->m_pVHDF->m_bSwapAxes)
7375
mprintf(" Swapping time and distance axes...\n");
7376
o->m_pVHDF->m_pVHDF->SwapAxes();
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);
7385
if (g_iCDFChannels == 2)
7387
mprintf(WHITE,"* Combined Distribution Function (2D)\n");
7388
/* if (o->m_pConditions != NULL)
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)
7396
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
7399
for (z2=0;z2<2;z2++)
7401
if (g_iObsChannel[z2] == 0)
7403
if (o->m_pRDF[z2]->m_bRadialCorrect)
7405
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
7406
o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
7409
if (g_iObsChannel[z2] == 1)
7411
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
7413
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
7414
o->m_pCDF->m_p2DF->CorrectAngle(z2);
7416
if (o->m_pADF[z2]->m_bMirror)
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);
7425
o->m_pCDF->m_fFactor = 1.0;
7426
switch(o->m_pCDF->m_iNormalize)
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);
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);
7437
mprintf(" Not normalizing this CDF.\n");
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)
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");
7457
if (o->m_pCDF->m_bGraceBunch)
7459
if (o->m_pCDF->m_iGraceBunchC1 > 0)
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;
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,"");
7468
if (o->m_pCDF->m_iGraceBunchC2 > 0)
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;
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,"");
7479
if (o->m_pCDF->m_bAxisDivide)
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");
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");
7487
mprintf(" Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7489
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7490
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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)
7503
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7506
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7511
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
7514
mprintf(" Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7516
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7517
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
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)
7530
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7533
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7538
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
7541
mprintf(" Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
7543
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
7544
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7546
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
7547
for (z2=0;z2<2;z2++)
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);
7556
tempc2df->NormalizeXCount();
7557
tempc2df->NormalizeYCount();
7558
switch(o->m_pCDF->m_iNormalize)
7561
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7564
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
7569
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
7572
mprintf(" Calculating tensor product of CDF projections...\n");
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__);
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)
7582
o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
7585
o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
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)
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);
7611
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
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);
7618
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
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);
7624
if (o->m_pCDF->m_bTDAnimation)
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++)
7631
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
7632
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
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");
7645
a = OpenFileWrite(buf,true);
7646
if (o->m_pCDF->m_bTDATrace)
7648
for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
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));
7657
for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
7659
if (o->m_pCDF->m_bTDATrace)
7661
for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
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);
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);
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);
7682
} // END IF CHANNELS == 2
7684
if (g_iCDFChannels == 3)
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)
7690
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
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++)
7697
if (g_iObsChannel[z2] == 0)
7699
if (o->m_pRDF[z2]->m_bRadialCorrect)
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);
7707
if (g_iObsChannel[z2] == 1)
7709
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
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);
7716
if (o->m_pADF[z2]->m_bMirror)
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);
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)
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);
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);
7746
mprintf(" Not normalizing this CDF.\n");
7750
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7752
try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
7753
if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7755
temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
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);
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)
7771
mprintf(" Calculating Histogram...\n");
7772
temp3DF->CalcHistogram();
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");
7780
if (o->m_pCDF->m_b3DSlices)
7782
for (z3=0;z3<3;z3++)
7784
if (o->m_pCDF->m_i3DSliceIntervals[z3] != 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);
7790
temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]];
7793
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
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;
7802
mprintf(" Setting common intensity range to 0 ... %.3f.\n",tf);
7804
mprintf(" Writing out slice files...\n",z3+1);
7806
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
7808
temp2dfa[z4]->m_fMinEntry = 0;
7809
temp2dfa[z4]->m_fMaxEntry = tf;
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);
7817
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
7818
delete temp2dfa[z4];
7826
mprintf(" Writing out 2D projections...\n");
7827
for (z3=0;z3<3;z3++)
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);
7846
for (z2=0;z2<2;z2++)
7848
if (g_iObsChannel[tia[z2]] == 0)
7850
if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
7852
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
7853
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
7856
if (g_iObsChannel[tia[z2]] == 1)
7858
if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
7860
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
7861
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
7863
/* if (o->m_pADF[z2]->m_bMirror)
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);
7872
o->m_pCDF->m_fFactor = 1.0;
7873
switch(o->m_pCDF->m_iNormalize)
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);
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);
7884
mprintf(" Not normalizing this CDF.\n");
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)
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");
7904
} // END IF CHANNELS == 3
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)
7914
eprintf(" There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
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)
7921
mprintf(" Inserting reference atoms into the Pseudo SDF plot...\n");
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);
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);
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)
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");
7945
if (o->m_pRevSDF->m_bCreateRevSDF)
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);
7954
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
7956
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
7957
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7959
tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
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);
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);
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)
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");
7994
if (g_bSDF || g_bAvg || g_bVoidSDF)
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);
7998
mprintf("\n*** Reference molecule ***\n");
8000
mprintf("Saving reference molecule as \"%s\"...",buf);
8001
a = OpenFileWrite(buf,true);
8004
eprintf("\nError: Could not open %s for writing.\n",buf);
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);
8011
for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
8013
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
8015
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
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());
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);
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++)
8036
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
8038
if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
8040
mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
8047
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
8049
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
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)
8057
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
8059
for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
8061
if ((z2 == z4) && (z3 == z5))
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(" - ");
8081
if (g_bMultiInterval)
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");
8088
if (multicounter < g_laMultiIntervalStart.GetSize())
8089
goto _multiintervalstart;
8097
g_iEndTime = time(NULL);
8098
if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
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");
8111
mprintf(WHITE,"*** The End ***\n\n");
8113
UninstallSignalHandler();
8114
if (g_fInput != NULL)
8116
if (g_pDatabase != NULL)
8121
if (g_pTempTimestep != NULL)
8123
delete g_pTempTimestep;
8124
g_pTempTimestep = NULL;
8136
RemoveAllAnalyses();
8137
RemoveAllElements();
8139
RemoveAllMolecules();
8140
RemoveAllObservations();