1
/*****************************************************************************
2
TRAVIS - Trajectory Analyzer and Visualizer
3
http://www.travis-analyzer.de/
5
Copyright (c) 2009-2013 Martin Brehm
6
2012-2013 Martin Thomas
8
This file written by Martin Brehm.
10
This program is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version.
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
20
You should have received a copy of the GNU General Public License
21
along with this program. If not, see <http://www.gnu.org/licenses/>.
22
*****************************************************************************/
27
#include "statistics.h"
28
#include "maintools.h"
31
#include "lmwrapper.h"
33
#include "xdvector3.h"
34
#include "xdmatrix3.h"
35
#include "xquaternion.h"
36
#include "interface.h"
39
#include "structurefactor.h"
50
/***************************************************************************************************************
51
********************** Beginn Quellcode ***********************************************************************
52
***************************************************************************************************************/
54
int main(int argc, const char *argv[])
59
char buf[256], buf2[64], buf3[256], *p, *q;
60
int ti=-1, ti2=-1, ti3, cc, cc2, ticomb, tic_r=-1, tic_o=-1;
61
int z0, z, z2, z3, z4, z5, z6, z7, z8, zr, zs, zi, z2b, z3b;
62
int z1a, z1t, z2a, z2t;
66
CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
68
double tf, tf2, /*tfr,*/ tf3, tf4, tfs;
72
CMolecule *m, *tm, *m2;
73
CSingleMolecule *sm, *smfix, *sm2, *tsm;
75
unsigned long t0, t1, eta;
83
// CxIntArray tempwa, *twa; // "Temporaeres "W"ord-"A"rray
84
CxIntArray templa, *tla;
85
CxDoubleArray **apfa; // "A"rray von "P"ointern auf "F"loat-"A"rrays
86
double *tda; // "T"emporaeres "D"ouble-"Array"
89
CAtomGroup *atgr, *ag;
92
bool secondmolrun, tb, tbs;
98
CxFloatArray tempfa, tempfa2, *ptfa, *ptfab;
99
CxFloatArray *ptfa2, *ptfa3, *ptfa2b;
101
CFFT *fft/*, *fft2*/;
102
C2DF *temp2df, *tempc2df, **temp2dfa;
108
CAutoCorrelation *ac;
109
CCrossCorrelation *ccr;
111
CMicroHetObservation *mho;
112
unsigned int *pSwapMatrix;
113
CxDMatrix3 tdmat, tdmat2;
114
CxDVector3 dvec0, dvec1, dvec2, dvec3, dvec4;
115
CxQuaternion tq, tq2;
118
#ifdef TARGET_WINDOWS
122
/* CxVector3 va, vb, vc;
126
va[0] = ((rand()%20001)-10000)/10000.0;
127
va[1] = ((rand()%20001)-10000)/10000.0;
128
va[2] = ((rand()%20001)-10000)/10000.0;
129
vb[0] = ((rand()%20001)-10000)/10000.0;
130
vb[1] = ((rand()%20001)-10000)/10000.0;
131
vb[2] = ((rand()%20001)-10000)/10000.0;
132
vc[0] = ((rand()%20001)-10000)/10000.0;
133
vc[1] = ((rand()%20001)-10000)/10000.0;
134
vc[2] = ((rand()%20001)-10000)/10000.0;
136
tf = Dihedral(va,vb,vc,true);
137
tf2 = Dihedral2(va,vb,vc,true);
139
mprintf("%G, %G, %G\n",tf,tf2,tf-tf2);
145
for (tf=10;tf<=100;tf+=1.0)
147
CreateTicks(0,tf,maj,min);
148
printf("*******************************\n");
153
/* a = fopen("test.xyz","wt");
156
fprintf(a,"2\n\nNe %f 0.0 0.0\nNe 0.0 0.0 5.0\n",(float)(z%50));
162
/* // RDF Error 2 Particle test
163
g_pLogFile = OpenFileWrite("travis.log",true);
171
random = new CRandom();
174
tedf->m_fMaxVal = 1000.0;
175
tedf->m_iResolution = 100;
182
mprintf(" Initializing SD Engine...\n");
183
tedf->m_pSDEngine = new CSDEngine();
184
tedf->m_pSDEngine->m_iaBlockSizes.SetSize(bc);
185
mprintf(" Using the following %d block sizes:\n",bc);
187
for (z4=0;z4<bc;z4++)
190
tedf->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/bc)-1.0) / (exp((bc-1.0)*tf/bc)-1.0) * (bma - bmi)) + bmi;
191
mprintf(" %3d: %6d\n",z4+1,tedf->m_pSDEngine->m_iaBlockSizes[z4]);
192
tf2 += (g_iTrajSteps/tedf->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
194
tf2 *= tedf->m_iResolution * sizeof(double);
195
mprintf("\n This requires %s of memory.\n",FormatBytes(tf2));
196
tedf->m_pSDEngine->Init(tedf->m_iResolution);
205
tf = sqrt(pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) );
207
tedf->m_pSDEngine->FinishStep();
211
mprintf(GREEN,"\n>>> SD Engine >>>\n\n");
212
tedf->m_pSDEngine->FinishAnalysis();
213
tedf->m_pSDEngine->DumpData(tedf);
214
mprintf(GREEN,"\n<<< SD Engine <<<\n\n");
215
tedf->Write("","testrdf.csv","",false);
220
/* // Exp Spectrum Test 2
221
g_pLogFile = OpenFileWrite("travis.log",true);
227
random = new CRandom();
230
tedf->m_fMaxVal = 200.0;
231
tedf->m_iResolution = 200;
234
for (z=0;z<10000;z++)
236
tf = (random->RandomNormal()*50.0)+60.0;
240
for (z2=0;z2<200;z2++)
245
tedf->m_pBin[z2] += tf2;
249
tf2 = tedf->m_pBin[0];
250
for (z2=0;z2<200;z2++)
251
tedf->m_pBin[z2] /= tf2;
253
tedf->Fit_ExpSpectrum(50,0.01,1.0);
255
tedf->Write("","exp.csv","",false);
260
/* // Exp Spectrum Test
261
g_pLogFile = OpenFileWrite("travis.log",true);
268
tedf->m_fMaxVal = 200.0;
269
tedf->m_iResolution = 200;
274
tedf->m_pBin[z] = exp(-0.1*z) + exp(-0.05*z);
275
// tedf->m_pBin[z] = (z<100)?1.0-(z/100.0):0;
278
tedf->Fit_ExpSpectrum(30,0.01,1.0);
280
tedf->Write("","exp.csv","",false);
288
CDF *dfu, *dfn, *dfe;
290
random = new CRandom();
293
dfu->m_iResolution = 100;
299
dfn->m_iResolution = 800;
305
dfe->m_iResolution = 400;
310
for (z=0;z<1000000;z++)
312
dfu->AddToBin(random->RandomUniform());
313
dfn->AddToBin(random->RandomNormal());
315
(random->RandomExp());
316
// if ((z%50000) == 0)
319
mprintf("%f\n",random->RandomNormal());
323
dfu->Write("","uniform.csv","",false);
324
dfn->Write("","normal.csv","",false);
325
dfe->Write("","exp.csv","",false);
329
/* a = fopen("E:\\tmptraj.xyz","wt");
331
for (z=0;z<20000;z++)
334
mfprintf(a,"C %f %f %f\n",sin(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),cos(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),0);
335
mfprintf(a,"Si %f %f %f\n",-sin(pow(z/50.0,1.0))*0.0,-cos(pow(z/50.0,1.0))*0.0,0);
343
/**** Initialize Local Variables ***/
350
ReactSecondRun = false;
351
/***********************************/
356
try { g_sExeName = new char[strlen(argv[0])+1]; } catch(...) { g_sExeName = NULL; }
357
if (g_sExeName == NULL) NewException((double)(strlen(argv[0])+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
359
strcpy(g_sExeName,argv[0]);
363
InstallSignalHandler();
367
g_pLogFile = OpenFileWrite("travis.log",true);
369
fprintf(g_pLogFile,"Command line:\n\"");
372
fprintf(g_pLogFile,"%s",argv[z]);
374
fprintf(g_pLogFile," ");
376
fprintf(g_pLogFile,"\"\n\n");
383
#ifdef TARGET_WINDOWS
385
g_sHomeDir = getenv("APPDATA");
386
if (GetComputerName(buf,&tul))
388
try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
389
if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
391
strcpy(g_sHostName,buf);
392
} else g_sHostName = NULL;
394
g_sWorkingDir = _getcwd(NULL,1024);
395
#elif defined(TARGET_LINUX)
396
g_sHomeDir = getenv("HOME");
398
if (gethostname(buf,256)==0)
400
try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
401
if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
403
strcpy(g_sHostName,buf);
404
} else g_sHostName = NULL;
406
g_sWorkingDir = getcwd(NULL,1024);
410
g_sWorkingDir = NULL;
413
ParsePassiveArgs(argc,argv);
425
t2df->m_iRes[0] = 150;
426
t2df->m_iRes[1] = 150;
427
t2df->m_fMinVal[0] = 0;
428
t2df->m_fMaxVal[0] = 1.0;
429
t2df->m_fMinVal[1] = 0;
430
t2df->m_fMaxVal[1] = 0.5;
431
t2df->SetLabelX("Relative Cube Edge Length");
432
t2df->SetLabelY("Total mass [g/mol]");
434
t2df->m_iPlotType = 2;
435
t2df->m_iSmoothGrade = 0;
436
t2df->m_fPlotExp = 0.15;
437
t2df->m_iInterpolationOrder = 1;
438
t2df->m_iPlotPixel = 2000;
439
t2df->m_bContourLines = false;
440
t2df->m_iGPInterpolation = 5;
446
tf = pow((double)(z+1)/150.0,3); // Percentage of total volume
448
for (z2=0;z2<=N;z2++)
450
tf2 = pow(tf,z2) * pow(1.0-tf,N-z2) * BinomialCoeff(N,z2); // Probability for z2 Ar in Cube
452
t2df->AddToBin_IntX(z,z2*10.0 / tf / 5600.0 / 5600.0 / 5600.0 * 1.0e9 * 0.0016605,tf2);
458
t2df->NormalizeBinIntegral(1000000.0);
460
t2df->WriteGnuplotInput("","2df","",false);
464
/********************************************************************/
469
g_fTimestepLength = 1.0;
470
g_iTrajSteps = 1000000;
475
tedf->m_fMaxVal = 40.0;
476
tedf->m_iResolution = 40000;
479
tfil = fopen("D:\\Software\\WaterClassic300Eval\\4b\\rdyn_H2O_[O_H]_P2.csv","rt");
482
for (z=0;z<40000;z++)
485
buf[strlen(buf)-1] = 0;
490
tedf->m_pBin[z] = tf;
496
try { tedf->m_pParameters = new double*[4+1]; } catch(...) { tedf->m_pParameters = NULL; }
497
if (tedf->m_pParameters == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
499
try { tedf->m_pFitIntegral = new double[4+1]; } catch(...) { tedf->m_pFitIntegral = NULL; }
500
if (tedf->m_pFitIntegral == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
502
try { tedf->m_pCorrCoeff = new double[4+1]; } catch(...) { tedf->m_pCorrCoeff = NULL; }
503
if (tedf->m_pCorrCoeff == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
505
try { tedf->m_pAdditionalSets = new double*[4+1]; } catch(...) { tedf->m_pAdditionalSets = NULL; }
506
if (tedf->m_pAdditionalSets == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
508
try { tedf->m_pAdditionalSetLabels = new char*[4+1]; } catch(...) { tedf->m_pAdditionalSetLabels = NULL; }
509
if (tedf->m_pAdditionalSetLabels == NULL) NewException((double)(4+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
511
tedf->m_iAdditionalSets = 4+1;
513
for (z2=0;z2<=4;z2++)
515
tedf->m_pAdditionalSets[z2] = NULL;
516
tedf->m_pAdditionalSetLabels[z2] = NULL;
519
mprintf(YELLOW," Please note: ");
520
mprintf("The lifetime is two times the integral value!\n\n");
522
for (z2=1;z2<=4;z2++)
523
tedf->Fit_PolyExp(z2,5000);
525
// if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
527
mprintf(YELLOW," DACF fit integral overview:\n");
528
mprintf(" (use the row with the highest R value)\n\n");
529
mprintf(WHITE," Degree R Integral [ps] Lifetime [ps]\n");
530
for (z2=1;z2<=4;z2++)
532
if (tedf->m_pFitIntegral[z2] >= 0)
533
mprintf(" %d %10.8f %-10G %-10G\n",z2,tedf->m_pCorrCoeff[z2],tedf->m_pFitIntegral[z2],tedf->m_pFitIntegral[z2]*2.0);
534
else mprintf(" %d %10.8f - -\n",z2,tedf->m_pCorrCoeff[z2]);
539
sprintf(buf,"dacf_D.csv");
540
mprintf(" Saving DACF File as \"%s\"...\n",buf);
541
tedf->Write("",buf,"",false);
546
/********************************************************************/
553
else DipolGrimme(argv[2]);
557
if (!ParseArgs(argc,argv))
560
if (g_sInputTraj == NULL)
562
eprintf(" No trajectory file specified.\n");
563
mprintf(" Please use the -p flag to specify an input trajectory in the command line.\n\n");
564
mprintf(" Enter the file name of the trajectory file to open: [Quit] ");
573
try { g_sInputTraj = new char[strlen(buf)+1]; } catch(...) { g_sInputTraj = NULL; }
574
if (g_sInputTraj == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
576
strcpy(g_sInputTraj,buf);
579
if (!DetermineTrajFormat())
582
g_bInputRedirected = false;
583
if (g_sInputFile != NULL)
585
g_fInputFile = fopen(g_sInputFile,"rt");
586
if (g_fInputFile == NULL)
588
eprintf("Could not open input file \"%s\".\n",g_sInputFile);
591
g_bInputRedirected = true;
594
if (IsTTY(stdin) && (!g_bInputRedirected))
596
g_fInput = OpenFileWrite("input.txt",true);
597
g_bInputRedirected = false;
598
inpprintf("! TRAVIS input file\n! Created with TRAVIS version compiled at %s %s\n",__DATE__,__TIME__);
601
today = localtime(<ime);
602
strcpy(buf,asctime(today));
603
buf[strlen(buf)-1] = 0;
604
inpprintf("! Input file written at %s.\n",buf);
605
} else g_bInputRedirected = true;
607
if (g_sInputTraj[0] != 0)
609
mprintf(" Opening position trajectory %s ...",g_sInputTraj);
610
if (!FileExist(g_sInputTraj))
612
eprintf("\nError. File does not exist or cannot be read.\n");
616
if (g_sInputVel[0] != 0)
618
mprintf(" Opening velocity trajectory %s ...",g_sInputVel);
619
if (!FileExist(g_sInputVel))
621
eprintf("\nError. File does not exist or cannot be read.\n");
625
if (g_sInputForce[0] != 0)
627
mprintf(" Opening Force Trajectory %s ...",g_sInputForce);
628
if (!FileExist(g_sInputForce))
630
eprintf("\nError. File does not exist or cannot be read.\n");
635
if (g_sInputTraj[0] == 0)
637
eprintf("Error: No trajectory file specified.\n");
640
g_fPos = fopen(g_sInputTraj,"rt");
643
eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
647
if (!g_TimeStep.ReadTimestep(g_fPos,true))
649
eprintf("\nError reading first time step from trajectory. Leaving.\n");
654
mprintf("\n Found 4th column of numbers in XYZ file.\n");
656
g_TimeStep.CalcMinMax();
660
// fgetpos(g_fPos,&fpos);
661
fpos = ftell(g_fPos);
662
fseek(g_fPos,0,SEEK_END);
663
fpos2 = ftell(g_fPos);
664
// fgetpos(g_fPos,&fpos2);
670
mprintf("\n Could not determine trajectory file size.\n\n");
674
g_iTrajSteps = fpos2/fpos;
675
mprintf("\n Trajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
678
g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
680
if (g_iGesAtomCount == 0)
682
eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
686
g_iGesVirtAtomCount = g_iGesAtomCount;
687
g_TimeStep.AddAtoms();
688
if (g_bUnknownElements)
692
mprintf(WHITE," %d atoms in the system: ",g_iGesAtomCount);
693
for (z=0;z<g_oaAtoms.GetSize();z++)
695
mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
696
if (z < (int)g_oaAtoms.GetSize()-1)
700
mprintf(" System extent: X = { %+5.0f .. %+5.0f pm }, dX = %.0f pm\n",g_TimeStep.m_vMin[0],g_TimeStep.m_vMax[0],g_TimeStep.m_vMax[0]-g_TimeStep.m_vMin[0]);
701
mprintf(" (in step 1) Y = { %+5.0f .. %+5.0f pm }, dY = %.0f pm\n",g_TimeStep.m_vMin[1],g_TimeStep.m_vMax[1],g_TimeStep.m_vMax[1]-g_TimeStep.m_vMin[1]);
702
mprintf(" Z = { %+5.0f .. %+5.0f pm }, dZ = %.0f pm\n",g_TimeStep.m_vMin[2],g_TimeStep.m_vMax[2],g_TimeStep.m_vMax[2]-g_TimeStep.m_vMin[2]);
704
g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
708
/****************************/
713
/************** Beginn Analyse **************/
717
if (g_bScanVelocities)
719
eprintf("\nError: Velocity pre-analysis not compatible with stream input.\n\n");
723
if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
725
eprintf("\nError: Neighborhood pre-analysis not compatible with stream input.\n\n");
730
g_iStartTime = time(NULL);
732
if (g_iMaxStep != -1)
734
g_iTrajSteps = g_iMaxStep;
737
if (g_iTrajSteps != -1)
739
g_iTrajSteps -= g_iBeginStep;
740
if (g_iTrajSteps < 1)
745
if (g_bResp || g_bFFGen)
752
if (g_bMultiInterval)
754
g_iBeginStep = g_laMultiIntervalStart[multicounter];
755
g_iScanNbhStart = g_iBeginStep;
756
g_iMaxStep = g_laMultiIntervalEnd[multicounter] - g_laMultiIntervalStart[multicounter] + 1;
757
g_iScanNbhSteps = g_iMaxStep;
758
mprintf(YELLOW,"***********************************************\n");
759
mprintf(YELLOW,"*** Interval %2d (%6d - %6d) starting. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
760
mprintf(YELLOW,"***********************************************\n\n");
761
sprintf(multibuf,"_I%d_%d-%d",multicounter+1,g_laMultiIntervalStart[multicounter],g_laMultiIntervalEnd[multicounter]);
762
} else multibuf[0] = 0;
764
mprintf(WHITE,">>> Initialization >>>\n\n");
766
g_bAbortAnalysis = false;
770
g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
773
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
776
if ((g_bNPT) && (g_sNPTFile[0] != 0))
778
g_fNPTFile = fopen(g_sNPTFile,"rt");
779
if (g_fNPTFile == NULL)
781
eprintf("\nCould not open cell vector file.\n");
787
if (g_iBeginStep != 0)
789
mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
790
if (g_iBeginStep != g_iScanMolStep)
793
for (z=0;z<g_iBeginStep;z++)
795
if (fmod(z,g_iBeginStep/50.0) < 1.0)
797
if (!g_TimeStep.SkipTimestep(g_fPos))
799
eprintf("\nError: Unexpected end of position trajectory.\n");
802
if ((g_bNPT) && (g_sNPTFile[0] != 0))
803
fgets(buf,256,g_fNPTFile);
805
mprintf(WHITE,"]\n");
807
g_iFastForwardPos = ftell(g_fPos);
808
else g_iFastForwardPos = 0;
811
mprintf(" Position already known from molecule recognition, directly seeking.\n");
812
fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
815
mprintf(" Step %d begins at offset %lu (%.1f MB).\n\n",g_iBeginStep+1,g_iFastForwardPos,g_iFastForwardPos/1024.0/1024.0);
818
// g_fPos = fopen(g_sInputTraj,"rb");
819
// mprintf("Seek: %d.\n",g_iFastForwardPos);
820
// fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
824
g_TimeStep.ReadTimestep(g_fPos,true);
825
if ((g_bNPT) && (g_sNPTFile[0] != 0))
827
g_TimeStep.ReadCellVector(g_fNPTFile);
833
g_TimeStep.CalcCenters();
836
g_TimeStep.UniteMolecules(false);
838
if (g_bScanVelocities && (!g_bStreamInput))
840
mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
842
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
845
eprintf("Error. Input Trajectory suddenly vanished ^^\n");
848
g_iSteps = 0; // Der Zaehler der Zeitschritte
849
if (g_iScanVelStart != 0)
851
mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
853
for (z=0;z<g_iScanVelStart;z++)
855
if (fmod(z,g_iScanVelStart/60.0) < 1.0)
857
if (!g_TimeStep.SkipTimestep(g_fPos))
860
mprintf(WHITE,"]\n");
863
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
865
if (!g_TimeStep.ReadTimestep(g_fPos,false))
867
if (g_TimeStep.m_iGesAtomCount == 0)
870
g_TimeStep.CalcCenters();
872
if ((g_iSteps % 4) == 0)
874
if ((g_iSteps % 200) == 0)
875
mprintf("\nStep %6d...",g_iSteps);
881
if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
888
mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
889
} // END IF g_bScanVelocities
892
if (g_bSaveRefEnv && (g_iNbhMode == 1))
894
mprintf("Creating statical neighborhood...\n");
895
g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
896
if (g_bSaveRefWithEnv)
898
mprintf("Adding reference molecule to neighborhood...\n");
899
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
906
if (g_bVACF && g_bGlobalVACF)
908
mprintf("Initializing Global Velocity Autocorrelation Function...\n");
909
g_pGlobalVACF->Create();
911
if (!g_bVACFCacheMode)
913
if (g_pGlobalVACF->m_iSize > g_iStepHistory)
914
g_iStepHistory = g_pGlobalVACF->m_iSize;
917
mprintf(" VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_iGesAtomCount*g_iTrajSteps*3.1*sizeof(float)));
918
for (z=0;z<g_iGesAtomCount;z++)
920
// mprintf("%d: %s: %f\n",z,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_sLabel,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fRadius);
921
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z] > 1000))
923
// mprintf(" --> Ok\n");
925
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
926
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
928
if (g_iTrajSteps != -1)
930
ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
931
ptfa->SetGrow((long)(g_iTrajSteps*0.1));
932
} else ptfa->SetGrow(1000);
933
g_pGlobalVACF->m_oaCache.Add(ptfa);
938
if (g_bIRSpec && g_bGlobalIR)
940
mprintf(" Creating global IR Spectrum...\n");
941
g_pGlobalIR->m_pRDyn->m_fMinVal = 0;
942
g_pGlobalIR->m_pRDyn->m_fMaxVal = g_pGlobalIR->m_iDepth * g_fTimestepLength / 1000.0f;
943
g_pGlobalIR->m_pRDyn->m_iResolution = g_pGlobalIR->m_iDepth/g_pGlobalIR->m_iStride;
944
g_pGlobalIR->m_pRDyn->SetLabelX("Tau [ps]");
945
g_pGlobalIR->m_pRDyn->SetLabelY("Dipole autocorrelation");
946
g_pGlobalIR->m_pRDyn->Create();
947
if (g_bRDynCacheMode)
949
if (g_iTrajSteps != -1)
950
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
951
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*10000/g_iStride*3.1*sizeof(float)));
952
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
954
try { ptfa = new CxFloatArray("main():ptfa"); } 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
g_pGlobalIR->m_oaCache.Add(ptfa);
966
try { g_pGlobalIR->m_pCount = new double[g_pGlobalIR->m_pRDyn->m_iResolution]; } catch(...) { g_pGlobalIR->m_pCount = NULL; }
967
if (g_pGlobalIR->m_pCount == NULL) NewException((double)g_pGlobalIR->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
969
for (z2=0;z2<g_pGlobalIR->m_pRDyn->m_iResolution;z2++)
970
g_pGlobalIR->m_pCount[z2] = 0;
971
if (!g_bRDynCacheMode)
973
if (g_pGlobalIR->m_iDepth > g_iStepHistory)
974
g_iStepHistory = g_pGlobalIR->m_iDepth;
981
mprintf(" Creating Structure Factor Analysis...\n");
985
if (g_bSaveCondSnapshot)
986
g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
988
for (z=0;z<g_oaObserv.GetSize();z++)
990
mprintf("Initializing Observation %d...\n",z+1);
991
o = (CObservation*)g_oaObserv[z];
995
mprintf(" Creating Aggregation Functions (%d value sets)...\n",o->m_pDACF->m_oaSubDACFs.GetSize());
996
for (z2=0;z2<o->m_pDACF->m_oaSubDACFs.GetSize();z2++)
998
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
1001
try { dacfsub->m_pDLDisp = new C2DF(); } catch(...) { dacfsub->m_pDLDisp = NULL; }
1002
if (dacfsub->m_pDLDisp == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1004
dacfsub->m_pDLDisp->m_iRes[0] = o->m_pDACF->m_iLifetimeRes;
1005
dacfsub->m_pDLDisp->m_fMinVal[0] = 0.0f;
1006
dacfsub->m_pDLDisp->m_fMaxVal[0] = o->m_pDACF->m_fLargestLifetime;
1007
dacfsub->m_pDLDisp->m_iRes[1] = o->m_pDACF->m_iDisplacementRes;
1008
dacfsub->m_pDLDisp->m_fMinVal[1] = 0.0f;
1009
dacfsub->m_pDLDisp->m_fMaxVal[1] = o->m_pDACF->m_fLargestDisplacement;
1010
dacfsub->m_pDLDisp->Create();
1011
dacfsub->m_pDLDisp->SetLabelX("Lifetime [ps]");
1012
dacfsub->m_pDLDisp->SetLabelY("Displacement [pm]");
1017
try { dacfsub->m_pPairMSD = new CAF(); } catch(...) { dacfsub->m_pPairMSD = NULL; }
1018
if (dacfsub->m_pPairMSD == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1020
dacfsub->m_pPairMSD->m_iResolution = o->m_pDACF->m_iDACFRes;
1021
dacfsub->m_pPairMSD->m_fMinVal = 0.0f;
1022
dacfsub->m_pPairMSD->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1023
dacfsub->m_pPairMSD->Create();
1028
try { dacfsub->m_pDDisp = new CDF(); } catch(...) { dacfsub->m_pDDisp = NULL; }
1029
if (dacfsub->m_pDDisp == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1031
dacfsub->m_pDDisp->m_iResolution = o->m_pDACF->m_iDisplacementRes;
1032
dacfsub->m_pDDisp->m_fMinVal = 0.0f;
1033
dacfsub->m_pDDisp->m_fMaxVal = o->m_pDACF->m_fLargestDisplacement;
1034
dacfsub->m_pDDisp->SetLabelX("Dimer displacement [pm]");
1035
dacfsub->m_pDDisp->SetLabelY("Occurrence");
1036
dacfsub->m_pDDisp->Create();
1041
try { dacfsub->m_pDLDF = new CDF(); } catch(...) { dacfsub->m_pDLDF = NULL; }
1042
if (dacfsub->m_pDLDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1044
dacfsub->m_pDLDF->m_bLeft = true;
1045
dacfsub->m_pDLDF->m_iResolution = o->m_pDACF->m_iLifetimeRes;
1046
dacfsub->m_pDLDF->m_fMinVal = 0.0f;
1047
dacfsub->m_pDLDF->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1048
dacfsub->m_pDLDF->SetLabelX("Tau [ps]");
1049
dacfsub->m_pDLDF->SetLabelY("Occurrence");
1050
dacfsub->m_pDLDF->Create();
1055
try { dacfsub->m_pDACF = new CDF(); } catch(...) { dacfsub->m_pDACF = NULL; }
1056
if (dacfsub->m_pDACF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1058
dacfsub->m_pDACF->m_bLeft = true;
1059
dacfsub->m_pDACF->m_iResolution = o->m_pDACF->m_iDACFRes;
1060
dacfsub->m_pDACF->m_fMinVal = 0;
1061
dacfsub->m_pDACF->m_fMaxVal = o->m_pDACF->m_iDACFRes * g_fTimestepLength / 1000.0;
1062
dacfsub->m_pDACF->SetLabelX("Tau [ps]");
1063
dacfsub->m_pDACF->SetLabelY("Occurrence");
1064
dacfsub->m_pDACF->Create();
1066
if (dacfsub->m_bNewMode)
1068
// mprintf("Create: %d*%d=%d\n",((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize());
1069
try { dacfsub->m_piaIntervals = new CxIntArray[((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()]; } catch(...) { dacfsub->m_piaIntervals = NULL; }
1070
if (dacfsub->m_piaIntervals == NULL) NewException((double)((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()*sizeof(CxIntArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1074
try { dacfsub->m_pNDF = new CDF(); } catch(...) { dacfsub->m_pNDF = NULL; }
1075
if (dacfsub->m_pNDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1077
dacfsub->m_pNDF->m_iResolution = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1078
dacfsub->m_pNDF->m_fMinVal = 0.0f;
1079
dacfsub->m_pNDF->m_fMaxVal = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1080
dacfsub->m_pNDF->Create();
1086
mprintf(" Creating SDF...\n");
1087
o->m_pSDF->m_pSDF->m_fMinVal[0] = -o->m_pSDF->m_fRadius;
1088
o->m_pSDF->m_pSDF->m_fMaxVal[0] = o->m_pSDF->m_fRadius;
1089
o->m_pSDF->m_pSDF->m_fMinVal[1] = -o->m_pSDF->m_fRadius;
1090
o->m_pSDF->m_pSDF->m_fMaxVal[1] = o->m_pSDF->m_fRadius;
1091
o->m_pSDF->m_pSDF->m_fMinVal[2] = -o->m_pSDF->m_fRadius;
1092
o->m_pSDF->m_pSDF->m_fMaxVal[2] = o->m_pSDF->m_fRadius;
1093
o->m_pSDF->m_pSDF->m_iRes[0] = o->m_pSDF->m_iResolution;
1094
o->m_pSDF->m_pSDF->m_iRes[1] = o->m_pSDF->m_iResolution;
1095
o->m_pSDF->m_pSDF->m_iRes[2] = o->m_pSDF->m_iResolution;
1096
o->m_pSDF->m_pSDF->m_iHistogramRes = o->m_pSDF->m_iHistogramRes;
1097
o->m_pSDF->m_pSDF->Create();
1
/*****************************************************************************
2
TRAVIS - Trajectory Analyzer and Visualizer
3
http://www.travis-analyzer.de/
5
Copyright (c) 2009-2014 Martin Brehm
6
2012-2014 Martin Thomas
8
This file written by Martin Brehm.
10
This program is free software: you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation, either version 3 of the License, or
13
(at your option) any later version.
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
GNU General Public License for more details.
20
You should have received a copy of the GNU General Public License
21
along with this program. If not, see <http://www.gnu.org/licenses/>.
22
*****************************************************************************/
27
#include "statistics.h"
28
#include "maintools.h"
31
#include "lmwrapper.h"
33
#include "xdvector3.h"
34
#include "xdmatrix3.h"
35
#include "xquaternion.h"
36
#include "interface.h"
39
//#include "structurefactor.h"
51
/***************************************************************************************************************
52
********************** Beginn Quellcode ***********************************************************************
53
***************************************************************************************************************/
55
int main(int argc, const char *argv[])
60
char buf[256], buf2[64], buf3[256], *p, *q;
61
int ti=-1, ti2=-1, ti3, cc, cc2, ticomb, tic_r=-1, tic_o=-1;
62
int z0, z, z2, z3, z4, z5, z6, z7, z8, zr, zs, zi, z2b, z3b;
63
int z1a, z1t, z2a, z2t;
67
CxVector3 vec0, vec1, vec2, vec3, vec4, vec5, vecv, vecc;
69
double tf, tf2, /*tfr,*/ tf3, tf4, tfs;
73
CMolecule *m, *tm, *m2;
74
CSingleMolecule *sm, *smfix, *sm2, *tsm;
76
unsigned long t0, t1, eta;
84
// CxIntArray tempwa, *twa; // "Temporaeres "W"ord-"A"rray
85
CxIntArray templa, *tla;
86
CxDoubleArray **apfa; // "A"rray von "P"ointern auf "F"loat-"A"rrays
87
double *tda; // "T"emporaeres "D"ouble-"Array"
90
CAtomGroup *atgr, *ag;
93
bool secondmolrun, tb, tbs;
99
CxFloatArray tempfa, tempfa2, *ptfa, *ptfab;
100
CxFloatArray *ptfa2, *ptfa3, *ptfa2b;
102
CFFT *fft/*, *fft2*/;
103
C2DF *temp2df, *tempc2df, **temp2dfa;
109
CAutoCorrelation *ac;
110
CCrossCorrelation *ccr;
112
CMicroHetObservation *mho;
113
unsigned int *pSwapMatrix;
114
CxDMatrix3 tdmat, tdmat2;
115
CxDVector3 dvec0, dvec1, dvec2, dvec3, dvec4;
116
CxQuaternion tq, tq2;
119
#ifdef TARGET_WINDOWS
123
/* CxVector3 va, vb, vc;
127
va[0] = ((rand()%20001)-10000)/10000.0;
128
va[1] = ((rand()%20001)-10000)/10000.0;
129
va[2] = ((rand()%20001)-10000)/10000.0;
130
vb[0] = ((rand()%20001)-10000)/10000.0;
131
vb[1] = ((rand()%20001)-10000)/10000.0;
132
vb[2] = ((rand()%20001)-10000)/10000.0;
133
vc[0] = ((rand()%20001)-10000)/10000.0;
134
vc[1] = ((rand()%20001)-10000)/10000.0;
135
vc[2] = ((rand()%20001)-10000)/10000.0;
137
tf = Dihedral(va,vb,vc,true);
138
tf2 = Dihedral2(va,vb,vc,true);
140
mprintf("%G, %G, %G\n",tf,tf2,tf-tf2);
146
for (tf=10;tf<=100;tf+=1.0)
148
CreateTicks(0,tf,maj,min);
149
printf("*******************************\n");
154
/* a = fopen("test.xyz","wt");
157
fprintf(a,"2\n\nNe %f 0.0 0.0\nNe 0.0 0.0 5.0\n",(float)(z%50));
163
/* // RDF Error 2 Particle test
164
g_pLogFile = OpenFileWrite("travis.log",true);
172
random = new CRandom();
175
tedf->m_fMaxVal = 1000.0;
176
tedf->m_iResolution = 100;
183
mprintf(" Initializing SD Engine...\n");
184
tedf->m_pSDEngine = new CSDEngine();
185
tedf->m_pSDEngine->m_iaBlockSizes.SetSize(bc);
186
mprintf(" Using the following %d block sizes:\n",bc);
188
for (z4=0;z4<bc;z4++)
191
tedf->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/bc)-1.0) / (exp((bc-1.0)*tf/bc)-1.0) * (bma - bmi)) + bmi;
192
mprintf(" %3d: %6d\n",z4+1,tedf->m_pSDEngine->m_iaBlockSizes[z4]);
193
tf2 += (g_iTrajSteps/tedf->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
195
tf2 *= tedf->m_iResolution * sizeof(double);
196
mprintf("\n This requires %s of memory.\n",FormatBytes(tf2));
197
tedf->m_pSDEngine->Init(tedf->m_iResolution);
206
tf = sqrt(pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) + pow((random->RandomUniform()*2000.0)-1000.0,2) );
208
tedf->m_pSDEngine->FinishStep();
212
mprintf(GREEN,"\n>>> SD Engine >>>\n\n");
213
tedf->m_pSDEngine->FinishAnalysis();
214
tedf->m_pSDEngine->DumpData(tedf);
215
mprintf(GREEN,"\n<<< SD Engine <<<\n\n");
216
tedf->Write("","testrdf.csv","",false);
221
/* // Exp Spectrum Test 2
222
g_pLogFile = OpenFileWrite("travis.log",true);
228
random = new CRandom();
231
tedf->m_fMaxVal = 200.0;
232
tedf->m_iResolution = 200;
235
for (z=0;z<10000;z++)
237
tf = (random->RandomNormal()*50.0)+60.0;
241
for (z2=0;z2<200;z2++)
246
tedf->m_pBin[z2] += tf2;
250
tf2 = tedf->m_pBin[0];
251
for (z2=0;z2<200;z2++)
252
tedf->m_pBin[z2] /= tf2;
254
tedf->Fit_ExpSpectrum(50,0.01,1.0);
256
tedf->Write("","exp.csv","",false);
261
/* // Exp Spectrum Test
262
g_pLogFile = OpenFileWrite("travis.log",true);
269
tedf->m_fMaxVal = 200.0;
270
tedf->m_iResolution = 200;
275
tedf->m_pBin[z] = exp(-0.1*z) + exp(-0.05*z);
276
// tedf->m_pBin[z] = (z<100)?1.0-(z/100.0):0;
279
tedf->Fit_ExpSpectrum(30,0.01,1.0);
281
tedf->Write("","exp.csv","",false);
289
CDF *dfu, *dfn, *dfe;
291
random = new CRandom();
294
dfu->m_iResolution = 100;
300
dfn->m_iResolution = 800;
306
dfe->m_iResolution = 400;
311
for (z=0;z<1000000;z++)
313
dfu->AddToBin(random->RandomUniform());
314
dfn->AddToBin(random->RandomNormal());
316
(random->RandomExp());
317
// if ((z%50000) == 0)
320
mprintf("%f\n",random->RandomNormal());
324
dfu->Write("","uniform.csv","",false);
325
dfn->Write("","normal.csv","",false);
326
dfe->Write("","exp.csv","",false);
330
/* a = fopen("E:\\tmptraj.xyz","wt");
332
for (z=0;z<20000;z++)
335
mfprintf(a,"C %f %f %f\n",sin(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),cos(pow(z/50.0,1.0))*(1.2+sin(z/30.0)*0.4),0);
336
mfprintf(a,"Si %f %f %f\n",-sin(pow(z/50.0,1.0))*0.0,-cos(pow(z/50.0,1.0))*0.0,0);
344
/**** Initialize Local Variables ***/
351
ReactSecondRun = false;
352
/***********************************/
357
try { g_sExeName = new char[strlen(argv[0])+1]; } catch(...) { g_sExeName = NULL; }
358
if (g_sExeName == NULL) NewException((double)(strlen(argv[0])+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
360
strcpy(g_sExeName,argv[0]);
364
InstallSignalHandler();
368
g_pLogFile = OpenFileWrite("travis.log",true);
370
fprintf(g_pLogFile,"Command line:\n\"");
373
fprintf(g_pLogFile,"%s",argv[z]);
375
fprintf(g_pLogFile," ");
377
fprintf(g_pLogFile,"\"\n\n");
384
#ifdef TARGET_WINDOWS
386
g_sHomeDir = getenv("APPDATA");
387
if (GetComputerName(buf,&tul))
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);
396
#elif defined(TARGET_LINUX)
397
g_sHomeDir = getenv("HOME");
399
if (gethostname(buf,256)==0)
401
try { g_sHostName = new char[strlen(buf)+1]; } catch(...) { g_sHostName = NULL; }
402
if (g_sHostName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
404
strcpy(g_sHostName,buf);
405
} else g_sHostName = NULL;
407
g_sWorkingDir = getcwd(NULL,1024);
411
g_sWorkingDir = NULL;
414
ParsePassiveArgs(argc,argv);
426
t2df->m_iRes[0] = 150;
427
t2df->m_iRes[1] = 150;
428
t2df->m_fMinVal[0] = 0;
429
t2df->m_fMaxVal[0] = 1.0;
430
t2df->m_fMinVal[1] = 0;
431
t2df->m_fMaxVal[1] = 0.5;
432
t2df->SetLabelX("Relative Cube Edge Length");
433
t2df->SetLabelY("Total mass [g/mol]");
435
t2df->m_iPlotType = 2;
436
t2df->m_iSmoothGrade = 0;
437
t2df->m_fPlotExp = 0.15;
438
t2df->m_iInterpolationOrder = 1;
439
t2df->m_iPlotPixel = 2000;
440
t2df->m_bContourLines = false;
441
t2df->m_iGPInterpolation = 5;
447
tf = pow((double)(z+1)/150.0,3); // Percentage of total volume
449
for (z2=0;z2<=N;z2++)
451
tf2 = pow(tf,z2) * pow(1.0-tf,N-z2) * BinomialCoeff(N,z2); // Probability for z2 Ar in Cube
453
t2df->AddToBin_IntX(z,z2*10.0 / tf / 5600.0 / 5600.0 / 5600.0 * 1.0e9 * 0.0016605,tf2);
459
t2df->NormalizeBinIntegral(1000000.0);
461
t2df->WriteGnuplotInput("","2df","",false);
465
/********************************************************************/
470
g_fTimestepLength = 1.0;
471
g_iTrajSteps = 1000000;
476
tedf->m_fMaxVal = 40.0;
477
tedf->m_iResolution = 40000;
480
tfil = fopen("D:\\Software\\WaterClassic300Eval\\4b\\rdyn_H2O_[O_H]_P2.csv","rt");
483
for (z=0;z<40000;z++)
486
buf[strlen(buf)-1] = 0;
491
tedf->m_pBin[z] = tf;
497
try { tedf->m_pParameters = new double*[4+1]; } catch(...) { tedf->m_pParameters = NULL; }
498
if (tedf->m_pParameters == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
500
try { tedf->m_pFitIntegral = new double[4+1]; } catch(...) { tedf->m_pFitIntegral = NULL; }
501
if (tedf->m_pFitIntegral == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
503
try { tedf->m_pCorrCoeff = new double[4+1]; } catch(...) { tedf->m_pCorrCoeff = NULL; }
504
if (tedf->m_pCorrCoeff == NULL) NewException((double)(4+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
506
try { tedf->m_pAdditionalSets = new double*[4+1]; } catch(...) { tedf->m_pAdditionalSets = NULL; }
507
if (tedf->m_pAdditionalSets == NULL) NewException((double)(4+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
509
try { tedf->m_pAdditionalSetLabels = new char*[4+1]; } catch(...) { tedf->m_pAdditionalSetLabels = NULL; }
510
if (tedf->m_pAdditionalSetLabels == NULL) NewException((double)(4+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
512
tedf->m_iAdditionalSets = 4+1;
514
for (z2=0;z2<=4;z2++)
516
tedf->m_pAdditionalSets[z2] = NULL;
517
tedf->m_pAdditionalSetLabels[z2] = NULL;
520
mprintf(YELLOW," Please note: ");
521
mprintf("The lifetime is two times the integral value!\n\n");
523
for (z2=1;z2<=4;z2++)
524
tedf->Fit_PolyExp(z2,5000);
526
// if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
528
mprintf(YELLOW," DACF fit integral overview:\n");
529
mprintf(" (use the row with the highest R value)\n\n");
530
mprintf(WHITE," Degree R Integral [ps] Lifetime [ps]\n");
531
for (z2=1;z2<=4;z2++)
533
if (tedf->m_pFitIntegral[z2] >= 0)
534
mprintf(" %d %10.8f %-10G %-10G\n",z2,tedf->m_pCorrCoeff[z2],tedf->m_pFitIntegral[z2],tedf->m_pFitIntegral[z2]*2.0);
535
else mprintf(" %d %10.8f - -\n",z2,tedf->m_pCorrCoeff[z2]);
540
sprintf(buf,"dacf_D.csv");
541
mprintf(" Saving DACF File as \"%s\"...\n",buf);
542
tedf->Write("",buf,"",false);
547
/********************************************************************/
554
else DipolGrimme(argv[2]);
558
if (!ParseArgs(argc,argv))
561
if (g_sInputTraj == NULL)
563
eprintf(" No trajectory file specified.\n");
564
mprintf(" Please use the -p flag to specify an input trajectory in the command line.\n\n");
568
mprintf(" Enter the file name of the trajectory file to open: [Quit] ");
577
try { g_sInputTraj = new char[strlen(buf)+1]; } catch(...) { g_sInputTraj = NULL; }
578
if (g_sInputTraj == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
580
strcpy(g_sInputTraj,buf);
588
if (!DetermineTrajFormat())
591
g_bInputRedirected = false;
592
if (g_sInputFile != NULL)
594
g_fInputFile = fopen(g_sInputFile,"rt");
595
if (g_fInputFile == NULL)
597
eprintf("Could not open input file \"%s\".\n",g_sInputFile);
600
g_bInputRedirected = true;
603
if (IsTTY(stdin) && (!g_bInputRedirected))
605
g_fInput = OpenFileWrite("input.txt",true);
606
g_bInputRedirected = false;
607
inpprintf("! TRAVIS input file\n! Created with TRAVIS version compiled at %s %s\n",__DATE__,__TIME__);
610
today = localtime(<ime);
611
strcpy(buf,asctime(today));
612
buf[strlen(buf)-1] = 0;
613
inpprintf("! Input file written at %s.\n",buf);
614
} else g_bInputRedirected = true;
616
if (g_sInputTraj[0] != 0)
618
mprintf(" Opening position trajectory %s ...",g_sInputTraj);
619
if (!FileExist(g_sInputTraj))
621
eprintf("\nError. File does not exist or cannot be read.\n");
625
if (g_sInputVel[0] != 0)
627
mprintf(" Opening velocity trajectory %s ...",g_sInputVel);
628
if (!FileExist(g_sInputVel))
630
eprintf("\nError. File does not exist or cannot be read.\n");
634
if (g_sInputForce[0] != 0)
636
mprintf(" Opening Force Trajectory %s ...",g_sInputForce);
637
if (!FileExist(g_sInputForce))
639
eprintf("\nError. File does not exist or cannot be read.\n");
644
if (g_sInputTraj[0] == 0)
646
eprintf("Error: No trajectory file specified.\n");
649
g_fPos = fopen(g_sInputTraj,"rt");
652
eprintf("Error. Could not open \"%s\".\n",g_sInputTraj);
656
if (!g_TimeStep.ReadTimestep(g_fPos,true))
658
eprintf("\nError reading first time step from trajectory. Leaving.\n");
663
mprintf("\n Found 4th column of numbers in XYZ file.\n");
665
g_TimeStep.CalcMinMax();
669
// fgetpos(g_fPos,&fpos);
670
fpos = ftell(g_fPos);
671
fseek(g_fPos,0,SEEK_END);
672
fpos2 = ftell(g_fPos);
673
// fgetpos(g_fPos,&fpos2);
679
mprintf("\n Could not determine trajectory file size.\n\n");
683
g_iTrajSteps = fpos2/fpos;
684
mprintf("\n Trajectory contains approximately %d time steps (file size %s).\n\n",g_iTrajSteps,FormatBytes(fpos2));
687
g_iGesAtomCount = g_TimeStep.m_iGesAtomCount;
689
if (g_iGesAtomCount == 0)
691
eprintf("\n\nNo atoms found. This is probably not what you want. Leaving.\n");
695
g_iGesVirtAtomCount = g_iGesAtomCount;
696
g_TimeStep.AddAtoms();
697
if (g_bUnknownElements)
701
mprintf(WHITE," %d atoms in the system: ",g_iGesAtomCount);
702
for (z=0;z<g_oaAtoms.GetSize();z++)
704
mprintf("%dx %s",((CAtom*)g_oaAtoms[z])->m_iCount,((CAtom*)g_oaAtoms[z])->m_sName);
705
if (z < (int)g_oaAtoms.GetSize()-1)
709
mprintf(" System extent: X = { %+5.0f .. %+5.0f pm }, dX = %.0f pm\n",g_TimeStep.m_vMin[0],g_TimeStep.m_vMax[0],g_TimeStep.m_vMax[0]-g_TimeStep.m_vMin[0]);
710
mprintf(" (in step 1) Y = { %+5.0f .. %+5.0f pm }, dY = %.0f pm\n",g_TimeStep.m_vMin[1],g_TimeStep.m_vMax[1],g_TimeStep.m_vMax[1]-g_TimeStep.m_vMin[1]);
711
mprintf(" Z = { %+5.0f .. %+5.0f pm }, dZ = %.0f pm\n",g_TimeStep.m_vMin[2],g_TimeStep.m_vMax[2],g_TimeStep.m_vMax[2]-g_TimeStep.m_vMin[2]);
713
g_iVirtAtomType = (unsigned char)g_oaAtoms.GetSize();
717
/****************************/
722
/************** Beginn Analyse **************/
726
if (g_bScanVelocities)
728
eprintf("\nError: Velocity pre-analysis not compatible with stream input.\n\n");
732
if ((g_bSaveRefEnv) && (g_iNbhMode == 3))
734
eprintf("\nError: Neighborhood pre-analysis not compatible with stream input.\n\n");
739
g_iStartTime = time(NULL);
741
if (g_iMaxStep != -1)
743
g_iTrajSteps = g_iMaxStep;
746
if (g_iTrajSteps != -1)
748
g_iTrajSteps -= g_iBeginStep;
749
if (g_iTrajSteps < 1)
754
if (g_bResp || g_bFFGen)
761
if (g_bMultiInterval)
763
g_iBeginStep = g_laMultiIntervalStart[multicounter];
764
g_iScanNbhStart = g_iBeginStep;
765
g_iMaxStep = g_laMultiIntervalEnd[multicounter] - g_laMultiIntervalStart[multicounter] + 1;
766
g_iScanNbhSteps = g_iMaxStep;
767
mprintf(YELLOW,"***********************************************\n");
768
mprintf(YELLOW,"*** Interval %2d (%6d - %6d) starting. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
769
mprintf(YELLOW,"***********************************************\n\n");
770
sprintf(multibuf,"_I%d_%d-%d",multicounter+1,g_laMultiIntervalStart[multicounter],g_laMultiIntervalEnd[multicounter]);
771
} else multibuf[0] = 0;
773
mprintf(WHITE,">>> Initialization >>>\n\n");
775
g_bAbortAnalysis = false;
779
g_fPos = fopen(g_sInputTraj,"rb"); // Eingabedatei erneut oeffnen
782
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
785
if ((g_bNPT) && (g_sNPTFile[0] != 0))
787
g_fNPTFile = fopen(g_sNPTFile,"rt");
788
if (g_fNPTFile == NULL)
790
eprintf("\nCould not open cell vector file.\n");
796
if (g_iBeginStep != 0)
798
mprintf("Fast-forwarding to step %d...\n",g_iBeginStep+1);
799
if (g_iBeginStep != g_iScanMolStep)
802
for (z=0;z<g_iBeginStep;z++)
804
if (fmod(z,g_iBeginStep/50.0) < 1.0)
806
if (!g_TimeStep.SkipTimestep(g_fPos))
808
eprintf("\nError: Unexpected end of position trajectory.\n");
811
if ((g_bNPT) && (g_sNPTFile[0] != 0))
812
fgets(buf,256,g_fNPTFile);
814
mprintf(WHITE,"]\n");
816
g_iFastForwardPos = ftell(g_fPos);
817
else g_iFastForwardPos = 0;
820
mprintf(" Position already known from molecule recognition, directly seeking.\n");
821
fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
824
mprintf(" Step %d begins at offset %lu (%.1f MB).\n\n",g_iBeginStep+1,g_iFastForwardPos,g_iFastForwardPos/1024.0/1024.0);
827
// g_fPos = fopen(g_sInputTraj,"rb");
828
// mprintf("Seek: %d.\n",g_iFastForwardPos);
829
// fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
833
g_TimeStep.ReadTimestep(g_fPos,true);
834
if ((g_bNPT) && (g_sNPTFile[0] != 0))
836
g_TimeStep.ReadCellVector(g_fNPTFile);
842
g_TimeStep.CalcCenters();
845
g_TimeStep.UniteMolecules(false);
847
if (g_bScanVelocities && (!g_bStreamInput))
849
mprintf(WHITE,"\n>>> Pre-Analysis for velocity distribution >>>\n\n");
851
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
854
eprintf("Error. Input Trajectory suddenly vanished ^^\n");
857
g_iSteps = 0; // Der Zaehler der Zeitschritte
858
if (g_iScanVelStart != 0)
860
mprintf("Fast-forwarding to step %d...\n",g_iScanVelStart+1);
862
for (z=0;z<g_iScanVelStart;z++)
864
if (fmod(z,g_iScanVelStart/60.0) < 1.0)
866
if (!g_TimeStep.SkipTimestep(g_fPos))
869
mprintf(WHITE,"]\n");
872
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
874
if (!g_TimeStep.ReadTimestep(g_fPos,false))
876
if (g_TimeStep.m_iGesAtomCount == 0)
879
g_TimeStep.CalcCenters();
881
if ((g_iSteps % 4) == 0)
883
if ((g_iSteps % 200) == 0)
884
mprintf("\nStep %6d...",g_iSteps);
890
if ((g_iScanVelSteps > 0) && ((int)g_iSteps >= g_iScanVelSteps))
897
mprintf(WHITE,"\n<<< End of Pre-Analysis for velocity distribution <<<\n\n");
898
} // END IF g_bScanVelocities
901
if (g_bSaveRefEnv && (g_iNbhMode == 1))
903
mprintf("Creating statical neighborhood...\n");
904
g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
905
if (g_bSaveRefWithEnv)
907
mprintf("Adding reference molecule to neighborhood...\n");
908
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
915
if (g_bVACF && g_bGlobalVACF)
917
mprintf("Initializing Global Velocity Autocorrelation Function...\n");
918
g_pGlobalVACF->Create();
920
if (!g_bVACFCacheMode)
922
if (g_pGlobalVACF->m_iSize > g_iStepHistory)
923
g_iStepHistory = g_pGlobalVACF->m_iSize;
926
mprintf(" VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_iGesAtomCount*g_iTrajSteps*3.1*sizeof(float)));
927
for (z=0;z<g_iGesAtomCount;z++)
929
// mprintf("%d: %s: %f\n",z,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_sLabel,((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fRadius);
930
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z] > 1000))
932
// mprintf(" --> Ok\n");
934
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
935
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
937
if (g_iTrajSteps != -1)
939
ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
940
ptfa->SetGrow((long)(g_iTrajSteps*0.1));
941
} else ptfa->SetGrow(1000);
942
g_pGlobalVACF->m_oaCache.Add(ptfa);
947
if (g_bIRSpec && g_bGlobalIR)
949
mprintf(" Creating global IR Spectrum...\n");
950
g_pGlobalIR->m_pRDyn->m_fMinVal = 0;
951
g_pGlobalIR->m_pRDyn->m_fMaxVal = g_pGlobalIR->m_iDepth * g_fTimestepLength / 1000.0f;
952
g_pGlobalIR->m_pRDyn->m_iResolution = g_pGlobalIR->m_iDepth/g_pGlobalIR->m_iStride;
953
g_pGlobalIR->m_pRDyn->SetLabelX("Tau [ps]");
954
g_pGlobalIR->m_pRDyn->SetLabelY("Dipole autocorrelation");
955
g_pGlobalIR->m_pRDyn->Create();
956
if (g_bRDynCacheMode)
958
if (g_iTrajSteps != -1)
959
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
960
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)g_oaSingleMolecules.GetSize()*10000/g_iStride*3.1*sizeof(float)));
961
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
963
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
964
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
966
if (g_iTrajSteps != -1)
968
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
969
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
970
} else ptfa->SetGrow(10000);
971
g_pGlobalIR->m_oaCache.Add(ptfa);
975
try { g_pGlobalIR->m_pCount = new double[g_pGlobalIR->m_pRDyn->m_iResolution]; } catch(...) { g_pGlobalIR->m_pCount = NULL; }
976
if (g_pGlobalIR->m_pCount == NULL) NewException((double)g_pGlobalIR->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
978
for (z2=0;z2<g_pGlobalIR->m_pRDyn->m_iResolution;z2++)
979
g_pGlobalIR->m_pCount[z2] = 0;
980
if (!g_bRDynCacheMode)
982
if (g_pGlobalIR->m_iDepth > g_iStepHistory)
983
g_iStepHistory = g_pGlobalIR->m_iDepth;
990
mprintf(" Creating Structure Factor Analysis...\n");
994
if (g_bSaveCondSnapshot)
995
g_fSaveCondFile = OpenFileWrite("savecondition.xyz",true);
997
for (z=0;z<g_oaObserv.GetSize();z++)
999
mprintf("Initializing Observation %d...\n",z+1);
1000
o = (CObservation*)g_oaObserv[z];
1004
mprintf(" Creating Aggregation Functions (%d value sets)...\n",o->m_pDACF->m_oaSubDACFs.GetSize());
1005
for (z2=0;z2<o->m_pDACF->m_oaSubDACFs.GetSize();z2++)
1007
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[z2];
1010
try { dacfsub->m_pDLDisp = new C2DF(); } catch(...) { dacfsub->m_pDLDisp = NULL; }
1011
if (dacfsub->m_pDLDisp == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1013
dacfsub->m_pDLDisp->m_iRes[0] = o->m_pDACF->m_iLifetimeRes;
1014
dacfsub->m_pDLDisp->m_fMinVal[0] = 0.0f;
1015
dacfsub->m_pDLDisp->m_fMaxVal[0] = o->m_pDACF->m_fLargestLifetime;
1016
dacfsub->m_pDLDisp->m_iRes[1] = o->m_pDACF->m_iDisplacementRes;
1017
dacfsub->m_pDLDisp->m_fMinVal[1] = 0.0f;
1018
dacfsub->m_pDLDisp->m_fMaxVal[1] = o->m_pDACF->m_fLargestDisplacement;
1019
dacfsub->m_pDLDisp->Create();
1020
dacfsub->m_pDLDisp->SetLabelX("Lifetime [ps]");
1021
dacfsub->m_pDLDisp->SetLabelY("Displacement [pm]");
1026
try { dacfsub->m_pPairMSD = new CAF(); } catch(...) { dacfsub->m_pPairMSD = NULL; }
1027
if (dacfsub->m_pPairMSD == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1029
dacfsub->m_pPairMSD->m_iResolution = o->m_pDACF->m_iDACFRes;
1030
dacfsub->m_pPairMSD->m_fMinVal = 0.0f;
1031
dacfsub->m_pPairMSD->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1032
dacfsub->m_pPairMSD->Create();
1037
try { dacfsub->m_pDDisp = new CDF(); } catch(...) { dacfsub->m_pDDisp = NULL; }
1038
if (dacfsub->m_pDDisp == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1040
dacfsub->m_pDDisp->m_iResolution = o->m_pDACF->m_iDisplacementRes;
1041
dacfsub->m_pDDisp->m_fMinVal = 0.0f;
1042
dacfsub->m_pDDisp->m_fMaxVal = o->m_pDACF->m_fLargestDisplacement;
1043
dacfsub->m_pDDisp->SetLabelX("Dimer displacement [pm]");
1044
dacfsub->m_pDDisp->SetLabelY("Occurrence");
1045
dacfsub->m_pDDisp->Create();
1050
try { dacfsub->m_pDLDF = new CDF(); } catch(...) { dacfsub->m_pDLDF = NULL; }
1051
if (dacfsub->m_pDLDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1053
dacfsub->m_pDLDF->m_bLeft = true;
1054
dacfsub->m_pDLDF->m_iResolution = o->m_pDACF->m_iLifetimeRes;
1055
dacfsub->m_pDLDF->m_fMinVal = 0.0f;
1056
dacfsub->m_pDLDF->m_fMaxVal = o->m_pDACF->m_fLargestLifetime;
1057
dacfsub->m_pDLDF->SetLabelX("Tau [ps]");
1058
dacfsub->m_pDLDF->SetLabelY("Occurrence");
1059
dacfsub->m_pDLDF->Create();
1064
try { dacfsub->m_pDACF = new CDF(); } catch(...) { dacfsub->m_pDACF = NULL; }
1065
if (dacfsub->m_pDACF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1067
dacfsub->m_pDACF->m_bLeft = true;
1068
dacfsub->m_pDACF->m_iResolution = o->m_pDACF->m_iDACFRes;
1069
dacfsub->m_pDACF->m_fMinVal = 0;
1070
dacfsub->m_pDACF->m_fMaxVal = o->m_pDACF->m_iDACFRes * g_fTimestepLength / 1000.0;
1071
dacfsub->m_pDACF->SetLabelX("Tau [ps]");
1072
dacfsub->m_pDACF->SetLabelY("Occurrence");
1073
dacfsub->m_pDACF->Create();
1075
if (dacfsub->m_bNewMode)
1077
// mprintf("Create: %d*%d=%d\n",((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize(),((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize());
1078
try { dacfsub->m_piaIntervals = new CxIntArray[((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()]; } catch(...) { dacfsub->m_piaIntervals = NULL; }
1079
if (dacfsub->m_piaIntervals == NULL) NewException((double)((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()*((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize()*sizeof(CxIntArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1083
try { dacfsub->m_pNDF = new CDF(); } catch(...) { dacfsub->m_pNDF = NULL; }
1084
if (dacfsub->m_pNDF == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1086
dacfsub->m_pNDF->m_iResolution = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1087
dacfsub->m_pNDF->m_fMinVal = 0.0f;
1088
dacfsub->m_pNDF->m_fMaxVal = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+1;
1089
dacfsub->m_pNDF->Create();
1095
mprintf(" Creating SDF...\n");
1096
o->m_pSDF->m_pSDF->m_fMinVal[0] = -o->m_pSDF->m_fRadius;
1097
o->m_pSDF->m_pSDF->m_fMaxVal[0] = o->m_pSDF->m_fRadius;
1098
o->m_pSDF->m_pSDF->m_fMinVal[1] = -o->m_pSDF->m_fRadius;
1099
o->m_pSDF->m_pSDF->m_fMaxVal[1] = o->m_pSDF->m_fRadius;
1100
o->m_pSDF->m_pSDF->m_fMinVal[2] = -o->m_pSDF->m_fRadius;
1101
o->m_pSDF->m_pSDF->m_fMaxVal[2] = o->m_pSDF->m_fRadius;
1102
o->m_pSDF->m_pSDF->m_iRes[0] = o->m_pSDF->m_iResolution;
1103
o->m_pSDF->m_pSDF->m_iRes[1] = o->m_pSDF->m_iResolution;
1104
o->m_pSDF->m_pSDF->m_iRes[2] = o->m_pSDF->m_iResolution;
1105
o->m_pSDF->m_pSDF->m_iHistogramRes = o->m_pSDF->m_iHistogramRes;
1106
o->m_pSDF->m_pSDF->Create();
1107
// mprintf("Observation %d: Creating %d VecArrays.\n",z+1,o->m_iShowMolCount);
1109
try { o->m_pSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_vaData = NULL; }
1110
if (o->m_pSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1112
if (o->m_pSDF->m_bVdWSpheres)
1114
try { o->m_pSDF->m_faRadius = new CxFloatArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_faRadius = NULL; }
1115
if (o->m_pSDF->m_faRadius == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1118
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1120
try { o->m_pSDF->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_baDataEnabled = NULL; }
1121
if (o->m_pSDF->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1127
mprintf(" Creating Plane Projection DF...\n");
1128
o->m_pPlProj->m_p2DF->m_fMinVal[0] = o->m_pPlProj->m_fMinVal[0];
1129
o->m_pPlProj->m_p2DF->m_fMaxVal[0] = o->m_pPlProj->m_fMaxVal[0];
1130
o->m_pPlProj->m_p2DF->m_fMinVal[1] = o->m_pPlProj->m_fMinVal[1];
1131
o->m_pPlProj->m_p2DF->m_fMaxVal[1] = o->m_pPlProj->m_fMaxVal[1];
1132
o->m_pPlProj->m_p2DF->m_iRes[0] = o->m_pPlProj->m_iResolution[0];
1133
o->m_pPlProj->m_p2DF->m_iRes[1] = o->m_pPlProj->m_iResolution[1];
1134
o->m_pPlProj->m_p2DF->m_iHistogramRes = o->m_pPlProj->m_iHistogramRes;
1135
o->m_pPlProj->m_p2DF->SetLabelX("X [pm]");
1136
o->m_pPlProj->m_p2DF->SetLabelY("Y [pm]");
1137
o->m_pPlProj->m_p2DF->Create();
1098
1138
// mprintf("Observation %d: Creating %d VecArrays.\n",z+1,o->m_iShowMolCount);
1100
try { o->m_pSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_vaData = NULL; }
1101
if (o->m_pSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1140
try { o->m_pPlProj->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pPlProj->m_vaData = NULL; }
1141
if (o->m_pPlProj->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1103
if (o->m_pSDF->m_bVdWSpheres)
1105
try { o->m_pSDF->m_faRadius = new CxFloatArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_faRadius = NULL; }
1106
if (o->m_pSDF->m_faRadius == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1109
1143
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1111
try { o->m_pSDF->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pSDF->m_baDataEnabled = NULL; }
1112
if (o->m_pSDF->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1118
mprintf(" Creating Reorientation Dynamics...\n");
1119
o->m_pRDyn->m_pRDyn->m_fMinVal = 0;
1120
o->m_pRDyn->m_pRDyn->m_fMaxVal = o->m_pRDyn->m_iDepth * g_fTimestepLength / 1000.0f;
1121
o->m_pRDyn->m_pRDyn->m_iResolution = o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;
1122
o->m_pRDyn->m_pRDyn->SetLabelX("Tau [ps]");
1123
o->m_pRDyn->m_pRDyn->SetLabelY("Vector autocorrelation");
1124
o->m_pRDyn->m_pRDyn->Create();
1125
if (g_bRDynCacheMode)
1127
if (g_iTrajSteps != -1)
1128
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1129
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1130
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
1132
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1133
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1135
if (g_iTrajSteps != -1)
1137
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1138
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1139
} else ptfa->SetGrow(10000);
1140
o->m_pRDyn->m_oaCache.Add(ptfa);
1144
try { o->m_pRDyn->m_pCount = new double[o->m_pRDyn->m_pRDyn->m_iResolution]; } catch(...) { o->m_pRDyn->m_pCount = NULL; }
1145
if (o->m_pRDyn->m_pCount == NULL) NewException((double)o->m_pRDyn->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1147
for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
1148
o->m_pRDyn->m_pCount[z2] = 0;
1149
if (!g_bRDynCacheMode)
1151
if (o->m_pRDyn->m_iDepth > g_iStepHistory)
1152
g_iStepHistory = o->m_pRDyn->m_iDepth;
1159
mprintf(" Creating IR Spectrum...\n");
1160
o->m_pIRSpec->m_pRDyn->m_fMinVal = 0;
1161
o->m_pIRSpec->m_pRDyn->m_fMaxVal = o->m_pIRSpec->m_iDepth * g_fTimestepLength / 1000.0f;
1162
o->m_pIRSpec->m_pRDyn->m_iResolution = o->m_pIRSpec->m_iDepth/o->m_pIRSpec->m_iStride;
1163
o->m_pIRSpec->m_pRDyn->SetLabelX("Tau [ps]");
1164
o->m_pIRSpec->m_pRDyn->SetLabelY("Dipole autocorrelation");
1165
o->m_pIRSpec->m_pRDyn->Create();
1166
if (g_bRDynCacheMode)
1168
if (g_iTrajSteps != -1)
1169
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1170
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1171
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations;z2++)
1173
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1174
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1176
if (g_iTrajSteps != -1)
1178
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1179
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1180
} else ptfa->SetGrow(10000);
1181
o->m_pIRSpec->m_oaCache.Add(ptfa);
1185
try { o->m_pIRSpec->m_pCount = new double[o->m_pIRSpec->m_pRDyn->m_iResolution]; } catch(...) { o->m_pIRSpec->m_pCount = NULL; }
1186
if (o->m_pIRSpec->m_pCount == NULL) NewException((double)o->m_pIRSpec->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1188
for (z2=0;z2<o->m_pIRSpec->m_pRDyn->m_iResolution;z2++)
1189
o->m_pIRSpec->m_pCount[z2] = 0;
1190
if (!g_bRDynCacheMode)
1192
if (o->m_pIRSpec->m_iDepth > g_iStepHistory)
1193
g_iStepHistory = o->m_pIRSpec->m_iDepth;
1200
mprintf(" Creating Density Distribution Function...\n");
1201
o->m_pDensityDF->m_pDensDF->m_fMinVal = o->m_pDensityDF->m_fMinDist;
1202
o->m_pDensityDF->m_pDensDF->m_fMaxVal = o->m_pDensityDF->m_fMaxDist;
1203
o->m_pDensityDF->m_pDensDF->m_iResolution = o->m_pDensityDF->m_iResolution;
1204
o->m_pDensityDF->m_pDensDF->m_iHistogramRes = o->m_pDensityDF->m_iHistogramRes;
1205
o->m_pDensityDF->m_pDensDF->SetLabelX("Distance [pm]");
1206
if (o->m_pDensityDF->m_bDensityMass)
1207
o->m_pDensityDF->m_pDensDF->SetLabelY("Mass Density [g/cm^3]");
1208
else o->m_pDensityDF->m_pDensDF->SetLabelY("Particle Density [1/nm^3]");
1209
o->m_pDensityDF->m_pDensDF->Create();
1214
mprintf(" Creating VHCF...\n");
1215
o->m_pVHDF->m_pVHDF->m_fMinVal[1] = o->m_pVHDF->m_fMinDist;
1216
o->m_pVHDF->m_pVHDF->m_fMaxVal[1] = o->m_pVHDF->m_fMaxDist;
1217
o->m_pVHDF->m_pVHDF->m_iRes[1] = o->m_pVHDF->m_iResolution;
1218
o->m_pVHDF->m_pVHDF->m_fMinVal[0] = 0.0;
1219
o->m_pVHDF->m_pVHDF->m_fMaxVal[0] = o->m_pVHDF->m_iDepth * g_fTimestepLength / 1000.0f;
1220
o->m_pVHDF->m_pVHDF->m_iRes[0] = o->m_pVHDF->m_iDepth / o->m_pVHDF->m_iStride;
1221
o->m_pVHDF->m_pVHDF->Create();
1223
try { o->m_pVHDF->m_pCount = new double[o->m_pVHDF->m_pVHDF->m_iRes[0]]; } catch(...) { o->m_pVHDF->m_pCount = NULL; }
1224
if (o->m_pVHDF->m_pCount == NULL) NewException((double)o->m_pVHDF->m_pVHDF->m_iRes[0]*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1226
for (z0=0;z0<o->m_pVHDF->m_pVHDF->m_iRes[0];z0++)
1227
o->m_pVHDF->m_pCount[z0] = 0;
1228
o->m_pVHDF->m_pVHDF->SetLabelY("Distance [pm]");
1229
o->m_pVHDF->m_pVHDF->SetLabelX("Tau [ps]");
1230
// o->m_pVHDF->m_pVHDF->m_fPlotExp = 1.0;
1231
if (o->m_pVHDF->m_iDepth > g_iStepHistory)
1232
g_iStepHistory = o->m_pVHDF->m_iDepth;
1233
mprintf(" Setting trajectory ring buffer to %s...\n",FormatBytes(g_iStepHistory*g_iGesVirtAtomCount*sizeof(float)*3));
1238
mprintf(" Creating Neighborhood Analysis...\n");
1240
try { o->m_pNbAnalysis->m_pNPFCount = new CDF(); } catch(...) { o->m_pNbAnalysis->m_pNPFCount = NULL; }
1241
if (o->m_pNbAnalysis->m_pNPFCount == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1243
o->m_pNbAnalysis->m_pNPFCount->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1244
o->m_pNbAnalysis->m_pNPFCount->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1245
o->m_pNbAnalysis->m_pNPFCount->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1247
o->m_pNbAnalysis->m_pNPFCount->Create();
1249
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1250
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1252
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1253
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1254
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1255
tdf->SetLabelX("Distance [pm]");
1256
tdf->SetLabelY("Occurrence");
1258
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1260
for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
1262
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1263
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1265
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1266
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1267
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1268
tdf->SetLabelX("Distance [pm]");
1269
tdf->SetLabelY("Occurrence");
1271
o->m_pNbAnalysis->m_oaDF.Add(tdf);
1273
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1274
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1276
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1277
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1278
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1279
tdf->SetLabelX("Distance [pm]");
1280
tdf->SetLabelY("Occurrence");
1282
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1286
for (z0=0;z0<g_iCDFChannels;z0++)
1288
if (g_bRDF && (o->m_pRDF[z0] != NULL))
1290
mprintf(" Creating RDF...\n");
1291
o->m_pRDF[z0]->m_pRDF->m_fMinVal = o->m_pRDF[z0]->m_fMinDist;
1292
o->m_pRDF[z0]->m_pRDF->m_fMaxVal = o->m_pRDF[z0]->m_fMaxDist;
1293
o->m_pRDF[z0]->m_pRDF->m_iResolution = o->m_pRDF[z0]->m_iResolution;
1294
o->m_pRDF[z0]->m_pRDF->m_iHistogramRes = o->m_pRDF[z0]->m_iHistogramRes;
1295
o->m_pRDF[z0]->m_pRDF->SetLabelX("Distance [pm]");
1296
if (o->m_pRDF[z0]->m_bProbDens)
1297
o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r) [nm^(-3)]");
1298
else o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r)");
1300
if (o->m_bObsCertain && o->m_bDecompDist)
1302
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1304
/* try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1305
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1307
for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
1309
try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1310
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1313
for (z3=0;z3<o->m_waObsRefList.GetSize();z3++)
1315
for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
1317
if ((o->m_waObsRefList.GetSize() > 1) && (o->m_waObsShowList.GetSize() > 1))
1318
sprintf(buf,"RM%d-OM%d",o->m_waObsRefList[z3]+1,o->m_waObsShowList[z2]+1);
1319
else if (o->m_waObsRefList.GetSize() > 1)
1320
sprintf(buf,"RM%d",o->m_waObsRefList[z3]+1);
1322
sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
1324
o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z3*o->m_waObsShowList.GetSize()+z2,buf);
1327
} else if (o->m_bDecompType)
1329
m = (CMolecule*)g_oaMolecules[g_iFixMol];
1330
o->m_waDecompTypeRefOffs.SetSize(g_iGesVirtAtomCount);
1331
for (z3=0;z3<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z3++)
1333
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z3*2];
1334
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1336
for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1337
if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
1339
z3 = o->m_waDecompTypeRefList.GetSize();
1340
o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
1342
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1344
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1345
for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1346
o->m_waDecompTypeRefOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1352
m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
1353
else m = (CMolecule*)g_oaMolecules[g_iFixMol];
1354
o->m_waDecompTypeObsOffs.SetSize(g_iGesVirtAtomCount);
1355
for (z6=0;z6<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z6++)
1357
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z6*2+1];
1358
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1360
for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
1361
if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
1363
z3 = o->m_waDecompTypeObsList.GetSize();
1364
o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
1366
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1368
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1369
for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1370
o->m_waDecompTypeObsOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1375
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
1377
/* try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1378
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1380
for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
1382
try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1383
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1386
for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1388
for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
1390
sprintf(buf,"%s-%s",((CAtom*)g_oaAtoms[o->m_waDecompTypeRefList[z3]])->m_sName,((CAtom*)g_oaAtoms[o->m_waDecompTypeObsList[z2]])->m_sName);
1391
o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waDecompTypeObsList.GetSize()+z2,buf);
1394
} else o->m_pRDF[z0]->m_pRDF->Create();
1396
if (o->m_bSecondShowMol && (z0 == 1))
1398
try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1399
if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1401
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1403
try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1404
if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1408
try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1409
if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1411
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1413
try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1414
if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1419
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1421
try { o->m_pRDF[z0]->m_fDist = new FILE*[1]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1422
if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1424
sprintf(buf,"rdf_timedev_%s%s.csv",o->m_pRDF[z0]->m_sName,multibuf);
1425
o->m_pRDF[z0]->m_fDist[0] = OpenFileWrite(buf,true);
1428
try { o->m_pRDF[z0]->m_fDist = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1429
if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1431
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1433
sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1434
o->m_pRDF[z0]->m_fDist[z2] = OpenFileWrite(buf,true);
1437
if (o->m_bCombinedPlot)
1439
// mprintf("Combined: Reflist %d, Showlist %d, Combinations %d, Steps %d.\n",o->m_waSaveRefList.GetSize(),o->m_waSaveShowList.GetSize(),o->m_pRDF[z0]->m_iCombinations,g_iTrajSteps);
1441
try { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = NULL; }
1442
if (o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1444
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetTitle("Combined distance time development/histogram");
1445
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSubTitle(o->m_pRDF[z0]->m_sShortName);
1446
// smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
1447
// sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[0]];
1448
// o->m_pRDF[z0]->BuildAtomList(smfix,sm,sm,&templa);
1449
mprintf(" Trying to reserve %s of memory for combined plot...\n",FormatBytes((double)sizeof(double)*o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pRDF[z0]->m_iCombinations*g_iTrajSteps/g_iStride));
1450
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1452
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1454
/* for (z4=0;z4<templa.GetSize()/2;z4++)
1456
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1457
sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2]]]])->m_sName,g_waAtomMolNumber[templa[z4*2]]+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2+1]]]])->m_sName,g_waAtomMolNumber[templa[z4*2+1]]+1);
1458
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1459
if (g_iTrajSteps != -1)
1460
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *g_iTrajSteps);
1461
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *100);
1462
if (o->m_bCombinedGreyMode)
1464
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1465
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_iLineColor = ti*0x10000 + ti*0x100 + ti;
1470
for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
1472
g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
1473
for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
1475
a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
1476
for (z1a=0;z1a<a1->GetSize();z1a++)
1478
g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
1479
for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
1481
a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
1482
for (z2a=0;z2a<a2->GetSize();z2a++)
1484
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1486
sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1487
else sprintf(buf,"%s[%d] %s%d - %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1488
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1489
if (g_iTrajSteps != -1)
1490
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *g_iTrajSteps/g_iStride);
1491
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *100);
1492
if (o->m_bCombinedGreyMode)
1494
ti = o->m_iCombinedGreyMin + ((ti2+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1495
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1498
/* if (o->m_pRDF[z0]->m_iRefOrSec[0])
1499
vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1500
else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1501
if (o->m_pRDF[z0]->m_iRefOrSec[1])
1502
vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1503
else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1504
*/ // mprintf("Vector z=%d, z1t=%d, z1a=%d, z2t=%d, z2a=%d.\n",z,z1t,z1a,z2t,z2a);
1513
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelX("Time [ps] / g(r)");
1514
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelY("Distance [pm]");
1519
o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
1522
o->m_pRDF[z0]->InitDeriv();
1524
if (o->m_pRDF[z0]->m_bCalcSD)
1526
mprintf(" Initializing Standard Deviation Engine...\n");
1527
o->m_pRDF[z0]->m_pRDF->m_pSDEngine = new CSDEngine();
1528
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes.SetSize(o->m_pRDF[z0]->m_iSDBlocks);
1529
mprintf(" Using the following %d trajectory block sizes:",o->m_pRDF[z0]->m_iSDBlocks);
1532
for (z4=0;z4<o->m_pRDF[z0]->m_iSDBlocks;z4++)
1536
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) / (exp((o->m_pRDF[z0]->m_iSDBlocks-1.0)*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) * (o->m_pRDF[z0]->m_iSDBlockMax - o->m_pRDF[z0]->m_iSDBlockMin)) + o->m_pRDF[z0]->m_iSDBlockMin;
1537
mprintf("%5d",o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]);
1538
if (z4 < o->m_pRDF[z0]->m_iSDBlocks-1)
1541
tf2 += (g_iTrajSteps/o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
1543
tf2 *= o->m_pRDF[z0]->m_pRDF->m_iResolution * sizeof(double);
1544
mprintf("\n This requires %s of memory.\n\n",FormatBytes(tf2));
1545
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->Init(o->m_pRDF[z0]->m_pRDF->m_iResolution);
1549
if (g_bADF && (o->m_pADF[z0] != NULL))
1551
mprintf(" Creating ADF...\n");
1552
o->m_pADF[z0]->m_pADF->m_fMinVal = o->m_pADF[z0]->m_fMinAngle;
1553
o->m_pADF[z0]->m_pADF->m_fMaxVal = o->m_pADF[z0]->m_fMaxAngle;
1554
o->m_pADF[z0]->m_pADF->m_iResolution = o->m_pADF[z0]->m_iResolution;
1555
o->m_pADF[z0]->m_pADF->m_iHistogramRes = o->m_pADF[z0]->m_iHistogramRes;
1556
if (o->m_pADF[z0]->m_bCosine)
1557
o->m_pADF[z0]->m_pADF->SetLabelX("Cos(angle)");
1558
else o->m_pADF[z0]->m_pADF->SetLabelX("Angle (degree)");
1559
o->m_pADF[z0]->m_pADF->SetLabelY("Occurrence");
1560
if (o->m_bObsCertain && o->m_bDecompDist)
1561
o->m_pADF[z0]->m_pADF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1562
else o->m_pADF[z0]->m_pADF->Create();
1563
if (o->m_bSecondShowMol && (z0 == 1))
1565
try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1566
if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1568
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1570
try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1571
if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1575
try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1576
if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1578
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1580
try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1581
if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1586
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1588
try { o->m_pADF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1589
if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1591
sprintf(buf,"adf_timedev_%s%s.csv",o->m_pADF[z0]->m_sName,multibuf);
1592
o->m_pADF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1595
try { o->m_pADF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1596
if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1598
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1600
sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1601
o->m_pADF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1604
if (o->m_bCombinedPlot)
1606
try { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = NULL; }
1607
if (o->m_pADF[z0]->m_pADF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1609
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetTitle("Combined angle time development/histogram");
1610
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSubTitle(o->m_pADF[z0]->m_sShortName);
1611
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1613
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1615
for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
1617
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->AddDataset();
1618
if (g_iTrajSteps != -1)
1619
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*g_iTrajSteps);
1620
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*100);
1621
if (o->m_bCombinedGreyMode)
1623
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pADF[z0]->m_iCombinations+z2*o->m_pADF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1624
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1626
// o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pADF[z0]->m_iCombinations+z4,2.0f);
1630
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelX("Time [ps] / ADF(r)");
1631
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelY("Angle [Degree]");
1636
o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
1639
o->m_pADF[z0]->InitDeriv();
1642
if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
1644
mprintf(" Creating DipDF...\n");
1645
o->m_pDipDF[z0]->m_pDipoleDF->m_fMinVal = o->m_pDipDF[z0]->m_fDipoleMin;
1646
o->m_pDipDF[z0]->m_pDipoleDF->m_fMaxVal = o->m_pDipDF[z0]->m_fDipoleMax;
1647
o->m_pDipDF[z0]->m_pDipoleDF->m_iResolution = o->m_pDipDF[z0]->m_iResolution;
1648
o->m_pDipDF[z0]->m_pDipoleDF->m_iHistogramRes = o->m_pDipDF[z0]->m_iHistogramRes;
1649
o->m_pDipDF[z0]->m_pDipoleDF->SetLabelX("Dipole moment (Debye)");
1650
o->m_pDipDF[z0]->m_pDipoleDF->SetLabelY("Occurrence");
1651
if (o->m_bObsCertain && o->m_bDecompDist)
1652
o->m_pDipDF[z0]->m_pDipoleDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1653
else o->m_pDipDF[z0]->m_pDipoleDF->Create();
1654
if (o->m_bSecondShowMol && (z0 == 1))
1656
try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1657
if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1659
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1661
try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1662
if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1666
try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1667
if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1669
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1671
try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1672
if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1677
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1679
try { o->m_pDipDF[z0]->m_fDipole = new FILE*[1]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1680
if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1682
sprintf(buf,"dipole_timedev_%s%s.csv",o->m_pDipDF[z0]->m_sName,multibuf);
1683
o->m_pDipDF[z0]->m_fDipole[0] = OpenFileWrite(buf,true);
1686
try { o->m_pDipDF[z0]->m_fDipole = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1687
if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1689
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1691
sprintf(buf,"dipole_timedev_%s_ref%d%s.csv",o->m_pDipDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1692
o->m_pDipDF[z0]->m_fDipole[z2] = OpenFileWrite(buf,true);
1695
if (o->m_bCombinedPlot)
1697
try { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = NULL; }
1698
if (o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1700
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetTitle("Combined dipole moment time development/histogram");
1701
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSubTitle(o->m_pDipDF[z0]->m_sShortName);
1702
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1703
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1705
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->AddDataset();
1706
if (g_iTrajSteps != -1)
1707
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*g_iTrajSteps);
1708
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*100);
1709
if (o->m_bCombinedGreyMode)
1711
ti = o->m_iCombinedGreyMin + ((z3+z2*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1712
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1715
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelX("Time [ps] / DipDF(r)");
1716
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelY("Dipole moment [Debye]");
1721
o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
1724
o->m_pDipDF[z0]->InitDeriv();
1727
if (g_bVDF && (o->m_pVDF[z0] != NULL))
1729
mprintf(" Creating VDF...\n");
1730
o->m_pVDF[z0]->m_pVDF->m_fMinVal = o->m_pVDF[z0]->m_fMinSpeed;
1731
o->m_pVDF[z0]->m_pVDF->m_fMaxVal = o->m_pVDF[z0]->m_fMaxSpeed;
1732
o->m_pVDF[z0]->m_pVDF->m_iResolution = o->m_pVDF[z0]->m_iResolution;
1733
o->m_pVDF[z0]->m_pVDF->m_iHistogramRes = o->m_pVDF[z0]->m_iHistogramRes;
1734
o->m_pVDF[z0]->m_pVDF->SetLabelX("Velocity [pm/ps]");
1735
o->m_pVDF[z0]->m_pVDF->SetLabelY("Occurrence");
1736
if (o->m_bObsCertain && o->m_bDecompDist)
1737
o->m_pVDF[z0]->m_pVDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1738
else o->m_pVDF[z0]->m_pVDF->Create();
1739
if (o->m_bSecondShowMol && (z0 == 1))
1741
try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1742
if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1744
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1746
try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1747
if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1751
try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1752
if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1754
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1756
try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1757
if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1762
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1764
try { o->m_pVDF[z0]->m_fSpeed = new FILE*[1]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1765
if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1767
sprintf(buf,"vdf_timedev_%s%s.csv",o->m_pVDF[z0]->m_sName,multibuf);
1768
o->m_pVDF[z0]->m_fSpeed[0] = OpenFileWrite(buf,true);
1771
try { o->m_pVDF[z0]->m_fSpeed = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1772
if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1774
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1776
sprintf(buf,"vdf_timedev_%s_ref%d%s.csv",o->m_pVDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1777
o->m_pVDF[z0]->m_fSpeed[z2] = OpenFileWrite(buf,true);
1780
if (o->m_bCombinedPlot)
1782
try { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = NULL; }
1783
if (o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1785
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetTitle("Combined velocity time development/histogram");
1786
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSubTitle(o->m_pVDF[z0]->m_sShortName);
1787
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1788
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1789
for (z4=0;z4<o->m_pVDF[z0]->m_iCombinations;z4++)
1791
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->AddDataset();
1792
if (g_iTrajSteps != -1)
1793
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*g_iTrajSteps);
1794
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*100);
1795
if (o->m_bCombinedGreyMode)
1797
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pVDF[z0]->m_iCombinations+z2*o->m_pVDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1798
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1800
// o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
1802
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelX("Time [ps] / VDF(r)");
1803
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelY("Velocity [pm/ps]");
1808
o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
1811
o->m_pVDF[z0]->InitDeriv();
1814
if (g_bDDF && (o->m_pDDF[z0] != NULL))
1816
mprintf(" Creating DDF...\n");
1817
o->m_pDDF[z0]->m_pDDF->m_fMinVal = o->m_pDDF[z0]->m_fMinAngle;
1818
o->m_pDDF[z0]->m_pDDF->m_fMaxVal = o->m_pDDF[z0]->m_fMaxAngle;
1819
o->m_pDDF[z0]->m_pDDF->m_iResolution = o->m_pDDF[z0]->m_iResolution;
1820
o->m_pDDF[z0]->m_pDDF->m_iHistogramRes = o->m_pDDF[z0]->m_iHistogramRes;
1821
if (o->m_pDDF[z0]->m_bCosine)
1822
o->m_pDDF[z0]->m_pDDF->SetLabelX("Cos(Dihedral Angle)");
1823
else o->m_pDDF[z0]->m_pDDF->SetLabelX("Dihedral Angle (Degree)");
1824
o->m_pDDF[z0]->m_pDDF->SetLabelY("Occurrence");
1825
if (o->m_bObsCertain && o->m_bDecompDist)
1826
o->m_pDDF[z0]->m_pDDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1827
else o->m_pDDF[z0]->m_pDDF->Create();
1828
if (o->m_bSecondShowMol && (z0 == 1))
1830
try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1831
if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1833
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1835
try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1836
if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1840
try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1841
if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1843
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1845
try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1846
if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1849
if (o->m_pDDF[z0]->m_bRotate)
1851
for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
1853
o->m_pDDF[z0]->m_faLastData.Add(0);
1854
o->m_pDDF[z0]->m_laRotation.Add(0);
1860
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1862
try { o->m_pDDF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1863
if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1865
sprintf(buf,"ddf_timedev_%s%s.csv",o->m_pDDF[z0]->m_sName,multibuf);
1866
o->m_pDDF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1869
try { o->m_pDDF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1870
if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1872
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1874
sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1875
o->m_pDDF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1878
if (o->m_bCombinedPlot)
1880
try { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = NULL; }
1881
if (o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1883
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetTitle("Combined dihedral time development/histogram");
1884
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSubTitle(o->m_pDDF[z0]->m_sShortName);
1885
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1886
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1887
for (z4=0;z4<o->m_pDDF[z0]->m_iCombinations;z4++)
1889
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->AddDataset();
1890
if (g_iTrajSteps != -1)
1891
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*g_iTrajSteps);
1892
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*100);
1893
if (o->m_bCombinedGreyMode)
1895
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pDDF[z0]->m_iCombinations+z2*o->m_pDDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1896
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1898
// o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pDDF[z0]->m_iCombinations+z4,2.0f);
1900
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelX("Time [ps] / DDF(r)");
1901
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelY("Dihedral [Degree]");
1906
o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
1909
o->m_pDDF[z0]->InitDeriv();
1912
if (g_bPlDF && (o->m_pPlDF[z0] != NULL))
1914
mprintf(" Creating PlDF...\n");
1915
o->m_pPlDF[z0]->m_pPlDF->m_fMinVal = o->m_pPlDF[z0]->m_fMinDist;
1916
o->m_pPlDF[z0]->m_pPlDF->m_fMaxVal = o->m_pPlDF[z0]->m_fMaxDist;
1917
o->m_pPlDF[z0]->m_pPlDF->m_iResolution = o->m_pPlDF[z0]->m_iResolution;
1918
o->m_pPlDF[z0]->m_pPlDF->m_iHistogramRes = o->m_pPlDF[z0]->m_iHistogramRes;
1919
o->m_pPlDF[z0]->m_pPlDF->SetLabelX("Distance from plane [pm]");
1920
o->m_pPlDF[z0]->m_pPlDF->SetLabelY("Occurrence");
1921
o->m_pPlDF[z0]->m_pPlDF->Create();
1922
if (o->m_bSecondShowMol && (z0 == 1))
1924
try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1925
if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1927
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1929
try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1930
if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1934
try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1935
if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1937
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1939
try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1940
if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1945
if (g_bLiDF && (o->m_pLiDF[z0] != NULL))
1947
mprintf(" Creating LiDF...\n");
1948
o->m_pLiDF[z0]->m_pLiDF->m_fMinVal = o->m_pLiDF[z0]->m_fMinDist;
1949
o->m_pLiDF[z0]->m_pLiDF->m_fMaxVal = o->m_pLiDF[z0]->m_fMaxDist;
1950
o->m_pLiDF[z0]->m_pLiDF->m_iResolution = o->m_pLiDF[z0]->m_iResolution;
1951
o->m_pLiDF[z0]->m_pLiDF->m_iHistogramRes = o->m_pLiDF[z0]->m_iHistogramRes;
1952
o->m_pLiDF[z0]->m_pLiDF->SetLabelX("Distance from line [pm]");
1953
o->m_pLiDF[z0]->m_pLiDF->SetLabelY("Occurrence");
1954
o->m_pLiDF[z0]->m_pLiDF->Create();
1955
if (o->m_bSecondShowMol && (z0 == 1))
1957
try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
1958
if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1960
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1962
try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
1963
if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1967
try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
1968
if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1970
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1972
try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
1973
if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1982
mprintf(" Creating CDF...\n");
1983
if (g_iCDFChannels == 2)
1985
try { o->m_pCDF->m_p2DF = new C2DF(); } catch(...) { o->m_pCDF->m_p2DF = NULL; }
1986
if (o->m_pCDF->m_p2DF == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1989
for (z2=0;z2<2;z2++)
1991
o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
1992
switch(g_iObsChannel[z2])
1996
strcat(buf,o->m_pRDF[z2]->m_sShortName);
1997
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
1998
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
1999
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2004
strcat(buf,o->m_pADF[z2]->m_sShortName);
2005
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2006
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2007
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2012
strcat(buf,o->m_pDDF[z2]->m_sShortName);
2013
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2014
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2015
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2019
strcat(buf,"_dipole");
2020
strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2021
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2022
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2023
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2028
strcat(buf,o->m_pVDF[z2]->m_sShortName);
2029
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2030
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2031
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2035
strcat(buf,"_pldf");
2036
strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2037
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2038
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2039
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2043
strcat(buf,"_lidf");
2044
strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2045
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2046
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2047
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2051
o->m_pCDF->m_p2DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2052
o->m_pCDF->m_p2DF->Create();
2053
switch(g_iObsChannel[0])
2056
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2057
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2060
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2061
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2064
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2065
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2068
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2069
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2072
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2073
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2076
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2077
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2080
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2081
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2084
switch(g_iObsChannel[1])
2087
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2088
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2091
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2092
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2095
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2096
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2099
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2100
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2103
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2104
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2107
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2108
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2111
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2112
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2115
} // END IF CHANNELS == 2
2117
if (g_iCDFChannels == 3)
2119
try { o->m_pCDF->m_p3DF = new C3DF(); } catch(...) { o->m_pCDF->m_p3DF = NULL; }
2120
if (o->m_pCDF->m_p3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2123
for (z2=0;z2<g_iCDFChannels;z2++)
2125
o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
2126
switch(g_iObsChannel[z2])
2130
strcat(buf,o->m_pRDF[z2]->m_sShortName);
2131
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
2132
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
2133
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2137
strcat(buf,o->m_pADF[z2]->m_sShortName);
2138
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2139
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2140
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2144
strcat(buf,o->m_pDDF[z2]->m_sShortName);
2145
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2146
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2147
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2150
strcat(buf,"_dipole");
2151
strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2152
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2153
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2154
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2158
strcat(buf,o->m_pVDF[z2]->m_sShortName);
2159
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2160
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2161
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2164
strcat(buf,"_pldf");
2165
strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2166
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2167
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2168
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2171
strcat(buf,"_lidf");
2172
strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2173
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2174
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2175
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2179
o->m_pCDF->m_p3DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2180
o->m_pCDF->m_p3DF->Create();
2181
switch(g_iObsChannel[0])
2184
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2185
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2188
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2189
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2192
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2193
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2196
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2197
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2200
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2201
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2204
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2205
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2208
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2209
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2212
switch(g_iObsChannel[1])
2215
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2216
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2219
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2220
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2223
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2224
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2227
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2228
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2231
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2232
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2235
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2236
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2239
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2240
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2243
switch(g_iObsChannel[2])
2246
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
2247
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2250
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
2251
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2254
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
2255
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2258
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
2259
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2262
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
2263
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2266
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[2]->m_sShortName);
2267
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2270
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[2]->m_sShortName);
2271
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2275
// Fuer jede C3DF noch die 3 C2DFs erzeugen
2276
for (z3=0;z3<3;z3++)
2278
try { o->m_pCDF->m_p3DF->m_p2DF[z3] = new C2DF(); } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3] = NULL; }
2279
if (o->m_pCDF->m_p3DF->m_p2DF[z3] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2297
for (z2=0;z2<2;z2++)
2299
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iRes[z2] = o->m_pCDF->m_iResolution[tia[z2]];
2300
switch(g_iObsChannel[tia[z2]])
2303
strcat(buf3,"_rdf");
2304
strcat(buf3,o->m_pRDF[tia[z2]]->m_sShortName);
2305
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pRDF[tia[z2]]->m_fMinDist;
2306
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pRDF[tia[z2]]->m_fMaxDist;
2307
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pRDF[tia[z2]]->m_pRDF;
2310
strcat(buf3,"_adf");
2311
strcat(buf3,o->m_pADF[tia[z2]]->m_sShortName);
2312
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pADF[tia[z2]]->m_fMinAngle;
2313
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pADF[tia[z2]]->m_fMaxAngle;
2314
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pADF[tia[z2]]->m_pADF;
2317
strcat(buf3,"_ddf");
2318
strcat(buf3,o->m_pDDF[tia[z2]]->m_sShortName);
2319
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDDF[tia[z2]]->m_fMinAngle;
2320
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDDF[tia[z2]]->m_fMaxAngle;
2321
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDDF[tia[z2]]->m_pDDF;
2324
strcat(buf3,"_dipole");
2325
strcat(buf3,o->m_pDipDF[tia[z2]]->m_sShortName);
2326
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMin;
2327
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMax;
2328
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDipDF[tia[z2]]->m_pDipoleDF;
2331
strcat(buf3,"_vdf");
2332
strcat(buf3,o->m_pVDF[tia[z2]]->m_sShortName);
2333
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pVDF[tia[z2]]->m_fMinSpeed;
2334
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pVDF[tia[z2]]->m_fMaxSpeed;
2335
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pVDF[tia[z2]]->m_pVDF;
2338
strcat(buf3,"_pldf");
2339
strcat(buf3,o->m_pPlDF[tia[z2]]->m_sShortName);
2340
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pPlDF[tia[z2]]->m_fMinDist;
2341
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pPlDF[tia[z2]]->m_fMaxDist;
2342
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pPlDF[tia[z2]]->m_pPlDF;
2345
strcat(buf3,"_lidf");
2346
strcat(buf3,o->m_pLiDF[tia[z2]]->m_sShortName);
2347
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pLiDF[tia[z2]]->m_fMinDist;
2348
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pLiDF[tia[z2]]->m_fMaxDist;
2349
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pLiDF[tia[z2]]->m_pLiDF;
2353
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2354
o->m_pCDF->m_p3DF->m_p2DF[z3]->Create();
2355
switch(g_iObsChannel[tia[0]])
2358
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
2359
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2362
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
2363
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2366
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
2367
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2370
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[0]]->m_sShortName);
2371
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2374
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[0]]->m_sShortName);
2375
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2378
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[0]]->m_sShortName);
2379
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2382
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[0]]->m_sShortName);
2383
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2386
switch(g_iObsChannel[tia[1]])
2389
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
2390
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2393
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
2394
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2397
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
2398
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2401
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[1]]->m_sShortName);
2402
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2405
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[1]]->m_sShortName);
2406
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2409
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[1]]->m_sShortName);
2410
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2413
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[1]]->m_sShortName);
2414
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2417
try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = NULL; }
2418
if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2420
strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName,buf3);
2421
sprintf(buf3,"cdf_2");
2422
strcat(buf3,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName);
2424
try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = NULL; }
2425
if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2427
strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
2429
} // END IF CHANNELS == 3
2431
try { o->m_pCDF->m_sShortName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sShortName = NULL; }
2432
if (o->m_pCDF->m_sShortName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2434
strcpy(o->m_pCDF->m_sShortName,buf);
2435
sprintf(buf,"cdf_%d",g_iCDFChannels);
2436
strcat(buf,o->m_pCDF->m_sShortName);
2438
try { o->m_pCDF->m_sName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sName = NULL; }
2439
if (o->m_pCDF->m_sName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2441
strcpy(o->m_pCDF->m_sName,buf);
2442
if (o->m_pCDF->m_bDumpDat)
2444
sprintf(buf,"cdfdump_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2445
o->m_pCDF->m_fDump = OpenFileWrite(buf,true);
2446
mfprintf(o->m_pCDF->m_fDump,"# step; RM; OM1; OM2; channels\n");
2450
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
2452
try { o->m_pCDF->m_fTimeDev = new FILE*[1]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2453
if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2455
sprintf(buf,"cdf_timedev_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2456
o->m_pCDF->m_fTimeDev[0] = OpenFileWrite(buf,true);
2459
try { o->m_pCDF->m_fTimeDev = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2460
if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2462
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2464
sprintf(buf,"cdf_timedev_%dd%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
2465
o->m_pCDF->m_fTimeDev[z2] = OpenFileWrite(buf,true);
2468
if (o->m_pCDF->m_bTDAnimation)
2470
try { o->m_pCDF->m_pTDAPlot = new CGrace(); } catch(...) { o->m_pCDF->m_pTDAPlot = NULL; }
2471
if (o->m_pCDF->m_pTDAPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2473
o->m_pCDF->m_pTDAPlot->SetTitle("CDF Time Development");
2474
o->m_pCDF->m_pTDAPlot->SetSubTitle(&o->m_pCDF->m_sShortName[1]);
2475
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2477
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
2479
for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
2481
o->m_pCDF->m_pTDAPlot->AddDataset();
2482
if (g_iTrajSteps != -1)
2483
o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*g_iTrajSteps);
2484
o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*100);
2488
o->m_pCDF->m_pTDAPlot->SetRangeX(o->m_pCDF->m_p2DF->m_fMinVal[0],o->m_pCDF->m_p2DF->m_fMaxVal[0]);
2489
o->m_pCDF->m_pTDAPlot->SetRangeY(o->m_pCDF->m_p2DF->m_fMinVal[1],o->m_pCDF->m_p2DF->m_fMaxVal[1]);
2490
o->m_pCDF->m_pTDAPlot->MakeTicks();
2491
o->m_pCDF->m_pTDAPlot->SetLabelX(o->m_pCDF->m_p2DF->m_sLabelX);
2492
o->m_pCDF->m_pTDAPlot->SetLabelY(o->m_pCDF->m_p2DF->m_sLabelY);
2499
mprintf(" Creating VACF...\n");
2500
o->m_pVACF->Create();
2501
if (g_bVACFCacheMode)
2503
mprintf(" VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes*g_iTrajSteps*3.1*sizeof(float)));
2504
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
2506
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2507
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2509
if (g_iTrajSteps != -1)
2511
ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
2512
ptfa->SetGrow((long)(g_iTrajSteps*0.1));
2513
} else ptfa->SetGrow(1000);
2514
o->m_pVACF->m_oaCache.Add(ptfa);
2518
if (o->m_pVACF->m_iSize > g_iStepHistory)
2519
g_iStepHistory = o->m_pVACF->m_iSize;
2525
mprintf(" Creating DipACF...\n");
2526
o->m_pDipACF->Create();
2531
mprintf(" Creating MSD...\n");
2532
o->m_pMSD->m_pMSD->m_fMinVal = 0.0f;
2533
o->m_pMSD->m_pMSD->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength*g_iStride/1000.0;
2534
o->m_pMSD->m_pMSD->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2535
o->m_pMSD->m_pMSD->Create();
2536
if (g_bMSDCacheMode)
2538
mprintf(" MSD Cache: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
2539
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2541
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2542
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2544
if (g_iTrajSteps != -1)
2546
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.1));
2547
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.1));
2548
} else ptfa->SetGrow(1000);
2549
o->m_pMSD->m_oaCache.Add(ptfa);
2551
if (o->m_pMSD->m_bSplit)
2553
mprintf(" MSD Split: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride*sizeof(double)));
2554
try { o->m_pMSD->m_pSplitMSD = new CAF*[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms]; } catch(...) { o->m_pMSD->m_pSplitMSD = NULL; }
2555
if (o->m_pMSD->m_pSplitMSD == NULL) NewException((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*sizeof(CAF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2557
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2559
try { o->m_pMSD->m_pSplitMSD[z2] = new CAF(); } catch(...) { o->m_pMSD->m_pSplitMSD[z2] = NULL; }
2560
if (o->m_pMSD->m_pSplitMSD[z2] == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2562
o->m_pMSD->m_pSplitMSD[z2]->m_fMinVal = 0.0f;
2563
o->m_pMSD->m_pSplitMSD[z2]->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength/1000.0;
2564
o->m_pMSD->m_pSplitMSD[z2]->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2565
o->m_pMSD->m_pSplitMSD[z2]->Create();
2570
if (!g_bMSDCacheMode)
2572
if (o->m_pMSD->m_iResolution > g_iStepHistory)
2573
g_iStepHistory = o->m_pMSD->m_iResolution;
2580
mprintf(" Creating Pseudo SDF...\n");
2581
o->m_pRevSDF->m_p2DF->m_fMinVal[0] = -o->m_pRevSDF->m_fRadius;
2582
o->m_pRevSDF->m_p2DF->m_fMaxVal[0] = o->m_pRevSDF->m_fRadius;
2583
o->m_pRevSDF->m_p2DF->m_fMinVal[1] = -o->m_pRevSDF->m_fRadius;
2584
o->m_pRevSDF->m_p2DF->m_fMaxVal[1] = o->m_pRevSDF->m_fRadius;
2585
o->m_pRevSDF->m_p2DF->m_iRes[0] = o->m_pRevSDF->m_iResolution;
2586
o->m_pRevSDF->m_p2DF->m_iRes[1] = o->m_pRevSDF->m_iResolution;
2587
o->m_pRevSDF->m_p2DF->SetLabelX("X [pm]");
2588
o->m_pRevSDF->m_p2DF->SetLabelY("Y [pm]");
2589
o->m_pRevSDF->m_p2DF->m_iHistogramRes = o->m_pRevSDF->m_iHistogramRes;
2590
o->m_pRevSDF->m_p2DF->Create();
2592
try { o->m_pRevSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pRevSDF->m_vaData = NULL; }
2593
if (o->m_pRevSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2599
mprintf(" Creating BondACF...\n");
2600
for (z=0;z<g_oaSingleMolecules.GetSize();z++)
2602
sm = (CSingleMolecule*)g_oaSingleMolecules[z];
2603
for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
2605
bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
2606
for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
2608
if (g_iTrajSteps != -1)
2610
((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetMaxSize(g_iTrajSteps);
2611
((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(g_iTrajSteps/10);
2612
} else ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(10000);
2618
if (g_bClusterAnalysis)
2620
mprintf(" Creating Cluster Analysis...\n");
2621
g_pClusterAnalysis->Create();
2626
mprintf(" Creating FES Analysis...\n");
2632
mprintf(" Creating Microheterogeneity Analysis...\n");
2633
g_pMicroHet->Create();
2638
mprintf(" Creating Thermodynamic Analysis...\n");
2639
g_pThermoAnalysis->Create();
2642
if (g_iRefSystemDim == 3)
2643
g_pRefMol.SetSize(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
2644
if ((g_iRefSystemDim == 3) && !g_bMiddleAvg) // Einfach das erstbeste Molekuel als Referenz nehmen
2646
mprintf("Creating reference molecule from first time step...");
2647
g_TimeStep.CalcCenters();
2648
vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2649
vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
2650
vec3 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
2653
mat.MatUltra(vec2,vec3);
2655
// Jeden Atomtyp des Zielmolekuels durchgehen
2656
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
2658
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
2660
vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]])->m_oaAtomOffset[z3])->GetAt(z4)];
2662
g_pRefMol[cc] = mat * vec2;
2667
} // Ende Referenzbestimmung
2671
mprintf("Creating Reference Molecule Swap Matrix...\n");
2673
try { pSwapMatrix = new unsigned int[((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes]; } catch(...) { pSwapMatrix = NULL; }
2674
if (pSwapMatrix == NULL) NewException((double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*sizeof(unsigned int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2676
for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes;z++)
2680
g_iCurrentTimeStep = -1;
2681
g_iNextTimeStep = -1;
2682
g_iLastTimeStep = -1;
2684
try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
2685
if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2687
if ((g_bSaveRefEnv) && (g_iNbhMode == 3) && (!g_bStreamInput))
2689
mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
2691
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
2694
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
2697
g_iSteps = 0; // Der Zaehler der Zeitschritte
2698
if (g_iScanNbhStart != 0)
2700
mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
2701
mprintf(WHITE," [");
2702
for (z=0;z<g_iScanNbhStart;z++)
2704
if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
2706
if (!g_TimeStep.SkipTimestep(g_fPos))
2709
mprintf(WHITE,"]\n");
2711
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2713
for (z=0;z<(g_iScanNbhStride-1);z++)
2714
if (!g_TimeStep.SkipTimestep(g_fPos))
2716
if (!g_TimeStep.ReadTimestep(g_fPos,false))
2718
if (g_TimeStep.m_iGesAtomCount == 0)
2720
// g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
2721
// g_TimeStep.UniteMolecules();
2722
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2723
g_TimeStep.CalcCenters();
2725
if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
2727
if ((g_iSteps % (200*g_iScanNbhStride)) == 0)
2728
mprintf("\nStep %6d...",g_iSteps);
2732
g_iSteps+=g_iScanNbhStride;
2734
// vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2736
// g_TimeStep.CenterPos(vec1);
2739
// g_TimeStep.FoldMolecules();
2741
// for (z=0;z<g_oaNbSearches.GetSize();z++)
2742
g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
2744
if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
2750
mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
2751
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2753
mprintf(YELLOW,"\n*** Choose Neighbors\n");
2754
// nbset = (CNbSet*)g_oaNbSearches[z0];
2755
// Sort Neighbors after time they have been neighbors
2756
for (z=0;z<g_pNbSet->m_oaConditionGroups.GetSize();z++)
2758
if (g_pNbSet->m_oaConditionGroups[z] == NULL)
2760
cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
2762
try { tpi = new int[((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()]; } catch(...) { tpi = NULL; }
2763
if (tpi == NULL) NewException((double)((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()*sizeof(int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2765
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2767
cg->m_bAlwaysTrue[z2] = false;
2771
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2774
for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
2776
for (z4=0;z4<z2;z4++)
2779
if (cg->m_iPassCounter[z3] > ti)
2781
ti = cg->m_iPassCounter[z3];
2791
mprintf(WHITE,"\n Molecule type %s. %d neighbors found in total:\n",((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2792
for (z2=0;z2<ti3;z2++)
2793
mprintf(" %2d.) Molecule %3d (%8.4f percent of the time, %d hits)\n",z2+1,tpi[z2]+1,((double)cg->m_iPassCounter[tpi[z2]])*g_iScanNbhStride/g_iSteps*100.0,cg->m_iPassCounter[tpi[z2]]);
2797
z3 = AskUnsignedInteger("\nUse how many of the frequentiest neighbors for molecule %s? [%d] ",ti3,((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2798
for (z2=0;z2<z3;z2++)
2799
cg->m_bAlwaysTrue[tpi[z2]] = true;
2803
cg->m_bInactive = true;
2807
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2808
if (g_bSaveRefWithEnv)
2810
mprintf("Adding reference molecule to neighborhood...\n");
2811
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
2821
for (z=0;z<g_oaMolecules.GetSize();z++)
2823
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
2825
sprintf(buf,"vfcorr_%s_%s%s.dat",((CMolecule*)g_oaMolecules[z])->m_sName,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[z])->m_baAtomIndex[z2]])->m_sName,multibuf);
2826
// FreeFileName(buf);
2827
g_fVFCorr[g_iVFCorrCount] = OpenFileWrite(buf,true);
2836
g_pReact->InitMolecules(&g_TimeStep);
2842
sprintf(g_sRefEnv,"refenv_%s.%d.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1);
2843
/* for (z=0;z<g_oaMolecules.GetSize();z++)
2844
if (g_pNbAll->m_waMolCount[z] != 0)
2846
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2847
strcat(g_sRefEnv,buf2);
2849
/* if (!g_bDynamicNeighbor)
2850
strcat(g_sRefEnv,"static.");
2851
if (g_bRefEnvCenter)
2852
strcat(g_sRefEnv,"center.");
2854
strcat(g_sRefEnv,"fix.");
2855
if (g_bScanNeighbors)
2856
strcat(g_sRefEnv,"scannb.");*/
2857
strcat(g_sRefEnv,multibuf);
2858
strcat(g_sRefEnv,"xyz");
2859
mprintf(">>> Saving reference environment as %s\n",g_sRefEnv);
2860
// FreeFileName(g_sRefEnv);
2861
g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2868
sprintf(g_sRefEnv,"cluster_%s.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
2869
/* for (z=0;z<g_oaMolecules.GetSize();z++)
2870
if (g_pNbAll->m_waMolCount[z] != 0)
2872
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2873
strcat(g_sRefEnv,buf2);
2875
/* if (g_bRefEnvCenter)
2876
strcat(g_sRefEnv,"center.");
2878
strcat(g_sRefEnv,"fix.");*/
2879
strcat(g_sRefEnv,multibuf);
2880
strcat(g_sRefEnv,"xyz");
2881
mprintf(">>> Saving cluster list as %s\n",g_sRefEnv);
2882
// FreeFileName(g_sRefEnv);
2883
g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2887
if (g_bSaveJustTraj)
2889
strcpy(buf,g_sInputTraj);
2890
p = strrchr(buf,'/');
2891
q = strrchr(buf,'\\');
2898
p = strrchr(buf2,'.');
2901
strcat(buf2,multibuf);
2902
strcat(buf2,"_out.xyz");
2903
// FreeFileName(buf);
2904
// sprintf(buf,"traj_out.xyz");
2905
mprintf("Saving processed trajectory as %s ...\n",buf2);
2906
g_fSaveJustTraj = OpenFileWrite(buf2,true);
2910
/******* Interface *******************/
2911
if (!Interface_Initialization())
2915
mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
2920
mprintf(WHITE,"\n### Starting Second Pass ###\n");
2923
mprintf(WHITE,"\n### Starting Main Analysis ###\n");
2925
mprintf("\n Please note: The VHCF analysis will become slower while it proceeds.\n");
2929
if (!g_bMultiInterval || (multicounter == 0))
2931
mprintf(WHITE,"\nHint: ");
2932
mprintf("Press CTRL+C once to softly interrupt analysis and still write the results.\n");
2933
mprintf(" Creating an empty file named EXIT (\"touch EXIT\") has the same effect.\n");
2937
if (!g_bStreamInput)
2939
g_fPos = fopen(g_sInputTraj,"rb");
2942
eprintf("\nCould not open position trajectory.\n");
2947
if ((g_bNPT) && (g_sNPTFile[0] != 0))
2949
g_fNPTFile = fopen(g_sNPTFile,"rt");
2950
if (g_fNPTFile == NULL)
2952
eprintf("\nCould not open cell vector file.\n");
2957
if (g_bUseVelocities && (g_sInputVel[0] != 0))
2959
g_fVel = fopen(g_sInputVel,"rt");
2962
eprintf("\nCould not open velocity trajectory.\n");
2966
if (g_bUseForces && (g_sInputForce[0] != 0))
2968
g_fForce = fopen(g_sInputForce,"rt");
2969
if (g_fForce == NULL)
2971
eprintf("\nCould not open force trajectory.\n");
2976
// fff = fopen("dipole.txt","wt");
2978
if (g_iBeginStep != 0)
2980
mprintf("\nFast-forwarding to step %d...\n",g_iBeginStep+1);
2981
// mprintf("Seek: %d.\n",g_iFastForwardPos);
2982
fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
2983
if ((g_fVel != NULL) || (g_fForce != NULL) || ((g_bNPT) && (g_sNPTFile[0] != 0)))
2985
mprintf(WHITE," [");
2986
for (z=0;z<g_iBeginStep;z++)
2988
/* if (!g_TimeStep.SkipTimestep(g_fPos))
2990
eprintf("Error. Unexpected end of position trajectory.\n");
2993
if (fmod(z,g_iBeginStep/60.0) < 1.0)
2997
if (!g_TimeStep.SkipTimestep(g_fVel))
2999
eprintf("Error. Unexpected end of velocity trajectory.\n");
3003
if (g_fForce != NULL)
3005
if (!g_TimeStep.SkipTimestep(g_fForce))
3007
eprintf("Error. Unexpected end of force trajectory.\n");
3011
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3012
fgets(buf,256,g_fNPTFile);
3014
mprintf(WHITE,"]\n");
3018
g_oaTimeSteps.SetSize(g_iStepHistory);
3019
for (z=0;z<g_iStepHistory;z++)
3020
g_oaTimeSteps[z] = NULL;
3022
g_iSteps = 0; // Der Zaehler der Zeitschritte
3023
g_iCurrentTimeStep = 0;
3027
g_iSaveCondCount = 0;
3029
try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
3030
if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3032
try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
3033
if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3035
try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
3036
if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3045
if (g_bDipole && g_bDumpDipoleVector)
3047
g_fDumpDipole = OpenFileWrite("dipole_vectors.csv",true);
3048
fprintf(g_fDumpDipole,"#Step");
3049
for (z=0;z<g_oaMolecules.GetSize();z++)
3051
if (g_oaDumpDipoleVector[z] == NULL)
3053
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3055
fprintf(g_fDumpDipole,"; %s[%d]_X; Y; Z",((CMolecule*)g_oaMolecules[z])->m_sName,((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)+1);
3056
if (g_bDumpDipoleAbs)
3057
fprintf(g_fDumpDipole,"; Abs");
3060
fprintf(g_fDumpDipole,"\n");
3062
if (g_bDumpDipoleXYZ)
3064
g_fDumpDipoleXYZ = OpenFileWrite("dipole_vectors.xyz",true);
3066
fprintf(g_fDumpDipoleXYZ,"%d\n\n",g_iDumpDipoleXYZAtoms);
3068
for (z=0;z<g_oaMolecules.GetSize();z++)
3070
if (g_oaDumpDipoleVector[z] == NULL)
3072
m = (CMolecule*)g_oaMolecules[z];
3073
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3075
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)]];
3077
for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3079
if (m->m_baAtomIndex[z3] == g_iVirtAtomType)
3081
for (z4=0;z4<((CxIntArray*)sm->m_oaAtomOffset[z3])->GetSize();z4++)
3083
ti = ((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(z4);
3084
fprintf(g_fDumpDipoleXYZ,"%s %12f %12f %12f\n",((CAtom*)g_oaAtoms[m->m_baAtomIndex[z3]])->m_sName,g_TimeStep.m_vaCoords[ti][0]/100.0,g_TimeStep.m_vaCoords[ti][1]/100.0,g_TimeStep.m_vaCoords[ti][2]/100.0);
3091
for (z=0;z<g_oaMolecules.GetSize();z++)
3093
if (g_oaDumpDipoleVector[z] == NULL)
3095
m = (CMolecule*)g_oaMolecules[z];
3096
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3098
fprintf(g_fDumpDipoleXYZ,"B %12f 0 0\n",100.0+ti2*3.0);
3099
fprintf(g_fDumpDipoleXYZ,"B %12f 0.5 0\n",100.0+ti2*3.0);
3107
/*****************************************************************************
3108
*************** Beginn Hauptschleife *****************************************
3109
*****************************************************************************/
3111
g_iLastTimeStep = -1;
3113
g_bStepSkipped = false;
3114
g_iFirstStepSkipped = -1;
3117
while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
3121
mprintf("\nEnd of trajectory file reached.\n");
3124
if (g_bAbortAnalysis)
3126
mprintf("\nAnalysis aborted by user.\n");
3129
g_iCurrentTimeStep++;
3130
if (g_iCurrentTimeStep >= g_iStepHistory)
3131
g_iCurrentTimeStep = 0;
3136
if (g_iDerivNext > 2)
3139
if (g_iDerivCurr > 2)
3142
if (g_iDerivLast > 2)
3146
for (z=0;z<(g_iStride-1);z++)
3148
if (!g_TimeStep.SkipTimestep(g_fPos))
3151
eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
3154
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3155
fgets(buf,256,g_fNPTFile);
3158
if (!g_TimeStep.SkipTimestep(g_fVel))
3160
eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
3164
if (g_fForce != NULL)
3166
if (!g_TimeStep.SkipTimestep(g_fForce))
3168
eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
3174
if (g_bUseVelocities || g_bUseForces)
3176
if (GetTimeStep(-1) == NULL)
3178
try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
3179
if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3181
if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
3185
mprintf("\nEnd of Trajectory File reached.\n");
3188
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3191
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3192
GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
3193
if (g_bSkipDoubleSteps)
3195
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3197
if (!g_bStepSkipped)
3199
g_bStepSkipped = true;
3200
g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3201
mprintf("\nSkipping:");
3205
} else if (g_iFirstStepSkipped != -1)
3207
if (g_iFirstStepSkipped == GetTimeStep(-1)->ExtractNumber(g_iNumberPos))
3208
mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3209
else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(-1)->ExtractNumber(g_iNumberPos));
3211
g_iFirstStepSkipped = -1;
3214
if (g_iLastTimeStep != -1)
3216
if (g_iStrideDetect == -1)
3218
g_iStrideDetect = GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3221
if (g_iStrideDetect != (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3225
eprintf("Warning: Two successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(-1)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3231
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3232
g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3234
if (GetTimeStep(-1)->m_iGesAtomCount == 0)
3236
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3239
GetTimeStep(-1)->UniteMolecules(false);
3241
GetTimeStep(-1)->CenterCOM();
3242
GetTimeStep(-1)->CalcCenters();
3246
GetTimeStep(-1)->ScanWannier(false);
3247
GetTimeStep(-1)->CalcDipoles();
3248
if (g_bDumpDipoleVector)
3249
GetTimeStep(-1)->DumpDipoles();
3253
if (GetTimeStep(0) == NULL)
3255
try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
3256
if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3258
if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
3262
mprintf("\nEnd of trajectory file reached.\n");
3265
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3268
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3269
GetTimeStep(0)->ReadCellVector(g_fNPTFile);
3270
if (g_bSkipDoubleSteps)
3272
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3274
// mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
3275
if (!g_bStepSkipped)
3277
g_bStepSkipped = true;
3278
g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3279
mprintf("\nSkipping:");
3283
} else if (g_iFirstStepSkipped != -1)
3285
if (g_iFirstStepSkipped == GetTimeStep(0)->ExtractNumber(g_iNumberPos))
3286
mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3287
else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(0)->ExtractNumber(g_iNumberPos));
3289
g_iFirstStepSkipped = -1;
3291
// mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
3293
if (g_iLastTimeStep != -1)
3295
if (g_iStrideDetect == -1)
3297
g_iStrideDetect = GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3300
if (g_iStrideDetect != (GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3304
eprintf("Warning: Successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(0)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3310
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3311
g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3313
if (GetTimeStep(0)->m_iGesAtomCount == 0)
3315
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3318
if (!g_bSaveCoordsUnchanged)
3320
GetTimeStep(0)->UniteMolecules(false);
3322
GetTimeStep(0)->CenterCOM();
3324
GetTimeStep(0)->CalcCenters();
3328
GetTimeStep(0)->ScanWannier(false);
3329
GetTimeStep(0)->CalcDipoles();
3330
if (g_bDumpDipoleVector)
3331
GetTimeStep(0)->DumpDipoles();
3334
g_bWarnUnsteady = false;
3336
if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
3338
if ((g_iSteps == 0) || g_bStepSkipped)
3340
g_bStepSkipped = false;
3341
if (!g_bSilentProgress)
3342
mprintf("\nStep %6d ",g_iSteps);
3344
if (g_bAsciiArt && (!g_bSilentProgress))
3346
tc = g_oAsciiArt.GetChar();
3349
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3351
if ((time(NULL) - t0) > 5)
3353
eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),(((g_iMaxStep > 0)?g_iMaxStep:g_iTrajSteps) - ((long)g_iSteps)))));
3354
FormatTime(eta,buf);
3355
mprintf(" ETA %s",buf);
3358
mprintf("\nStep %6d ",g_iSteps);
3360
g_oAsciiArt.NewLine();
3361
} else mprintf("%c",tc);
3364
if (g_iDotCounter >= 50)
3367
if (!g_bSilentProgress)
3369
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3371
if ((time(NULL) - t0) > 5)
3373
eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),g_iTrajSteps - ((long)g_iSteps))));
3374
FormatTime(eta,buf);
3375
mprintf(" ETA %s",buf);
3378
mprintf("\nStep %6d ",g_iSteps);
3382
if (!g_bSilentProgress)
3385
if (FileExist("EXIT"))
3387
mprintf("\n\n*** File \"EXIT\" detected. Aborting analysis. ***\n\n");
3393
if ((int)g_iSteps == /*showinterval**/g_iStride*50)
3398
else showinterval = (int)(20.0f/(t1-t0));
3399
if (showinterval == 0)
3404
g_iSteps += g_iStride;
3406
if (GetTimeStep(0)==NULL)
3409
if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
3412
if (g_bUseVelocities)
3417
} else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
3419
eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
3425
if (g_fForce == NULL)
3428
} else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
3430
eprintf("\nError reading force time step %d.\n",g_iSteps+1);
3437
if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
3440
if (g_iClusterPos >= g_iClusterCount)
3443
if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
3446
// mprintf("\nStep %d for clusters.",((int)g_iSteps/g_iStride));
3448
if (g_bUnwrap && ((int)g_iSteps > g_iStride))
3449
// Nicht im ersten Schritt
3451
for (z=0;z<g_oaMolecules.GetSize();z++)
3453
m = (CMolecule*)g_oaMolecules[z];
3454
for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3456
if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
3458
for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
3460
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
3461
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] > g_fBoxX/2.0f)
3462
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] -= g_fBoxX;
3463
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] < -g_fBoxX/2.0f)
3464
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] += g_fBoxX;
3465
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] > g_fBoxY/2.0f)
3466
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] -= g_fBoxY;
3467
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] < -g_fBoxY/2.0f)
3468
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] += g_fBoxY;
3469
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] > g_fBoxZ/2.0f)
3470
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] -= g_fBoxZ;
3471
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] < -g_fBoxZ/2.0f)
3472
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] += g_fBoxZ;
3473
// mprintf("\n%2d.%2d: %f, %f, %f",z,z2,g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2]);
3479
if (g_bKeepUnfoldedCoords)
3480
GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
3482
/******* Interface *********/
3483
Interface_ProcessStep(GetTimeStep(0));
3487
g_pT2Timestep = GetTimeStep(0);
3488
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3491
o = (CObservation*)g_oaObserv[z0];
3492
if (g_bMSDCacheMode)
3494
for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3496
for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3498
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3500
ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3501
ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[ti2];
3503
if (g_bPeriodic && (ptfa->GetSize() > 0))
3505
ti3 = ptfa->GetSize()-3;
3506
vec1[0] = ptfa->GetAt(ti3++);
3507
vec1[1] = ptfa->GetAt(ti3++);
3508
vec1[2] = ptfa->GetAt(ti3);
3509
tf = (g_pT2Timestep->m_vaCoords[ti]-vec1).GetLength();
3510
if (tf > g_fMinPeriodic/2.0)
3511
eprintf("\nDiscontinuity in step %d: %s[%d] %s%d moved %.2f pm. Can't compute MSD from wrapped trajectory - unwrap first.",g_iSteps,((CMolecule*)g_oaMolecules[g_waAtomMolIndex[ti]])->m_sName,g_laAtomSMLocalIndex[ti]+1,((CAtom*)g_oaAtoms[g_waAtomRealElement[ti]])->m_sName,g_waAtomMolNumber[ti]+1,tf);
3514
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][0]);
3515
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][1]);
3516
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][2]);
3524
for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
3526
g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
3527
if (g_pTempTimestep == NULL)
3529
for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3531
for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3533
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3535
ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3536
o->m_pMSD->m_pMSD->AddToBin_Index(z,(double)(pow(g_pTempTimestep->m_vaCoords[ti][0]-g_pT2Timestep->m_vaCoords[ti][0],2)+pow(g_pTempTimestep->m_vaCoords[ti][1]-g_pT2Timestep->m_vaCoords[ti][1],2)+pow(g_pTempTimestep->m_vaCoords[ti][2]-g_pT2Timestep->m_vaCoords[ti][2],2)));
3545
if (g_bSaveJustTraj)
3547
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3549
if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
3551
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iSaveJustMol])->m_laSingleMolIndex[g_iSaveJustSM]])->m_oaAtomOffset[g_iSaveJustAtomType])->GetAt(g_iSaveJustAtom)];
3552
g_pTempTimestep->CenterPos(vec0);
3555
if (g_bSaveTrajNoRot)
3557
g_pTempTimestep->CenterCOM();
3559
// mfprintf(g_fSaveJustTraj," %d\n\n",(int)g_iSaveGesAtoms*3);
3561
// for (z=0;z<g_iGesAtomCount;z++)
3562
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3564
// g_pTempTimestep->Transform(tdmat2);
3565
g_pTempTimestep->Transform(tq2);
3567
// for (z=0;z<g_iGesAtomCount;z++)
3568
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+10.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3570
if ((int)g_iSteps > g_iStride)
3573
for (z=0;z<g_iGesAtomCount;z++)
3575
dvec2 = (g_pTempTimestep->m_vaCoords[z] - rot_ts.m_vaCoords[z]);
3576
dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3578
// tf3 = dvec4.GetLength();
3579
// tf2 = dvec2.GetLength();
3580
// if (4*tf3*tf3 > 0.25*tf2*tf2)
3582
// dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3583
// mprintf("\n%.10g",1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2));
3586
dvec3 = CrossP(dvec4,dvec2);
3587
dvec1 += dvec3 * ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass;
3588
// mprintf(" %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f\n",z,dvec2[0],dvec2[1],dvec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],dvec3[0],dvec3[1],dvec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3590
// mprintf("Drehimpuls: %g ( %g, %g, %g )\n",dvec1.GetLength(),dvec1[0],dvec1[1],dvec1[2]);
3593
// mprintf(" ( %g, %g, %g )\n",vec3[0],vec3[1],vec3[2]);
3596
for (z=0;z<g_iGesAtomCount;z++)
3598
dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3600
// tf3 = dvec4.GetLength();
3601
// tf2 = dvec2.GetLength();
3602
// dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3604
dvec0 = CrossP(dvec4,dvec3);
3605
// mprintf("# ( %g, %g, %g ) x ( %g, %g, %g ) = %g\n",g_pTempTimestep->m_vaCoords[z][0],g_pTempTimestep->m_vaCoords[z][1],g_pTempTimestep->m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],vec0.GetLength());
3606
tf += ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass * dvec0.GetLengthSqr();
3607
// mprintf("\n %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f",z,vec2[0],vec2[1],vec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3609
// mprintf(" Traegheitsmoment: %g\n",tf);
3611
// mprintf("Angular momentum vector: ( %g, %g, %g ) (l = %g)\n",dvec1[0],dvec1[1],dvec1[2],dvec1.GetLength());
3612
// mprintf(" Winkelgeschw.: %g\n",dvec1.GetLength());
3614
// dvec3.Normalize();
3616
// mprintf(" Baue Matrix: ( %g | %g | %g ), %g\n",dvec3[0],dvec3[1],dvec3[2],-dvec1.GetLength());
3618
// tdmat.RotMat(dvec3,-dvec1.GetLength());
3620
tq.BuildRotation(dvec3,dvec1.GetLength());
3622
// mprintf(" Die Matrix:\n");
3625
// tdmat2 = tdmat2 * tdmat;
3628
if (fabs(tq2.GetLength()-1.0) > 0.000001)
3630
eprintf("\nRenormalizing rotation quaternion.\n");
3634
// g_pTempTimestep->Transform(tdmat);
3635
g_pTempTimestep->Transform(tq);
3638
rot_ts.CopyFrom(g_pTempTimestep);
3640
// for (z=0;z<g_iGesAtomCount;z++)
3641
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+20.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3645
if (g_bFold && (!g_bSaveCoordsUnchanged))
3647
if (g_bFoldAtomwise)
3648
g_pTempTimestep->FoldAtoms();
3649
else g_pTempTimestep->FoldMolecules();
3653
if (!g_bCenterZero && (!g_bSaveCoordsUnchanged) && g_bPeriodic)
3654
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3656
ti = g_iSaveGesAtoms;
3658
if (g_bUnwrapWannier)
3660
g_pTempTimestep->ScanWannier(false);
3662
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3664
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3665
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3666
ti += ((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();
3670
mfprintf(g_fSaveJustTraj," %d\n",ti);
3671
if (g_pTempTimestep->m_pComment != NULL)
3672
mfprintf(g_fSaveJustTraj,"%s\n",g_pTempTimestep->m_pComment);
3673
else mfprintf(g_fSaveJustTraj,"\n");
3675
if (g_bWriteAtomwise)
3677
for (z7=0;z7<g_oaAtoms.GetSize();z7++)
3679
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3681
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3682
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3684
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3686
if (atgr->m_baRealAtomType[z4] != z7)
3688
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3689
for (z5=0;z5<tla->GetSize();z5++)
3691
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3694
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3695
// mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3697
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3699
if (g_bSaveVirtAtoms)
3700
mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3701
} else mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3709
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3711
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3712
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3714
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3716
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3717
for (z5=0;z5<tla->GetSize();z5++)
3719
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3722
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3723
// mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3725
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3727
if (g_bSaveVirtAtoms)
3728
mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3729
} else mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3736
if (g_bUnwrapWannier)
3738
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3740
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3741
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3743
for (z4=0;z4<((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();z4++)
3745
vec0 = g_pTempTimestep->m_vaCoords[((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier[z4]];
3747
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3748
mfprintf(g_fSaveJustTraj," X %8.5f %8.5f %8.5f\n",vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3753
} // END IF g_bSaveJustTraj
3757
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3758
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
3760
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
3761
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
3763
bond = (CMolBond*)sm->m_oaBonds[z3];
3764
bond->m_faData.Add(VecDist(g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[0]],g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[1]]));
3769
if (g_bAggregation || g_bNbExchange)
3771
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3773
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3775
o = (CObservation*)g_oaObserv[z0];
3776
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3778
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3779
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3780
dacfsub->m_pCondition->m_iPassCounter[z2] = 0;
3783
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3785
o = (CObservation*)g_oaObserv[z0];
3787
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
3789
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
3791
o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix);
3793
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3795
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3797
dacfsub->m_pCondition->CopyResults(o->m_pDACF->m_pCondition);
3798
dacfsub->m_pCondition->m_bAnyPassed = false;
3799
dacfsub->m_pCondition->ReScan(smfix);
3800
if (dacfsub->m_pCondition->m_bAnyPassed)
3801
dacfsub->m_pCondition->m_iRMPassCounter[z2]++;
3804
o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
3807
o->m_pDACF->UpdateNbEx(z2,dacfsub);
3811
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3813
o = (CObservation*)g_oaObserv[z0];
3814
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3816
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3817
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3818
if (dacfsub->m_pCondition->m_iPassCounter[z2] != 0)
3819
dacfsub->m_pCondition->m_iOMPassCounter[z2]++;
3822
} // END IF AGGREGATION OR NBEX
3826
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3827
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3829
o = (CObservation*)g_oaObserv[z0];
3830
m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
3831
for (z3=0;z3<m->m_laSingleMolIndex.GetSize();z3++)
3833
if (g_bRegionAnalysis)
3834
if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[m->m_laSingleMolIndex[z3]])))
3837
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z3]];
3838
ti = ((CxIntArray*)sm->m_oaAtomOffset[o->m_pDensityDF->m_iCenterAtomType])->GetAt(o->m_pDensityDF->m_iCenterAtom);
3839
vec0 = g_pTempTimestep->m_vaCoords[ti];
3841
g_pTempTimestep->CenterPos(vec0);
3842
g_pTempTimestep->FoldAtoms();
3844
for (z4=0;z4<g_oaMolecules.GetSize();z4++)
3846
if (!o->m_pDensityDF->m_pDensityMolSelect[z4])
3848
m2 = (CMolecule*)g_oaMolecules[z4];
3849
ag = o->m_pDensityDF->m_pDensityMolAG[z4];
3850
for (z5=0;z5<m2->m_laSingleMolIndex.GetSize();z5++)
3852
if (g_bRegionAnalysis)
3853
if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[m2->m_laSingleMolIndex[z5]])))
3856
sm2 = (CSingleMolecule*)g_oaSingleMolecules[m2->m_laSingleMolIndex[z5]];
3857
for (z6=0;z6<ag->m_baAtomType.GetSize();z6++)
3859
if (ag->m_baRealAtomType[z6] == g_iVirtAtomType)
3861
if (o->m_pDensityDF->m_bDensityMass)
3863
tf2 = ((CAtom*)g_oaAtoms[ag->m_baRealAtomType[z6]])->m_pElement->m_fMass;
3864
for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3866
tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3867
o->m_pDensityDF->m_pDensDF->AddToBin(tf,tf2);
3871
for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3873
tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3874
o->m_pDensityDF->m_pDensDF->AddToBin(tf);
3884
if (g_bRDyn || g_bIRSpec)
3886
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3887
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3889
o = (CObservation*)g_oaObserv[z6];
3891
trdyn = o->m_pIRSpec;
3892
else trdyn = o->m_pRDyn;
3894
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3896
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3898
if (trdyn->m_iVecType == 0)
3900
trdyn->BuildAtomList(sm,&templa);
3901
for (z4=0;z4<templa.GetSize();z4+=3)
3903
if (trdyn->m_bOrtho)
3905
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3906
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3907
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3908
vec1 = CrossP(vec2-vec0,vec3-vec0);
3911
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3912
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3916
if (g_bRDynCacheMode)
3918
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
3919
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
3920
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
3924
for (z=0;z<trdyn->m_iDepth/trdyn->m_iStride;z++)
3926
g_pT2Timestep = GetTimeStep(z*trdyn->m_iStride);
3927
if (g_pT2Timestep == NULL)
3929
if (trdyn->m_bOrtho)
3931
vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3932
vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3933
vec5 = g_pT2Timestep->m_vaCoords[templa[z4+2]];
3934
vec2 = CrossP(vec3-vec4,vec5-vec4);
3937
vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
3938
vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
3942
trdyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
3943
trdyn->m_pCount[z]++;
3947
} else if (trdyn->m_iVecType == 1)
3949
vec1 = sm->m_vDipole;
3950
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
3951
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
3952
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
3955
// mfprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
3965
g_pT2Timestep = GetTimeStep(0);
3966
// mprintf("\nStep=%d, adding.",g_iSteps);
3969
if (g_bVACFCacheMode)
3972
for (z2=0;z2<g_iGesAtomCount;z2++)
3974
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
3976
// mprintf("Global: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,z2+1,g_pT2Timestep->m_vaVelocities[z2][0],g_pT2Timestep->m_vaVelocities[z2][1],g_pT2Timestep->m_vaVelocities[z2][2]);
3977
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][0]);
3978
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][1]);
3979
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][2]);
3984
for (z=0;z<g_pGlobalVACF->m_iSize;z++)
3986
g_pTempTimestep = GetTimeStep(z);
3987
if (g_pTempTimestep == NULL)
3989
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
3991
pd = &g_pGlobalVACF->m_pData[z];
3992
g_pGlobalVACF->m_pCounter[z] += g_iGesAtomCount;
3993
for (z2=0;z2<g_iGesAtomCount;z2++)
3994
*pd += DotP(g_pTempTimestep->m_vaVelocities[z2],g_pT2Timestep->m_vaVelocities[z2]);
3998
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4000
o = (CObservation*)g_oaObserv[z6];
4001
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4003
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4004
o->m_pVACF->BuildAtomList(sm,&templa);
4005
for (z4=0;z4<templa.GetSize();z4++)
4007
if (g_bVACFCacheMode)
4010
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][0]);
4011
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][1]);
4012
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][2]);
4013
// mprintf("%d*%d+%d=%d\n",z3,o->m_pVACF->m_iShowAtomGes,z4,z3*o->m_pVACF->m_iShowAtomGes+z4);
4014
// mprintf("Lokal: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,ti+1,g_pT2Timestep->m_vaVelocities[ti][0],g_pT2Timestep->m_vaVelocities[ti][1],g_pT2Timestep->m_vaVelocities[ti][2]);
4015
// mprintf("Step %d: Obs %d, Mol %d, Atom %d: Index %d.\n",g_iStepHistory,z6+1,z3+1,z4+1,ti+1);
4018
for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
4020
o->m_pVACF->m_pCounter[z5]++;
4021
g_pTempTimestep = GetTimeStep(z5);
4022
if (g_pTempTimestep == NULL)
4024
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
4026
o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
4034
if (g_bIRSpec && g_bGlobalIR)
4036
for (z3=0;z3<g_oaSingleMolecules.GetSize();z3++) // Alle anderen Molekuele durchgehen
4038
sm = (CSingleMolecule*)g_oaSingleMolecules[z3];
4039
vec1 = sm->m_vDipole;
4040
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[0]);
4041
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[1]);
4042
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[2]);
4044
} // END IF g_bGlobalIR
4048
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4051
g_pReact->WriteTrajec(g_pTempTimestep);
4054
g_pReact->ScanBonds(g_pTempTimestep,false);
4060
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4061
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4063
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4064
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4066
o = (CObservation*)g_oaObserv[z6];
4067
o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep);
4068
o->m_pNbAnalysis->AnalyzeStep();
4077
if (g_bClusterAnalysis)
4079
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4080
g_pClusterAnalysis->Process(g_pTempTimestep);
4085
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4086
g_pFESA->ProcessStep(g_pTempTimestep);
4091
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4092
g_pTempTimestep->FoldAtomsPositive();
4093
g_pMicroHet->Process(g_pTempTimestep);
4098
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4099
g_pThermoAnalysis->AnalyzeStep(g_pTempTimestep);
4104
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4106
if (g_pVoroWrapper->m_bVoroStat)
4108
g_pTempTimestep->FoldAtomsPositive();
4109
g_pVoroWrapper->Build(g_pTempTimestep);
4112
if (g_pVoroWrapper->m_bWritePOV)
4113
g_pVoroWrapper->WritePOV(g_pTempTimestep);
4115
if (g_pVoroWrapper->m_bSurfCover)
4116
g_pVoroWrapper->ProcessSurfCover(g_pTempTimestep);
4118
if (g_pVoroWrapper->m_bVoroMetric)
4120
if (!g_bClusterAnalysis)
4121
g_pVoroWrapper->BuildVoroMetric(g_pTempTimestep);
4124
if (g_pVoroWrapper->m_bPOVBox)
4126
g_pTempTimestep->FoldAtomsPositive();
4128
g_pVoroWrapper->PerformChoreography(g_pTempTimestep);
4130
if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
4137
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4138
g_pSFac->ProcessStep(g_pTempTimestep);
4143
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4144
g_pTempTimestep->FoldAtomsPositive();
4145
g_pVoroAnalysis->Step(g_pTempTimestep);
4148
if (g_bVDF && (g_iFixMol == -1))
4150
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4151
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4153
o = (CObservation*)g_oaObserv[z6];
4154
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4156
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4157
o->m_pVDF[0]->BuildAtomList(NULL,sm,&templa);
4159
for (z4=0;z4<templa.GetSize();z4++)
4160
o->m_pVDF[0]->m_pVDF->AddToBin(g_pTempTimestep->m_vaVelocities[templa[z4]].GetLength());
4165
if ((!g_bCDF) && (!g_bRDF) && (!g_bSDF) && (!g_bPlDF) && (!g_bLiDF) && (!g_bVoidSDF) && (!g_bADF) && (!g_bDDF) && (!g_bVDF) && (!g_bDipDF) && (!g_bCutCluster) && (!g_bSaveRefEnv) && (!g_bVHDF) && (!g_bRevSDF) && (!g_bCond))
4170
if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
4172
g_pVoroAnalysis->m_pTempSDF->Clear();
4173
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4174
g_pTempTimestep->FoldAtomsPositive();
4175
for (z3=0;z3<g_iGesAtomCount;z3++)
4177
vec0 = g_pTempTimestep->m_vaCoords[z3];
4178
g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
4180
// g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
4186
if (g_iFixMol == -1)
4189
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4191
o = (CObservation*)g_oaObserv[z6];
4193
if (o->m_pConditions != NULL)
4194
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4195
o->m_pConditions->m_iPassCounter[z2] = 0;
4197
if (o->m_pConditionsOM2 != NULL)
4198
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4199
o->m_pConditionsOM2->m_iPassCounter[z2] = 0;
4202
// Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
4203
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4205
if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
4208
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4212
if (g_iClusterPos >= g_iClusterCount)
4215
if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
4218
if (g_iaClusterMol[g_iClusterPos] != z2)
4221
if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
4227
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4229
// Zentrieren/Falten der ganzen Box nur noch noetig bei den folgenden Analysen
4230
if (g_bSDF || g_bRevSDF || g_bCutCluster || g_bSaveRefEnv || g_bSaveJustTraj || g_bVoidSDF || g_bMiddleAvg)
4232
vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4234
if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
1145
try { o->m_pPlProj->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlProj->m_baDataEnabled = NULL; }
1146
if (o->m_pPlProj->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1152
mprintf(" Creating Reorientation Dynamics...\n");
1153
o->m_pRDyn->m_pRDyn->m_fMinVal = 0;
1154
o->m_pRDyn->m_pRDyn->m_fMaxVal = o->m_pRDyn->m_iDepth * g_fTimestepLength / 1000.0f;
1155
o->m_pRDyn->m_pRDyn->m_iResolution = o->m_pRDyn->m_iDepth/o->m_pRDyn->m_iStride;
1156
o->m_pRDyn->m_pRDyn->SetLabelX("Tau [ps]");
1157
o->m_pRDyn->m_pRDyn->SetLabelY("Vector autocorrelation");
1158
o->m_pRDyn->m_pRDyn->Create();
1159
if (g_bRDynCacheMode)
1161
if (g_iTrajSteps != -1)
1162
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1163
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1164
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pRDyn->m_iCombinations;z2++)
1166
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1167
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1169
if (g_iTrajSteps != -1)
1171
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1172
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1173
} else ptfa->SetGrow(10000);
1174
o->m_pRDyn->m_oaCache.Add(ptfa);
1178
try { o->m_pRDyn->m_pCount = new double[o->m_pRDyn->m_pRDyn->m_iResolution]; } catch(...) { o->m_pRDyn->m_pCount = NULL; }
1179
if (o->m_pRDyn->m_pCount == NULL) NewException((double)o->m_pRDyn->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1181
for (z2=0;z2<o->m_pRDyn->m_pRDyn->m_iResolution;z2++)
1182
o->m_pRDyn->m_pCount[z2] = 0;
1183
if (!g_bRDynCacheMode)
1185
if (o->m_pRDyn->m_iDepth > g_iStepHistory)
1186
g_iStepHistory = o->m_pRDyn->m_iDepth;
1193
mprintf(" Creating IR Spectrum...\n");
1194
o->m_pIRSpec->m_pRDyn->m_fMinVal = 0;
1195
o->m_pIRSpec->m_pRDyn->m_fMaxVal = o->m_pIRSpec->m_iDepth * g_fTimestepLength / 1000.0f;
1196
o->m_pIRSpec->m_pRDyn->m_iResolution = o->m_pIRSpec->m_iDepth/o->m_pIRSpec->m_iStride;
1197
o->m_pIRSpec->m_pRDyn->SetLabelX("Tau [ps]");
1198
o->m_pIRSpec->m_pRDyn->SetLabelY("Dipole autocorrelation");
1199
o->m_pIRSpec->m_pRDyn->Create();
1200
if (g_bRDynCacheMode)
1202
if (g_iTrajSteps != -1)
1203
mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
1204
else mprintf(" RDyn Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations*10000/g_iStride*3.1*sizeof(float)));
1205
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pIRSpec->m_iCombinations;z2++)
1207
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
1208
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1210
if (g_iTrajSteps != -1)
1212
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.3));
1213
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.3));
1214
} else ptfa->SetGrow(10000);
1215
o->m_pIRSpec->m_oaCache.Add(ptfa);
1219
try { o->m_pIRSpec->m_pCount = new double[o->m_pIRSpec->m_pRDyn->m_iResolution]; } catch(...) { o->m_pIRSpec->m_pCount = NULL; }
1220
if (o->m_pIRSpec->m_pCount == NULL) NewException((double)o->m_pIRSpec->m_pRDyn->m_iResolution*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1222
for (z2=0;z2<o->m_pIRSpec->m_pRDyn->m_iResolution;z2++)
1223
o->m_pIRSpec->m_pCount[z2] = 0;
1224
if (!g_bRDynCacheMode)
1226
if (o->m_pIRSpec->m_iDepth > g_iStepHistory)
1227
g_iStepHistory = o->m_pIRSpec->m_iDepth;
1234
mprintf(" Creating Density Distribution Function...\n");
1235
o->m_pDensityDF->m_pDensDF->m_fMinVal = o->m_pDensityDF->m_fMinDist;
1236
o->m_pDensityDF->m_pDensDF->m_fMaxVal = o->m_pDensityDF->m_fMaxDist;
1237
o->m_pDensityDF->m_pDensDF->m_iResolution = o->m_pDensityDF->m_iResolution;
1238
o->m_pDensityDF->m_pDensDF->m_iHistogramRes = o->m_pDensityDF->m_iHistogramRes;
1239
o->m_pDensityDF->m_pDensDF->SetLabelX("Distance [pm]");
1240
if (o->m_pDensityDF->m_bDensityMass)
1241
o->m_pDensityDF->m_pDensDF->SetLabelY("Mass Density [g/cm^3]");
1242
else o->m_pDensityDF->m_pDensDF->SetLabelY("Particle Density [1/nm^3]");
1243
o->m_pDensityDF->m_pDensDF->Create();
1248
mprintf(" Creating VHCF...\n");
1249
o->m_pVHDF->m_pVHDF->m_fMinVal[1] = o->m_pVHDF->m_fMinDist;
1250
o->m_pVHDF->m_pVHDF->m_fMaxVal[1] = o->m_pVHDF->m_fMaxDist;
1251
o->m_pVHDF->m_pVHDF->m_iRes[1] = o->m_pVHDF->m_iResolution;
1252
o->m_pVHDF->m_pVHDF->m_fMinVal[0] = 0.0;
1253
o->m_pVHDF->m_pVHDF->m_fMaxVal[0] = o->m_pVHDF->m_iDepth * g_fTimestepLength / 1000.0f;
1254
o->m_pVHDF->m_pVHDF->m_iRes[0] = o->m_pVHDF->m_iDepth / o->m_pVHDF->m_iStride;
1255
o->m_pVHDF->m_pVHDF->Create();
1257
try { o->m_pVHDF->m_pCount = new double[o->m_pVHDF->m_pVHDF->m_iRes[0]]; } catch(...) { o->m_pVHDF->m_pCount = NULL; }
1258
if (o->m_pVHDF->m_pCount == NULL) NewException((double)o->m_pVHDF->m_pVHDF->m_iRes[0]*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1260
for (z0=0;z0<o->m_pVHDF->m_pVHDF->m_iRes[0];z0++)
1261
o->m_pVHDF->m_pCount[z0] = 0;
1262
o->m_pVHDF->m_pVHDF->SetLabelY("Distance [pm]");
1263
o->m_pVHDF->m_pVHDF->SetLabelX("Tau [ps]");
1264
// o->m_pVHDF->m_pVHDF->m_fPlotExp = 1.0;
1265
if (o->m_pVHDF->m_iDepth > g_iStepHistory)
1266
g_iStepHistory = o->m_pVHDF->m_iDepth;
1267
mprintf(" Setting trajectory ring buffer to %s...\n",FormatBytes(g_iStepHistory*g_iGesVirtAtomCount*sizeof(float)*3));
1272
mprintf(" Creating Neighborhood Analysis...\n");
1274
try { o->m_pNbAnalysis->m_pNPFCount = new CDF(); } catch(...) { o->m_pNbAnalysis->m_pNPFCount = NULL; }
1275
if (o->m_pNbAnalysis->m_pNPFCount == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1277
o->m_pNbAnalysis->m_pNPFCount->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1278
o->m_pNbAnalysis->m_pNPFCount->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1279
o->m_pNbAnalysis->m_pNPFCount->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1281
o->m_pNbAnalysis->m_pNPFCount->Create();
1283
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1284
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1286
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1287
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1288
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1289
tdf->SetLabelX("Distance [pm]");
1290
tdf->SetLabelY("Occurrence");
1292
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1294
for (z2=0;z2<=o->m_pNbAnalysis->m_iNbCount;z2++)
1296
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1297
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1299
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1300
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1301
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1302
tdf->SetLabelX("Distance [pm]");
1303
tdf->SetLabelY("Occurrence");
1305
o->m_pNbAnalysis->m_oaDF.Add(tdf);
1307
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
1308
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1310
tdf->m_fMinVal = o->m_pNbAnalysis->m_fMinDist;
1311
tdf->m_fMaxVal = o->m_pNbAnalysis->m_fMaxDist;
1312
tdf->m_iResolution = o->m_pNbAnalysis->m_iResolution;
1313
tdf->SetLabelX("Distance [pm]");
1314
tdf->SetLabelY("Occurrence");
1316
o->m_pNbAnalysis->m_oaNPF.Add(tdf);
1320
for (z0=0;z0<g_iCDFChannels;z0++)
1322
if (g_bRDF && (o->m_pRDF[z0] != NULL))
1324
mprintf(" Creating RDF...\n");
1325
o->m_pRDF[z0]->m_pRDF->m_fMinVal = o->m_pRDF[z0]->m_fMinDist;
1326
o->m_pRDF[z0]->m_pRDF->m_fMaxVal = o->m_pRDF[z0]->m_fMaxDist;
1327
o->m_pRDF[z0]->m_pRDF->m_iResolution = o->m_pRDF[z0]->m_iResolution;
1328
o->m_pRDF[z0]->m_pRDF->m_iHistogramRes = o->m_pRDF[z0]->m_iHistogramRes;
1329
o->m_pRDF[z0]->m_pRDF->SetLabelX("Distance [pm]");
1330
if (o->m_pRDF[z0]->m_bProbDens)
1331
o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r) [nm^(-3)]");
1332
else o->m_pRDF[z0]->m_pRDF->SetLabelY("g(r)");
1334
if (o->m_bObsCertain && o->m_bDecompDist)
1336
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1338
/* try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1339
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1341
for (z=0;z<o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize();z++)
1343
try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1344
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1347
for (z3=0;z3<o->m_waObsRefList.GetSize();z3++)
1349
for (z2=0;z2<o->m_waObsShowList.GetSize();z2++)
1351
if ((o->m_waObsRefList.GetSize() > 1) && (o->m_waObsShowList.GetSize() > 1))
1352
sprintf(buf,"RM%d-OM%d",o->m_waObsRefList[z3]+1,o->m_waObsShowList[z2]+1);
1353
else if (o->m_waObsRefList.GetSize() > 1)
1354
sprintf(buf,"RM%d",o->m_waObsRefList[z3]+1);
1356
sprintf(buf,"OM%d",o->m_waObsShowList[z2]+1);
1358
o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z3*o->m_waObsShowList.GetSize()+z2,buf);
1361
} else if (o->m_bDecompType)
1363
m = (CMolecule*)g_oaMolecules[g_iFixMol];
1364
o->m_waDecompTypeRefOffs.SetSize(g_iGesVirtAtomCount);
1365
for (z3=0;z3<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z3++)
1367
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z3*2];
1368
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1370
for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1371
if (o->m_waDecompTypeRefList[z3] == ag->m_baRealAtomType[z2])
1373
z3 = o->m_waDecompTypeRefList.GetSize();
1374
o->m_waDecompTypeRefList.Add(ag->m_baRealAtomType[z2]);
1376
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1378
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1379
for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1380
o->m_waDecompTypeRefOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1386
m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
1387
else m = (CMolecule*)g_oaMolecules[g_iFixMol];
1388
o->m_waDecompTypeObsOffs.SetSize(g_iGesVirtAtomCount);
1389
for (z6=0;z6<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z6++)
1391
ag = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z6*2+1];
1392
for (z2=0;z2<ag->m_baRealAtomType.GetSize();z2++)
1394
for (z3=0;z3<o->m_waDecompTypeObsList.GetSize();z3++)
1395
if (o->m_waDecompTypeObsList[z3] == ag->m_baRealAtomType[z2])
1397
z3 = o->m_waDecompTypeObsList.GetSize();
1398
o->m_waDecompTypeObsList.Add(ag->m_baRealAtomType[z2]);
1400
for (z4=0;z4<m->m_laSingleMolIndex.GetSize();z4++)
1402
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z4]];
1403
for (z5=0;z5<((CxIntArray*)ag->m_oaAtoms[z2])->GetSize();z5++)
1404
o->m_waDecompTypeObsOffs[((CxIntArray*)sm->m_oaAtomOffset[ag->m_baAtomType[z2]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z2])->GetAt(z5))] = z3;
1409
o->m_pRDF[z0]->m_pRDF->CreateMulti(o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize());
1411
/* try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = new char*[o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti = NULL; }
1412
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti == NULL) NewException((double)o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize()*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1414
for (z=0;z<o->m_waDecompTypeRefList.GetSize()*o->m_waDecompTypeObsList.GetSize();z++)
1416
try { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = new char[128]; } catch(...) { o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] = NULL; }
1417
if (o->m_pRDF[z0]->m_pRDF->m_sLabelMulti[z] == NULL) NewException((double)128*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1420
for (z3=0;z3<o->m_waDecompTypeRefList.GetSize();z3++)
1422
for (z2=0;z2<o->m_waDecompTypeObsList.GetSize();z2++)
1424
sprintf(buf,"%s-%s",((CAtom*)g_oaAtoms[o->m_waDecompTypeRefList[z3]])->m_sName,((CAtom*)g_oaAtoms[o->m_waDecompTypeObsList[z2]])->m_sName);
1425
o->m_pRDF[z0]->m_pRDF->SetLabelMulti(z*o->m_waDecompTypeObsList.GetSize()+z2,buf);
1428
} else o->m_pRDF[z0]->m_pRDF->Create();
1430
if (o->m_bSecondShowMol && (z0 == 1))
1432
try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1433
if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1435
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1437
try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1438
if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1442
try { o->m_pRDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_faData = NULL; }
1443
if (o->m_pRDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1445
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1447
try { o->m_pRDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pRDF[z0]->m_baDataEnabled = NULL; }
1448
if (o->m_pRDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1453
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1455
try { o->m_pRDF[z0]->m_fDist = new FILE*[1]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1456
if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1458
sprintf(buf,"rdf_timedev_%s%s.csv",o->m_pRDF[z0]->m_sName,multibuf);
1459
o->m_pRDF[z0]->m_fDist[0] = OpenFileWrite(buf,true);
1462
try { o->m_pRDF[z0]->m_fDist = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pRDF[z0]->m_fDist = NULL; }
1463
if (o->m_pRDF[z0]->m_fDist == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1465
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1467
sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1468
o->m_pRDF[z0]->m_fDist[z2] = OpenFileWrite(buf,true);
1471
if (o->m_bCombinedPlot)
1473
// mprintf("Combined: Reflist %d, Showlist %d, Combinations %d, Steps %d.\n",o->m_waSaveRefList.GetSize(),o->m_waSaveShowList.GetSize(),o->m_pRDF[z0]->m_iCombinations,g_iTrajSteps);
1475
try { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot = NULL; }
1476
if (o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1478
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetTitle("Combined distance time development/histogram");
1479
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSubTitle(o->m_pRDF[z0]->m_sShortName);
1480
// smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
1481
// sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[0]];
1482
// o->m_pRDF[z0]->BuildAtomList(smfix,sm,sm,&templa);
1483
mprintf(" Trying to reserve %s of memory for combined plot...\n",FormatBytes((double)sizeof(double)*o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pRDF[z0]->m_iCombinations*g_iTrajSteps/g_iStride));
1484
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1486
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1488
/* for (z4=0;z4<templa.GetSize()/2;z4++)
1490
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1491
sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2]]]])->m_sName,g_waAtomMolNumber[templa[z4*2]]+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[g_waAtomElement[templa[z4*2+1]]]])->m_sName,g_waAtomMolNumber[templa[z4*2+1]]+1);
1492
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1493
if (g_iTrajSteps != -1)
1494
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *g_iTrajSteps);
1495
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize() *100);
1496
if (o->m_bCombinedGreyMode)
1498
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1499
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_iLineColor = ti*0x10000 + ti*0x100 + ti;
1504
for (z4=0;z4<o->m_pRDF[z0]->m_oaVectors.GetSize()/2;z4++)
1506
g1 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2];
1507
for (z1t=0;z1t<g1->m_baAtomType.GetSize();z1t++)
1509
a1 = (CxIntArray*)g1->m_oaAtoms[z1t];
1510
for (z1a=0;z1a<a1->GetSize();z1a++)
1512
g2 = (CAtomGroup*)o->m_pRDF[z0]->m_oaVectors[z4*2+1];
1513
for (z2t=0;z2t<g2->m_baAtomType.GetSize();z2t++)
1515
a2 = (CxIntArray*)g2->m_oaAtoms[z2t];
1516
for (z2a=0;z2a<a2->GetSize();z2a++)
1518
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->AddDataset();
1520
sprintf(buf,"%s[%d] %s%d - %s[%d] %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_sName,o->m_waSaveShowList[z3]+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1521
else sprintf(buf,"%s[%d] %s%d - %s%d",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,o->m_waSaveRefList[z2]+1,((CAtom*)g_oaAtoms[g1->m_baRealAtomType[z1t]])->m_sName,a1->GetAt(z1a)+1,((CAtom*)g_oaAtoms[g2->m_baRealAtomType[z2t]])->m_sName,a2->GetAt(z2a)+1);
1522
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetDatasetName(buf);
1523
if (g_iTrajSteps != -1)
1524
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *g_iTrajSteps/g_iStride);
1525
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()/**o->m_pRDF[z0]->m_iCombinations*/ *100);
1526
if (o->m_bCombinedGreyMode)
1528
ti = o->m_iCombinedGreyMin + ((ti2+z3*o->m_pRDF[z0]->m_iCombinations+z2*o->m_pRDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1529
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1532
/* if (o->m_pRDF[z0]->m_iRefOrSec[0])
1533
vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1534
else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g1->m_baAtomType[z1t]])->GetAt(a1->GetAt(z1a)));
1535
if (o->m_pRDF[z0]->m_iRefOrSec[1])
1536
vec->Add(((CxIntArray*)obs->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1537
else vec->Add(((CxIntArray*)ref->m_oaAtomOffset[g2->m_baAtomType[z2t]])->GetAt(a2->GetAt(z2a)));
1538
*/ // mprintf("Vector z=%d, z1t=%d, z1a=%d, z2t=%d, z2a=%d.\n",z,z1t,z1a,z2t,z2a);
1547
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelX("Time [ps] / g(r)");
1548
o->m_pRDF[z0]->m_pRDF->m_pCombinedPlot->SetLabelY("Distance [pm]");
1553
o->CreateTimeDiff(o->m_pRDF[z0]->m_pRDF,o->m_pRDF[z0]->m_iCombinations);
1556
o->m_pRDF[z0]->InitDeriv();
1558
if (o->m_pRDF[z0]->m_bCalcSD)
1560
mprintf(" Initializing Standard Deviation Engine...\n");
1561
o->m_pRDF[z0]->m_pRDF->m_pSDEngine = new CSDEngine();
1562
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes.SetSize(o->m_pRDF[z0]->m_iSDBlocks);
1563
mprintf(" Using the following %d trajectory block sizes:",o->m_pRDF[z0]->m_iSDBlocks);
1566
for (z4=0;z4<o->m_pRDF[z0]->m_iSDBlocks;z4++)
1570
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4] = (int)((exp(z4*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) / (exp((o->m_pRDF[z0]->m_iSDBlocks-1.0)*tf/o->m_pRDF[z0]->m_iSDBlocks)-1.0) * (o->m_pRDF[z0]->m_iSDBlockMax - o->m_pRDF[z0]->m_iSDBlockMin)) + o->m_pRDF[z0]->m_iSDBlockMin;
1571
mprintf("%5d",o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]);
1572
if (z4 < o->m_pRDF[z0]->m_iSDBlocks-1)
1575
tf2 += (g_iTrajSteps/o->m_pRDF[z0]->m_pRDF->m_pSDEngine->m_iaBlockSizes[z4]) + 1;
1577
tf2 *= o->m_pRDF[z0]->m_pRDF->m_iResolution * sizeof(double);
1578
mprintf("\n This requires %s of memory.\n\n",FormatBytes(tf2));
1579
o->m_pRDF[z0]->m_pRDF->m_pSDEngine->Init(o->m_pRDF[z0]->m_pRDF->m_iResolution);
1583
if (g_bADF && (o->m_pADF[z0] != NULL))
1585
mprintf(" Creating ADF...\n");
1586
o->m_pADF[z0]->m_pADF->m_fMinVal = o->m_pADF[z0]->m_fMinAngle;
1587
o->m_pADF[z0]->m_pADF->m_fMaxVal = o->m_pADF[z0]->m_fMaxAngle;
1588
o->m_pADF[z0]->m_pADF->m_iResolution = o->m_pADF[z0]->m_iResolution;
1589
o->m_pADF[z0]->m_pADF->m_iHistogramRes = o->m_pADF[z0]->m_iHistogramRes;
1590
if (o->m_pADF[z0]->m_bCosine)
1591
o->m_pADF[z0]->m_pADF->SetLabelX("Cos(angle)");
1592
else o->m_pADF[z0]->m_pADF->SetLabelX("Angle (degree)");
1593
o->m_pADF[z0]->m_pADF->SetLabelY("Occurrence");
1594
if (o->m_bObsCertain && o->m_bDecompDist)
1595
o->m_pADF[z0]->m_pADF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1596
else o->m_pADF[z0]->m_pADF->Create();
1597
if (o->m_bSecondShowMol && (z0 == 1))
1599
try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1600
if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1602
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1604
try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1605
if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1609
try { o->m_pADF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_faData = NULL; }
1610
if (o->m_pADF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1612
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1614
try { o->m_pADF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pADF[z0]->m_baDataEnabled = NULL; }
1615
if (o->m_pADF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1620
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1622
try { o->m_pADF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1623
if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1625
sprintf(buf,"adf_timedev_%s%s.csv",o->m_pADF[z0]->m_sName,multibuf);
1626
o->m_pADF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1629
try { o->m_pADF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pADF[z0]->m_fAngle = NULL; }
1630
if (o->m_pADF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1632
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1634
sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1635
o->m_pADF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1638
if (o->m_bCombinedPlot)
1640
try { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pADF[z0]->m_pADF->m_pCombinedPlot = NULL; }
1641
if (o->m_pADF[z0]->m_pADF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1643
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetTitle("Combined angle time development/histogram");
1644
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSubTitle(o->m_pADF[z0]->m_sShortName);
1645
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1647
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1649
for (z4=0;z4<o->m_pADF[z0]->m_iCombinations;z4++)
1651
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->AddDataset();
1652
if (g_iTrajSteps != -1)
1653
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*g_iTrajSteps);
1654
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pADF[z0]->m_iCombinations*100);
1655
if (o->m_bCombinedGreyMode)
1657
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pADF[z0]->m_iCombinations+z2*o->m_pADF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1658
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1660
// o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pADF[z0]->m_iCombinations+z4,2.0f);
1664
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelX("Time [ps] / ADF(r)");
1665
o->m_pADF[z0]->m_pADF->m_pCombinedPlot->SetLabelY("Angle [Degree]");
1670
o->CreateTimeDiff(o->m_pADF[z0]->m_pADF,o->m_pADF[z0]->m_iCombinations);
1673
o->m_pADF[z0]->InitDeriv();
1676
if (g_bDipDF && (o->m_pDipDF[z0] != NULL))
1678
mprintf(" Creating DipDF...\n");
1679
o->m_pDipDF[z0]->m_pDipoleDF->m_fMinVal = o->m_pDipDF[z0]->m_fDipoleMin;
1680
o->m_pDipDF[z0]->m_pDipoleDF->m_fMaxVal = o->m_pDipDF[z0]->m_fDipoleMax;
1681
o->m_pDipDF[z0]->m_pDipoleDF->m_iResolution = o->m_pDipDF[z0]->m_iResolution;
1682
o->m_pDipDF[z0]->m_pDipoleDF->m_iHistogramRes = o->m_pDipDF[z0]->m_iHistogramRes;
1683
o->m_pDipDF[z0]->m_pDipoleDF->SetLabelX("Dipole moment (Debye)");
1684
o->m_pDipDF[z0]->m_pDipoleDF->SetLabelY("Occurrence");
1685
if (o->m_bObsCertain && o->m_bDecompDist)
1686
o->m_pDipDF[z0]->m_pDipoleDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1687
else o->m_pDipDF[z0]->m_pDipoleDF->Create();
1688
if (o->m_bSecondShowMol && (z0 == 1))
1690
try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1691
if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1693
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1695
try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1696
if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1700
try { o->m_pDipDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_faData = NULL; }
1701
if (o->m_pDipDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1703
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1705
try { o->m_pDipDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDipDF[z0]->m_baDataEnabled = NULL; }
1706
if (o->m_pDipDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1711
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1713
try { o->m_pDipDF[z0]->m_fDipole = new FILE*[1]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1714
if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1716
sprintf(buf,"dipole_timedev_%s%s.csv",o->m_pDipDF[z0]->m_sName,multibuf);
1717
o->m_pDipDF[z0]->m_fDipole[0] = OpenFileWrite(buf,true);
1720
try { o->m_pDipDF[z0]->m_fDipole = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDipDF[z0]->m_fDipole = NULL; }
1721
if (o->m_pDipDF[z0]->m_fDipole == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1723
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1725
sprintf(buf,"dipole_timedev_%s_ref%d%s.csv",o->m_pDipDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1726
o->m_pDipDF[z0]->m_fDipole[z2] = OpenFileWrite(buf,true);
1729
if (o->m_bCombinedPlot)
1731
try { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot = NULL; }
1732
if (o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1734
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetTitle("Combined dipole moment time development/histogram");
1735
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSubTitle(o->m_pDipDF[z0]->m_sShortName);
1736
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1737
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1739
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->AddDataset();
1740
if (g_iTrajSteps != -1)
1741
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*g_iTrajSteps);
1742
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*100);
1743
if (o->m_bCombinedGreyMode)
1745
ti = o->m_iCombinedGreyMin + ((z3+z2*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1746
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1749
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelX("Time [ps] / DipDF(r)");
1750
o->m_pDipDF[z0]->m_pDipoleDF->m_pCombinedPlot->SetLabelY("Dipole moment [Debye]");
1755
o->CreateTimeDiff(o->m_pDipDF[z0]->m_pDipoleDF,1);
1758
o->m_pDipDF[z0]->InitDeriv();
1761
if (g_bVDF && (o->m_pVDF[z0] != NULL))
1763
mprintf(" Creating VDF...\n");
1764
o->m_pVDF[z0]->m_pVDF->m_fMinVal = o->m_pVDF[z0]->m_fMinSpeed;
1765
o->m_pVDF[z0]->m_pVDF->m_fMaxVal = o->m_pVDF[z0]->m_fMaxSpeed;
1766
o->m_pVDF[z0]->m_pVDF->m_iResolution = o->m_pVDF[z0]->m_iResolution;
1767
o->m_pVDF[z0]->m_pVDF->m_iHistogramRes = o->m_pVDF[z0]->m_iHistogramRes;
1768
o->m_pVDF[z0]->m_pVDF->SetLabelX("Velocity [pm/ps]");
1769
o->m_pVDF[z0]->m_pVDF->SetLabelY("Occurrence");
1770
if (o->m_bObsCertain && o->m_bDecompDist)
1771
o->m_pVDF[z0]->m_pVDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1772
else o->m_pVDF[z0]->m_pVDF->Create();
1773
if (o->m_bSecondShowMol && (z0 == 1))
1775
try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1776
if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1778
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1780
try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1781
if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1785
try { o->m_pVDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_faData = NULL; }
1786
if (o->m_pVDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1788
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1790
try { o->m_pVDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pVDF[z0]->m_baDataEnabled = NULL; }
1791
if (o->m_pVDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1796
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1798
try { o->m_pVDF[z0]->m_fSpeed = new FILE*[1]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1799
if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1801
sprintf(buf,"vdf_timedev_%s%s.csv",o->m_pVDF[z0]->m_sName,multibuf);
1802
o->m_pVDF[z0]->m_fSpeed[0] = OpenFileWrite(buf,true);
1805
try { o->m_pVDF[z0]->m_fSpeed = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pVDF[z0]->m_fSpeed = NULL; }
1806
if (o->m_pVDF[z0]->m_fSpeed == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1808
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1810
sprintf(buf,"vdf_timedev_%s_ref%d%s.csv",o->m_pVDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1811
o->m_pVDF[z0]->m_fSpeed[z2] = OpenFileWrite(buf,true);
1814
if (o->m_bCombinedPlot)
1816
try { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot = NULL; }
1817
if (o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1819
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetTitle("Combined velocity time development/histogram");
1820
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSubTitle(o->m_pVDF[z0]->m_sShortName);
1821
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1822
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1823
for (z4=0;z4<o->m_pVDF[z0]->m_iCombinations;z4++)
1825
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->AddDataset();
1826
if (g_iTrajSteps != -1)
1827
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*g_iTrajSteps);
1828
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pVDF[z0]->m_iCombinations*100);
1829
if (o->m_bCombinedGreyMode)
1831
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pVDF[z0]->m_iCombinations+z2*o->m_pVDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1832
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1834
// o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetSetLineWidth(z2*o->m_waSaveRefList.GetSize()+z3,3.0f);
1836
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelX("Time [ps] / VDF(r)");
1837
o->m_pVDF[z0]->m_pVDF->m_pCombinedPlot->SetLabelY("Velocity [pm/ps]");
1842
o->CreateTimeDiff(o->m_pVDF[z0]->m_pVDF,o->m_pVDF[z0]->m_iCombinations);
1845
o->m_pVDF[z0]->InitDeriv();
1848
if (g_bDDF && (o->m_pDDF[z0] != NULL))
1850
mprintf(" Creating DDF...\n");
1851
o->m_pDDF[z0]->m_pDDF->m_fMinVal = o->m_pDDF[z0]->m_fMinAngle;
1852
o->m_pDDF[z0]->m_pDDF->m_fMaxVal = o->m_pDDF[z0]->m_fMaxAngle;
1853
o->m_pDDF[z0]->m_pDDF->m_iResolution = o->m_pDDF[z0]->m_iResolution;
1854
o->m_pDDF[z0]->m_pDDF->m_iHistogramRes = o->m_pDDF[z0]->m_iHistogramRes;
1855
if (o->m_pDDF[z0]->m_bCosine)
1856
o->m_pDDF[z0]->m_pDDF->SetLabelX("Cos(Dihedral Angle)");
1857
else o->m_pDDF[z0]->m_pDDF->SetLabelX("Dihedral Angle (Degree)");
1858
o->m_pDDF[z0]->m_pDDF->SetLabelY("Occurrence");
1859
if (o->m_bObsCertain && o->m_bDecompDist)
1860
o->m_pDDF[z0]->m_pDDF->CreateMulti(o->m_waObsRefList.GetSize()*o->m_waObsShowList.GetSize());
1861
else o->m_pDDF[z0]->m_pDDF->Create();
1862
if (o->m_bSecondShowMol && (z0 == 1))
1864
try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1865
if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1867
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1869
try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1870
if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1874
try { o->m_pDDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_faData = NULL; }
1875
if (o->m_pDDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1877
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1879
try { o->m_pDDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pDDF[z0]->m_baDataEnabled = NULL; }
1880
if (o->m_pDDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1883
if (o->m_pDDF[z0]->m_bRotate)
1885
for (z2=0;z2<o->m_iShowMolCount * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() * o->m_pDDF[z0]->m_iCombinations;z2++)
1887
o->m_pDDF[z0]->m_faLastData.Add(0);
1888
o->m_pDDF[z0]->m_laRotation.Add(0);
1894
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
1896
try { o->m_pDDF[z0]->m_fAngle = new FILE*[1]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1897
if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1899
sprintf(buf,"ddf_timedev_%s%s.csv",o->m_pDDF[z0]->m_sName,multibuf);
1900
o->m_pDDF[z0]->m_fAngle[0] = OpenFileWrite(buf,true);
1903
try { o->m_pDDF[z0]->m_fAngle = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pDDF[z0]->m_fAngle = NULL; }
1904
if (o->m_pDDF[z0]->m_fAngle == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1906
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1908
sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[z0]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
1909
o->m_pDDF[z0]->m_fAngle[z2] = OpenFileWrite(buf,true);
1912
if (o->m_bCombinedPlot)
1914
try { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = new CGrace(); } catch(...) { o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot = NULL; }
1915
if (o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1917
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetTitle("Combined dihedral time development/histogram");
1918
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSubTitle(o->m_pDDF[z0]->m_sShortName);
1919
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
1920
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
1921
for (z4=0;z4<o->m_pDDF[z0]->m_iCombinations;z4++)
1923
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->AddDataset();
1924
if (g_iTrajSteps != -1)
1925
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*g_iTrajSteps);
1926
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pDDF[z0]->m_iCombinations*100);
1927
if (o->m_bCombinedGreyMode)
1929
ti = o->m_iCombinedGreyMin + ((z4+z3*o->m_pDDF[z0]->m_iCombinations+z2*o->m_pDDF[z0]->m_iCombinations*o->m_waSaveShowList.GetSize())%o->m_iCombinedGreyShades)*(o->m_iCombinedGreyMax-o->m_iCombinedGreyMin)/o->m_iCombinedGreyShades;
1930
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineColor(ti,ti,ti);
1932
// o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetSetLineWidth((z2*o->m_waSaveRefList.GetSize()+z3)*o->m_pDDF[z0]->m_iCombinations+z4,2.0f);
1934
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelX("Time [ps] / DDF(r)");
1935
o->m_pDDF[z0]->m_pDDF->m_pCombinedPlot->SetLabelY("Dihedral [Degree]");
1940
o->CreateTimeDiff(o->m_pDDF[z0]->m_pDDF,o->m_pDDF[z0]->m_iCombinations);
1943
o->m_pDDF[z0]->InitDeriv();
1946
if (g_bPlDF && (o->m_pPlDF[z0] != NULL))
1948
mprintf(" Creating PlDF...\n");
1949
o->m_pPlDF[z0]->m_pPlDF->m_fMinVal = o->m_pPlDF[z0]->m_fMinDist;
1950
o->m_pPlDF[z0]->m_pPlDF->m_fMaxVal = o->m_pPlDF[z0]->m_fMaxDist;
1951
o->m_pPlDF[z0]->m_pPlDF->m_iResolution = o->m_pPlDF[z0]->m_iResolution;
1952
o->m_pPlDF[z0]->m_pPlDF->m_iHistogramRes = o->m_pPlDF[z0]->m_iHistogramRes;
1953
o->m_pPlDF[z0]->m_pPlDF->SetLabelX("Distance from plane [pm]");
1954
o->m_pPlDF[z0]->m_pPlDF->SetLabelY("Occurrence");
1955
o->m_pPlDF[z0]->m_pPlDF->Create();
1956
if (o->m_bSecondShowMol && (z0 == 1))
1958
try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1959
if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1961
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1963
try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1964
if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1968
try { o->m_pPlDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_faData = NULL; }
1969
if (o->m_pPlDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1971
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1973
try { o->m_pPlDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pPlDF[z0]->m_baDataEnabled = NULL; }
1974
if (o->m_pPlDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1979
if (g_bLiDF && (o->m_pLiDF[z0] != NULL))
1981
mprintf(" Creating LiDF...\n");
1982
o->m_pLiDF[z0]->m_pLiDF->m_fMinVal = o->m_pLiDF[z0]->m_fMinDist;
1983
o->m_pLiDF[z0]->m_pLiDF->m_fMaxVal = o->m_pLiDF[z0]->m_fMaxDist;
1984
o->m_pLiDF[z0]->m_pLiDF->m_iResolution = o->m_pLiDF[z0]->m_iResolution;
1985
o->m_pLiDF[z0]->m_pLiDF->m_iHistogramRes = o->m_pLiDF[z0]->m_iHistogramRes;
1986
o->m_pLiDF[z0]->m_pLiDF->SetLabelX("Distance from line [pm]");
1987
o->m_pLiDF[z0]->m_pLiDF->SetLabelY("Occurrence");
1988
o->m_pLiDF[z0]->m_pLiDF->Create();
1989
if (o->m_bSecondShowMol && (z0 == 1))
1991
try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
1992
if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
1994
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
1996
try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMol2Count]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
1997
if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMol2Count*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2001
try { o->m_pLiDF[z0]->m_faData = new CxDoubleArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_faData = NULL; }
2002
if (o->m_pLiDF[z0]->m_faData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxDoubleArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2004
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
2006
try { o->m_pLiDF[z0]->m_baDataEnabled = new CxByteArray[o->m_iShowMolCount]; } catch(...) { o->m_pLiDF[z0]->m_baDataEnabled = NULL; }
2007
if (o->m_pLiDF[z0]->m_baDataEnabled == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxByteArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2016
mprintf(" Creating CDF...\n");
2017
if (g_iCDFChannels == 2)
2019
try { o->m_pCDF->m_p2DF = new C2DF(); } catch(...) { o->m_pCDF->m_p2DF = NULL; }
2020
if (o->m_pCDF->m_p2DF == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2023
for (z2=0;z2<2;z2++)
2025
o->m_pCDF->m_p2DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
2026
switch(g_iObsChannel[z2])
2030
strcat(buf,o->m_pRDF[z2]->m_sShortName);
2031
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
2032
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
2033
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2038
strcat(buf,o->m_pADF[z2]->m_sShortName);
2039
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2040
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2041
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2046
strcat(buf,o->m_pDDF[z2]->m_sShortName);
2047
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2048
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2049
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2053
strcat(buf,"_dipole");
2054
strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2055
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2056
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2057
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2062
strcat(buf,o->m_pVDF[z2]->m_sShortName);
2063
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2064
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2065
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2069
strcat(buf,"_pldf");
2070
strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2071
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2072
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2073
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2077
strcat(buf,"_lidf");
2078
strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2079
o->m_pCDF->m_p2DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2080
o->m_pCDF->m_p2DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2081
o->m_pCDF->m_p2DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2085
o->m_pCDF->m_p2DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2086
o->m_pCDF->m_p2DF->Create();
2087
switch(g_iObsChannel[0])
2090
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2091
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2094
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2095
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2098
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2099
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2102
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2103
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2106
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2107
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2110
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2111
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2114
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2115
o->m_pCDF->m_p2DF->SetLabelX(buf2);
2118
switch(g_iObsChannel[1])
2121
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2122
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2125
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2126
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2129
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2130
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2133
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2134
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2137
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2138
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2141
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2142
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2145
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2146
o->m_pCDF->m_p2DF->SetLabelY(buf2);
2149
} // END IF CHANNELS == 2
2151
if (g_iCDFChannels == 3)
2153
try { o->m_pCDF->m_p3DF = new C3DF(); } catch(...) { o->m_pCDF->m_p3DF = NULL; }
2154
if (o->m_pCDF->m_p3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2157
for (z2=0;z2<g_iCDFChannels;z2++)
2159
o->m_pCDF->m_p3DF->m_iRes[z2] = o->m_pCDF->m_iResolution[z2];
2160
switch(g_iObsChannel[z2])
2164
strcat(buf,o->m_pRDF[z2]->m_sShortName);
2165
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pRDF[z2]->m_fMinDist;
2166
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pRDF[z2]->m_fMaxDist;
2167
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pRDF[z2]->m_pRDF;
2171
strcat(buf,o->m_pADF[z2]->m_sShortName);
2172
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pADF[z2]->m_fMinAngle;
2173
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pADF[z2]->m_fMaxAngle;
2174
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pADF[z2]->m_pADF;
2178
strcat(buf,o->m_pDDF[z2]->m_sShortName);
2179
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDDF[z2]->m_fMinAngle;
2180
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDDF[z2]->m_fMaxAngle;
2181
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDDF[z2]->m_pDDF;
2184
strcat(buf,"_dipole");
2185
strcat(buf,o->m_pDipDF[z2]->m_sShortName);
2186
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pDipDF[z2]->m_fDipoleMin;
2187
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pDipDF[z2]->m_fDipoleMax;
2188
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pDipDF[z2]->m_pDipoleDF;
2192
strcat(buf,o->m_pVDF[z2]->m_sShortName);
2193
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pVDF[z2]->m_fMinSpeed;
2194
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pVDF[z2]->m_fMaxSpeed;
2195
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pVDF[z2]->m_pVDF;
2198
strcat(buf,"_pldf");
2199
strcat(buf,o->m_pPlDF[z2]->m_sShortName);
2200
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pPlDF[z2]->m_fMinDist;
2201
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pPlDF[z2]->m_fMaxDist;
2202
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pPlDF[z2]->m_pPlDF;
2205
strcat(buf,"_lidf");
2206
strcat(buf,o->m_pLiDF[z2]->m_sShortName);
2207
o->m_pCDF->m_p3DF->m_fMinVal[z2] = o->m_pLiDF[z2]->m_fMinDist;
2208
o->m_pCDF->m_p3DF->m_fMaxVal[z2] = o->m_pLiDF[z2]->m_fMaxDist;
2209
o->m_pCDF->m_p3DF->m_pChannels[z2] = o->m_pLiDF[z2]->m_pLiDF;
2213
o->m_pCDF->m_p3DF->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2214
o->m_pCDF->m_p3DF->Create();
2215
switch(g_iObsChannel[0])
2218
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[0]->m_sShortName);
2219
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2222
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[0]->m_sShortName);
2223
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2226
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[0]->m_sShortName);
2227
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2230
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[0]->m_sShortName);
2231
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2234
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[0]->m_sShortName);
2235
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2238
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[0]->m_sShortName);
2239
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2242
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[0]->m_sShortName);
2243
o->m_pCDF->m_p3DF->SetLabelX(buf2);
2246
switch(g_iObsChannel[1])
2249
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[1]->m_sShortName);
2250
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2253
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[1]->m_sShortName);
2254
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2257
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[1]->m_sShortName);
2258
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2261
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[1]->m_sShortName);
2262
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2265
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[1]->m_sShortName);
2266
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2269
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[1]->m_sShortName);
2270
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2273
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[1]->m_sShortName);
2274
o->m_pCDF->m_p3DF->SetLabelY(buf2);
2277
switch(g_iObsChannel[2])
2280
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[2]->m_sShortName);
2281
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2284
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[2]->m_sShortName);
2285
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2288
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[2]->m_sShortName);
2289
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2292
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[2]->m_sShortName);
2293
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2296
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[2]->m_sShortName);
2297
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2300
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[2]->m_sShortName);
2301
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2304
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[2]->m_sShortName);
2305
o->m_pCDF->m_p3DF->SetLabelZ(buf2);
2309
// Fuer jede C3DF noch die 3 C2DFs erzeugen
2310
for (z3=0;z3<3;z3++)
2312
try { o->m_pCDF->m_p3DF->m_p2DF[z3] = new C2DF(); } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3] = NULL; }
2313
if (o->m_pCDF->m_p3DF->m_p2DF[z3] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2331
for (z2=0;z2<2;z2++)
2333
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iRes[z2] = o->m_pCDF->m_iResolution[tia[z2]];
2334
switch(g_iObsChannel[tia[z2]])
2337
strcat(buf3,"_rdf");
2338
strcat(buf3,o->m_pRDF[tia[z2]]->m_sShortName);
2339
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pRDF[tia[z2]]->m_fMinDist;
2340
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pRDF[tia[z2]]->m_fMaxDist;
2341
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pRDF[tia[z2]]->m_pRDF;
2344
strcat(buf3,"_adf");
2345
strcat(buf3,o->m_pADF[tia[z2]]->m_sShortName);
2346
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pADF[tia[z2]]->m_fMinAngle;
2347
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pADF[tia[z2]]->m_fMaxAngle;
2348
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pADF[tia[z2]]->m_pADF;
2351
strcat(buf3,"_ddf");
2352
strcat(buf3,o->m_pDDF[tia[z2]]->m_sShortName);
2353
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDDF[tia[z2]]->m_fMinAngle;
2354
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDDF[tia[z2]]->m_fMaxAngle;
2355
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDDF[tia[z2]]->m_pDDF;
2358
strcat(buf3,"_dipole");
2359
strcat(buf3,o->m_pDipDF[tia[z2]]->m_sShortName);
2360
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMin;
2361
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pDipDF[tia[z2]]->m_fDipoleMax;
2362
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pDipDF[tia[z2]]->m_pDipoleDF;
2365
strcat(buf3,"_vdf");
2366
strcat(buf3,o->m_pVDF[tia[z2]]->m_sShortName);
2367
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pVDF[tia[z2]]->m_fMinSpeed;
2368
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pVDF[tia[z2]]->m_fMaxSpeed;
2369
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pVDF[tia[z2]]->m_pVDF;
2372
strcat(buf3,"_pldf");
2373
strcat(buf3,o->m_pPlDF[tia[z2]]->m_sShortName);
2374
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pPlDF[tia[z2]]->m_fMinDist;
2375
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pPlDF[tia[z2]]->m_fMaxDist;
2376
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pPlDF[tia[z2]]->m_pPlDF;
2379
strcat(buf3,"_lidf");
2380
strcat(buf3,o->m_pLiDF[tia[z2]]->m_sShortName);
2381
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMinVal[z2] = o->m_pLiDF[tia[z2]]->m_fMinDist;
2382
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fMaxVal[z2] = o->m_pLiDF[tia[z2]]->m_fMaxDist;
2383
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_pChannels[z2] = o->m_pLiDF[tia[z2]]->m_pLiDF;
2387
o->m_pCDF->m_p3DF->m_p2DF[z3]->m_iHistogramRes = o->m_pCDF->m_iHistogramRes;
2388
o->m_pCDF->m_p3DF->m_p2DF[z3]->Create();
2389
switch(g_iObsChannel[tia[0]])
2392
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[0]]->m_sShortName);
2393
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2396
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[0]]->m_sShortName);
2397
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2400
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[0]]->m_sShortName);
2401
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2404
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[0]]->m_sShortName);
2405
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2408
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[0]]->m_sShortName);
2409
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2412
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[0]]->m_sShortName);
2413
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2416
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[0]]->m_sShortName);
2417
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelX(buf2);
2420
switch(g_iObsChannel[tia[1]])
2423
sprintf(buf2,"%s Distance [pm]",o->m_pRDF[tia[1]]->m_sShortName);
2424
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2427
sprintf(buf2,"%s Angle [Degree]",o->m_pADF[tia[1]]->m_sShortName);
2428
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2431
sprintf(buf2,"%s Dihedral [Degree]",o->m_pDDF[tia[1]]->m_sShortName);
2432
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2435
sprintf(buf2,"%s Dipole moment [Debye]",o->m_pDipDF[tia[1]]->m_sShortName);
2436
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2439
sprintf(buf2,"%s Velocity [pm/ps]",o->m_pVDF[tia[1]]->m_sShortName);
2440
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2443
sprintf(buf2,"%s Distance from Plane [pm]",o->m_pPlDF[tia[1]]->m_sShortName);
2444
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2447
sprintf(buf2,"%s Distance from Line [pm]",o->m_pLiDF[tia[1]]->m_sShortName);
2448
o->m_pCDF->m_p3DF->m_p2DF[z3]->SetLabelY(buf2);
2451
try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName = NULL; }
2452
if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2454
strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName,buf3);
2455
sprintf(buf3,"cdf_2");
2456
strcat(buf3,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sShortName);
2458
try { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = new char[strlen(buf3)+1]; } catch(...) { o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName = NULL; }
2459
if (o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName == NULL) NewException((double)(strlen(buf3)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2461
strcpy(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,buf3);
2463
} // END IF CHANNELS == 3
2465
try { o->m_pCDF->m_sShortName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sShortName = NULL; }
2466
if (o->m_pCDF->m_sShortName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2468
strcpy(o->m_pCDF->m_sShortName,buf);
2469
sprintf(buf,"cdf_%d",g_iCDFChannels);
2470
strcat(buf,o->m_pCDF->m_sShortName);
2472
try { o->m_pCDF->m_sName = new char[strlen(buf)+1]; } catch(...) { o->m_pCDF->m_sName = NULL; }
2473
if (o->m_pCDF->m_sName == NULL) NewException((double)(strlen(buf)+1)*sizeof(char),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2475
strcpy(o->m_pCDF->m_sName,buf);
2476
if (o->m_pCDF->m_bDumpDat)
2478
sprintf(buf,"cdfdump_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2479
o->m_pCDF->m_fDump = OpenFileWrite(buf,true);
2480
mfprintf(o->m_pCDF->m_fDump,"# step; RM; OM1; OM2; channels\n");
2484
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
2486
try { o->m_pCDF->m_fTimeDev = new FILE*[1]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2487
if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2489
sprintf(buf,"cdf_timedev_%dd%s%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
2490
o->m_pCDF->m_fTimeDev[0] = OpenFileWrite(buf,true);
2493
try { o->m_pCDF->m_fTimeDev = new FILE*[o->m_waSaveRefList.GetSize()]; } catch(...) { o->m_pCDF->m_fTimeDev = NULL; }
2494
if (o->m_pCDF->m_fTimeDev == NULL) NewException((double)o->m_waSaveRefList.GetSize()*sizeof(FILE*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2496
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2498
sprintf(buf,"cdf_timedev_%dd%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
2499
o->m_pCDF->m_fTimeDev[z2] = OpenFileWrite(buf,true);
2502
if (o->m_pCDF->m_bTDAnimation)
2504
try { o->m_pCDF->m_pTDAPlot = new CGrace(); } catch(...) { o->m_pCDF->m_pTDAPlot = NULL; }
2505
if (o->m_pCDF->m_pTDAPlot == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2507
o->m_pCDF->m_pTDAPlot->SetTitle("CDF Time Development");
2508
o->m_pCDF->m_pTDAPlot->SetSubTitle(&o->m_pCDF->m_sShortName[1]);
2509
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
2511
for (z3=0;z3<o->m_waSaveShowList.GetSize();z3++)
2513
for (z4=0;z4<o->m_pCDF->m_iCombinationsEnabled;z4++)
2515
o->m_pCDF->m_pTDAPlot->AddDataset();
2516
if (g_iTrajSteps != -1)
2517
o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetMaxSize(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*g_iTrajSteps);
2518
o->m_pCDF->m_pTDAPlot->LastDataset()->m_faValues.SetGrow(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled*100);
2522
o->m_pCDF->m_pTDAPlot->SetRangeX(o->m_pCDF->m_p2DF->m_fMinVal[0],o->m_pCDF->m_p2DF->m_fMaxVal[0]);
2523
o->m_pCDF->m_pTDAPlot->SetRangeY(o->m_pCDF->m_p2DF->m_fMinVal[1],o->m_pCDF->m_p2DF->m_fMaxVal[1]);
2524
o->m_pCDF->m_pTDAPlot->MakeTicks();
2525
o->m_pCDF->m_pTDAPlot->SetLabelX(o->m_pCDF->m_p2DF->m_sLabelX);
2526
o->m_pCDF->m_pTDAPlot->SetLabelY(o->m_pCDF->m_p2DF->m_sLabelY);
2533
mprintf(" Creating VACF...\n");
2534
o->m_pVACF->Create();
2535
if (g_bVACFCacheMode)
2537
mprintf(" VACF Cache: Trying to allocate %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes*g_iTrajSteps*3.1*sizeof(float)));
2538
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
2540
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2541
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2543
if (g_iTrajSteps != -1)
2545
ptfa->SetMaxSize((long)(g_iTrajSteps*3.1));
2546
ptfa->SetGrow((long)(g_iTrajSteps*0.1));
2547
} else ptfa->SetGrow(1000);
2548
o->m_pVACF->m_oaCache.Add(ptfa);
2552
if (o->m_pVACF->m_iSize > g_iStepHistory)
2553
g_iStepHistory = o->m_pVACF->m_iSize;
2559
mprintf(" Creating DipACF...\n");
2560
o->m_pDipACF->Create();
2565
mprintf(" Creating MSD...\n");
2566
o->m_pMSD->m_pMSD->m_fMinVal = 0.0f;
2567
o->m_pMSD->m_pMSD->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength*g_iStride/1000.0;
2568
o->m_pMSD->m_pMSD->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2569
o->m_pMSD->m_pMSD->Create();
2570
if (g_bMSDCacheMode)
2572
mprintf(" MSD Cache: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*g_iTrajSteps/g_iStride*3.1*sizeof(float)));
2573
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2575
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
2576
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2578
if (g_iTrajSteps != -1)
2580
ptfa->SetMaxSize((long)(g_iTrajSteps/g_iStride*3.1));
2581
ptfa->SetGrow((long)(g_iTrajSteps/g_iStride*0.1));
2582
} else ptfa->SetGrow(1000);
2583
o->m_pMSD->m_oaCache.Add(ptfa);
2585
if (o->m_pMSD->m_bSplit)
2587
mprintf(" MSD Split: Trying to reserve %s of memory...\n",FormatBytes((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride*sizeof(double)));
2588
try { o->m_pMSD->m_pSplitMSD = new CAF*[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms]; } catch(...) { o->m_pMSD->m_pSplitMSD = NULL; }
2589
if (o->m_pMSD->m_pSplitMSD == NULL) NewException((double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms*sizeof(CAF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2591
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
2593
try { o->m_pMSD->m_pSplitMSD[z2] = new CAF(); } catch(...) { o->m_pMSD->m_pSplitMSD[z2] = NULL; }
2594
if (o->m_pMSD->m_pSplitMSD[z2] == NULL) NewException((double)sizeof(CAF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2596
o->m_pMSD->m_pSplitMSD[z2]->m_fMinVal = 0.0f;
2597
o->m_pMSD->m_pSplitMSD[z2]->m_fMaxVal = o->m_pMSD->m_iResolution*g_fTimestepLength/1000.0;
2598
o->m_pMSD->m_pSplitMSD[z2]->m_iResolution = o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;
2599
o->m_pMSD->m_pSplitMSD[z2]->Create();
2604
if (!g_bMSDCacheMode)
2606
if (o->m_pMSD->m_iResolution > g_iStepHistory)
2607
g_iStepHistory = o->m_pMSD->m_iResolution;
2614
mprintf(" Creating Pseudo SDF...\n");
2615
o->m_pRevSDF->m_p2DF->m_fMinVal[0] = -o->m_pRevSDF->m_fRadius;
2616
o->m_pRevSDF->m_p2DF->m_fMaxVal[0] = o->m_pRevSDF->m_fRadius;
2617
o->m_pRevSDF->m_p2DF->m_fMinVal[1] = -o->m_pRevSDF->m_fRadius;
2618
o->m_pRevSDF->m_p2DF->m_fMaxVal[1] = o->m_pRevSDF->m_fRadius;
2619
o->m_pRevSDF->m_p2DF->m_iRes[0] = o->m_pRevSDF->m_iResolution;
2620
o->m_pRevSDF->m_p2DF->m_iRes[1] = o->m_pRevSDF->m_iResolution;
2621
o->m_pRevSDF->m_p2DF->SetLabelX("X [pm]");
2622
o->m_pRevSDF->m_p2DF->SetLabelY("Y [pm]");
2623
o->m_pRevSDF->m_p2DF->m_iHistogramRes = o->m_pRevSDF->m_iHistogramRes;
2624
o->m_pRevSDF->m_p2DF->Create();
2626
try { o->m_pRevSDF->m_vaData = new CxVec3Array[o->m_iShowMolCount]; } catch(...) { o->m_pRevSDF->m_vaData = NULL; }
2627
if (o->m_pRevSDF->m_vaData == NULL) NewException((double)o->m_iShowMolCount*sizeof(CxVec3Array),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2633
mprintf(" Creating BondACF...\n");
2634
for (z=0;z<g_oaSingleMolecules.GetSize();z++)
2636
sm = (CSingleMolecule*)g_oaSingleMolecules[z];
2637
for (z2=0;z2<sm->m_oaBondGroups.GetSize();z2++)
2639
bg = (CMolBondGroup*)sm->m_oaBondGroups[z2];
2640
for (z3=0;z3<bg->m_oaBonds.GetSize();z3++)
2642
if (g_iTrajSteps != -1)
2644
((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetMaxSize(g_iTrajSteps);
2645
((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(g_iTrajSteps/10);
2646
} else ((CMolBond*)bg->m_oaBonds[z3])->m_faData.SetGrow(10000);
2652
if (g_bClusterAnalysis)
2654
mprintf(" Creating Cluster Analysis...\n");
2655
g_pClusterAnalysis->Create();
2660
mprintf(" Creating FES Analysis...\n");
2666
mprintf(" Creating Microheterogeneity Analysis...\n");
2667
g_pMicroHet->Create();
2672
mprintf(" Creating Thermodynamic Analysis...\n");
2673
g_pThermoAnalysis->Create();
2676
if (g_iRefSystemDim == 3)
2677
g_pRefMol.SetSize(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
2678
if ((g_iRefSystemDim == 3) && !g_bMiddleAvg) // Einfach das erstbeste Molekuel als Referenz nehmen
2680
mprintf("Creating reference molecule from first time step...");
2681
g_TimeStep.CalcCenters();
2682
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[0]];
2683
vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2684
g_TimeStep.CenterPos(vec1);
2685
vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
2686
vec3 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
2689
mat.MatUltra(vec2,vec3);
2691
// Jeden Atomtyp des Zielmolekuels durchgehen
2692
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
2694
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
2696
vec2 = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z3])->GetAt(z4)];
2698
g_pRefMol[cc] = mat * vec2;
2704
g_TimeStep.FoldAtoms();
2705
g_TimeStep.Transform(mat);
2706
for (z3=0;z3<g_oaObserv.GetSize();z3++)
2708
o = (CObservation*)g_oaObserv[z3];
2709
if (!o->m_pPlProj->m_bAverageAtomPos)
2712
for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
2714
for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
2716
o->m_pPlProj->m_vaAtomPos[ti] = g_TimeStep.m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[o->m_pPlProj->m_oDrawAtoms.m_baAtomType[z3]])->GetAt(((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetAt(z4))];
2724
} // Ende Referenzbestimmung
2728
mprintf("Creating Reference Molecule Swap Matrix...\n");
2730
try { pSwapMatrix = new unsigned int[((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes]; } catch(...) { pSwapMatrix = NULL; }
2731
if (pSwapMatrix == NULL) NewException((double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*sizeof(unsigned int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2733
for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes;z++)
2737
g_iCurrentTimeStep = -1;
2738
g_iNextTimeStep = -1;
2739
g_iLastTimeStep = -1;
2741
try { g_pTempTimestep = new CTimeStep(); } catch(...) { g_pTempTimestep = NULL; }
2742
if (g_pTempTimestep == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2744
if ((g_bSaveRefEnv) && (g_iNbhMode == 3) && (!g_bStreamInput))
2746
mprintf(WHITE,"\n>>> Pre-analysis for neighborhood search >>>\n");
2748
g_fPos = fopen(g_sInputTraj,"rt"); // Eingabedatei erneut Oeffnen
2751
eprintf("\nError. Input Trajectory suddenly vanished ^^\n");
2754
g_iSteps = 0; // Der Zaehler der Zeitschritte
2755
if (g_iScanNbhStart != 0)
2757
mprintf("\nFast-forwarding to step %d...\n",g_iScanNbhStart+1);
2758
mprintf(WHITE," [");
2759
for (z=0;z<g_iScanNbhStart;z++)
2761
if (fmod(z,g_iScanNbhStart/60.0) < 1.0)
2763
if (!g_TimeStep.SkipTimestep(g_fPos))
2766
mprintf(WHITE,"]\n");
2768
while (!feof(g_fPos)) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
2770
for (z=0;z<(g_iScanNbhStride-1);z++)
2771
if (!g_TimeStep.SkipTimestep(g_fPos))
2773
if (!g_TimeStep.ReadTimestep(g_fPos,false))
2775
if (g_TimeStep.m_iGesAtomCount == 0)
2777
// g_TimeStep.m_vaCoords.SetSize(g_iGesVirtAtomCount);
2778
// g_TimeStep.UniteMolecules();
2779
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2780
g_TimeStep.CalcCenters();
2782
if ((g_iSteps % (4*g_iScanNbhStride)) == 0)
2784
if ((g_iSteps % (200*g_iScanNbhStride)) == 0)
2785
mprintf("\nStep %6d...",g_iSteps);
2789
g_iSteps+=g_iScanNbhStride;
2791
// vec1 = g_TimeStep.m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]])->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
2793
// g_TimeStep.CenterPos(vec1);
2796
// g_TimeStep.FoldMolecules();
2798
// for (z=0;z<g_oaNbSearches.GetSize();z++)
2799
g_pNbSet->Scan((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[g_iSaveRefMol]],&g_TimeStep);
2801
if ((g_iScanNbhSteps > 0) && ((int)g_iSteps >= g_iScanNbhSteps))
2807
mprintf(WHITE,"\n\n<<< Neighborhood search done <<<\n");
2808
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2810
mprintf(YELLOW,"\n*** Choose Neighbors\n");
2811
// nbset = (CNbSet*)g_oaNbSearches[z0];
2812
// Sort Neighbors after time they have been neighbors
2813
for (z=0;z<g_pNbSet->m_oaConditionGroups.GetSize();z++)
2815
if (g_pNbSet->m_oaConditionGroups[z] == NULL)
2817
cg = (CConditionGroup*)g_pNbSet->m_oaConditionGroups[z];
2819
try { tpi = new int[((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()]; } catch(...) { tpi = NULL; }
2820
if (tpi == NULL) NewException((double)((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize()*sizeof(int),__FILE__,__LINE__,__PRETTY_FUNCTION__);
2822
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2824
cg->m_bAlwaysTrue[z2] = false;
2828
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z2++)
2831
for (z3=z2;z3<((CMolecule*)g_oaMolecules[z])->m_laSingleMolIndex.GetSize();z3++)
2833
for (z4=0;z4<z2;z4++)
2836
if (cg->m_iPassCounter[z3] > ti)
2838
ti = cg->m_iPassCounter[z3];
2848
mprintf(WHITE,"\n Molecule type %s. %d neighbors found in total:\n",((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2849
for (z2=0;z2<ti3;z2++)
2850
mprintf(" %2d.) Molecule %3d (%8.4f percent of the time, %d hits)\n",z2+1,tpi[z2]+1,((double)cg->m_iPassCounter[tpi[z2]])*g_iScanNbhStride/g_iSteps*100.0,cg->m_iPassCounter[tpi[z2]]);
2854
z3 = AskUnsignedInteger("\nUse how many of the frequentiest neighbors for molecule %s? [%d] ",ti3,((CMolecule*)g_oaMolecules[z])->m_sName,ti3);
2855
for (z2=0;z2<z3;z2++)
2856
cg->m_bAlwaysTrue[tpi[z2]] = true;
2860
cg->m_bInactive = true;
2864
// for (z0=0;z0<g_oaNbSearches.GetSize();z0++)
2865
if (g_bSaveRefWithEnv)
2867
mprintf("Adding reference molecule to neighborhood...\n");
2868
g_pNbSet->AddMolecule(g_iFixMol,g_iSaveRefMol);
2878
for (z=0;z<g_oaMolecules.GetSize();z++)
2880
for (z2=0;z2<((CMolecule*)g_oaMolecules[z])->m_baAtomIndex.GetSize();z2++)
2882
sprintf(buf,"vfcorr_%s_%s%s.dat",((CMolecule*)g_oaMolecules[z])->m_sName,((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[z])->m_baAtomIndex[z2]])->m_sName,multibuf);
2883
// FreeFileName(buf);
2884
g_fVFCorr[g_iVFCorrCount] = OpenFileWrite(buf,true);
2893
g_pReact->InitMolecules(&g_TimeStep);
2899
sprintf(g_sRefEnv,"refenv_%s.%d.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1);
2900
/* for (z=0;z<g_oaMolecules.GetSize();z++)
2901
if (g_pNbAll->m_waMolCount[z] != 0)
2903
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2904
strcat(g_sRefEnv,buf2);
2906
/* if (!g_bDynamicNeighbor)
2907
strcat(g_sRefEnv,"static.");
2908
if (g_bRefEnvCenter)
2909
strcat(g_sRefEnv,"center.");
2911
strcat(g_sRefEnv,"fix.");
2912
if (g_bScanNeighbors)
2913
strcat(g_sRefEnv,"scannb.");*/
2914
strcat(g_sRefEnv,multibuf);
2915
strcat(g_sRefEnv,"xyz");
2916
mprintf(">>> Saving reference environment as %s\n",g_sRefEnv);
2917
// FreeFileName(g_sRefEnv);
2918
g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2925
sprintf(g_sRefEnv,"cluster_%s.",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
2926
/* for (z=0;z<g_oaMolecules.GetSize();z++)
2927
if (g_pNbAll->m_waMolCount[z] != 0)
2929
sprintf(buf2,"%dx%s.",g_pNbAll->m_waMolCount[z],((CMolecule*)g_oaMolecules[z])->m_sName);
2930
strcat(g_sRefEnv,buf2);
2932
/* if (g_bRefEnvCenter)
2933
strcat(g_sRefEnv,"center.");
2935
strcat(g_sRefEnv,"fix.");*/
2936
strcat(g_sRefEnv,multibuf);
2937
strcat(g_sRefEnv,"xyz");
2938
mprintf(">>> Saving cluster list as %s\n",g_sRefEnv);
2939
// FreeFileName(g_sRefEnv);
2940
g_fRefEnv = OpenFileWrite(g_sRefEnv,true);
2944
if (g_bSaveJustTraj)
2946
strcpy(buf,g_sInputTraj);
2947
p = strrchr(buf,'/');
2948
q = strrchr(buf,'\\');
2955
p = strrchr(buf2,'.');
2958
strcat(buf2,multibuf);
2959
strcat(buf2,"_out.xyz");
2960
// FreeFileName(buf);
2961
// sprintf(buf,"traj_out.xyz");
2962
mprintf("Saving processed trajectory as %s ...\n",buf2);
2963
g_fSaveJustTraj = OpenFileWrite(buf2,true);
2967
/******* Interface *******************/
2968
if (!Interface_Initialization())
2972
mprintf(WHITE,"\n<<< End of Initialization <<<\n\n");
2977
mprintf(WHITE,"\n### Starting Second Pass ###\n");
2980
mprintf(WHITE,"\n### Starting Main Analysis ###\n");
2982
mprintf("\n Please note: The VHCF analysis will become slower while it proceeds.\n");
2986
if (!g_bMultiInterval || (multicounter == 0))
2988
mprintf(WHITE,"\nHint: ");
2989
mprintf("Press CTRL+C once to softly interrupt analysis and still write the results.\n");
2990
mprintf(" Creating an empty file named EXIT (\"touch EXIT\") has the same effect.\n");
2994
if (!g_bStreamInput)
2996
g_fPos = fopen(g_sInputTraj,"rb");
2999
eprintf("\nCould not open position trajectory.\n");
3004
if ((g_bNPT) && (g_sNPTFile[0] != 0))
3006
g_fNPTFile = fopen(g_sNPTFile,"rt");
3007
if (g_fNPTFile == NULL)
3009
eprintf("\nCould not open cell vector file.\n");
3014
if (g_bUseVelocities && (g_sInputVel[0] != 0))
3016
g_fVel = fopen(g_sInputVel,"rt");
3019
eprintf("\nCould not open velocity trajectory.\n");
3023
if (g_bUseForces && (g_sInputForce[0] != 0))
3025
g_fForce = fopen(g_sInputForce,"rt");
3026
if (g_fForce == NULL)
3028
eprintf("\nCould not open force trajectory.\n");
3033
// fff = fopen("dipole.txt","wt");
3035
if (g_iBeginStep != 0)
3037
mprintf("\nFast-forwarding to step %d...\n",g_iBeginStep+1);
3038
// mprintf("Seek: %d.\n",g_iFastForwardPos);
3039
fseek(g_fPos,g_iFastForwardPos,SEEK_SET);
3040
if ((g_fVel != NULL) || (g_fForce != NULL) || ((g_bNPT) && (g_sNPTFile[0] != 0)))
3042
mprintf(WHITE," [");
3043
for (z=0;z<g_iBeginStep;z++)
3045
/* if (!g_TimeStep.SkipTimestep(g_fPos))
3047
eprintf("Error. Unexpected end of position trajectory.\n");
3050
if (fmod(z,g_iBeginStep/60.0) < 1.0)
3054
if (!g_TimeStep.SkipTimestep(g_fVel))
3056
eprintf("Error. Unexpected end of velocity trajectory.\n");
3060
if (g_fForce != NULL)
3062
if (!g_TimeStep.SkipTimestep(g_fForce))
3064
eprintf("Error. Unexpected end of force trajectory.\n");
3068
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3069
fgets(buf,256,g_fNPTFile);
3071
mprintf(WHITE,"]\n");
3075
g_oaTimeSteps.SetSize(g_iStepHistory);
3076
for (z=0;z<g_iStepHistory;z++)
3077
g_oaTimeSteps[z] = NULL;
3079
g_iSteps = 0; // Der Zaehler der Zeitschritte
3080
g_iCurrentTimeStep = 0;
3084
g_iSaveCondCount = 0;
3086
try { apfa = new CxDoubleArray*[g_iCDFChannels]; } catch(...) { apfa = NULL; }
3087
if (apfa == NULL) NewException((double)g_iCDFChannels*sizeof(CxDoubleArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3089
try { apba = new CxByteArray*[g_iCDFChannels]; } catch(...) { apba = NULL; }
3090
if (apba == NULL) NewException((double)g_iCDFChannels*sizeof(CxByteArray*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3092
try { tda = new double[g_iCDFChannels]; } catch(...) { tda = NULL; }
3093
if (tda == NULL) NewException((double)g_iCDFChannels*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3102
if (g_bDipole && g_bDumpDipoleVector)
3104
g_fDumpDipole = OpenFileWrite("dipole_vectors.csv",true);
3105
fprintf(g_fDumpDipole,"#Step");
3106
for (z=0;z<g_oaMolecules.GetSize();z++)
3108
if (g_oaDumpDipoleVector[z] == NULL)
3110
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3112
fprintf(g_fDumpDipole,"; %s[%d]_X; Y; Z",((CMolecule*)g_oaMolecules[z])->m_sName,((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)+1);
3113
if (g_bDumpDipoleAbs)
3114
fprintf(g_fDumpDipole,"; Abs");
3117
fprintf(g_fDumpDipole,"\n");
3119
if (g_bDumpDipoleXYZ)
3121
g_fDumpDipoleXYZ = OpenFileWrite("dipole_vectors.xyz",true);
3123
fprintf(g_fDumpDipoleXYZ,"%d\n\n",g_iDumpDipoleXYZAtoms);
3125
for (z=0;z<g_oaMolecules.GetSize();z++)
3127
if (g_oaDumpDipoleVector[z] == NULL)
3129
m = (CMolecule*)g_oaMolecules[z];
3130
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3132
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[((CxIntArray*)g_oaDumpDipoleVector[z])->GetAt(z2)]];
3134
for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3136
if (m->m_baAtomIndex[z3] == g_iVirtAtomType)
3138
for (z4=0;z4<((CxIntArray*)sm->m_oaAtomOffset[z3])->GetSize();z4++)
3140
ti = ((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(z4);
3141
fprintf(g_fDumpDipoleXYZ,"%s %12f %12f %12f\n",((CAtom*)g_oaAtoms[m->m_baAtomIndex[z3]])->m_sName,g_TimeStep.m_vaCoords[ti][0]/100.0,g_TimeStep.m_vaCoords[ti][1]/100.0,g_TimeStep.m_vaCoords[ti][2]/100.0);
3148
for (z=0;z<g_oaMolecules.GetSize();z++)
3150
if (g_oaDumpDipoleVector[z] == NULL)
3152
m = (CMolecule*)g_oaMolecules[z];
3153
for (z2=0;z2<((CxIntArray*)g_oaDumpDipoleVector[z])->GetSize();z2++)
3155
fprintf(g_fDumpDipoleXYZ,"B %12f 0 0\n",100.0+ti2*3.0);
3156
fprintf(g_fDumpDipoleXYZ,"B %12f 0.5 0\n",100.0+ti2*3.0);
3164
/*****************************************************************************
3165
*************** Beginn Hauptschleife *****************************************
3166
*****************************************************************************/
3168
g_iLastTimeStep = -1;
3170
g_bStepSkipped = false;
3171
g_iFirstStepSkipped = -1;
3174
while (true) // Zeitschritt fuer Zeitschritt die Trajektorie durchgehen
3178
mprintf("\nEnd of trajectory file reached.\n");
3181
if (g_bAbortAnalysis)
3183
mprintf("\nAnalysis aborted by user.\n");
3186
g_iCurrentTimeStep++;
3187
if (g_iCurrentTimeStep >= g_iStepHistory)
3188
g_iCurrentTimeStep = 0;
3193
if (g_iDerivNext > 2)
3196
if (g_iDerivCurr > 2)
3199
if (g_iDerivLast > 2)
3203
for (z=0;z<(g_iStride-1);z++)
3205
if (!g_TimeStep.SkipTimestep(g_fPos))
3208
eprintf("\nError while skipping time step %d.\n",g_iSteps+z+1);
3211
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3212
fgets(buf,256,g_fNPTFile);
3215
if (!g_TimeStep.SkipTimestep(g_fVel))
3217
eprintf("\nError while skipping velocity time step %d.\n",g_iSteps+z+1);
3221
if (g_fForce != NULL)
3223
if (!g_TimeStep.SkipTimestep(g_fForce))
3225
eprintf("\nError while skipping force time step %d.\n",g_iSteps+z+1);
3231
if (g_bUseVelocities || g_bUseForces)
3233
if (GetTimeStep(-1) == NULL)
3235
try { *GetTimeStepAddress(-1) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(-1) = NULL; }
3236
if (*GetTimeStepAddress(-1) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3238
if (!GetTimeStep(-1)->ReadTimestep(g_fPos,false))
3242
mprintf("\nEnd of Trajectory File reached.\n");
3245
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3248
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3249
GetTimeStep(-1)->ReadCellVector(g_fNPTFile);
3250
if (g_bSkipDoubleSteps)
3252
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3254
if (!g_bStepSkipped)
3256
g_bStepSkipped = true;
3257
g_iFirstStepSkipped = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3258
mprintf("\nSkipping:");
3262
} else if (g_iFirstStepSkipped != -1)
3264
if (g_iFirstStepSkipped == GetTimeStep(-1)->ExtractNumber(g_iNumberPos))
3265
mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3266
else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(-1)->ExtractNumber(g_iNumberPos));
3268
g_iFirstStepSkipped = -1;
3271
if (g_iLastTimeStep != -1)
3273
if (g_iStrideDetect == -1)
3275
g_iStrideDetect = GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3278
if (g_iStrideDetect != (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3282
eprintf("Warning: Two successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(-1)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3288
if (GetTimeStep(-1)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3289
g_iLastTimeStep = GetTimeStep(-1)->ExtractNumber(g_iNumberPos);
3291
if (GetTimeStep(-1)->m_iGesAtomCount == 0)
3293
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3296
GetTimeStep(-1)->UniteMolecules(false);
3298
GetTimeStep(-1)->CenterCOM();
3299
GetTimeStep(-1)->CalcCenters();
3303
GetTimeStep(-1)->ScanWannier(false);
3304
GetTimeStep(-1)->CalcDipoles();
3305
if (g_bDumpDipoleVector)
3306
GetTimeStep(-1)->DumpDipoles();
3310
if (GetTimeStep(0) == NULL)
3312
try { *GetTimeStepAddress(0) = new CTimeStep(); } catch(...) { *GetTimeStepAddress(0) = NULL; }
3313
if (*GetTimeStepAddress(0) == NULL) NewException((double)sizeof(CTimeStep),__FILE__,__LINE__,__PRETTY_FUNCTION__);
3315
if (!GetTimeStep(0)->ReadTimestep(g_fPos,false))
3319
mprintf("\nEnd of trajectory file reached.\n");
3322
eprintf("\nError while reading time step %d.\n",g_iSteps+1);
3325
if (((g_bNPT) && (g_sNPTFile[0] != 0)))
3326
GetTimeStep(0)->ReadCellVector(g_fNPTFile);
3327
if (g_bSkipDoubleSteps)
3329
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) <= g_iLastTimeStep)
3331
// mprintf("\n[Skip %d/%d]",GetTimeStep(0)->ExtractNumber(),g_iLastTimeStep);
3332
if (!g_bStepSkipped)
3334
g_bStepSkipped = true;
3335
g_iFirstStepSkipped = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3336
mprintf("\nSkipping:");
3340
} else if (g_iFirstStepSkipped != -1)
3342
if (g_iFirstStepSkipped == GetTimeStep(0)->ExtractNumber(g_iNumberPos))
3343
mprintf("\nRepeated step %d skipped.",g_iFirstStepSkipped);
3344
else mprintf("\nRepeated steps %d-%d skipped.",g_iFirstStepSkipped,GetTimeStep(0)->ExtractNumber(g_iNumberPos));
3346
g_iFirstStepSkipped = -1;
3348
// mprintf("\nNumber %d.",GetTimeStep(0)->ExtractNumber());
3350
if (g_iLastTimeStep != -1)
3352
if (g_iStrideDetect == -1)
3354
g_iStrideDetect = GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep;
3357
if (g_iStrideDetect != (GetTimeStep(0)->ExtractNumber(g_iNumberPos) - g_iLastTimeStep))
3361
eprintf("Warning: Successive steps %d (%d) and %d (%d) have different distance than seen before: %d.\n",g_iSteps-1,g_iLastTimeStep,g_iSteps,GetTimeStep(0)->ExtractNumber(g_iNumberPos),g_iStrideDetect);
3367
if (GetTimeStep(0)->ExtractNumber(g_iNumberPos) > g_iLastTimeStep)
3368
g_iLastTimeStep = GetTimeStep(0)->ExtractNumber(g_iNumberPos);
3370
if (GetTimeStep(0)->m_iGesAtomCount == 0)
3372
eprintf("\nError: Atom count = 0 at time step %d.\n",g_iSteps+1);
3375
if (!g_bSaveCoordsUnchanged)
3377
GetTimeStep(0)->UniteMolecules(false);
3379
GetTimeStep(0)->CenterCOM();
3381
GetTimeStep(0)->CalcCenters();
3385
GetTimeStep(0)->ScanWannier(false);
3386
GetTimeStep(0)->CalcDipoles();
3387
if (g_bDumpDipoleVector)
3388
GetTimeStep(0)->DumpDipoles();
3391
g_bWarnUnsteady = false;
3393
if (((g_iSteps-(sic*g_iStride*50)) % (showinterval*g_iStride)) == 0)
3395
if ((g_iSteps == 0) || g_bStepSkipped)
3397
g_bStepSkipped = false;
3398
if (!g_bSilentProgress)
3399
mprintf("\nStep %6d ",g_iSteps);
3401
if (g_bAsciiArt && (!g_bSilentProgress))
3403
tc = g_oAsciiArt.GetChar();
3406
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3408
if ((time(NULL) - t0) > 5)
3410
eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),(((g_iMaxStep > 0)?g_iMaxStep:g_iTrajSteps) - ((long)g_iSteps)))));
3411
FormatTime(eta,buf);
3412
mprintf(" ETA %s",buf);
3415
mprintf("\nStep %6d ",g_iSteps);
3417
g_oAsciiArt.NewLine();
3418
} else mprintf("%c",tc);
3421
if (g_iDotCounter >= 50)
3424
if (!g_bSilentProgress)
3426
if ((g_iSteps != 0) && (g_iTrajSteps != -1))
3428
if ((time(NULL) - t0) > 5)
3430
eta = (unsigned long)(((double)time(NULL) - t0) / g_iSteps * ((double)max(long(0),g_iTrajSteps - ((long)g_iSteps))));
3431
FormatTime(eta,buf);
3432
mprintf(" ETA %s",buf);
3435
mprintf("\nStep %6d ",g_iSteps);
3439
if (!g_bSilentProgress)
3442
if (FileExist("EXIT"))
3444
mprintf("\n\n*** File \"EXIT\" detected. Aborting analysis. ***\n\n");
3450
if ((int)g_iSteps == /*showinterval**/g_iStride*50)
3455
else showinterval = (int)(20.0f/(t1-t0));
3456
if (showinterval == 0)
3461
g_iSteps += g_iStride;
3463
if (GetTimeStep(0)==NULL)
3466
if ((g_bUseVelocities || g_bUseForces) && (GetTimeStep(1)==NULL))
3469
if (g_bUseVelocities)
3474
} else if (!GetTimeStep(-1)->ReadTimestepVel(g_fVel))
3476
eprintf("\nError reading velocity time step %d.\n",g_iSteps+1);
3482
if (g_fForce == NULL)
3485
} else if (!GetTimeStep(-1)->ReadTimestepForce(g_fForce))
3487
eprintf("\nError reading force time step %d.\n",g_iSteps+1);
3494
if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
3497
if (g_iClusterPos >= g_iClusterCount)
3500
if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
3503
// mprintf("\nStep %d for clusters.",((int)g_iSteps/g_iStride));
3505
if (g_bUnwrap && ((int)g_iSteps > g_iStride))
3506
// Nicht im ersten Schritt
3508
for (z=0;z<g_oaMolecules.GetSize();z++)
3510
m = (CMolecule*)g_oaMolecules[z];
3511
for (z3=0;z3<m->m_baAtomIndex.GetSize();z3++)
3513
if (m->m_baAtomIndex[z3] != g_iVirtAtomType)
3515
for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
3517
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
3518
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] > g_fBoxX/2.0f)
3519
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] -= g_fBoxX;
3520
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][0] < -g_fBoxX/2.0f)
3521
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0] += g_fBoxX;
3522
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] > g_fBoxY/2.0f)
3523
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] -= g_fBoxY;
3524
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][1] < -g_fBoxY/2.0f)
3525
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1] += g_fBoxY;
3526
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] > g_fBoxZ/2.0f)
3527
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] -= g_fBoxZ;
3528
if (GetTimeStep(0)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] - GetTimeStep(1)->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z3])->GetAt(0)][2] < -g_fBoxZ/2.0f)
3529
g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2] += g_fBoxZ;
3530
// mprintf("\n%2d.%2d: %f, %f, %f",z,z2,g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][0],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][1],g_vaUnwrapArray[m->m_laSingleMolIndex[z2]][2]);
3536
if (g_bKeepUnfoldedCoords)
3537
GetTimeStep(0)->m_vaCoords_Unfolded.CopyFrom(&GetTimeStep(0)->m_vaCoords);
3539
/******* Interface *********/
3540
Interface_ProcessStep(GetTimeStep(0));
3544
g_pT2Timestep = GetTimeStep(0);
3545
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3548
o = (CObservation*)g_oaObserv[z0];
3549
if (g_bMSDCacheMode)
3551
for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3553
for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3555
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3557
ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3558
ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[ti2];
3560
if (g_bPeriodic && (ptfa->GetSize() > 0))
3562
ti3 = ptfa->GetSize()-3;
3563
vec1[0] = ptfa->GetAt(ti3++);
3564
vec1[1] = ptfa->GetAt(ti3++);
3565
vec1[2] = ptfa->GetAt(ti3);
3566
tf = (g_pT2Timestep->m_vaCoords[ti]-vec1).GetLength();
3567
if (tf > g_fMinPeriodic/2.0)
3568
eprintf("\nDiscontinuity in step %d: %s[%d] %s%d moved %.2f pm. Can't compute MSD from wrapped trajectory - unwrap first.",g_iSteps,((CMolecule*)g_oaMolecules[g_waAtomMolIndex[ti]])->m_sName,g_laAtomSMLocalIndex[ti]+1,((CAtom*)g_oaAtoms[g_waAtomRealElement[ti]])->m_sName,g_waAtomMolNumber[ti]+1,tf);
3571
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][0]);
3572
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][1]);
3573
ptfa->Add(g_pT2Timestep->m_vaCoords[ti][2]);
3581
for (z=0;z<o->m_pMSD->m_iResolution/o->m_pMSD->m_iStride;z++)
3583
g_pTempTimestep = GetTimeStep(z*o->m_pMSD->m_iStride);
3584
if (g_pTempTimestep == NULL)
3586
for (z2=0;z2<o->m_pMSD->m_pAtomGroup->m_oaAtoms.GetSize();z2++)
3588
for (z3=0;z3<((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetSize();z3++)
3590
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z4++)
3592
ti = ((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z4]])->m_oaAtomOffset[o->m_pMSD->m_pAtomGroup->m_baAtomType[z2]])->GetAt(((CxIntArray*)o->m_pMSD->m_pAtomGroup->m_oaAtoms[z2])->GetAt(z3));
3593
o->m_pMSD->m_pMSD->AddToBin_Index(z,(double)(pow(g_pTempTimestep->m_vaCoords[ti][0]-g_pT2Timestep->m_vaCoords[ti][0],2)+pow(g_pTempTimestep->m_vaCoords[ti][1]-g_pT2Timestep->m_vaCoords[ti][1],2)+pow(g_pTempTimestep->m_vaCoords[ti][2]-g_pT2Timestep->m_vaCoords[ti][2],2)));
3602
if (g_bSaveJustTraj)
3604
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3606
if (g_bSaveJustCenter && (!g_bSaveCoordsUnchanged))
3608
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iSaveJustMol])->m_laSingleMolIndex[g_iSaveJustSM]])->m_oaAtomOffset[g_iSaveJustAtomType])->GetAt(g_iSaveJustAtom)];
3609
g_pTempTimestep->CenterPos(vec0);
3612
if (g_bSaveTrajNoRot)
3614
g_pTempTimestep->CenterCOM();
3616
// mfprintf(g_fSaveJustTraj," %d\n\n",(int)g_iSaveGesAtoms*3);
3618
// for (z=0;z<g_iGesAtomCount;z++)
3619
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3621
// g_pTempTimestep->Transform(tdmat2);
3622
g_pTempTimestep->Transform(tq2);
3624
// for (z=0;z<g_iGesAtomCount;z++)
3625
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+10.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3627
if ((int)g_iSteps > g_iStride)
3630
for (z=0;z<g_iGesAtomCount;z++)
3632
dvec2 = (g_pTempTimestep->m_vaCoords[z] - rot_ts.m_vaCoords[z]);
3633
dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3635
// tf3 = dvec4.GetLength();
3636
// tf2 = dvec2.GetLength();
3637
// if (4*tf3*tf3 > 0.25*tf2*tf2)
3639
// dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3640
// mprintf("\n%.10g",1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2));
3643
dvec3 = CrossP(dvec4,dvec2);
3644
dvec1 += dvec3 * ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass;
3645
// mprintf(" %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f\n",z,dvec2[0],dvec2[1],dvec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],dvec3[0],dvec3[1],dvec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3647
// mprintf("Drehimpuls: %g ( %g, %g, %g )\n",dvec1.GetLength(),dvec1[0],dvec1[1],dvec1[2]);
3650
// mprintf(" ( %g, %g, %g )\n",vec3[0],vec3[1],vec3[2]);
3653
for (z=0;z<g_iGesAtomCount;z++)
3655
dvec4 = (g_pTempTimestep->m_vaCoords[z] + rot_ts.m_vaCoords[z]) / 2.0;
3657
// tf3 = dvec4.GetLength();
3658
// tf2 = dvec2.GetLength();
3659
// dvec4 *= (1.0 + 1.0 - 0.5 / tf3 * sqrt(4*tf3*tf3 - 0.25*tf2*tf2) );
3661
dvec0 = CrossP(dvec4,dvec3);
3662
// mprintf("# ( %g, %g, %g ) x ( %g, %g, %g ) = %g\n",g_pTempTimestep->m_vaCoords[z][0],g_pTempTimestep->m_vaCoords[z][1],g_pTempTimestep->m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],vec0.GetLength());
3663
tf += ((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass * dvec0.GetLengthSqr();
3664
// mprintf("\n %2d: ( %g, %g, %g ) x ( %g, %g, %g ) = ( %g, %g, %g ), m = %.2f",z,vec2[0],vec2[1],vec2[2],rot_ts.m_vaCoords[z][0],rot_ts.m_vaCoords[z][1],rot_ts.m_vaCoords[z][2],vec3[0],vec3[1],vec3[2],((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_pElement->m_fMass);
3666
// mprintf(" Traegheitsmoment: %g\n",tf);
3668
// mprintf("Angular momentum vector: ( %g, %g, %g ) (l = %g)\n",dvec1[0],dvec1[1],dvec1[2],dvec1.GetLength());
3669
// mprintf(" Winkelgeschw.: %g\n",dvec1.GetLength());
3671
// dvec3.Normalize();
3673
// mprintf(" Baue Matrix: ( %g | %g | %g ), %g\n",dvec3[0],dvec3[1],dvec3[2],-dvec1.GetLength());
3675
// tdmat.RotMat(dvec3,-dvec1.GetLength());
3677
tq.BuildRotation(dvec3,dvec1.GetLength());
3679
// mprintf(" Die Matrix:\n");
3682
// tdmat2 = tdmat2 * tdmat;
3685
if (fabs(tq2.GetLength()-1.0) > 0.000001)
3687
eprintf("\nRenormalizing rotation quaternion.\n");
3691
// g_pTempTimestep->Transform(tdmat);
3692
g_pTempTimestep->Transform(tq);
3695
rot_ts.CopyFrom(g_pTempTimestep);
3697
// for (z=0;z<g_iGesAtomCount;z++)
3698
// mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z]])->m_sName,g_pTempTimestep->m_vaCoords[z][0]/100.0+20.0,g_pTempTimestep->m_vaCoords[z][1]/100.0,g_pTempTimestep->m_vaCoords[z][2]/100.0);
3702
if (g_bFold && (!g_bSaveCoordsUnchanged))
3704
if (g_bFoldAtomwise)
3705
g_pTempTimestep->FoldAtoms();
3706
else g_pTempTimestep->FoldMolecules();
3710
if (!g_bCenterZero && (!g_bSaveCoordsUnchanged) && g_bPeriodic)
3711
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
3713
ti = g_iSaveGesAtoms;
3715
if (g_bUnwrapWannier)
3717
g_pTempTimestep->ScanWannier(false);
3719
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3721
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3722
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3723
ti += ((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();
3727
mfprintf(g_fSaveJustTraj," %d\n",ti);
3728
if (g_pTempTimestep->m_pComment != NULL)
3729
mfprintf(g_fSaveJustTraj,"%s\n",g_pTempTimestep->m_pComment);
3730
else mfprintf(g_fSaveJustTraj,"\n");
3732
if (g_bWriteInputOrder) // This implies that all non-virtual atoms are to be written
3734
for (z7=0;z7<g_iGesAtomCount;z7++)
3736
z3 = g_waAtomMolIndex[z7]; // Molecule
3737
z6 = g_laAtomSMLocalIndex[z7]; // SingleMolecule
3738
z4 = g_waAtomElement[z7]; // AtomType
3739
z5 = g_waAtomMolNumber[z7]; // Atom
3741
m = (CMolecule*)g_oaMolecules[z3];
3743
vec0 = g_pTempTimestep->m_vaCoords[z7];
3746
vec0 += g_vaUnwrapArray[m->m_laSingleMolIndex[z6]];
3747
// mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3749
mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[g_waAtomRealElement[z7]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3753
if (g_bWriteAtomwise)
3755
for (z7=0;z7<g_oaAtoms.GetSize();z7++)
3757
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3759
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3760
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3762
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3764
if (atgr->m_baRealAtomType[z4] != z7)
3766
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3767
for (z5=0;z5<tla->GetSize();z5++)
3769
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3772
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3773
// mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3775
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3777
if (g_bSaveVirtAtoms)
3778
mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3779
} else mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3787
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3789
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3790
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3792
for (z4=0;z4<atgr->m_baAtomType.GetSize();z4++)
3794
tla = (CxIntArray*)atgr->m_oaAtoms[z4];
3795
for (z5=0;z5<tla->GetSize();z5++)
3797
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_oaAtomOffset[atgr->m_baAtomType[z4]])->GetAt(tla->GetAt(z5))];
3800
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3801
// mprintf("\nUnwrap: (%G|%G|%G) <-- (%G|%G|%G)",vec0[0],vec0[1],vec0[2],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][0],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][1],g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]][2]);
3803
if (atgr->m_baRealAtomType[z4] == g_iVirtAtomType)
3805
if (g_bSaveVirtAtoms)
3806
mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CVirtualAtom*)g_oaVirtualAtoms[atgr->m_pMolecule->m_laVirtualAtoms[tla->GetAt(z5)]])->m_sLabel,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3807
} else mfprintf(g_fSaveJustTraj,"%2s %8.5f %8.5f %8.5f\n",((CAtom*)g_oaAtoms[atgr->m_baRealAtomType[z4]])->m_sName,vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3815
if (g_bUnwrapWannier)
3817
for (z3=0;z3<g_oaSaveMolecules.GetSize();z3++)
3819
atgr = (CAtomGroup*)g_oaSaveMolecules[z3];
3820
for (z6=0;z6<atgr->m_pMolecule->m_laSingleMolIndex.GetSize();z6++)
3822
for (z4=0;z4<((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier.GetSize();z4++)
3824
vec0 = g_pTempTimestep->m_vaCoords[((CSingleMolecule*)g_oaSingleMolecules[atgr->m_pMolecule->m_laSingleMolIndex[z6]])->m_laWannier[z4]];
3826
vec0 += g_vaUnwrapArray[atgr->m_pMolecule->m_laSingleMolIndex[z6]];
3827
mfprintf(g_fSaveJustTraj," X %8.5f %8.5f %8.5f\n",vec0[0]/100.0,vec0[1]/100.0,vec0[2]/100.0);
3832
} // END IF g_bSaveJustTraj
3836
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3837
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
3839
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
3840
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
3842
bond = (CMolBond*)sm->m_oaBonds[z3];
3843
bond->m_faData.Add(VecDist(g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[0]],g_pTempTimestep->m_vaCoords[bond->m_iAtomOffset[1]]));
3848
if (g_bAggregation || g_bNbExchange)
3850
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3852
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3854
o = (CObservation*)g_oaObserv[z0];
3855
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3857
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3858
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3859
dacfsub->m_pCondition->m_iPassCounter[z2] = 0;
3862
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3864
o = (CObservation*)g_oaObserv[z0];
3866
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
3868
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex[z2]];
3870
o->m_pDACF->m_pCondition->PreScanNeighborhoodAllOM(g_pTempTimestep,smfix);
3872
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3874
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3876
dacfsub->m_pCondition->CopyResults(o->m_pDACF->m_pCondition);
3877
dacfsub->m_pCondition->m_bAnyPassed = false;
3878
dacfsub->m_pCondition->ReScan(smfix);
3879
if (dacfsub->m_pCondition->m_bAnyPassed)
3880
dacfsub->m_pCondition->m_iRMPassCounter[z2]++;
3883
o->m_pDACF->UpdateDACFSub(z2,g_pTempTimestep,dacfsub);
3886
o->m_pDACF->UpdateNbEx(z2,dacfsub);
3890
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3892
o = (CObservation*)g_oaObserv[z0];
3893
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
3895
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
3896
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z2++)
3897
if (dacfsub->m_pCondition->m_iPassCounter[z2] != 0)
3898
dacfsub->m_pCondition->m_iOMPassCounter[z2]++;
3901
} // END IF AGGREGATION OR NBEX
3905
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3906
for (z0=0;z0<g_oaObserv.GetSize();z0++)
3908
o = (CObservation*)g_oaObserv[z0];
3909
m = (CMolecule*)g_oaMolecules[o->m_iShowMol];
3910
for (z3=0;z3<m->m_laSingleMolIndex.GetSize();z3++)
3912
if (g_bRegionAnalysis)
3913
if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[m->m_laSingleMolIndex[z3]])))
3916
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z3]];
3917
ti = ((CxIntArray*)sm->m_oaAtomOffset[o->m_pDensityDF->m_iCenterAtomType])->GetAt(o->m_pDensityDF->m_iCenterAtom);
3918
vec0 = g_pTempTimestep->m_vaCoords[ti];
3920
g_pTempTimestep->CenterPos(vec0);
3921
g_pTempTimestep->FoldAtoms();
3923
for (z4=0;z4<g_oaMolecules.GetSize();z4++)
3925
if (!o->m_pDensityDF->m_pDensityMolSelect[z4])
3927
m2 = (CMolecule*)g_oaMolecules[z4];
3928
ag = o->m_pDensityDF->m_pDensityMolAG[z4];
3929
for (z5=0;z5<m2->m_laSingleMolIndex.GetSize();z5++)
3931
if (g_bRegionAnalysis)
3932
if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[m2->m_laSingleMolIndex[z5]])))
3935
sm2 = (CSingleMolecule*)g_oaSingleMolecules[m2->m_laSingleMolIndex[z5]];
3936
for (z6=0;z6<ag->m_baAtomType.GetSize();z6++)
3938
if (ag->m_baRealAtomType[z6] == g_iVirtAtomType)
3940
if (o->m_pDensityDF->m_bDensityMass)
3942
tf2 = ((CAtom*)g_oaAtoms[ag->m_baRealAtomType[z6]])->m_pElement->m_fMass;
3943
for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3945
tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3946
o->m_pDensityDF->m_pDensDF->AddToBin(tf,tf2);
3950
for (z7=0;z7<((CxIntArray*)ag->m_oaAtoms[z6])->GetSize();z7++)
3952
tf = g_pTempTimestep->m_vaCoords[((CxIntArray*)sm2->m_oaAtomOffset[ag->m_baAtomType[z6]])->GetAt(((CxIntArray*)ag->m_oaAtoms[z6])->GetAt(z7))].GetLength();
3953
o->m_pDensityDF->m_pDensDF->AddToBin(tf);
3963
if (g_bRDyn || g_bIRSpec)
3965
g_pTempTimestep->CopyFrom(GetTimeStep(0));
3966
for (z6=0;z6<g_oaObserv.GetSize();z6++)
3968
o = (CObservation*)g_oaObserv[z6];
3970
trdyn = o->m_pIRSpec;
3971
else trdyn = o->m_pRDyn;
3973
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
3975
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
3977
if (trdyn->m_iVecType == 0)
3979
trdyn->BuildAtomList(sm,&templa);
3980
for (z4=0;z4<templa.GetSize();z4+=3)
3982
if (trdyn->m_bOrtho)
3984
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3985
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3986
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
3987
vec1 = CrossP(vec2-vec0,vec3-vec0);
3990
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
3991
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
3995
if (g_bRDynCacheMode)
3997
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
3998
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
3999
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
4003
for (z=0;z<trdyn->m_iDepth/trdyn->m_iStride;z++)
4005
g_pT2Timestep = GetTimeStep(z*trdyn->m_iStride);
4006
if (g_pT2Timestep == NULL)
4008
if (trdyn->m_bOrtho)
4010
vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
4011
vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4012
vec5 = g_pT2Timestep->m_vaCoords[templa[z4+2]];
4013
vec2 = CrossP(vec3-vec4,vec5-vec4);
4016
vec4 = g_pT2Timestep->m_vaCoords[templa[z4]];
4017
vec3 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4021
trdyn->m_pRDyn->AddToBin_Int(z,DotP(vec1,vec2));
4022
trdyn->m_pCount[z]++;
4026
} else if (trdyn->m_iVecType == 1)
4028
vec1 = sm->m_vDipole;
4029
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[0]);
4030
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[1]);
4031
((CxFloatArray*)trdyn->m_oaCache[ti])->Add(vec1[2]);
4034
// mfprintf(fff,"%f, %f, %f\n",vec1[0],vec1[1],vec1[2]);
4044
g_pT2Timestep = GetTimeStep(0);
4045
// mprintf("\nStep=%d, adding.",g_iSteps);
4048
if (g_bVACFCacheMode)
4051
for (z2=0;z2<g_iGesAtomCount;z2++)
4053
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
4055
// mprintf("Global: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,z2+1,g_pT2Timestep->m_vaVelocities[z2][0],g_pT2Timestep->m_vaVelocities[z2][1],g_pT2Timestep->m_vaVelocities[z2][2]);
4056
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][0]);
4057
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][1]);
4058
((CxFloatArray*)g_pGlobalVACF->m_oaCache[ti])->Add(g_pT2Timestep->m_vaVelocities[z2][2]);
4063
for (z=0;z<g_pGlobalVACF->m_iSize;z++)
4065
g_pTempTimestep = GetTimeStep(z);
4066
if (g_pTempTimestep == NULL)
4068
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
4070
pd = &g_pGlobalVACF->m_pData[z];
4071
g_pGlobalVACF->m_pCounter[z] += g_iGesAtomCount;
4072
for (z2=0;z2<g_iGesAtomCount;z2++)
4073
*pd += DotP(g_pTempTimestep->m_vaVelocities[z2],g_pT2Timestep->m_vaVelocities[z2]);
4077
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4079
o = (CObservation*)g_oaObserv[z6];
4080
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4082
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4083
o->m_pVACF->BuildAtomList(sm,&templa);
4084
for (z4=0;z4<templa.GetSize();z4++)
4086
if (g_bVACFCacheMode)
4089
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][0]);
4090
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][1]);
4091
((CxFloatArray*)o->m_pVACF->m_oaCache[z3*o->m_pVACF->m_iShowAtomGes+z4])->Add(g_pT2Timestep->m_vaVelocities[ti][2]);
4092
// mprintf("%d*%d+%d=%d\n",z3,o->m_pVACF->m_iShowAtomGes,z4,z3*o->m_pVACF->m_iShowAtomGes+z4);
4093
// mprintf("Lokal: Step %d, Atom %d: %.4ff | %.4ff | %.4ff\n",g_iSteps,ti+1,g_pT2Timestep->m_vaVelocities[ti][0],g_pT2Timestep->m_vaVelocities[ti][1],g_pT2Timestep->m_vaVelocities[ti][2]);
4094
// mprintf("Step %d: Obs %d, Mol %d, Atom %d: Index %d.\n",g_iStepHistory,z6+1,z3+1,z4+1,ti+1);
4097
for (z5=0;z5<o->m_pVACF->m_iSize;z5++)
4099
o->m_pVACF->m_pCounter[z5]++;
4100
g_pTempTimestep = GetTimeStep(z5);
4101
if (g_pTempTimestep == NULL)
4103
if (g_pTempTimestep->m_vaVelocities.GetSize() == 0)
4105
o->m_pVACF->m_pData[z5] += DotP(g_pTempTimestep->m_vaVelocities[templa[z4]],g_pT2Timestep->m_vaVelocities[templa[z4]]);
4113
if (g_bIRSpec && g_bGlobalIR)
4115
for (z3=0;z3<g_oaSingleMolecules.GetSize();z3++) // Alle anderen Molekuele durchgehen
4117
sm = (CSingleMolecule*)g_oaSingleMolecules[z3];
4118
vec1 = sm->m_vDipole;
4119
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[0]);
4120
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[1]);
4121
((CxFloatArray*)g_pGlobalIR->m_oaCache[z3])->Add(vec1[2]);
4123
} // END IF g_bGlobalIR
4127
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4130
g_pReact->WriteTrajec(g_pTempTimestep);
4133
g_pReact->ScanBonds(g_pTempTimestep,false);
4139
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4140
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4142
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4143
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4145
o = (CObservation*)g_oaObserv[z6];
4146
o->m_pNbAnalysis->m_pNbSearch->ScanAllOM(smfix,g_pTempTimestep);
4147
o->m_pNbAnalysis->AnalyzeStep();
4156
if (g_bClusterAnalysis)
4158
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4159
g_pClusterAnalysis->Process(g_pTempTimestep);
4164
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4165
g_pFESA->ProcessStep(g_pTempTimestep);
4170
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4171
g_pTempTimestep->FoldAtomsPositive();
4172
g_pMicroHet->Process(g_pTempTimestep);
4177
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4178
g_pThermoAnalysis->AnalyzeStep(g_pTempTimestep);
4183
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4185
if (g_pVoroWrapper->m_bVoroStat)
4187
g_pTempTimestep->FoldAtomsPositive();
4188
g_pVoroWrapper->Build(g_pTempTimestep);
4191
if (g_pVoroWrapper->m_bWritePOV)
4193
// g_pVoroWrapper->WritePOV(g_pTempTimestep);
4194
// g_pTempTimestep->FoldAtomsPositive();
4196
g_pVoroWrapper->PerformChoreography_Single(g_pTempTimestep);
4198
if (g_pVoroWrapper->m_bWritePOVMovie)
4200
if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
4205
if (g_pVoroWrapper->m_bSurfCover)
4206
g_pVoroWrapper->ProcessSurfCover(g_pTempTimestep);
4208
if (g_pVoroWrapper->m_bVoroMetric)
4210
if (!g_bClusterAnalysis)
4211
g_pVoroWrapper->BuildVoroMetric(g_pTempTimestep);
4214
if (g_pVoroWrapper->m_bPOVBox)
4216
g_pTempTimestep->FoldAtomsPositive();
4218
g_pVoroWrapper->PerformChoreography_Box(g_pTempTimestep);
4220
if (g_pVoroWrapper->m_bWritePOVMovie)
4222
if (g_pVoroWrapper->m_iPOVCurrentChoreographyPart >= g_pVoroWrapper->m_oaBoxChoreography.GetSize())
4230
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4231
g_pSFac->ProcessStep(g_pTempTimestep);
4236
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4237
g_pTempTimestep->FoldAtomsPositive();
4238
g_pVoroAnalysis->Step(g_pTempTimestep);
4241
if (g_bVDF && (g_iFixMol == -1))
4243
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4244
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4246
o = (CObservation*)g_oaObserv[z6];
4247
for (z3=0;z3<o->m_iShowMolCount;z3++) // Alle anderen Molekuele durchgehen
4249
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
4250
o->m_pVDF[0]->BuildAtomList(NULL,sm,&templa);
4252
for (z4=0;z4<templa.GetSize();z4++)
4253
o->m_pVDF[0]->m_pVDF->AddToBin(g_pTempTimestep->m_vaVelocities[templa[z4]].GetLength());
4258
if ((!g_bCDF) && (!g_bRDF) && (!g_bSDF) && (!g_bPlProj) && (!g_bPlDF) && (!g_bLiDF) && (!g_bVoidSDF) && (!g_bADF) && (!g_bDDF) && (!g_bVDF) && (!g_bDipDF) && (!g_bCutCluster) && (!g_bSaveRefEnv) && (!g_bVHDF) && (!g_bRevSDF) && (!g_bCond))
4263
if (g_bVoidSDF && g_pVoroAnalysis->m_bEmptySpaceSDF && g_pVoroAnalysis->m_bNewEmptyMode)
4265
g_pVoroAnalysis->m_pTempSDF->Clear();
4266
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4267
g_pTempTimestep->FoldAtomsPositive();
4268
for (z3=0;z3<g_iGesAtomCount;z3++)
4270
vec0 = g_pTempTimestep->m_vaCoords[z3];
4271
g_pVoroAnalysis->m_pTempSDF->AddToBin_SphereWrap(vec0,g_faVdWRadius[z3]);
4273
// g_pVoroAnalysis->m_pTempSDF->WritePLT("","bla.plt","",true);
4279
if (g_iFixMol == -1)
4282
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4284
o = (CObservation*)g_oaObserv[z6];
4286
if (o->m_pConditions != NULL)
4287
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4288
o->m_pConditions->m_iPassCounter[z2] = 0;
4290
if (o->m_pConditionsOM2 != NULL)
4291
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
4292
o->m_pConditionsOM2->m_iPassCounter[z2] = 0;
4295
// Jedes Festhalte-Molekuel mal im Ursprung liegen lassen
4296
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize();z2++)
4298
if (g_bDoubleBox && (z2 >= ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/g_iDoubleBoxFactor))
4301
smfix = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]];
4305
if (g_iClusterPos >= g_iClusterCount)
4308
if (((int)g_iSteps/g_iStride) >= g_iClusterSteps)
4311
if (g_iaClusterMol[g_iClusterPos] != z2)
4314
if (g_iaClusterSteps[g_iClusterPos] != ((int)g_iSteps/g_iStride))
4320
g_pTempTimestep->CopyFrom(GetTimeStep(0));
4322
// Zentrieren/Falten der ganzen Box nur noch noetig bei den folgenden Analysen
4323
if (g_bPlProj || g_bSDF || g_bRevSDF || g_bCutCluster || g_bSaveRefEnv || g_bSaveJustTraj || g_bVoidSDF || g_bMiddleAvg)
4325
vecc = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4327
if ((g_bCutCluster && !g_bRefEnvCenter) || (g_bSaveRefEnv && (!g_bRefEnvCenter) && (z2==g_iSaveRefMol)))
4331
g_pTempTimestep->CenterPos(vecc);
4333
if (g_bFoldAtomwise)
4334
g_pTempTimestep->FoldAtoms();
4335
else g_pTempTimestep->FoldMolecules();
4337
vec2 = -1.0f * vecc;
4339
g_pTempTimestep->CenterPos(vec2);
4342
if (g_bCutCluster || (g_iNbhMode == 2))
4347
g_pNbSet->ResetAlwaysTrue();
4349
g_pNbSet->Scan(smfix,g_pTempTimestep);
4351
if (g_bSaveRefWithEnv)
4352
g_pNbSet->AddMolecule(g_iFixMol,z2);
4355
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
4359
if (g_laTDOSteps.Contains(g_iSteps-1))
4361
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4362
mprintf("\nSaving TDO step as %s.\n",buf);
4363
tfi = OpenFileWrite(buf,true);
4364
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4370
// Legt vecc genau in den Ursprung des Koordinatensystems
4371
g_pTempTimestep->CenterPos(vecc);
4374
if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
4238
g_pTempTimestep->CenterPos(vecc);
4240
4378
if (g_bFoldAtomwise)
4241
4379
g_pTempTimestep->FoldAtoms();
4242
4380
else g_pTempTimestep->FoldMolecules();
4244
vec2 = -1.0f * vecc;
4246
g_pTempTimestep->CenterPos(vec2);
4249
if (g_bCutCluster || (g_iNbhMode == 2))
4254
g_pNbSet->ResetAlwaysTrue();
4256
g_pNbSet->Scan(smfix,g_pTempTimestep);
4258
if (g_bSaveRefWithEnv)
4259
g_pNbSet->AddMolecule(g_iFixMol,z2);
4262
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet);
4266
if (g_laTDOSteps.Contains(g_iSteps-1))
4383
if (g_bCutCluster || (g_iNbhMode == 2))
4388
g_pNbSet->ResetAlwaysTrue();
4390
g_pNbSet->Scan(smfix,g_pTempTimestep);
4392
if (g_bSaveRefWithEnv)
4393
g_pNbSet->AddMolecule(g_iFixMol,z2);
4396
if (!g_bCenterZero && g_bPeriodic)
4397
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4399
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4403
if (g_laTDOSteps.Contains(g_iSteps-1))
4405
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4406
mprintf("\nSaving TDO step as %s.\n",buf);
4407
tfi = OpenFileWrite(buf,true);
4408
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4414
if (g_bPlProj || g_bSDF || g_bVoidSDF || g_bAvg || ((g_bSaveRefEnv || g_bCutCluster) && g_bRefEnvCenter && g_bRefEnvFix)) // Wir brauchen ein neues Koordinatensystem und eine Drehmatrix
4416
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
4417
vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
4418
mat.MatUltra(vec2,vec3); // Dies erstellt uns die Drehmatrix
4419
g_pTempTimestep->Transform(mat);
4423
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4268
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4269
mprintf("\nSaving TDO step as %s.\n",buf);
4270
tfi = OpenFileWrite(buf,true);
4271
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4425
o = (CObservation*)g_oaObserv[z6];
4427
if (o->m_pPlProj->m_bAverageAtomPos)
4429
o->m_pPlProj->m_iAverageCounter++;
4431
for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
4433
for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
4435
o->m_pPlProj->m_vaAtomPos[ti] += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[o->m_pPlProj->m_oDrawAtoms.m_baAtomType[z3]])->GetAt(((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetAt(z4))];
4277
// Legt vecc genau in den Ursprung des Koordinatensystems
4278
g_pTempTimestep->CenterPos(vecc);
4282
4446
if (g_bFoldAtomwise)
4284
4448
else g_pTempTimestep->FoldMolecules();
4287
if ((g_bCutCluster && g_bRefEnvCenter && (!g_bRefEnvFix)) || (g_bSaveRefEnv && g_bRefEnvCenter && (!g_bRefEnvFix) && (z2==g_iSaveRefMol)))
4289
if (g_bCutCluster || (g_iNbhMode == 2))
4294
g_pNbSet->ResetAlwaysTrue();
4296
g_pNbSet->Scan(smfix,g_pTempTimestep);
4298
if (g_bSaveRefWithEnv)
4299
g_pNbSet->AddMolecule(g_iFixMol,z2);
4302
if (!g_bCenterZero && g_bPeriodic)
4303
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4305
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4309
if (g_laTDOSteps.Contains(g_iSteps-1))
4311
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4312
mprintf("\nSaving TDO step as %s.\n",buf);
4313
tfi = OpenFileWrite(buf,true);
4314
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4320
if (g_bSDF || g_bVoidSDF || g_bAvg || ((g_bSaveRefEnv || g_bCutCluster) && g_bRefEnvCenter && g_bRefEnvFix)) // Wir brauchen ein neues Koordinatensystem und eine Drehmatrix
4322
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
4323
vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
4324
mat.MatUltra(vec2,vec3); // Dies erstellt uns die Drehmatrix
4325
g_pTempTimestep->Transform(mat);
4328
if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
4330
if (g_bCutCluster || (g_iNbhMode == 2))
4334
g_pNbSet->ResetAlwaysTrue();
4335
g_pNbSet->Scan(smfix,g_pTempTimestep);
4336
if (g_bSaveRefWithEnv)
4337
g_pNbSet->AddMolecule(g_iFixMol,z2);
4340
if (!g_bCenterZero && g_bPeriodic)
4341
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4343
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4347
if (g_laTDOSteps.Contains(g_iSteps-1))
4349
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4350
mprintf("\nSaving TDO step as %s.\n",buf);
4351
tfi = OpenFileWrite(buf,true);
4352
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4357
} // END IF SDF, RevEnv, ...
4359
/***************************************************************************************************************************/
4363
if (g_pVoroAnalysis->m_bEmptySpaceSDF)
4365
if (!g_pVoroAnalysis->m_bNewEmptyMode)
4367
g_pVoroAnalysis->m_pTempSDF->Clear();
4369
for (z3=0;z3<g_oaMolecules.GetSize();z3++)
4371
tm = (CMolecule*)g_oaMolecules[z3];
4372
for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
4374
if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
4375
if ((z3 == g_iFixMol) && (z4 == z2))
4378
tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
4380
for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
4382
if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
4385
for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
4387
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
4389
g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
4394
g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
4397
g_pVoroAnalysis->BinEmptySDF();
4401
if (g_pVoroAnalysis->m_bSphereHoleSDF)
4403
g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
4407
if (g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bPlDF || g_bLiDF || g_bSDF || g_bADF || g_bDDF || g_bVDF || g_bCond)
4409
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4411
o = (CObservation*)g_oaObserv[z6];
4413
// mprintf("\nStep %d, z2=%d, Obs=%d, Reg=%d, ObsReg=%d.",g_iSteps,z2,z6,g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]],o->m_iaRMRegions[0]);
4415
if (g_bRegionAnalysis)
4416
if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])))
4419
// mprintf("\n ...RM ist in Region.");
4421
ti2 = o->m_waSaveRefList.GetPosition(z2);
4423
if (o->m_bObsCertain)
4425
// mprintf("\n RefList: ");
4426
// for (z7=0;z7<o->m_waObsRefList.GetSize();z7++)
4427
// mprintf("%d, ",o->m_waObsRefList[z7]);
4429
if (!o->m_waObsRefList.Contains(z2))
4431
// mprintf("\n ...RM ist auch in RefList.");
4432
tic_r = o->m_waObsRefList.GetPosition(z2);
4435
if (g_bUseVelocities)
4437
tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
4438
if (o->m_bVelocityRelToRef)
4440
vecv = g_pTempTimestep->m_vaVelocities[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4441
for (z3=0;z3<g_iGesVirtAtomCount;z3++)
4442
tempvel[z3] -= vecv;
4446
if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
4448
if (o->m_bSaveSeparateFiles)
4449
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
4451
mfprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
4454
for (zr=0;zr<g_iCDFChannels;zr++)
4456
if (g_bRDF && (o->m_pRDF[zr] != NULL))
4458
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4459
o->m_pRDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4460
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4461
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4462
o->m_pRDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4463
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4465
if (o->m_bSaveSeparateFiles)
4466
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
4468
mfprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
4472
if (g_bADF && (o->m_pADF[zr] != NULL))
4474
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4475
o->m_pADF[zr]->m_faData[z3].RemoveAll_KeepSize();
4476
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4477
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4478
o->m_pADF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4479
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4481
if (o->m_bSaveSeparateFiles)
4482
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4484
mfprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4488
if (g_bDDF && (o->m_pDDF[zr] != NULL))
4490
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4491
o->m_pDDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4492
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4493
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4494
o->m_pDDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4495
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4497
if (o->m_bSaveSeparateFiles)
4498
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4500
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4504
if (g_bPlDF && (o->m_pPlDF[zr] != NULL))
4506
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4507
o->m_pPlDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4508
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4509
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4510
o->m_pPlDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4511
/* if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4513
if (o->m_bSaveSeparateFiles)
4514
mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4516
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4520
if (g_bLiDF && (o->m_pLiDF[zr] != NULL))
4522
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4523
o->m_pLiDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4524
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4525
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4526
o->m_pLiDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4527
/* if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4529
if (o->m_bSaveSeparateFiles)
4530
mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4532
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4536
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
4538
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4539
o->m_pDipDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4540
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4541
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4542
o->m_pDipDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4543
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4545
if (o->m_bSaveSeparateFiles)
4546
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
4548
mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
4552
if (g_bVDF && (o->m_pVDF[zr] != NULL))
4554
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4555
o->m_pVDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4556
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4557
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4558
o->m_pVDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4559
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4561
if (o->m_bSaveSeparateFiles)
4562
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
4564
mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
4571
for (z3=0;z3<o->m_iShowMolCount;z3++)
4573
o->m_pSDF->m_vaData[z3].RemoveAll_KeepSize();
4574
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4575
o->m_pSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4581
for (z3=0;z3<o->m_iShowMolCount;z3++)
4583
o->m_pRevSDF->m_vaData[z3].RemoveAll_KeepSize();
4584
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4585
o->m_pRevSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4593
for (zr=0;zr<g_iCDFChannels;zr++)
4595
if (o->m_pADF[zr] == NULL)
4597
o->m_pADF[zr]->BuildAtomList(smfix,NULL,&templa);
4598
for (z4=0;z4<templa.GetSize();z4+=6)
4600
if (o->m_pADF[zr]->m_bOrtho[0])
4602
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4603
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4604
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4605
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4608
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4609
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4610
vec1 = FoldVector(vec2-vec0);
4612
if (o->m_pADF[zr]->m_bOrtho[1])
4614
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4615
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4616
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4617
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4620
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4621
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4622
vec2 = FoldVector(vec3-vec4);
4624
tf = Angle_Deg(vec1,vec2);
4625
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
4627
if (o->m_pADF[zr]->m_bCosine)
4628
tf = cos(tf/180.0*Pi);
4632
o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) = tf;
4633
switch(o->m_pADF[zr]->m_iDeriv)
4636
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
4639
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (2*g_fTimestepLength);
4642
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (g_fTimestepLength * g_fTimestepLength);
4647
if (!g_bDeriv || (g_iSteps > 2))
4649
if (o->m_bObsCertain && o->m_bDecompDist)
4650
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
4652
o->m_pADF[zr]->m_faData[0].Add(tf);
4654
if (o->m_pADF[zr]->m_bACF)
4655
o->m_pADF[zr]->m_pfaACFBuffer[z2*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
4657
/* if (o->m_pADF[zr]->m_bMirror)
4659
if (o->m_bObsCertain && o->m_bDecompDist)
4660
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,180.0-tf);
4661
o->m_pADF[zr]->m_faData[0].Add(180.0-tf);
4664
if (o->m_bTimeDev && (ti2 != -1))
4666
if (o->m_bSaveSeparateFiles)
4667
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
4668
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
4669
if (o->m_bCombinedPlot)
4670
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
4673
((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
4681
for (zr=0;zr<g_iCDFChannels;zr++)
4683
if (o->m_pDDF[zr] == NULL)
4685
o->m_pDDF[zr]->BuildAtomList(smfix,smfix,&templa);
4686
for (z4=0;z4<templa.GetSize();z4+=9)
4688
if (o->m_pDDF[zr]->m_bOrtho[0])
4690
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4691
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4692
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4693
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4696
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4697
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4698
vec1 = FoldVector(vec2-vec0);
4700
if (o->m_pDDF[zr]->m_bOrtho[1])
4702
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4703
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4704
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4705
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4708
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4709
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4710
vec2 = FoldVector(vec3-vec4);
4712
if (o->m_pDDF[zr]->m_bOrtho[2])
4714
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4715
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4716
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
4717
vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4720
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4721
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4722
vec3 = FoldVector(vec3-vec4);
4724
tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
4725
if (o->m_pDDF[zr]->m_bCosine)
4726
tf = cos(tf/180.0*Pi);
4727
else if (o->m_pDDF[zr]->m_bPositive)
4732
o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) = tf;
4733
switch(o->m_pDDF[zr]->m_iDeriv)
4736
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
4739
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (2*g_fTimestepLength);
4742
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (g_fTimestepLength * g_fTimestepLength);
4746
if (!g_bDeriv || (g_iSteps > 2))
4748
if (o->m_bObsCertain && o->m_bDecompDist)
4749
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
4751
o->m_pDDF[zr]->m_faData[0].Add(tf);
4753
if (o->m_pDDF[zr]->m_bACF)
4754
o->m_pDDF[zr]->m_pfaACFBuffer[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
4756
if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
4758
o->m_pDDF[zr]->m_faData[0].Add(-tf);
4759
if (o->m_bObsCertain && o->m_bDecompDist)
4760
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,-tf);
4764
((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
4766
if (o->m_bTimeDev && (ti2 != -1))
4768
if (o->m_pDDF[zr]->m_bRotate)
4772
if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
4773
o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
4774
if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
4775
o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
4777
o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
4778
tf2 = tf + o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
4780
if (o->m_bSaveSeparateFiles)
4781
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
4782
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
4783
if (o->m_bCombinedPlot)
4784
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
4793
o->m_pVHDF->BuildAtomList(smfix,smfix,&templa);
4794
for (z4=0;z4<templa.GetSize();z4+=2)
4796
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
4797
for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
4799
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
4800
if (g_pT2Timestep == NULL)
4802
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4803
tf = FoldedLength(vec0-vec1);
4804
o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
4805
o->m_pVHDF->m_pCount[z0]++;
4812
for (zr=0;zr<g_iCDFChannels;zr++)
4814
if (o->m_pRDF[zr] == NULL)
4816
o->m_pRDF[zr]->BuildAtomList(smfix,smfix,&templa);
4817
for (z4=0;z4<templa.GetSize();z4+=2)
4819
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4820
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4821
tf = FoldedLength(vec0-vec1);
4824
o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) = tf;
4825
switch(o->m_pRDF[zr]->m_iDeriv)
4828
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
4831
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
4834
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
4838
if (!g_bDeriv || (g_iSteps > 2))
4840
if (o->m_bObsCertain && o->m_bDecompDist)
4841
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
4843
if (o->m_bDecompType)
4844
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
4846
o->m_pRDF[zr]->m_faData[0].Add(tf);
4848
if (o->m_pRDF[zr]->m_bACF)
4849
o->m_pRDF[zr]->m_pfaACFBuffer[z2*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
4851
if (o->m_bTimeDev && (ti2 != -1))
4853
if (o->m_bSaveSeparateFiles)
4854
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
4855
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
4856
if (o->m_bCombinedPlot)
4857
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
4860
((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
4868
for (zr=0;zr<g_iCDFChannels;zr++)
4870
if (o->m_pPlDF[zr] == NULL)
4872
o->m_pPlDF[zr]->BuildAtomList(smfix,smfix,&templa);
4873
for (z4=0;z4<templa.GetSize();z4+=4)
4875
if (o->m_pPlDF[zr]->m_bNormal)
4877
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4879
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4880
tf = DotP(vec0,vec1);
4883
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4884
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4885
vec3 = CrossP(vec0,vec1);
4887
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4888
tf = DotP(vec2,vec3);
4891
if (!g_bDeriv || (g_iSteps > 2))
4893
if (o->m_bObsCertain && o->m_bDecompDist)
4894
o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r,tf);
4896
o->m_pPlDF[zr]->m_faData[0].Add(tf);
4904
for (zr=0;zr<g_iCDFChannels;zr++)
4906
if (o->m_pLiDF[zr] == NULL)
4908
o->m_pLiDF[zr]->BuildAtomList(smfix,smfix,&templa);
4909
for (z4=0;z4<templa.GetSize();z4+=4)
4911
if (o->m_pLiDF[zr]->m_bNormal)
4913
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4914
vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4915
vec0 = CrossP(vec2,vec3);
4917
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4918
vec0 *= DotP(vec0,vec1);
4919
tf = (vec1 - vec0).GetLength();
4922
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4924
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
4925
vec0 *= DotP(vec0,vec1);
4926
tf = (vec1 - vec0).GetLength();
4929
if (!g_bDeriv || (g_iSteps > 2))
4931
if (o->m_bObsCertain && o->m_bDecompDist)
4932
o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r,tf);
4934
o->m_pLiDF[zr]->m_faData[0].Add(tf);
4942
for (zr=0;zr<g_iCDFChannels;zr++)
4944
if (o->m_pDipDF[zr] == NULL)
4946
tf = smfix->m_vDipole.GetLength();
4949
o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
4950
switch(o->m_pDipDF[zr]->m_iDeriv)
4953
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
4956
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2)) / (2*g_fTimestepLength);
4959
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2)) / (g_fTimestepLength * g_fTimestepLength);
4963
if (!g_bDeriv || (g_iSteps > 2))
4965
if (o->m_bObsCertain && o->m_bDecompDist)
4966
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
4968
o->m_pDipDF[zr]->m_faData[0].Add(tf);
4970
if (o->m_pDipDF[zr]->m_bACF)
4971
o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
4973
if (o->m_bTimeDev && (ti2 != -1))
4975
if (o->m_bSaveSeparateFiles)
4976
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
4977
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
4978
if (o->m_bCombinedPlot)
4979
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2,g_iSteps*g_fTimestepLength/1000.0,tf);
4982
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
4989
for (zr=0;zr<g_iCDFChannels;zr++)
4991
if (o->m_pVDF[zr] == NULL)
4993
o->m_pVDF[zr]->BuildAtomList(smfix,smfix,&templa);
4994
for (z4=0;z4<templa.GetSize();z4++)
4996
tf = tempvel[templa[z4]].GetLength();
4999
o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) = tf;
5000
switch(o->m_pVDF[zr]->m_iDeriv)
5003
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
5006
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
5009
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
5013
if (!g_bDeriv || (g_iSteps > 2))
5015
if (o->m_bObsCertain && o->m_bDecompDist)
5016
o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
5018
o->m_pVDF[zr]->m_faData[0].Add(tf);
5020
if (o->m_pVDF[zr]->m_bACF)
5021
o->m_pVDF[zr]->m_pfaACFBuffer[z2*o->m_pVDF[zr]->m_iCombinations+z4]->Add((float)tf);
5023
if (o->m_bTimeDev && (ti2 != -1))
5025
if (o->m_bSaveSeparateFiles)
5026
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5027
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5028
if (o->m_bCombinedPlot)
5029
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pVDF[zr]->m_iCombinations+z4,g_iSteps*g_fTimestepLength/1000.0,tf);
5032
((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
5040
o->m_pSDF->BuildAtomList(smfix,smfix,&templa);
5041
for (z4=0;z4<templa.GetSize();z4++)
5043
o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5045
if (o->m_pSDF->m_bVdWSpheres)
5046
o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
5052
o->m_pRevSDF->BuildAtomList(smfix,smfix,&templa);
5053
for (z4=0;z4<templa.GetSize();z4++)
5054
o->m_pRevSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5057
} // Ende IF m_bSelf
5061
secondmolrun = false;
5063
if ((!secondmolrun) && (o->m_pConditions != NULL))
5065
o->m_pConditions->m_bAnyPassed = false;
5066
o->m_pConditions->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5067
if (o->m_pConditions->m_bAnyPassed)
5068
o->m_pConditions->m_iRMPassCounter[z2]++;
5071
if ((secondmolrun) && (o->m_pConditionsOM2 != NULL))
5073
o->m_pConditionsOM2->m_bAnyPassed = false;
5074
o->m_pConditionsOM2->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5075
if (o->m_pConditionsOM2->m_bAnyPassed)
5076
o->m_pConditionsOM2->m_iRMPassCounter[z2]++;
5079
for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
5083
if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5085
if (o->m_bObsCertain)
5087
if (!o->m_waObsShow2List.Contains(z3))
5089
tic_o = o->m_waObsShow2List.GetPosition(z3);
5093
if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5095
if (o->m_bObsCertain)
5097
if (!o->m_waObsShowList.Contains(z3))
5099
tic_o = o->m_waObsShowList.GetPosition(z3);
5103
if (g_bRegionAnalysis)
5107
if ((!o->m_iaOM2Regions.Contains(0)) && (!o->m_iaOM2Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]])))
5111
if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]])))
5115
// mprintf("\n ... OM %d ist drin!",z3);
5120
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
5123
ti = o->m_waSaveShowList.GetPosition(z3);
5124
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
5127
if (o->m_bTimeDev && (o->m_pConditions != NULL))
5129
if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
5131
for (zr=0;zr<g_iCDFChannels;zr++)
5133
if (g_bADF && (o->m_pADF[zr] != NULL))
5135
if ((ti2 != -1) && (ti != -1))
5137
if (o->m_bSaveSeparateFiles)
5138
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
5139
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; - ");
5143
if (g_bDDF && (o->m_pDDF[zr] != NULL))
5145
if ((ti2 != -1) && (ti != -1))
5147
if (o->m_bSaveSeparateFiles)
5148
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
5149
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; - ");
5153
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
5155
if ((ti2 != -1) && (ti != -1))
5157
if (o->m_bSaveSeparateFiles)
5158
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; - ");
5159
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; - ");
5163
if (g_bVDF && (o->m_pVDF[zr] != NULL))
5165
if ((ti2 != -1) && (ti != -1))
5167
if (o->m_bSaveSeparateFiles)
5168
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; - ");
5169
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; - ");
5173
if (g_bRDF && (o->m_pRDF[zr] != NULL))
5175
if ((ti2 != -1) && (ti != -1))
5177
if (o->m_bSaveSeparateFiles)
5178
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; - ");
5179
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; - ");
5187
if ((!secondmolrun) && (o->m_pConditions != NULL))
5189
if (!o->m_pConditions->Contains(z3))
5192
if (o->m_bBinOnlyPassedAtoms)
5193
o->m_pConditions->MarkPassedAtoms(z3,true);
5195
if (o->m_bBinOnlyNotPassedAtoms)
5196
o->m_pConditions->MarkPassedAtoms(z3,false);
5198
if (g_bSaveCondSnapshot)
5201
if (g_bSaveCondWholeBox)
5203
g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5206
mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5207
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5209
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5211
for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5212
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5214
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5216
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5218
for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5219
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5225
if (secondmolrun && (o->m_pConditionsOM2 != NULL))
5227
if (!o->m_pConditionsOM2->Contains(z3))
5230
// mprintf("\nStep %d: z2=%d, z3=%d passed.",g_iSteps,z2,z3);
5232
if (o->m_bBinOnlyPassedAtoms)
5233
o->m_pConditionsOM2->MarkPassedAtoms(z3,true);
5235
if (o->m_bBinOnlyNotPassedAtoms)
5236
o->m_pConditionsOM2->MarkPassedAtoms(z3,false);
5238
/* if (g_bSaveCondSnapshot)
5241
if (g_bSaveCondWholeBox)
5243
g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5246
mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5247
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5249
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5251
for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5252
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5254
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5256
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5258
for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5259
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5267
o->m_pVHDF->BuildAtomList(smfix,sm,&templa);
5268
for (z4=0;z4<templa.GetSize();z4+=2)
5270
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
5271
for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
5273
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
5274
if (g_pT2Timestep == NULL)
5276
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
5277
tf = FoldedLength(vec0-vec1);
5278
o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
5279
o->m_pVHDF->m_pCount[z0]++;
5286
for (zr=0;zr<g_iCDFChannels;zr++)
5288
if (o->m_pADF[zr] == NULL)
5290
if (o->m_bSecondShowMol)
5292
if (secondmolrun && (zr == 0))
5294
if (!secondmolrun && (zr == 1))
5297
o->m_pADF[zr]->BuildAtomList(smfix,sm,&templa);
5298
for (z4=0;z4<templa.GetSize();z4+=6)
5300
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5303
if (g_baAtomPassedCondition[templa[z4]] == 0)
5305
if (g_baAtomPassedCondition[templa[z4+1]] == 0)
5307
if (o->m_pADF[zr]->m_bOrtho[0])
5308
if (g_baAtomPassedCondition[templa[z4+2]] == 0)
5310
if (g_baAtomPassedCondition[templa[z4+3]] == 0)
5312
if (g_baAtomPassedCondition[templa[z4+4]] == 0)
5314
if (o->m_pADF[zr]->m_bOrtho[1])
5315
if (g_baAtomPassedCondition[templa[z4+5]] == 0)
5319
o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
5322
// mprintf("Nicht bestanden; z2=%d, z3=%d; (%d,%d,%d) (%d,%d,%d).\n",z2,z3,g_baAtomPassedCondition[tempwa[z4]],g_baAtomPassedCondition[tempwa[z4+1]],g_baAtomPassedCondition[tempwa[z4+2]],g_baAtomPassedCondition[tempwa[z4+3]],g_baAtomPassedCondition[tempwa[z4+4]],g_baAtomPassedCondition[tempwa[z4+5]]);
5323
o->m_pADF[zr]->m_baDataEnabled[z3].Add(0);
5326
if (o->m_pADF[zr]->m_bOrtho[0])
5328
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5329
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5330
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5331
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5334
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5335
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5336
vec1 = FoldVector(vec2-vec0);
5338
if (o->m_pADF[zr]->m_bOrtho[1])
5340
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5341
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5342
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5343
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5346
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5347
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5348
vec2 = FoldVector(vec3-vec4);
5351
tf = Angle_Deg(vec1,vec2);
5352
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
5354
if (o->m_pADF[zr]->m_bCosine)
5355
tf = cos(tf/180.0*Pi);
5359
zi = (z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6;
5360
o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5361
switch(o->m_pADF[zr]->m_iDeriv)
5364
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5367
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5370
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5374
if (!g_bDeriv || (g_iSteps > 2))
5376
if (o->m_bObsCertain && o->m_bDecompDist)
5377
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5379
o->m_pADF[zr]->m_faData[z3].Add(tf);
5381
if (o->m_pADF[zr]->m_bACF)
5382
o->m_pADF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
5384
/* if (o->m_pADF[zr]->m_bMirror)
5386
if (o->m_bObsCertain && o->m_bDecompDist)
5387
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,180.0-tf);
5388
o->m_pADF[zr]->m_faData[z3].Add(180.0-tf);
5391
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5393
// o->m_pAngleStat->AddValue(ti2,ti,tf);
5394
if (o->m_bSaveSeparateFiles)
5395
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
5396
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
5397
if (o->m_bCombinedPlot)
5398
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
5401
((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
5409
for (zr=0;zr<g_iCDFChannels;zr++)
5411
if (o->m_pDDF[zr] == NULL)
5413
if (o->m_bSecondShowMol)
5415
if (secondmolrun && (zr == 0))
5417
if (!secondmolrun && (zr == 1))
5420
o->m_pDDF[zr]->BuildAtomList(smfix,sm,&templa);
5421
for (z4=0;z4<templa.GetSize();z4+=9)
5423
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5426
for (z5=z4;z5<z4+9;z5++)
5427
if (g_baAtomPassedCondition[templa[z5]] == 0)
5430
o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
5431
else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
5433
if (o->m_pDDF[zr]->m_bOrtho[0])
5435
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5436
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5437
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5438
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5441
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5442
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5443
vec1 = FoldVector(vec2-vec0);
5445
if (o->m_pDDF[zr]->m_bOrtho[1])
5447
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5448
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5449
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5450
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5453
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5454
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5455
vec2 = FoldVector(vec3-vec4);
5457
if (o->m_pDDF[zr]->m_bOrtho[2])
5459
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5460
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5461
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
5462
vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5465
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5466
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5467
vec3 = FoldVector(vec3-vec4);
5469
tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
5470
if (o->m_pDDF[zr]->m_bCosine)
5471
tf = cos(tf/180.0*Pi);
5472
else if (o->m_pDDF[zr]->m_bPositive)
5477
zi = (z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9;
5478
o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5479
switch(o->m_pDDF[zr]->m_iDeriv)
5482
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5485
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5488
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5492
if (!g_bDeriv || (g_iSteps > 2))
5494
if (o->m_bObsCertain && o->m_bDecompDist)
5495
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5497
o->m_pDDF[zr]->m_faData[z3].Add(tf);
5499
if (o->m_pDDF[zr]->m_bACF)
5500
o->m_pDDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
5502
if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
5504
o->m_pDDF[zr]->m_faData[z3].Add(-tf);
5505
if (o->m_bObsCertain && o->m_bDecompDist)
5506
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,-tf);
5510
((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
5512
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5514
if (o->m_pDDF[zr]->m_bRotate)
5518
if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
5519
o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
5520
if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
5521
o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
5523
o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
5524
tf2 = tf + o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
5526
if (o->m_bSaveSeparateFiles)
5527
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
5528
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
5529
if (o->m_bCombinedPlot)
5530
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
5539
for (zr=0;zr<g_iCDFChannels;zr++)
5541
if (o->m_pPlDF[zr] == NULL)
5543
if (o->m_bSecondShowMol)
5545
if (secondmolrun && (zr == 0))
5547
if (!secondmolrun && (zr == 1))
5550
o->m_pPlDF[zr]->BuildAtomList(smfix,sm,&templa);
5551
for (z4=0;z4<templa.GetSize();z4+=4)
5553
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5556
for (z5=z4;z5<z4+4;z5++)
5557
if (g_baAtomPassedCondition[templa[z5]] == 0)
5560
o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(1);
5561
else o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(0);
5563
if (o->m_pPlDF[zr]->m_bNormal)
5565
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5567
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5568
tf = DotP(vec0,vec1);
5571
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5572
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5573
vec3 = CrossP(vec0,vec1);
5575
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5576
tf = DotP(vec2,vec3);
5579
if (!g_bDeriv || (g_iSteps > 2))
5581
if (o->m_bObsCertain && o->m_bDecompDist)
5582
o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5584
o->m_pPlDF[zr]->m_faData[z3].Add(tf);
5592
for (zr=0;zr<g_iCDFChannels;zr++)
5594
if (o->m_pLiDF[zr] == NULL)
5596
if (o->m_bSecondShowMol)
5598
if (secondmolrun && (zr == 0))
5600
if (!secondmolrun && (zr == 1))
5603
o->m_pLiDF[zr]->BuildAtomList(smfix,sm,&templa);
5604
for (z4=0;z4<templa.GetSize();z4+=4)
5606
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5609
for (z5=z4;z5<z4+4;z5++)
5610
if (g_baAtomPassedCondition[templa[z5]] == 0)
5613
o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(1);
5614
else o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(0);
5617
if (o->m_pLiDF[zr]->m_bNormal)
5619
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5620
vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5621
vec0 = CrossP(vec2,vec3);
5623
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5624
vec0 *= DotP(vec0,vec1);
5625
tf = (vec1 - vec0).GetLength();
5628
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5630
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5631
vec0 *= DotP(vec0,vec1);
5632
tf = (vec1 - vec0).GetLength();
5635
if (!g_bDeriv || (g_iSteps > 2))
5637
if (o->m_bObsCertain && o->m_bDecompDist)
5638
o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5640
o->m_pLiDF[zr]->m_faData[z3].Add(tf);
5648
for (zr=0;zr<g_iCDFChannels;zr++)
5650
if (o->m_pDipDF[zr] == NULL)
5652
if (o->m_bSecondShowMol)
5654
if (secondmolrun && (zr == 0))
5656
if (!secondmolrun && (zr == 1))
5659
if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
5660
tf = smfix->m_vDipole.GetLength();
5661
else tf = sm->m_vDipole.GetLength();
5664
zi = z2*o->m_iShowMolCount+z3;
5665
o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5666
switch(o->m_pDipDF[zr]->m_iDeriv)
5669
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5672
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5675
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5679
if (!g_bDeriv || (g_iSteps > 2))
5681
if (o->m_bObsCertain && o->m_bDecompDist)
5682
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5684
o->m_pDipDF[zr]->m_faData[z3].Add(tf);
5686
if (o->m_pDipDF[zr]->m_bACF)
5687
o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
5689
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5691
if (o->m_bSaveSeparateFiles)
5692
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
5693
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
5694
if (o->m_bCombinedPlot)
5695
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_waSaveShowList.GetSize()+ti,g_iSteps*g_fTimestepLength/1000.0,tf);
5698
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
5705
for (zr=0;zr<g_iCDFChannels;zr++)
5707
if (o->m_pVDF[zr] == NULL)
5709
if (o->m_bSecondShowMol)
5711
if (secondmolrun && (zr == 0))
5713
if (!secondmolrun && (zr == 1))
5716
o->m_pVDF[zr]->BuildAtomList(smfix,sm,&templa);
5717
for (z4=0;z4<templa.GetSize();z4++)
5719
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5722
for (z5=z4;z5<z4+2;z5++)
5723
if (g_baAtomPassedCondition[templa[z5]] == 0)
5726
o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
5727
else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
5729
tf = tempvel[templa[z4]].GetLength();
5732
zi = (z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2;
5733
o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5734
switch(o->m_pVDF[zr]->m_iDeriv)
5737
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5740
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5743
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5747
if (!g_bDeriv || (g_iSteps > 2))
5749
if (o->m_bObsCertain && o->m_bDecompDist)
5750
o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5752
o->m_pVDF[zr]->m_faData[z3].Add(tf);
5754
if (o->m_pVDF[zr]->m_bACF)
5755
o->m_pVDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5757
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5759
if (o->m_bSaveSeparateFiles)
5760
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5761
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5762
if (o->m_bCombinedPlot)
5763
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pVDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5766
((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5774
for (zr=0;zr<g_iCDFChannels;zr++)
5776
if (o->m_pRDF[zr] == NULL)
5778
if (o->m_bSecondShowMol)
5780
if (secondmolrun && (zr == 0))
5782
if (!secondmolrun && (zr == 1))
5785
o->m_pRDF[zr]->BuildAtomList(smfix,sm,&templa);
5786
for (z4=0;z4<templa.GetSize();z4+=2)
5788
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5791
for (z5=z4;z5<z4+2;z5++)
5792
if (g_baAtomPassedCondition[templa[z5]] == 0)
5795
o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
5796
else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
5798
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5799
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5800
tf = FoldedLength(vec0-vec1);
5803
mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5804
mprintf("\n vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5806
*/ // mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5807
// mprintf("\n vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5810
zi = (z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2;
5811
o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5812
switch(o->m_pRDF[zr]->m_iDeriv)
5815
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5818
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5821
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5825
if (!g_bDeriv || (g_iSteps > 2))
5827
if (o->m_bObsCertain && o->m_bDecompDist)
5828
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5830
if (o->m_bDecompType)
5831
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
5833
o->m_pRDF[zr]->m_faData[z3].Add(tf);
5835
if (o->m_pRDF[zr]->m_bACF)
5836
o->m_pRDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5838
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5840
if (o->m_bSaveSeparateFiles)
5841
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
5842
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
5843
if (o->m_bCombinedPlot)
5844
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5847
((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5855
o->m_pSDF->BuildAtomList(smfix,sm,&templa);
5856
for (z4=0;z4<templa.GetSize();z4++)
5858
o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5860
if (o->m_pSDF->m_bVdWSpheres)
5861
o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
4451
if ((g_bCutCluster && g_bRefEnvCenter && g_bRefEnvFix) || (g_bSaveRefEnv && g_bRefEnvCenter && g_bRefEnvFix && (z2==g_iSaveRefMol)))
4453
if (g_bCutCluster || (g_iNbhMode == 2))
4457
g_pNbSet->ResetAlwaysTrue();
4458
g_pNbSet->Scan(smfix,g_pTempTimestep);
4459
if (g_bSaveRefWithEnv)
4460
g_pNbSet->AddMolecule(g_iFixMol,z2);
4463
if (!g_bCenterZero && g_bPeriodic)
4464
g_pTempTimestep->CenterPos(CxVector3(-g_fBoxX/2,-g_fBoxY/2,-g_fBoxZ/2));
4466
g_pTempTimestep->WriteTimestepNb(g_fRefEnv,g_pNbSet,((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]);
4470
if (g_laTDOSteps.Contains(g_iSteps-1))
4472
sprintf(buf,"tdo_%s_%d_%06lu%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_iSteps-1,multibuf);
4473
mprintf("\nSaving TDO step as %s.\n",buf);
4474
tfi = OpenFileWrite(buf,true);
4475
g_pTempTimestep->WriteTimestepNb(tfi,g_pNbSet);
4480
} // END IF SDF, RevEnv, ...
4482
/***************************************************************************************************************************/
4486
if (g_pVoroAnalysis->m_bEmptySpaceSDF)
4488
if (!g_pVoroAnalysis->m_bNewEmptyMode)
4490
g_pVoroAnalysis->m_pTempSDF->Clear();
4492
for (z3=0;z3<g_oaMolecules.GetSize();z3++)
4494
tm = (CMolecule*)g_oaMolecules[z3];
4495
for (z4=0;z4<tm->m_laSingleMolIndex.GetSize();z4++)
4497
if (!g_pVoroAnalysis->m_bEmptySpaceSDF_RefMol)
4498
if ((z3 == g_iFixMol) && (z4 == z2))
4501
tsm = (CSingleMolecule*)g_oaSingleMolecules[tm->m_laSingleMolIndex[z4]];
4503
for (z5=0;z5<tsm->m_oaAtomOffset.GetSize();z5++)
4505
if (tm->m_baAtomIndex[z5] == g_iVirtAtomType)
4508
for (z6=0;z6<((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetSize();z6++)
4510
vec0 = g_pTempTimestep->m_vaCoords[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)];
4512
g_pVoroAnalysis->m_pTempSDF->AddToBin_Sphere(vec0,g_faVdWRadius[((CxIntArray*)tsm->m_oaAtomOffset[z5])->GetAt(z6)]);
4517
g_pVoroAnalysis->BinEmptySDF_New(&mat,&vecc);
4520
g_pVoroAnalysis->BinEmptySDF();
4524
if (g_pVoroAnalysis->m_bSphereHoleSDF)
4526
g_pVoroAnalysis->BinSphereHoleSDF(&mat,&vecc);
4530
if (g_bPlProj || g_bDipDF || g_bRevSDF || g_bVHDF || g_bRDF || g_bPlDF || g_bLiDF || g_bSDF || g_bADF || g_bDDF || g_bVDF || g_bCond)
4532
for (z6=0;z6<g_oaObserv.GetSize();z6++)
4534
o = (CObservation*)g_oaObserv[z6];
4536
// mprintf("\nStep %d, z2=%d, Obs=%d, Reg=%d, ObsReg=%d.",g_iSteps,z2,z6,g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]],o->m_iaRMRegions[0]);
4538
if (g_bRegionAnalysis)
4539
if ((!o->m_iaRMRegions.Contains(0)) && (!o->m_iaRMRegions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])))
4542
// mprintf("\n ...RM ist in Region.");
4544
ti2 = o->m_waSaveRefList.GetPosition(z2);
4546
if (o->m_bObsCertain)
4548
// mprintf("\n RefList: ");
4549
// for (z7=0;z7<o->m_waObsRefList.GetSize();z7++)
4550
// mprintf("%d, ",o->m_waObsRefList[z7]);
4552
if (!o->m_waObsRefList.Contains(z2))
4554
// mprintf("\n ...RM ist auch in RefList.");
4555
tic_r = o->m_waObsRefList.GetPosition(z2);
4558
if (g_bUseVelocities)
4560
tempvel.CopyFrom(&g_pTempTimestep->m_vaVelocities);
4561
if (o->m_bVelocityRelToRef)
4563
vecv = g_pTempTimestep->m_vaVelocities[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[0]])->GetAt(g_iFixAtom[0])];
4564
for (z3=0;z3<g_iGesVirtAtomCount;z3++)
4565
tempvel[z3] -= vecv;
4569
if ((g_bCDF) && (o->m_bTimeDev) && (ti2 != -1))
4571
if (o->m_bSaveSeparateFiles)
4572
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"%d",(int)g_iSteps);
4574
mfprintf(o->m_pCDF->m_fTimeDev[0],"%d",(int)g_iSteps);
4577
for (zr=0;zr<g_iCDFChannels;zr++)
4579
if (g_bRDF && (o->m_pRDF[zr] != NULL))
4581
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4582
o->m_pRDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4583
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4584
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4585
o->m_pRDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4586
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4588
if (o->m_bSaveSeparateFiles)
4589
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"%d",(int)g_iSteps);
4591
mfprintf(o->m_pRDF[zr]->m_fDist[0],"%d",(int)g_iSteps);
4595
if (g_bADF && (o->m_pADF[zr] != NULL))
4597
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4598
o->m_pADF[zr]->m_faData[z3].RemoveAll_KeepSize();
4599
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4600
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4601
o->m_pADF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4602
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4604
if (o->m_bSaveSeparateFiles)
4605
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4607
mfprintf(o->m_pADF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4611
if (g_bDDF && (o->m_pDDF[zr] != NULL))
4613
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4614
o->m_pDDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4615
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4616
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4617
o->m_pDDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4618
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4620
if (o->m_bSaveSeparateFiles)
4621
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4623
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4627
if (g_bPlDF && (o->m_pPlDF[zr] != NULL))
4629
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4630
o->m_pPlDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4631
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4632
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4633
o->m_pPlDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4634
/* if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4636
if (o->m_bSaveSeparateFiles)
4637
mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4639
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4643
if (g_bLiDF && (o->m_pLiDF[zr] != NULL))
4645
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4646
o->m_pLiDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4647
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4648
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4649
o->m_pLiDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4650
/* if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4652
if (o->m_bSaveSeparateFiles)
4653
mfprintf(o->m_pPlDF[zr]->m_fAngle[ti2],"%d",(int)g_iSteps);
4655
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"%d",(int)g_iSteps);
4659
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
4661
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4662
o->m_pDipDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4663
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4664
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4665
o->m_pDipDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4666
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4668
if (o->m_bSaveSeparateFiles)
4669
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"%d",(int)g_iSteps);
4671
mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"%d",(int)g_iSteps);
4675
if (g_bVDF && (o->m_pVDF[zr] != NULL))
4677
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4678
o->m_pVDF[zr]->m_faData[z3].RemoveAll_KeepSize();
4679
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4680
for (z3=0;z3<((o->m_bSecondShowMol && (zr == 1))?o->m_iShowMol2Count:o->m_iShowMolCount);z3++)
4681
o->m_pVDF[zr]->m_baDataEnabled[z3].RemoveAll_KeepSize();
4682
if ((o->m_bTimeDev) && (ti2 != -1) && (!g_bDeriv || (g_iSteps > 2)))
4684
if (o->m_bSaveSeparateFiles)
4685
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"%d",(int)g_iSteps);
4687
mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"%d",(int)g_iSteps);
4694
for (z3=0;z3<o->m_iShowMolCount;z3++)
4696
o->m_pSDF->m_vaData[z3].RemoveAll_KeepSize();
4697
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4698
o->m_pSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4704
for (z3=0;z3<o->m_iShowMolCount;z3++)
4706
o->m_pPlProj->m_vaData[z3].RemoveAll_KeepSize();
4707
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4708
o->m_pPlProj->m_baDataEnabled[z3].RemoveAll_KeepSize();
4714
for (z3=0;z3<o->m_iShowMolCount;z3++)
4716
o->m_pRevSDF->m_vaData[z3].RemoveAll_KeepSize();
4717
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
4718
o->m_pRevSDF->m_baDataEnabled[z3].RemoveAll_KeepSize();
4726
for (zr=0;zr<g_iCDFChannels;zr++)
4728
if (o->m_pADF[zr] == NULL)
4730
o->m_pADF[zr]->BuildAtomList(smfix,NULL,&templa);
4731
for (z4=0;z4<templa.GetSize();z4+=6)
4733
if (o->m_pADF[zr]->m_bOrtho[0])
4735
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4736
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4737
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4738
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4741
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4742
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4743
vec1 = FoldVector(vec2-vec0);
4745
if (o->m_pADF[zr]->m_bOrtho[1])
4747
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4748
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4749
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4750
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4753
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4754
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4755
vec2 = FoldVector(vec3-vec4);
4757
tf = Angle_Deg(vec1,vec2);
4758
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
4760
if (o->m_pADF[zr]->m_bCosine)
4761
tf = cos(tf/180.0*Pi);
4765
o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) = tf;
4766
switch(o->m_pADF[zr]->m_iDeriv)
4769
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6);
4772
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (2*g_fTimestepLength);
4775
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pADF[zr]->m_iCombinations+z4/6)) / (g_fTimestepLength * g_fTimestepLength);
4780
if (!g_bDeriv || (g_iSteps > 2))
4782
if (o->m_bObsCertain && o->m_bDecompDist)
4783
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,tf);
4785
o->m_pADF[zr]->m_faData[0].Add(tf);
4787
if (o->m_pADF[zr]->m_bACF)
4788
o->m_pADF[zr]->m_pfaACFBuffer[z2*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
4790
/* if (o->m_pADF[zr]->m_bMirror)
4792
if (o->m_bObsCertain && o->m_bDecompDist)
4793
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r,180.0-tf);
4794
o->m_pADF[zr]->m_faData[0].Add(180.0-tf);
4797
if (o->m_bTimeDev && (ti2 != -1))
4799
if (o->m_bSaveSeparateFiles)
4800
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
4801
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
4802
if (o->m_bCombinedPlot)
4803
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
4806
((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[z2*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
4814
for (zr=0;zr<g_iCDFChannels;zr++)
4816
if (o->m_pDDF[zr] == NULL)
4818
o->m_pDDF[zr]->BuildAtomList(smfix,smfix,&templa);
4819
for (z4=0;z4<templa.GetSize();z4+=9)
4821
if (o->m_pDDF[zr]->m_bOrtho[0])
4823
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4824
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4825
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
4826
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
4829
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4830
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4831
vec1 = FoldVector(vec2-vec0);
4833
if (o->m_pDDF[zr]->m_bOrtho[1])
4835
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4836
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4837
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
4838
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4841
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
4842
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
4843
vec2 = FoldVector(vec3-vec4);
4845
if (o->m_pDDF[zr]->m_bOrtho[2])
4847
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4848
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4849
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
4850
vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
4853
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
4854
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
4855
vec3 = FoldVector(vec3-vec4);
4857
tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
4858
if (o->m_pDDF[zr]->m_bCosine)
4859
tf = cos(tf/180.0*Pi);
4860
else if (o->m_pDDF[zr]->m_bPositive)
4865
o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) = tf;
4866
switch(o->m_pDDF[zr]->m_iDeriv)
4869
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9);
4872
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (2*g_fTimestepLength);
4875
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pDDF[zr]->m_iCombinations+z4/9)) / (g_fTimestepLength * g_fTimestepLength);
4879
if (!g_bDeriv || (g_iSteps > 2))
4881
if (o->m_bObsCertain && o->m_bDecompDist)
4882
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,tf);
4884
o->m_pDDF[zr]->m_faData[0].Add(tf);
4886
if (o->m_pDDF[zr]->m_bACF)
4887
o->m_pDDF[zr]->m_pfaACFBuffer[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
4889
if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
4891
o->m_pDDF[zr]->m_faData[0].Add(-tf);
4892
if (o->m_bObsCertain && o->m_bDecompDist)
4893
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r,-tf);
4897
((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[z2*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
4899
if (o->m_bTimeDev && (ti2 != -1))
4901
if (o->m_pDDF[zr]->m_bRotate)
4905
if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
4906
o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
4907
if ((tf - o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
4908
o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
4910
o->m_pDDF[zr]->m_faLastData[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
4911
tf2 = tf + o->m_pDDF[zr]->m_laRotation[z2*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
4913
if (o->m_bSaveSeparateFiles)
4914
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
4915
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
4916
if (o->m_bCombinedPlot)
4917
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
4926
o->m_pVHDF->BuildAtomList(smfix,smfix,&templa);
4927
for (z4=0;z4<templa.GetSize();z4+=2)
4929
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
4930
for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
4932
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
4933
if (g_pT2Timestep == NULL)
4935
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
4936
tf = FoldedLength(vec0-vec1);
4937
o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
4938
o->m_pVHDF->m_pCount[z0]++;
4945
for (zr=0;zr<g_iCDFChannels;zr++)
4947
if (o->m_pRDF[zr] == NULL)
4949
o->m_pRDF[zr]->BuildAtomList(smfix,smfix,&templa);
4950
for (z4=0;z4<templa.GetSize();z4+=2)
4952
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
4953
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
4954
tf = FoldedLength(vec0-vec1);
4957
o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) = tf;
4958
switch(o->m_pRDF[zr]->m_iDeriv)
4961
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2);
4964
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
4967
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pRDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
4971
if (!g_bDeriv || (g_iSteps > 2))
4973
if (o->m_bObsCertain && o->m_bDecompDist)
4974
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r,tf);
4976
if (o->m_bDecompType)
4977
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
4979
o->m_pRDF[zr]->m_faData[0].Add(tf);
4981
if (o->m_pRDF[zr]->m_bACF)
4982
o->m_pRDF[zr]->m_pfaACFBuffer[z2*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
4984
if (o->m_bTimeDev && (ti2 != -1))
4986
if (o->m_bSaveSeparateFiles)
4987
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
4988
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
4989
if (o->m_bCombinedPlot)
4990
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
4993
((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[z2*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5001
for (zr=0;zr<g_iCDFChannels;zr++)
5003
if (o->m_pPlDF[zr] == NULL)
5005
o->m_pPlDF[zr]->BuildAtomList(smfix,smfix,&templa);
5006
for (z4=0;z4<templa.GetSize();z4+=4)
5008
if (o->m_pPlDF[zr]->m_bNormal)
5010
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5012
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5013
tf = DotP(vec0,vec1);
5016
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5017
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5018
vec3 = CrossP(vec0,vec1);
5020
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5021
tf = DotP(vec2,vec3);
5024
if (!g_bDeriv || (g_iSteps > 2))
5026
if (o->m_bObsCertain && o->m_bDecompDist)
5027
o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r,tf);
5029
o->m_pPlDF[zr]->m_faData[0].Add(tf);
5037
for (zr=0;zr<g_iCDFChannels;zr++)
5039
if (o->m_pLiDF[zr] == NULL)
5041
o->m_pLiDF[zr]->BuildAtomList(smfix,smfix,&templa);
5042
for (z4=0;z4<templa.GetSize();z4+=4)
5044
if (o->m_pLiDF[zr]->m_bNormal)
5046
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5047
vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5048
vec0 = CrossP(vec2,vec3);
5050
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5051
vec0 *= DotP(vec0,vec1);
5052
tf = (vec1 - vec0).GetLength();
5055
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5057
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5058
vec0 *= DotP(vec0,vec1);
5059
tf = (vec1 - vec0).GetLength();
5062
if (!g_bDeriv || (g_iSteps > 2))
5064
if (o->m_bObsCertain && o->m_bDecompDist)
5065
o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r,tf);
5067
o->m_pLiDF[zr]->m_faData[0].Add(tf);
5075
for (zr=0;zr<g_iCDFChannels;zr++)
5077
if (o->m_pDipDF[zr] == NULL)
5079
tf = smfix->m_vDipole.GetLength();
5082
o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) = tf;
5083
switch(o->m_pDipDF[zr]->m_iDeriv)
5086
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2);
5089
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2)) / (2*g_fTimestepLength);
5092
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2)) / (g_fTimestepLength * g_fTimestepLength);
5096
if (!g_bDeriv || (g_iSteps > 2))
5098
if (o->m_bObsCertain && o->m_bDecompDist)
5099
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r,tf);
5101
o->m_pDipDF[zr]->m_faData[0].Add(tf);
5103
if (o->m_pDipDF[zr]->m_bACF)
5104
o->m_pDipDF[zr]->m_pfaACFBuffer[z2]->Add((float)tf);
5106
if (o->m_bTimeDev && (ti2 != -1))
5108
if (o->m_bSaveSeparateFiles)
5109
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
5110
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
5111
if (o->m_bCombinedPlot)
5112
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2,g_iSteps*g_fTimestepLength/1000.0,tf);
5115
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2])->Add((float)tf);
5122
for (zr=0;zr<g_iCDFChannels;zr++)
5124
if (o->m_pVDF[zr] == NULL)
5126
o->m_pVDF[zr]->BuildAtomList(smfix,smfix,&templa);
5127
for (z4=0;z4<templa.GetSize();z4++)
5129
tf = tempvel[templa[z4]].GetLength();
5132
o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) = tf;
5133
switch(o->m_pVDF[zr]->m_iDeriv)
5136
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2);
5139
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (2*g_fTimestepLength);
5142
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(z2*o->m_pVDF[zr]->m_iCombinations+z4/2)) / (g_fTimestepLength * g_fTimestepLength);
5146
if (!g_bDeriv || (g_iSteps > 2))
5148
if (o->m_bObsCertain && o->m_bDecompDist)
5149
o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r,tf);
5151
o->m_pVDF[zr]->m_faData[0].Add(tf);
5153
if (o->m_pVDF[zr]->m_bACF)
5154
o->m_pVDF[zr]->m_pfaACFBuffer[z2*o->m_pVDF[zr]->m_iCombinations+z4]->Add((float)tf);
5156
if (o->m_bTimeDev && (ti2 != -1))
5158
if (o->m_bSaveSeparateFiles)
5159
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5160
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5161
if (o->m_bCombinedPlot)
5162
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_pVDF[zr]->m_iCombinations+z4,g_iSteps*g_fTimestepLength/1000.0,tf);
5165
((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[z2*o->m_pVDF[zr]->m_iCombinations+z4])->Add((float)tf);
5173
o->m_pSDF->BuildAtomList(smfix,smfix,&templa);
5174
for (z4=0;z4<templa.GetSize();z4++)
5176
o->m_pSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5178
if (o->m_pSDF->m_bVdWSpheres)
5179
o->m_pSDF->m_faRadius[0].Add(g_faVdWRadius[templa[z4]]);
5185
o->m_pPlProj->BuildAtomList(smfix,smfix,&templa);
5186
for (z4=0;z4<templa.GetSize();z4++)
5187
o->m_pPlProj->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5192
o->m_pRevSDF->BuildAtomList(smfix,smfix,&templa);
5193
for (z4=0;z4<templa.GetSize();z4++)
5194
o->m_pRevSDF->m_vaData[0].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5197
} // Ende IF m_bSelf
5201
secondmolrun = false;
5203
if ((!secondmolrun) && (o->m_pConditions != NULL))
5205
o->m_pConditions->m_bAnyPassed = false;
5206
o->m_pConditions->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5207
if (o->m_pConditions->m_bAnyPassed)
5208
o->m_pConditions->m_iRMPassCounter[z2]++;
5211
if ((secondmolrun) && (o->m_pConditionsOM2 != NULL))
5213
o->m_pConditionsOM2->m_bAnyPassed = false;
5214
o->m_pConditionsOM2->ScanNeighborhoodAllOM(g_pTempTimestep,smfix);
5215
if (o->m_pConditionsOM2->m_bAnyPassed)
5216
o->m_pConditionsOM2->m_iRMPassCounter[z2]++;
5219
for (z3=0;z3<(secondmolrun?o->m_iShowMol2Count:o->m_iShowMolCount);z3++) // Alle anderen Molekuele durchgehen
5223
if ((g_iFixMol == o->m_iShowMol2) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5225
if (o->m_bObsCertain)
5227
if (!o->m_waObsShow2List.Contains(z3))
5229
tic_o = o->m_waObsShow2List.GetPosition(z3);
5233
if ((g_iFixMol == o->m_iShowMol) && (z3 == z2)) // Wir wollen nicht das Referenzmolekuel mitzaehlen
5235
if (o->m_bObsCertain)
5237
if (!o->m_waObsShowList.Contains(z3))
5239
tic_o = o->m_waObsShowList.GetPosition(z3);
5243
if (g_bRegionAnalysis)
5247
if ((!o->m_iaOM2Regions.Contains(0)) && (!o->m_iaOM2Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]])))
5251
if ((!o->m_iaOM1Regions.Contains(0)) && (!o->m_iaOM1Regions.Contains(g_iaSMRegion[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]])))
5255
// mprintf("\n ... OM %d ist drin!",z3);
5260
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol2])->m_laSingleMolIndex[z3]];
5263
ti = o->m_waSaveShowList.GetPosition(z3);
5264
sm = (CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex[z3]];
5267
if (o->m_bTimeDev && (o->m_pConditions != NULL))
5269
if (!o->m_pConditions->Contains(z3) && (!g_bDeriv || (g_iSteps > 2)))
5271
for (zr=0;zr<g_iCDFChannels;zr++)
5273
if (g_bADF && (o->m_pADF[zr] != NULL))
5275
if ((ti2 != -1) && (ti != -1))
5277
if (o->m_bSaveSeparateFiles)
5278
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
5279
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; - ");
5283
if (g_bDDF && (o->m_pDDF[zr] != NULL))
5285
if ((ti2 != -1) && (ti != -1))
5287
if (o->m_bSaveSeparateFiles)
5288
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; - ");
5289
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; - ");
5293
if (g_bDipDF && (o->m_pDipDF[zr] != NULL))
5295
if ((ti2 != -1) && (ti != -1))
5297
if (o->m_bSaveSeparateFiles)
5298
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; - ");
5299
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; - ");
5303
if (g_bVDF && (o->m_pVDF[zr] != NULL))
5305
if ((ti2 != -1) && (ti != -1))
5307
if (o->m_bSaveSeparateFiles)
5308
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; - ");
5309
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; - ");
5313
if (g_bRDF && (o->m_pRDF[zr] != NULL))
5315
if ((ti2 != -1) && (ti != -1))
5317
if (o->m_bSaveSeparateFiles)
5318
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; - ");
5319
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; - ");
5327
if ((!secondmolrun) && (o->m_pConditions != NULL))
5329
if (!o->m_pConditions->Contains(z3))
5332
if (o->m_bBinOnlyPassedAtoms)
5333
o->m_pConditions->MarkPassedAtoms(z3,true);
5335
if (o->m_bBinOnlyNotPassedAtoms)
5336
o->m_pConditions->MarkPassedAtoms(z3,false);
5338
if (g_bSaveCondSnapshot)
5341
if (g_bSaveCondWholeBox)
5343
g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5346
mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5347
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5349
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5351
for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5352
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5354
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5356
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5358
for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5359
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5365
if (secondmolrun && (o->m_pConditionsOM2 != NULL))
5367
if (!o->m_pConditionsOM2->Contains(z3))
5370
// mprintf("\nStep %d: z2=%d, z3=%d passed.",g_iSteps,z2,z3);
5372
if (o->m_bBinOnlyPassedAtoms)
5373
o->m_pConditionsOM2->MarkPassedAtoms(z3,true);
5375
if (o->m_bBinOnlyNotPassedAtoms)
5376
o->m_pConditionsOM2->MarkPassedAtoms(z3,false);
5378
/* if (g_bSaveCondSnapshot)
5381
if (g_bSaveCondWholeBox)
5383
g_pTempTimestep->WriteTimestep(g_fSaveCondFile);
5386
mfprintf(g_fSaveCondFile,"%d\nTimestep %lu, RM %d, OM %d\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize() + ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_iAtomGes - ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laVirtualAtoms.GetSize(),g_iSteps,z2+1,z3+1);
5387
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
5389
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5391
for (z5=0;z5<((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetSize();z5++)
5392
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5394
for (z4=0;z4<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex.GetSize();z4++)
5396
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4] == g_iVirtAtomType))
5398
for (z5=0;z5<((CxIntArray*)sm->m_oaAtomOffset[z4])->GetSize();z5++)
5399
mfprintf(g_fSaveCondFile,"%s %f %f %f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_baAtomIndex[z4]])->m_sName,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][0]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][1]/100.0,g_pTempTimestep->m_vaCoords[((CxIntArray*)sm->m_oaAtomOffset[z4])->GetAt(z5)][2]/100.0);
5407
o->m_pVHDF->BuildAtomList(smfix,sm,&templa);
5408
for (z4=0;z4<templa.GetSize();z4+=2)
5410
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];// + vecc;
5411
for (z0=0;z0<o->m_pVHDF->m_iDepth/o->m_pVHDF->m_iStride;z0++)
5413
g_pT2Timestep = GetTimeStep(z0*o->m_pVHDF->m_iStride);
5414
if (g_pT2Timestep == NULL)
5416
vec1 = g_pT2Timestep->m_vaCoords[templa[z4+1]];
5417
tf = FoldedLength(vec0-vec1);
5418
o->m_pVHDF->m_pVHDF->AddToBin_IntX_fast(z0,tf);
5419
o->m_pVHDF->m_pCount[z0]++;
5426
for (zr=0;zr<g_iCDFChannels;zr++)
5428
if (o->m_pADF[zr] == NULL)
5430
if (o->m_bSecondShowMol)
5432
if (secondmolrun && (zr == 0))
5434
if (!secondmolrun && (zr == 1))
5437
o->m_pADF[zr]->BuildAtomList(smfix,sm,&templa);
5438
for (z4=0;z4<templa.GetSize();z4+=6)
5440
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5443
if (g_baAtomPassedCondition[templa[z4]] == 0)
5445
if (g_baAtomPassedCondition[templa[z4+1]] == 0)
5447
if (o->m_pADF[zr]->m_bOrtho[0])
5448
if (g_baAtomPassedCondition[templa[z4+2]] == 0)
5450
if (g_baAtomPassedCondition[templa[z4+3]] == 0)
5452
if (g_baAtomPassedCondition[templa[z4+4]] == 0)
5454
if (o->m_pADF[zr]->m_bOrtho[1])
5455
if (g_baAtomPassedCondition[templa[z4+5]] == 0)
5459
o->m_pADF[zr]->m_baDataEnabled[z3].Add(1);
5462
// mprintf("Nicht bestanden; z2=%d, z3=%d; (%d,%d,%d) (%d,%d,%d).\n",z2,z3,g_baAtomPassedCondition[tempwa[z4]],g_baAtomPassedCondition[tempwa[z4+1]],g_baAtomPassedCondition[tempwa[z4+2]],g_baAtomPassedCondition[tempwa[z4+3]],g_baAtomPassedCondition[tempwa[z4+4]],g_baAtomPassedCondition[tempwa[z4+5]]);
5463
o->m_pADF[zr]->m_baDataEnabled[z3].Add(0);
5466
if (o->m_pADF[zr]->m_bOrtho[0])
5468
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5469
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5470
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5471
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5474
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5475
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5476
vec1 = FoldVector(vec2-vec0);
5478
if (o->m_pADF[zr]->m_bOrtho[1])
5480
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5481
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5482
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5483
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5486
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5487
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5488
vec2 = FoldVector(vec3-vec4);
5491
tf = Angle_Deg(vec1,vec2);
5492
if ((tf > 90.0f) && (o->m_pADF[zr]->m_bFoldAngle))
5494
if (o->m_pADF[zr]->m_bCosine)
5495
tf = cos(tf/180.0*Pi);
5499
zi = (z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6;
5500
o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5501
switch(o->m_pADF[zr]->m_iDeriv)
5504
tf = o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5507
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5510
tf = (o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pADF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5514
if (!g_bDeriv || (g_iSteps > 2))
5516
if (o->m_bObsCertain && o->m_bDecompDist)
5517
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5519
o->m_pADF[zr]->m_faData[z3].Add(tf);
5521
if (o->m_pADF[zr]->m_bACF)
5522
o->m_pADF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6]->Add((float)tf);
5524
/* if (o->m_pADF[zr]->m_bMirror)
5526
if (o->m_bObsCertain && o->m_bDecompDist)
5527
o->m_pADF[zr]->m_pADF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,180.0-tf);
5528
o->m_pADF[zr]->m_faData[z3].Add(180.0-tf);
5531
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5533
// o->m_pAngleStat->AddValue(ti2,ti,tf);
5534
if (o->m_bSaveSeparateFiles)
5535
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"; %8.3f",tf);
5536
else mfprintf(o->m_pADF[zr]->m_fAngle[0],"; %8.3f",tf);
5537
if (o->m_bCombinedPlot)
5538
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pADF[zr]->m_iCombinations+z4/6,g_iSteps*g_fTimestepLength/1000.0,tf);
5541
((CxFloatArray*)o->m_pADF[zr]->m_pADF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pADF[zr]->m_iCombinations+z4/6])->Add((float)tf);
5549
for (zr=0;zr<g_iCDFChannels;zr++)
5551
if (o->m_pDDF[zr] == NULL)
5553
if (o->m_bSecondShowMol)
5555
if (secondmolrun && (zr == 0))
5557
if (!secondmolrun && (zr == 1))
5560
o->m_pDDF[zr]->BuildAtomList(smfix,sm,&templa);
5561
for (z4=0;z4<templa.GetSize();z4+=9)
5563
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5566
for (z5=z4;z5<z4+9;z5++)
5567
if (g_baAtomPassedCondition[templa[z5]] == 0)
5570
o->m_pDDF[zr]->m_baDataEnabled[z3].Add(1);
5571
else o->m_pDDF[zr]->m_baDataEnabled[z3].Add(0);
5573
if (o->m_pDDF[zr]->m_bOrtho[0])
5575
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5576
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5577
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+2]];
5578
vec1 = CrossP(FoldVector(vec2-vec0),FoldVector(vec3-vec0));
5581
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5582
vec2 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5583
vec1 = FoldVector(vec2-vec0);
5585
if (o->m_pDDF[zr]->m_bOrtho[1])
5587
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5588
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5589
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+5]];
5590
vec2 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5593
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+3]];
5594
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+4]];
5595
vec2 = FoldVector(vec3-vec4);
5597
if (o->m_pDDF[zr]->m_bOrtho[2])
5599
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5600
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5601
vec5 = g_pTempTimestep->m_vaCoords[templa[z4+8]];
5602
vec3 = CrossP(FoldVector(vec3-vec4),FoldVector(vec5-vec4));
5605
vec4 = g_pTempTimestep->m_vaCoords[templa[z4+6]];
5606
vec3 = g_pTempTimestep->m_vaCoords[templa[z4+7]];
5607
vec3 = FoldVector(vec3-vec4);
5609
tf = Dihedral(vec1,vec2,vec3,o->m_pDDF[zr]->m_bAbs);
5610
if (o->m_pDDF[zr]->m_bCosine)
5611
tf = cos(tf/180.0*Pi);
5612
else if (o->m_pDDF[zr]->m_bPositive)
5617
zi = (z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9;
5618
o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5619
switch(o->m_pDDF[zr]->m_iDeriv)
5622
tf = o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5625
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5628
tf = (o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5632
if (!g_bDeriv || (g_iSteps > 2))
5634
if (o->m_bObsCertain && o->m_bDecompDist)
5635
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5637
o->m_pDDF[zr]->m_faData[z3].Add(tf);
5639
if (o->m_pDDF[zr]->m_bACF)
5640
o->m_pDDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]->Add((float)tf);
5642
if (/*(!o->m_pDDF[zr]->m_bAbs) && */o->m_pDDF[zr]->m_bSymm)
5644
o->m_pDDF[zr]->m_faData[z3].Add(-tf);
5645
if (o->m_bObsCertain && o->m_bDecompDist)
5646
o->m_pDDF[zr]->m_pDDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,-tf);
5650
((CxFloatArray*)o->m_pDDF[zr]->m_pDDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9])->Add((float)tf);
5652
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5654
if (o->m_pDDF[zr]->m_bRotate)
5658
if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) > 180.0)
5659
o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]--;
5660
if ((tf - o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]) < -180.0)
5661
o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9]++;
5663
o->m_pDDF[zr]->m_faLastData[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] = tf;
5664
tf2 = tf + o->m_pDDF[zr]->m_laRotation[(z2*o->m_iShowMolCount+z3)*o->m_pDDF[zr]->m_iCombinations+z4/9] * 360.0;
5666
if (o->m_bSaveSeparateFiles)
5667
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"; %8.3f",tf2);
5668
else mfprintf(o->m_pDDF[zr]->m_fAngle[0],"; %8.3f",tf2);
5669
if (o->m_bCombinedPlot)
5670
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pDDF[zr]->m_iCombinations+z4/9,g_iSteps*g_fTimestepLength/1000.0,tf);
5679
for (zr=0;zr<g_iCDFChannels;zr++)
5681
if (o->m_pPlDF[zr] == NULL)
5683
if (o->m_bSecondShowMol)
5685
if (secondmolrun && (zr == 0))
5687
if (!secondmolrun && (zr == 1))
5690
o->m_pPlDF[zr]->BuildAtomList(smfix,sm,&templa);
5691
for (z4=0;z4<templa.GetSize();z4+=4)
5693
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5696
for (z5=z4;z5<z4+4;z5++)
5697
if (g_baAtomPassedCondition[templa[z5]] == 0)
5700
o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(1);
5701
else o->m_pPlDF[zr]->m_baDataEnabled[z3].Add(0);
5703
if (o->m_pPlDF[zr]->m_bNormal)
5705
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5707
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5708
tf = DotP(vec0,vec1);
5711
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5712
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5713
vec3 = CrossP(vec0,vec1);
5715
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5716
tf = DotP(vec2,vec3);
5719
if (!g_bDeriv || (g_iSteps > 2))
5721
if (o->m_bObsCertain && o->m_bDecompDist)
5722
o->m_pPlDF[zr]->m_pPlDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5724
o->m_pPlDF[zr]->m_faData[z3].Add(tf);
5732
for (zr=0;zr<g_iCDFChannels;zr++)
5734
if (o->m_pLiDF[zr] == NULL)
5736
if (o->m_bSecondShowMol)
5738
if (secondmolrun && (zr == 0))
5740
if (!secondmolrun && (zr == 1))
5743
o->m_pLiDF[zr]->BuildAtomList(smfix,sm,&templa);
5744
for (z4=0;z4<templa.GetSize();z4+=4)
5746
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5749
for (z5=z4;z5<z4+4;z5++)
5750
if (g_baAtomPassedCondition[templa[z5]] == 0)
5753
o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(1);
5754
else o->m_pLiDF[zr]->m_baDataEnabled[z3].Add(0);
5757
if (o->m_pLiDF[zr]->m_bNormal)
5759
vec2 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5760
vec3 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+2]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5761
vec0 = CrossP(vec2,vec3);
5763
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5764
vec0 *= DotP(vec0,vec1);
5765
tf = (vec1 - vec0).GetLength();
5768
vec0 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+1]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5770
vec1 = FoldVector(g_pTempTimestep->m_vaCoords[templa[z4+3]] - g_pTempTimestep->m_vaCoords[templa[z4]]);
5771
vec0 *= DotP(vec0,vec1);
5772
tf = (vec1 - vec0).GetLength();
5775
if (!g_bDeriv || (g_iSteps > 2))
5777
if (o->m_bObsCertain && o->m_bDecompDist)
5778
o->m_pLiDF[zr]->m_pLiDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5780
o->m_pLiDF[zr]->m_faData[z3].Add(tf);
5788
for (zr=0;zr<g_iCDFChannels;zr++)
5790
if (o->m_pDipDF[zr] == NULL)
5792
if (o->m_bSecondShowMol)
5794
if (secondmolrun && (zr == 0))
5796
if (!secondmolrun && (zr == 1))
5799
if (o->m_pDipDF[zr]->m_iRefOrSec == 0)
5800
tf = smfix->m_vDipole.GetLength();
5801
else tf = sm->m_vDipole.GetLength();
5804
zi = z2*o->m_iShowMolCount+z3;
5805
o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5806
switch(o->m_pDipDF[zr]->m_iDeriv)
5809
tf = o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5812
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5815
tf = (o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pDipDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5819
if (!g_bDeriv || (g_iSteps > 2))
5821
if (o->m_bObsCertain && o->m_bDecompDist)
5822
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5824
o->m_pDipDF[zr]->m_faData[z3].Add(tf);
5826
if (o->m_pDipDF[zr]->m_bACF)
5827
o->m_pDipDF[zr]->m_pfaACFBuffer[z2*o->m_iShowMolCount+z3]->Add((float)tf);
5829
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5831
if (o->m_bSaveSeparateFiles)
5832
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"; %8.3f",tf);
5833
else mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"; %8.3f",tf);
5834
if (o->m_bCombinedPlot)
5835
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->AddXYTupel(ti2*o->m_waSaveShowList.GetSize()+ti,g_iSteps*g_fTimestepLength/1000.0,tf);
5838
((CxFloatArray*)o->m_pDipDF[zr]->m_pDipoleDF->m_oaTimeDiffBuf[z2*o->m_iShowMolCount+z3])->Add((float)tf);
5845
for (zr=0;zr<g_iCDFChannels;zr++)
5847
if (o->m_pVDF[zr] == NULL)
5849
if (o->m_bSecondShowMol)
5851
if (secondmolrun && (zr == 0))
5853
if (!secondmolrun && (zr == 1))
5856
o->m_pVDF[zr]->BuildAtomList(smfix,sm,&templa);
5857
for (z4=0;z4<templa.GetSize();z4++)
5859
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5862
for (z5=z4;z5<z4+2;z5++)
5863
if (g_baAtomPassedCondition[templa[z5]] == 0)
5866
o->m_pVDF[zr]->m_baDataEnabled[z3].Add(1);
5867
else o->m_pVDF[zr]->m_baDataEnabled[z3].Add(0);
5869
tf = tempvel[templa[z4]].GetLength();
5872
zi = (z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2;
5873
o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5874
switch(o->m_pVDF[zr]->m_iDeriv)
5877
tf = o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5880
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5883
tf = (o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pVDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5887
if (!g_bDeriv || (g_iSteps > 2))
5889
if (o->m_bObsCertain && o->m_bDecompDist)
5890
o->m_pVDF[zr]->m_pVDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5892
o->m_pVDF[zr]->m_faData[z3].Add(tf);
5894
if (o->m_pVDF[zr]->m_bACF)
5895
o->m_pVDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5897
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5899
if (o->m_bSaveSeparateFiles)
5900
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"; %8.3f",tf);
5901
else mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"; %8.3f",tf);
5902
if (o->m_bCombinedPlot)
5903
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pVDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5906
((CxFloatArray*)o->m_pVDF[zr]->m_pVDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pVDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5914
for (zr=0;zr<g_iCDFChannels;zr++)
5916
if (o->m_pRDF[zr] == NULL)
5918
if (o->m_bSecondShowMol)
5920
if (secondmolrun && (zr == 0))
5922
if (!secondmolrun && (zr == 1))
5925
o->m_pRDF[zr]->BuildAtomList(smfix,sm,&templa);
5926
for (z4=0;z4<templa.GetSize();z4+=2)
5928
if (o->m_bBinOnlyPassedAtoms || o->m_bBinOnlyNotPassedAtoms)
5931
for (z5=z4;z5<z4+2;z5++)
5932
if (g_baAtomPassedCondition[templa[z5]] == 0)
5935
o->m_pRDF[zr]->m_baDataEnabled[z3].Add(1);
5936
else o->m_pRDF[zr]->m_baDataEnabled[z3].Add(0);
5938
vec0 = g_pTempTimestep->m_vaCoords[templa[z4]];
5939
vec1 = g_pTempTimestep->m_vaCoords[templa[z4+1]];
5940
tf = FoldedLength(vec0-vec1);
5943
mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5944
mprintf("\n vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5946
*/ // mprintf("\n@ z2=%d, z3=%d, z4=%d, templa[z4]=%d, templa[z4+1]=%d, dist=%f ",z2,z3,z4,templa[z4],templa[z4+1],tf);
5947
// mprintf("\n vec0: "); vec0.Dump(); mprintf(", vec1: "); vec1.Dump(); mprintf(", vec2: "); vec2.Dump();
5950
zi = (z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2;
5951
o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) = tf;
5952
switch(o->m_pRDF[zr]->m_iDeriv)
5955
tf = o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi);
5958
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi)) / (2*g_fTimestepLength);
5961
tf = (o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivLast]->GetAt(zi) + o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivNext]->GetAt(zi) - 2*o->m_pRDF[zr]->m_pfaDerivBuffer[g_iDerivCurr]->GetAt(zi)) / (g_fTimestepLength * g_fTimestepLength);
5965
if (!g_bDeriv || (g_iSteps > 2))
5967
if (o->m_bObsCertain && o->m_bDecompDist)
5968
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(tic_r*o->m_waObsShowList.GetSize()+tic_o,tf);
5970
if (o->m_bDecompType)
5971
o->m_pRDF[zr]->m_pRDF->AddToBin_Multi(o->m_waDecompTypeRefOffs[templa[z4]]*o->m_waDecompTypeObsOffs.GetSize()+o->m_waDecompTypeObsOffs[templa[z4+1]],tf);
5973
o->m_pRDF[zr]->m_faData[z3].Add(tf);
5975
if (o->m_pRDF[zr]->m_bACF)
5976
o->m_pRDF[zr]->m_pfaACFBuffer[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2]->Add((float)tf);
5978
if (o->m_bTimeDev && (ti2 != -1) && (ti != -1))
5980
if (o->m_bSaveSeparateFiles)
5981
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"; %10.3f",tf);
5982
else mfprintf(o->m_pRDF[zr]->m_fDist[0],"; %10.3f",tf);
5983
if (o->m_bCombinedPlot)
5984
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pRDF[zr]->m_iCombinations+z4/2,g_iSteps*g_fTimestepLength/1000.0,tf);
5987
((CxFloatArray*)o->m_pRDF[zr]->m_pRDF->m_oaTimeDiffBuf[(z2*o->m_iShowMolCount+z3)*o->m_pRDF[zr]->m_iCombinations+z4/2])->Add((float)tf);
5995
o->m_pSDF->BuildAtomList(smfix,sm,&templa);
5996
for (z4=0;z4<templa.GetSize();z4++)
5998
o->m_pSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
6000
if (o->m_pSDF->m_bVdWSpheres)
6001
o->m_pSDF->m_faRadius[z3].Add(g_faVdWRadius[templa[z4]]);
5863
6003
} // Ende IF SDF
5867
o->m_pRevSDF->BuildAtomList(smfix,sm,&templa);
6007
o->m_pPlProj->BuildAtomList(smfix,sm,&templa);
5868
6008
for (z4=0;z4<templa.GetSize();z4++)
5869
o->m_pRevSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
5872
} // Ende FOR Alle anderen Molekuele durchgehen
5873
if (o->m_bSecondShowMol && (!secondmolrun))
5875
secondmolrun = true;
5876
goto _secondmolstart;
5878
} // Ende IF m_bOthers
5882
if (o->m_pSDF->m_bSDFMirrorBisect)
5884
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
5885
vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
5886
vec1 = CrossP(vec2,vec3);
5890
if (o->m_pSDF->m_bCutPlane)
5892
o->m_pSDF->m_fAtom2PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])][0];
5893
o->m_pSDF->m_fAtom3PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][0];
5894
o->m_pSDF->m_fAtom3PosY += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][1];
5895
o->m_pSDF->m_fPosCounter++;
5900
for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
5902
vec0 = o->m_pSDF->m_vaData[0][z5];
5904
if (o->m_pSDF->m_bVdWSpheres)
5905
o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[0][z5]);
5906
else o->m_pSDF->m_pSDF->AddToBin(vec0);
5908
if (o->m_pSDF->m_bSDFMirrorXY)
5911
o->m_pSDF->m_pSDF->AddToBin(vec0);
5914
if (o->m_pSDF->m_bSDFMirrorBisect)
5916
vec3.PointRoot(vec1,vec2,vec0);
5920
o->m_pSDF->m_pSDF->AddToBin(vec0);
5921
if (o->m_pSDF->m_bSDFMirrorXY)
5924
o->m_pSDF->m_pSDF->AddToBin(vec0);
5930
for (z4=0;z4<o->m_iShowMolCount;z4++)
5932
for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
5934
vec0 = o->m_pSDF->m_vaData[z4][z5];
5936
if (o->m_pSDF->m_bVdWSpheres)
5937
o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[z4][z5]);
5938
else o->m_pSDF->m_pSDF->AddToBin(vec0);
5940
if (o->m_pSDF->m_bSDFMirrorXY)
5943
o->m_pSDF->m_pSDF->AddToBin(vec0);
5946
if (o->m_pSDF->m_bSDFMirrorBisect)
5948
vec3.PointRoot(vec1,vec2,vec0);
5952
o->m_pSDF->m_pSDF->AddToBin(vec0);
5953
if (o->m_pSDF->m_bSDFMirrorXY)
5956
o->m_pSDF->m_pSDF->AddToBin(vec0);
5966
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
5967
tf4 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])].GetLength();
5968
o->m_pRevSDF->m_fSecondAtomPosX += tf4;
5969
o->m_pRevSDF->m_fSecondAtomCount++;
5972
for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
5974
vec0 = o->m_pRevSDF->m_vaData[0][z5];
5975
tf = fabs(Angle(vec2,vec0));
5976
tf2 = vec0.GetLength();
5978
if (o->m_pRevSDF->m_bCorrectAngle)
5980
if ((tf < 0.001) || (tf > Pi-0.001))
5982
else tf3 /= sin(tf);
5984
if (o->m_pRevSDF->m_bCorrectRadial)
5985
tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
5986
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
5987
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
5988
if (o->m_pRevSDF->m_bMirrorY)
5990
if (o->m_pRevSDF->m_bMirrorBond)
5992
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
5993
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
5996
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
5997
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
6003
for (z4=0;z4<o->m_iShowMolCount;z4++)
6005
for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
6007
vec0 = o->m_pRevSDF->m_vaData[z4][z5];
6008
tf = fabs(Angle(vec2,vec0));
6009
tf2 = vec0.GetLength();
6011
if (o->m_pRevSDF->m_bCorrectAngle)
6013
if ((tf < 0.001) || (tf > Pi-0.001))
6015
else tf3 /= sin(tf);
6017
if (o->m_pRevSDF->m_bCorrectRadial)
6018
tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
6019
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
6020
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
6021
if (o->m_pRevSDF->m_bMirrorY)
6023
if (o->m_pRevSDF->m_bMirrorBond)
6025
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6026
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6029
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
6030
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
6038
if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
6040
if (o->m_bSecondShowMol)
6042
for (zr=0;zr<g_iCDFChannels;zr++)
6044
switch(g_iObsChannel[zr])
6047
apfa[zr] = o->m_pRDF[zr]->m_faData;
6048
apba[zr] = o->m_pRDF[zr]->m_baDataEnabled;
6051
apfa[zr] = o->m_pADF[zr]->m_faData;
6052
apba[zr] = o->m_pADF[zr]->m_baDataEnabled;
6055
apfa[zr] = o->m_pDDF[zr]->m_faData;
6056
apba[zr] = o->m_pDDF[zr]->m_baDataEnabled;
6059
apfa[zr] = o->m_pDipDF[zr]->m_faData;
6060
apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled;
6063
apfa[zr] = o->m_pVDF[zr]->m_faData;
6064
apba[zr] = o->m_pVDF[zr]->m_baDataEnabled;
6067
apfa[zr] = o->m_pPlDF[zr]->m_faData;
6068
apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled;
6071
apfa[zr] = o->m_pLiDF[zr]->m_faData;
6072
apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled;
6077
if (g_iCDFChannels == 2)
6079
for (z4=0;z4<o->m_iShowMolCount;z4++)
6081
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6083
for (z8=0;z8<o->m_iShowMol2Count;z8++)
6085
if (o->m_bExclude1eq2 && (z4 == z8))
6088
for (z7=0;z7<apfa[1][z8].GetSize();z7++)
6090
if (o->m_bBinOnlyPassedAtoms)
6092
if ((apba[0][z4][z5] == 0) || (apba[1][z8][z7] == 0))
6095
if (o->m_bBinOnlyNotPassedAtoms)
6097
if ((apba[0][z4][z5] != 0) && (apba[1][z8][z7] != 0))
6101
o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z8][z7]);
6104
if (o->m_pCDF->m_bDumpDat)
6105
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; %d; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,z5+1,apfa[0][z4][z5],apfa[1][z8][z7]);
6111
} else // IF NOT SECOND_OM
6113
for (zr=0;zr<g_iCDFChannels;zr++)
6115
switch(g_iObsChannel[zr])
6118
apfa[zr] = o->m_pRDF[zr]->m_faData;
6119
apba[zr] = o->m_pRDF[zr]->m_baDataEnabled;
6122
apfa[zr] = o->m_pADF[zr]->m_faData;
6123
apba[zr] = o->m_pADF[zr]->m_baDataEnabled;
6126
apfa[zr] = o->m_pDDF[zr]->m_faData;
6127
apba[zr] = o->m_pDDF[zr]->m_baDataEnabled;
6130
apfa[zr] = o->m_pDipDF[zr]->m_faData;
6131
apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled;
6134
apfa[zr] = o->m_pVDF[zr]->m_faData;
6135
apba[zr] = o->m_pVDF[zr]->m_baDataEnabled;
6138
apfa[zr] = o->m_pPlDF[zr]->m_faData;
6139
apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled;
6142
apfa[zr] = o->m_pLiDF[zr]->m_faData;
6143
apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled;
6148
if (g_iCDFChannels == 2)
6150
for (z4=0;z4<o->m_iShowMolCount;z4++)
6153
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6155
for (z7=0;z7<apfa[1][z4].GetSize();z7++)
6158
/* Workaround for symmetrical DDFs (double data amount) */
6159
if (g_iObsChannel[0] == 2)
6161
if (o->m_pDDF[0]->m_bSymm)
6163
if (g_iObsChannel[1] == 2)
6165
if (o->m_pDDF[1]->m_bSymm)
6167
if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6173
if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6177
if (g_iObsChannel[1] == 2)
6179
if (o->m_pDDF[1]->m_bSymm)
6181
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6186
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6191
if (o->m_bBinOnlyPassedAtoms)
6193
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
6196
if (o->m_bBinOnlyNotPassedAtoms)
6198
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
6201
o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
6203
if (o->m_pCDF->m_bDumpDat)
6204
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; ; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z7]);
6207
ti = o->m_waSaveShowList.GetPosition(z4);
6208
if ((ti2 != -1) && (ti != -1))
6210
if (o->m_bSaveSeparateFiles)
6211
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6212
else mfprintf(o->m_pCDF->m_fTimeDev[0],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6213
if (o->m_pCDF->m_bTDAnimation)
6214
o->m_pCDF->m_pTDAPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pCDF->m_iCombinationsEnabled+ticomb,apfa[0][z4][z5],apfa[1][z4][z7]);
6221
if (o->m_bTimeDev && (ti2 != -1))
6223
if (o->m_bSaveSeparateFiles)
6224
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"\n");
6225
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6226
mfprintf(o->m_pCDF->m_fTimeDev[0],"\n");
6228
} // END IF CHANNELS == 2
6230
if (g_iCDFChannels == 3)
6232
for (z4=0;z4<o->m_iShowMolCount;z4++)
6235
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6237
for (z8=0;z8<apfa[1][z4].GetSize();z8++)
6239
for (z7=0;z7<apfa[2][z4].GetSize();z7++)
6241
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]*o->m_pCDF->m_iCombinations[2]+z8*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6243
if (o->m_bBinOnlyPassedAtoms)
6245
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z8] == 0) || (apba[2][z4][z7] == 0))
6248
if (o->m_bBinOnlyNotPassedAtoms)
6250
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z8] != 0) && (apba[2][z4][z7] != 0))
6253
o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6255
o->m_pCDF->m_p3DF->m_p2DF[0]->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8]);
6256
o->m_pCDF->m_p3DF->m_p2DF[1]->AddToBin(apfa[0][z4][z5],apfa[2][z4][z7]);
6257
o->m_pCDF->m_p3DF->m_p2DF[2]->AddToBin(apfa[1][z4][z8],apfa[2][z4][z7]);
6259
if (o->m_pCDF->m_bDumpDat)
6260
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; ; %10.3f; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6265
} // END IF CHANNELS == 3
6266
} // IF NOT SECOND_OM
6269
for (zr=0;zr<g_iCDFChannels;zr++)
6271
if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6275
if (o->m_bSecondShowMol && (zr == 1))
6277
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6279
for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6281
if (o->m_bBinOnlyPassedAtoms)
6282
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6284
if (o->m_bBinOnlyNotPassedAtoms)
6285
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6287
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6292
for (z4=0;z4<o->m_iShowMolCount;z4++)
6294
for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6296
if (o->m_bBinOnlyPassedAtoms)
6297
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6299
if (o->m_bBinOnlyNotPassedAtoms)
6300
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6302
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6308
for (z5=0;z5<o->m_pRDF[zr]->m_faData[0].GetSize();z5++)
6309
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[0][z5]);
6311
if (o->m_bTimeDev && (ti2 != -1))
6313
if (o->m_bSaveSeparateFiles)
6314
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"\n");
6315
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6316
mfprintf(o->m_pRDF[zr]->m_fDist[0],"\n");
6320
if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6324
if (o->m_bSecondShowMol && (zr == 1))
6326
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6327
for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6328
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6331
for (z4=0;z4<o->m_iShowMolCount;z4++)
6333
for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6335
if (o->m_bBinOnlyPassedAtoms)
6336
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
6338
if (o->m_bBinOnlyNotPassedAtoms)
6339
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
6341
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6347
for (z5=0;z5<o->m_pVDF[zr]->m_faData[0].GetSize();z5++)
6348
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[0][z5]);
6350
if (o->m_bTimeDev && (ti2 != -1))
6352
if (o->m_bSaveSeparateFiles)
6353
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"\n");
6354
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6355
mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"\n");
6359
if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6363
if (o->m_bSecondShowMol && (zr == 1))
6365
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6366
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6367
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6370
for (z4=0;z4<o->m_iShowMolCount;z4++)
6372
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6374
if (o->m_bBinOnlyPassedAtoms)
6375
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
6377
if (o->m_bBinOnlyNotPassedAtoms)
6378
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
6380
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6386
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[0].GetSize();z5++)
6387
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[0][z5]);
6389
if (o->m_bTimeDev && (ti2 != -1))
6391
if (o->m_bSaveSeparateFiles)
6392
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"\n");
6393
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6394
mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"\n");
6398
if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6402
if (o->m_bSecondShowMol && (zr == 1))
6404
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6405
for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6406
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6409
for (z4=0;z4<o->m_iShowMolCount;z4++)
6411
for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6413
if (o->m_bBinOnlyPassedAtoms)
6414
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
6416
if (o->m_bBinOnlyNotPassedAtoms)
6417
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
6419
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6425
for (z5=0;z5<o->m_pADF[zr]->m_faData[0].GetSize();z5++)
6426
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[0][z5]);
6428
if (o->m_bTimeDev && (ti2 != -1))
6430
if (o->m_bSaveSeparateFiles)
6431
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"\n");
6432
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6433
mfprintf(o->m_pADF[zr]->m_fAngle[0],"\n");
6437
if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6441
if (o->m_bSecondShowMol && (zr == 1))
6443
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6444
for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6445
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6448
for (z4=0;z4<o->m_iShowMolCount;z4++)
6450
for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6452
if (o->m_bBinOnlyPassedAtoms)
6453
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
6455
if (o->m_bBinOnlyNotPassedAtoms)
6456
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
6458
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6464
for (z5=0;z5<o->m_pDDF[zr]->m_faData[0].GetSize();z5++)
6465
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[0][z5]);
6467
if (o->m_bTimeDev && (ti2 != -1))
6469
if (o->m_bSaveSeparateFiles)
6470
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"\n");
6471
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6472
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"\n");
6476
if (g_bPlDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pPlDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6480
if (o->m_bSecondShowMol && (zr == 1))
6482
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6483
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6484
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6487
for (z4=0;z4<o->m_iShowMolCount;z4++)
6489
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6491
if (o->m_bBinOnlyPassedAtoms)
6492
if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] == 0)
6494
if (o->m_bBinOnlyNotPassedAtoms)
6495
if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] != 0)
6497
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6503
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[0].GetSize();z5++)
6504
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[0][z5]);
6508
if (g_bLiDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pLiDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6512
if (o->m_bSecondShowMol && (zr == 1))
6514
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6515
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6516
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6519
for (z4=0;z4<o->m_iShowMolCount;z4++)
6521
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6523
if (o->m_bBinOnlyPassedAtoms)
6524
if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] == 0)
6526
if (o->m_bBinOnlyNotPassedAtoms)
6527
if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] != 0)
6529
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6535
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[0].GetSize();z5++)
6536
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[0][z5]);
6540
} // FOR CDFChannels
6542
} // Ende FOR g_oaObserv.GetSize
6543
} // Ende IF [blabla]
6545
if (g_bMiddleAvg) // Referenzmolekuel mitteln
6548
ti2 = (g_iSteps-2)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()+z2;
6549
// Jeden Atomtyp des Zielmolekuels durchgehen
6550
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
6552
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
6554
// Atome vertauschen, aber nicht im allerersten Durchgang hier, und nur wenn mehr als 1 Atom dieser Sorte
6555
if ((g_iSwapAtoms) && (ti2 != 0) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3]>1))
6557
vec4 = g_pRefMol[cc];
6558
vec4 /= (float)ti2; // der bisherige Mittelwert des Referenzmolekuels
6559
tf = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],vec4); // der Abstand dieses Atoms von seinem Aequivalent im Referenzmolekuel
6561
for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
6563
tf2 = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z5)],vec4);
6564
if (tf2 < tf) // Das andere Atom ist naeher am Platz im Referenzmolekuel als das eigentlich vorgesehene
6570
if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
6572
Swap(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(ti3)]);
6573
pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+(cc-z4+ti3)] += 1;
6574
pSwapMatrix[(cc-z4+ti3)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc] += 1;
6576
} // Ende IF SwapAtoms
6577
g_pRefMol[cc] += g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)];
6579
} // Ende FOR Atom des Referenzmolekuels
6580
} // Ende FOR Atomtyp des Referenzmolekuels
6581
} // Ende IF Referenzmolekuel mitteln
6582
} // Ende FOR RefMol (z2)
6584
for (z6=0;z6<g_oaObserv.GetSize();z6++)
6586
o = (CObservation*)g_oaObserv[z6];
6588
if (o->m_pConditions != NULL)
6589
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6590
if (o->m_pConditions->m_iPassCounter[z2] != 0)
6591
o->m_pConditions->m_iOMPassCounter[z2]++;
6593
if (o->m_pConditionsOM2 != NULL)
6594
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6595
if (o->m_pConditionsOM2->m_iPassCounter[z2] != 0)
6596
o->m_pConditionsOM2->m_iOMPassCounter[z2]++;
6600
for (zr=0;zr<g_iCDFChannels;zr++)
6602
if (o->m_pRDF[zr] != NULL)
6603
if (o->m_pRDF[zr]->m_bCalcSD)
6604
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishStep();
6613
if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
6615
mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
6620
/*************************************************************************
6621
*************** Ende Hauptschleife ***************************************
6622
*************************************************************************/
6627
if (g_bUseVelocities)
6630
mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
6633
mprintf("\n%d time steps processed (every %dth from %d).\n\n",g_iSteps/g_iStride,g_iStride,g_iSteps);
6634
else mprintf("\n%d time steps processed.\n\n",g_iSteps);
6639
if (g_fForce != NULL)
6641
if ((g_bNPT) && (g_sNPTFile[0] != 0))
6644
if (g_bDipole && g_bDumpDipoleVector)
6646
fclose(g_fDumpDipole);
6647
mprintf(" Dipole vectors written to file \"dipole_vectors.csv\".\n");
6648
if (g_bDumpDipoleXYZ)
6650
fclose(g_fDumpDipoleXYZ);
6651
mprintf(" Dipole XYZ trajectory written to file \"dipole_vectors.xyz\".\n");
6657
/************ Interface **************/
6658
Interface_AfterAnalysis();
6663
g_pVoroWrapper->Finish();
6668
g_pVoroAnalysis->Finish();
6673
if (!ReactSecondRun)
6676
g_pReact->DumpMolecules();
6677
g_pReact->CreateOutput();
6679
if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
6681
if (!ReactSecondRun)
6683
mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
6684
ReactSecondRun = true;
6688
mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
6692
g_bAbortAnalysis = true;
6694
if (g_bSaveCondSnapshot)
6696
fclose(g_fSaveCondFile);
6697
mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
6702
mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
6703
for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
6705
mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
6706
mprintf(WHITE," * Observation %d: %s\n",z+1,mho->m_sName);
6710
/* mprintf(" Creating Microheterogeneity plot...\n");
6711
sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
6712
mho->BuildSlices(buf);*/
6714
mprintf(" Creating entry plot...\n");
6715
sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
6716
mho->BuildZeroPlot(buf,true);
6721
if (mho->m_bCDF_Dens)
6722
mho->BuildCDF(0,z,multibuf);
6724
if (mho->m_bCDF_Tot)
6725
mho->BuildCDF(1,z,multibuf);
6727
if (mho->m_bCDF_Mode3)
6728
mho->BuildCDF(2,z,multibuf);
6734
if (g_bClusterAnalysis)
6736
mprintf(WHITE,"*** Cluster Analysis\n\n");
6737
g_pClusterAnalysis->BuildClusterDistribution();
6738
g_pClusterAnalysis->WriteOutput(multibuf);
6743
mprintf(WHITE,"*** FES Analysis\n\n");
6754
mprintf(WHITE,"*** Bond autocorrelation function\n");
6755
if (g_bBondACFDebug)
6757
mprintf(" Writing \"bondacf.agr\"...\n");
6759
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6760
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6762
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6763
gc->SetRangeY(0,250);
6765
gc->SetLabelX("Time [ps]");
6766
gc->SetLabelY("Bond length [pm]");
6767
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6769
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6770
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6772
bond = (CMolBond*)sm->m_oaBonds[z3];
6774
for (z4=0;z4<bond->m_faData.GetSize();z4++)
6775
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6778
gc->WriteAgr("bondacf.agr",false);
6781
mprintf(" Differentiating bond length developments...\n");
6782
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6784
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6785
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6787
bond = (CMolBond*)sm->m_oaBonds[z3];
6788
for (z4=0;z4<bond->m_faData.GetSize()-1;z4++)
6789
bond->m_faData[z4] = bond->m_faData[z4+1] - bond->m_faData[z4];
6792
if (g_bBondACFDebug)
6794
mprintf(" Writing \"bondacf_diff.agr\"...\n");
6796
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6797
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6799
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6800
gc->SetRangeY(-15,15);
6802
gc->SetLabelX("Time [ps]");
6803
gc->SetLabelY("Bond length change rate");
6804
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6806
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6807
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6809
bond = (CMolBond*)sm->m_oaBonds[z3];
6811
for (z4=0;z4<bond->m_faData.GetSize();z4++)
6812
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6815
gc->WriteAgr("bondacf_diff.agr",false);
6818
mprintf(" Autocorrelating bond length developments...\n");
6819
mprintf(WHITE," [");
6821
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6823
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6824
tfs += sm->m_oaBonds.GetSize();
6828
/* fft = new CFFT();
6829
fft->PrepareFFT_C2C(g_iSteps*2);
6831
fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
6833
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
6834
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6836
ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
6837
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6839
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6840
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6842
if (fmod(ti2,tfs) < 1.0)
6844
bond = (CMolBond*)sm->m_oaBonds[z3];
6845
ac->AutoCorrelate(&bond->m_faData,&tempfa);
6846
bond->m_faData.CopyFrom(&tempfa);
6851
mprintf(WHITE,"]\n");
6852
if (g_bBondACFDebug)
6854
mprintf(" Writing \"bondacf_autocorr.agr\"...\n");
6856
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6857
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6859
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
6860
gc->SetRangeY(-25,25);
6862
gc->SetLabelX("Time [ps]");
6863
gc->SetLabelY("ACF(Bond length change rate)");
6864
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6866
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6867
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6869
bond = (CMolBond*)sm->m_oaBonds[z3];
6871
for (z4=0;z4<g_iBondACFDepth;z4++)
6872
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6875
gc->WriteAgr("bondacf_autocorr.agr",false);
6878
mprintf(" Merging equivalent Bonds...\n");
6879
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6881
m = (CMolecule*)g_oaMolecules[z0];
6882
sm2 = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6883
for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
6885
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
6886
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6888
bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
6889
for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
6891
bond = (CMolBond*)bg->m_oaBonds[z4];
6892
for (z5=0;z5<g_iBondACFDepth;z5++)
6893
((CMolBond*)((CMolBondGroup*)sm2->m_oaBondGroups[z3])->m_oaBonds[0])->m_faData[z5] += bond->m_faData[z5];
6898
if (g_bBondACFSymmetrize)
6900
mprintf(" Symmetrizing bond ACFs...\n");
6901
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6903
m = (CMolecule*)g_oaMolecules[z0];
6904
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6905
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6907
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6908
bond->m_faData.SetSize(2*g_iBondACFDepth);
6909
for (z4=0;z4<g_iBondACFDepth;z4++)
6910
bond->m_faData[z4+g_iBondACFDepth] = bond->m_faData[z4];
6911
for (z4=0;z4<g_iBondACFDepth;z4++)
6912
bond->m_faData[z4] = bond->m_faData[2*g_iBondACFDepth-z4-1];
6915
g_iBondACFDepth *= 2;
6917
if (g_bBondACFWindow)
6919
mprintf(" Applying Window Function...\n");
6920
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6922
m = (CMolecule*)g_oaMolecules[z0];
6923
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6924
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6926
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6927
for (z4=0;z4<g_iBondACFDepth;z4++)
6928
bond->m_faData[z4] *= (float)pow(sin(z4*Pi/(bond->m_faData.GetSize()-1)),2);
6932
if (g_bBondACFNormalize)
6934
mprintf(" Normalizing bond ACFs...\n");
6935
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6937
m = (CMolecule*)g_oaMolecules[z0];
6938
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6939
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6941
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6943
for (z4=0;z4<g_iBondACFDepth;z4++)
6944
if (tf < bond->m_faData[z4])
6945
tf = bond->m_faData[z4];
6946
for (z4=0;z4<g_iBondACFDepth;z4++)
6947
bond->m_faData[z4] /= (float)tf;
6951
mprintf(" Writing \"bondacf_ac_merged.agr\"...\n");
6953
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6954
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6956
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
6957
gc->SetRangeY(-200,200);
6959
gc->SetLabelX("Time [ps]");
6960
gc->SetLabelY("Sum ACF(Bond length change rate)");
6961
gc->CurrentGraph()->m_bLegend = true;
6962
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6964
m = (CMolecule*)g_oaMolecules[z0];
6965
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6966
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6968
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6970
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
6971
gc->SetDatasetName(buf);
6972
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
6973
for (z4=0;z4<g_iBondACFDepth;z4++)
6974
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6977
gc->WriteAgr("bondacf_ac_merged.agr",false);
6979
mprintf(" Applying Fourier Transformation...\n");
6981
try { fft = new CFFT(); } catch(...) { fft = NULL; }
6982
if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6984
fft->PrepareFFT_C2C(g_iBondACFDepth);
6986
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
6988
m = (CMolecule*)g_oaMolecules[z0];
6989
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
6990
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
6992
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
6993
for (z4=0;z4<g_iBondACFDepth;z4++)
6995
fft->m_pInput[z4*2] = bond->m_faData[z4];
6996
fft->m_pInput[z4*2+1] = 0;
6999
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7001
bond->m_faData[z4] = (float)(pow(fft->m_pOutput[z4*2],2) + pow(fft->m_pOutput[z4*2+1],2)) / g_iBondACFDepth;
7002
if (bond->m_faData[z4] > tf3)
7003
tf3 = bond->m_faData[z4];
7008
mprintf(" Writing \"bond_spectrum.agr\"...\n");
7010
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7011
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7013
gc->SetRangeX(0,4000.0);
7014
gc->SetRangeY(0,tf3*1.1);
7016
gc->SetLabelX("Wave number [1/cm]");
7017
gc->SetLabelY("Intensity");
7018
gc->CurrentGraph()->m_bInvertXAxis = true;
7019
gc->CurrentGraph()->m_bLegend = true;
7020
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7022
m = (CMolecule*)g_oaMolecules[z0];
7023
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7024
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7026
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7028
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7029
gc->SetDatasetName(buf);
7030
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
7031
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7032
gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,bond->m_faData[z4]);
7035
gc->WriteAgr("bond_spectrum.agr",false);
7037
for (z5=1;z5<5;z5++)
7039
mprintf(" Smoothing spectrum, degree %d...\n",z5);
7040
mprintf(" Writing \"bond_spectrum_s%d.agr\"...\n",z5);
7042
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7043
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7045
gc->SetRangeX(0,4000.0);
7046
gc->SetRangeY(0,tf3*1.1);
7048
gc->SetLabelX("Wave number [1/cm]");
7049
gc->SetLabelY("Intensity");
7050
gc->CurrentGraph()->m_bInvertXAxis = true;
7051
gc->CurrentGraph()->m_bLegend = true;
7053
try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
7054
if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7056
gc2->SetRangeX(0,4000.0);
7057
gc2->SetRangeY(0,tf3*1.1);
7059
gc2->SetLabelX("Wave number [1/cm]");
7060
gc2->SetLabelY("Intensity");
7061
gc2->CurrentGraph()->m_bInvertXAxis = true;
7062
gc2->CurrentGraph()->m_bLegend = true;
7064
tempfa.SetSize(g_iBondACFDepth/2);
7065
tempfa2.SetSize(g_iBondACFDepth/2);
7067
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7070
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7072
m = (CMolecule*)g_oaMolecules[z0];
7073
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7074
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7076
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7078
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7082
for (z6=-z5;z6<=z5;z6++)
7084
if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
7086
tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
7087
tf2 += 1.0 / (pow((double)z6,2)+1.0);
7089
tempfa[z4] = (float)(tf / tf2);
7090
tempfa2[z4] += tempfa[z4];
7095
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7096
gc->SetDatasetName(buf);
7097
gc2->SetDatasetName(buf);
7098
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7099
((CGraceDataset*)gc2->CurrentGraph()->m_oaDatasets[gc2->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7101
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7102
gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa[z4]);
7104
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7105
gc2->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa2[z4]);
7109
sprintf(buf,"bond_spectrum_s%d.agr",z5);
7110
gc->WriteAgr(buf,false);
7113
mprintf(" Writing \"bond_spectrum_cumulative_s%d.agr\"...\n",z5);
7114
sprintf(buf,"bond_spectrum_cumulative_s%d.agr",z5);
7115
gc2->WriteAgr(buf,false);
7123
mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
7126
#ifdef TARGET_WINDOWS
7127
sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7129
sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7131
mprintf("Saving TDO PyMol script as %s.\n",buf);
7132
tfi = OpenFileWrite(buf,true);
7133
#ifdef TARGET_WINDOWS
7134
mfprintf(tfi,"pymolwin ");
7136
mfprintf(tfi,"pymol ");
7138
for (z=0;z<g_laTDOSteps.GetSize();z++)
7139
mfprintf(tfi,"tdo_%s_%d_%06d%s.xyz ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],multibuf);
7140
mfprintf(tfi,"-d \"set sphere_scale,0.25\" ");
7141
mfprintf(tfi,"-d \"set stick_radius,0.17\" ");
7142
mfprintf(tfi,"-d \"set ray_trace_mode,1\" ");
7143
mfprintf(tfi,"-d \"set fog,0\" ");
7144
mfprintf(tfi,"-d \"set ray_trace_fog,0\" ");
7145
mfprintf(tfi,"-d \"set bg_rgb,(1,1,1)\" ");
7146
mfprintf(tfi,"-d \"set ray_shadow,0\" ");
7147
mfprintf(tfi,"-d \"set ray_shadows,0\" ");
7148
mfprintf(tfi,"-d \"set ray_interior_shadows,0\" ");
7149
mfprintf(tfi,"-d \"show sticks; show spheres\" ");
7151
for (z=0;z<g_laTDOSteps.GetSize();z++)
7153
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7155
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7157
mfprintf(tfi,"-d \"set_color mol_%s_%d, [%d,%d,%d]\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CAtom*)g_oaAtoms[z2])->m_pElement->ColorR((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorG((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorB((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching));
7160
for (z=0;z<g_laTDOSteps.GetSize();z++)
7162
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7164
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7166
mfprintf(tfi,"-d \"color mol_%s_%d, tdo_%s_%d_%06d and name %s\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],((CAtom*)g_oaAtoms[z2])->m_sName);
7172
sprintf(buf,"chmod 755 tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7173
mprintf("Executing \"%s\"...\n",buf);
7181
mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
7184
if (g_bSaveJustTraj)
7186
fclose(g_fSaveJustTraj);
7187
/* strcpy(buf,g_sInputTraj);
7188
p = strrchr(buf,'.');
7190
strcat(buf,multibuf);
7191
strcat(buf,".out.xyz");*/
7192
// mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
7195
if (g_bIRSpec && g_bGlobalIR)
7197
mprintf(WHITE,"\n*** Global IR Spectrum\n");
7198
g_pGlobalIR->Finish(multibuf);
7201
if (g_bVACF && g_bGlobalVACF)
7203
mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
7204
if (g_pGlobalVACF->m_bDerivative)
7206
mprintf(" Deriving velocities...\n");
7207
mprintf(WHITE," [");
7208
tfs = g_iGesAtomCount/60.0;
7210
for (z2=0;z2<g_iGesAtomCount;z2++)
7212
if (fmod(z2,tfs) < 1)
7215
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7218
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7220
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
7221
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
7225
mprintf(WHITE,"]\n");
7227
if (g_bVACFCacheMode)
7229
tfs = g_iGesAtomCount/60.0;
7232
mprintf(" Autocorrelating cached vectors...\n");
7233
mprintf(WHITE," [");
7234
/* fft = new CFFT();
7235
fft->PrepareFFT_C2C(2*g_iSteps);
7237
fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
7239
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7240
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7242
ptfa2->SetSize(g_iSteps);
7244
try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
7245
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7247
ptfa3->SetSize(g_iSteps);
7249
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7250
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7252
ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
7254
for (z2=0;z2<g_iGesAtomCount;z2++)
7256
if (fmod(z2,tfs) < 1.0)
7259
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7262
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7264
if (g_pGlobalVACF->m_bMassWeight)
7265
tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
7269
for (z3=0;z3<(int)g_iSteps;z3++)
7270
(*ptfa2)[z3] = (*ptfa)[z3*3];
7271
ac->AutoCorrelate(ptfa2,ptfa3);
7272
// mprintf("Global Atom %d X: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7273
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7274
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7277
for (z3=0;z3<(int)g_iSteps;z3++)
7278
(*ptfa2)[z3] = (*ptfa)[z3*3+1];
7279
ac->AutoCorrelate(ptfa2,ptfa3);
7280
// mprintf("Global Atom %d Y: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7281
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7282
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7285
for (z3=0;z3<(int)g_iSteps;z3++)
7286
(*ptfa2)[z3] = (*ptfa)[z3*3+2];
7287
ac->AutoCorrelate(ptfa2,ptfa3);
7288
// mprintf("Global Atom %d Z: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7289
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7290
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7301
mprintf(" Autocorrelating cached vectors...\n");
7302
mprintf(WHITE," [");
7303
for (z2=0;z2<g_iGesAtomCount;z2++)
7305
if (fmod(z2,tfs) < 1.0)
7307
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
7308
for (z3=0;z3<g_pGlobalVACF->m_iSize;z3+=g_pGlobalVACF->m_iStride) // Das ist das Tau
7311
for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
7312
tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
7313
g_pGlobalVACF->m_pData[z3/g_pGlobalVACF->m_iStride] += tf/(g_iSteps-z3);
7317
mprintf(WHITE,"]\n");
7318
mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
7319
g_pGlobalVACF->MultiplyCached(1.0/g_iGesAtomCount);
7321
if (g_pGlobalVACF->m_bDecomposeModes)
7323
tfs = g_iGesAtomCount*g_iGesAtomCount*3/60.0;
7325
mprintf(" Allocating cross-correlation matrix (%s)...\n",FormatBytes((double)sizeof(float)*g_pGlobalVACF->m_iSize*g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3));
7327
g_pGlobalVACF->m_oaCCRMatrix.SetMaxSize(g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);
7328
for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)
7330
for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)
7332
// mprintf("X: %X\n",g_pGlobalVACF);
7333
// mprintf("%d - %d -->\n",z2,z3);
7334
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
7335
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7338
ptfa->SetSize(g_pGlobalVACF->m_iSize);
7340
// mprintf("X2: %X\n",g_pGlobalVACF);
7341
g_pGlobalVACF->m_oaCCRMatrix.Add(ptfa);
7342
// mprintf("%d - %d <--\n",z2,z3);
7346
mprintf(" Computing %d cross-correlations...\n",g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);
7347
mprintf(WHITE," [");
7349
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7350
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7352
ptfa2->SetSize(g_iSteps);
7354
try { ptfa2b = new CxFloatArray("main():ptfa2b"); } catch(...) { ptfa2b = NULL; }
7355
if (ptfa2b == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7357
ptfa2b->SetSize(g_iSteps);
7359
try { ccr = new CCrossCorrelation(); } catch(...) { ccr = NULL; }
7360
if (ccr == NULL) NewException((double)sizeof(CCrossCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7362
ccr->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
7366
for (z2=0;z2<g_iGesAtomCount;z2++)
7368
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7371
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7373
for (z2b=0;z2b<3;z2b++)
7376
for (z3=0;z3<g_iGesAtomCount;z3++)
7378
if (fmod(z2*g_iGesAtomCount*3+z2b*g_iGesAtomCount+z3,tfs) < 1.0)
7381
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z3] > 1000))
7384
ptfab = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti2];
7386
if (g_pGlobalVACF->m_bMassWeight)
7387
tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
7390
for (z3b=0;z3b<3;z3b++)
7392
for (z4=0;z4<(int)g_iSteps;z4++)
7394
(*ptfa2)[z4] = (*ptfa)[z4*3+z2b];
7395
(*ptfa2b)[z4] = (*ptfab)[z4*3+z3b];
7397
ccr->CrossCorrelate(ptfa2,ptfa2b,(CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b]);
7398
// mprintf("z2=%d, z2b=%d, z3=%d, z3b=%d, I=%d\n",z2,z2b,z3,z3b,ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b);
7410
mprintf(WHITE,"]\n");
7412
/* for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)
7414
for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)
7415
mprintf("%6G ",((CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[z2*g_pGlobalVACF->m_iParticles*3+z3])->GetAt(0));
7419
Interface_DecomposeModes(g_pGlobalVACF->m_iParticles*3, &g_pGlobalVACF->m_oaCCRMatrix);
7421
} // END IF m_bDecomposeModes
7423
} else g_pGlobalVACF->Multiply(1.0/g_iGesAtomCount);
7425
mprintf(" Saving global VACF as acf_global%s.csv ...\n",multibuf);
7426
g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
7428
if (g_pGlobalVACF->m_iMirror != 0)
7430
mprintf(" Mirroring global VACF...\n");
7431
g_pGlobalVACF->Mirror(g_pGlobalVACF->m_iMirror);
7432
mprintf(" Saving mirrored global VACF as acf_global.m%s.csv ...\n",multibuf);
7433
g_pGlobalVACF->WriteACF("acf_global.m",multibuf,".csv");
7436
if (g_pGlobalVACF->m_bWindowFunction)
7438
mprintf(" Applying window function...\n");
7439
g_pGlobalVACF->Window();
7440
mprintf(" Saving windowed global VACF as acf_global.w%s.csv ...\n",multibuf);
7441
g_pGlobalVACF->WriteACF("acf_global.w",multibuf,".csv");
7444
if (g_pGlobalVACF->m_bSpectrum)
7446
mprintf(" Performing Fourier transformation...\n");
7448
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
7449
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7451
g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
7452
g_pGlobalVACF->Transform(g_pFFT);
7454
g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
7455
if (g_pGlobalVACF->m_bACF_DB)
7457
mprintf(" Normalising spectrum to decibel...\n");
7458
g_pGlobalVACF->m_pSpectrum->MakeDB();
7461
mprintf(" Normalising integral of spectrum...\n");
7462
g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
7464
if (g_pGlobalVACF->m_bWindowFunction)
7466
mprintf(" Saving spectrum as power_global_w%s.csv ...\n",multibuf);
7467
g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
7470
mprintf(" Saving spectrum as power_global%s.csv ...\n",multibuf);
7471
g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
7479
for (z=0;z<g_iVFCorrCount;z++)
7480
fclose(g_fVFCorr[z]);
7486
for (z=0;z<g_oaObserv.GetSize();z++)
7488
o = (CObservation*)g_oaObserv[z];
7489
mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
7491
if (o->m_pConditions != NULL)
7493
if (o->m_bSecondShowMol)
7494
mprintf(WHITE,"\n#### Condition between RM and 1st OM ####\n");
7496
o->m_pConditions->PrintData();
7497
if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
7498
o->m_pConditions->PrintTable();
7501
if ((o->m_bSecondShowMol) && (o->m_pConditionsOM2 != NULL))
7503
mprintf(WHITE,"\n\n#### Condition between RM and 2nd OM ####\n");
7504
o->m_pConditionsOM2->PrintData();
7505
if (o->m_pConditionsOM2->m_oaConditionSubGroups.GetSize()==2)
7506
o->m_pConditionsOM2->PrintTable();
7511
mprintf(WHITE,"* Aggregation Functions\n");
7512
if ((g_iMaxStep > 0) && (((int)g_iSteps*g_iStride) >= g_iMaxStep))
7513
g_pTempTimestep->CopyFrom(GetTimeStep(0)); // Max. Schrittzahl
7514
else g_pTempTimestep->CopyFrom(GetTimeStep(1)); // End Of File
7515
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
7517
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
7518
mprintf(WHITE,"\n > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
7520
o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
7522
sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
7523
dacfsub->m_pCondition->PrintData(buf);
7525
mprintf(WHITE,"Neighbour Count Distribution\n");
7526
mprintf(" %.0f Bin entries have been made.\n",dacfsub->m_pNDF->m_fBinEntries);
7527
sprintf(buf,"ncd_%s%s.csv",dacfsub->m_sName,multibuf);
7528
mprintf(" Writing Neighbor Count Distribution File \"%s\"...\n",buf);
7529
dacfsub->m_pNDF->Write_Int("",buf,"");
7533
mprintf(WHITE,"\nDimer Displacement Distribution Function\n");
7534
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDDisp->m_fBinEntries,dacfsub->m_pDDisp->m_fSkipEntries,dacfsub->m_pDDisp->m_fBinEntries+dacfsub->m_pDDisp->m_fSkipEntries);
7535
sprintf(buf,"ddisp_%s%s.csv",dacfsub->m_sName,multibuf);
7536
mprintf(" Saving DDisp File as \"%s\"...\n",buf);
7537
dacfsub->m_pDDisp->Write("",buf,"",false);
7538
sprintf(buf,"ddisp_%s%s.agr",dacfsub->m_sName,multibuf);
7539
mprintf(" Saving DDisp Agr File as \"%s\"...\n",buf);
7540
dacfsub->m_pDDisp->WriteAgr("",buf,"","",false);
7545
mprintf(WHITE,"\nDimer Existence Autocorrelation Function\n");
7546
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDACF->m_fBinEntries,dacfsub->m_pDACF->m_fSkipEntries,dacfsub->m_pDACF->m_fBinEntries+dacfsub->m_pDACF->m_fSkipEntries);
7548
if (dacfsub->m_bBorderMode)
7550
mprintf(" *** New Border Mode ***\n");
7551
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7552
dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps-z2;
7555
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7556
dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps;
7559
if (dacfsub->m_bNewMode)
7561
mprintf(" *** New Mode Processing ***\n");
7562
mprintf(WHITE," [");
7563
tfs = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize() * ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize() / 60.0;
7564
ptfa = new CxFloatArray();
7565
ptfa2 = new CxFloatArray();
7566
ac = new CAutoCorrelation();
7567
ac->Init(g_iSteps,o->m_pDACF->m_iDACFRes,true);
7569
ptfa->SetSize(g_iSteps);
7570
ptfa2->SetSize(o->m_pDACF->m_iDACFRes);
7572
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7573
dacfsub->m_pDACF->m_pBin[z2] = 0;
7575
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
7577
for (z3=0;z3<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z3++)
7579
if (fmod(z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3,tfs) < 1.0)
7582
for (z5=0;z5<(int)g_iSteps;z5++)
7585
for (z4=0;z4<dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize();z4+=2)
7587
for (z5=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4);z5<=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4+1);z5++)
7591
// if (dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize() != 0)
7592
// mprintf("\n%d-%d: %d ",z2,z3,dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize()/2);
7594
ac->AutoCorrelate(ptfa,ptfa2);
7596
/* if ((z2==0) && (z3==28))
7600
sprintf(buf,"condfunc_%d_%d.csv",z2,z3);
7601
tfia = fopen(buf,"wt");
7602
for (z4=0;z4<(int)g_iSteps;z4++)
7603
fprintf(tfia,"%d; %f\n",z4,(*ptfa)[z4]);
7606
sprintf(buf,"condacf_%d_%d.csv",z2,z3);
7607
tfia = fopen(buf,"wt");
7608
for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7609
fprintf(tfia,"%d; %f\n",z4,(*ptfa2)[z4]);
7613
for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7614
dacfsub->m_pDACF->m_pBin[z4] += (*ptfa2)[z4];
7617
mprintf(WHITE,"]\n");
7620
if (dacfsub->m_bCorrectEq)
7622
if (dacfsub->m_iRefMol == dacfsub->m_iShowMol)
7624
tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7625
mprintf(" Ensemble Average is %.6f%c.\n",tf,'%');
7627
tf = 1.0/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7628
dacfsub->m_pDACF->MultiplyBin(tf);
7630
tf = dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7632
mprintf(" Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7633
dacfsub->m_pDACF->SubtractBin(tf);
7636
tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7637
mprintf(" Ensemble Average is %.6f%c.\n",tf,'%');
7639
tf = 1.0/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7640
dacfsub->m_pDACF->MultiplyBin(tf);
7642
tf = dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7644
mprintf(" Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7645
dacfsub->m_pDACF->SubtractBin(tf);
7649
if (dacfsub->m_pDACF->m_pBin[0] != 0)
7651
mprintf(" Normalizing DACF with factor 1/%G ...\n",dacfsub->m_pDACF->m_pBin[0]);
7652
dacfsub->m_pDACF->MultiplyBin(1.0/dacfsub->m_pDACF->m_pBin[0]);
7653
} else mprintf(" Not normalizing this DACF, first entry is 0.\n");
7655
if (o->m_pDACF->m_bFitDACF)
7659
try { dacfsub->m_pDACF->m_pParameters = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pParameters = NULL; }
7660
if (dacfsub->m_pDACF->m_pParameters == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7662
try { dacfsub->m_pDACF->m_pFitIntegral = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pFitIntegral = NULL; }
7663
if (dacfsub->m_pDACF->m_pFitIntegral == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7665
try { dacfsub->m_pDACF->m_pCorrCoeff = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pCorrCoeff = NULL; }
7666
if (dacfsub->m_pDACF->m_pCorrCoeff == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7668
try { dacfsub->m_pDACF->m_pAdditionalSets = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSets = NULL; }
7669
if (dacfsub->m_pDACF->m_pAdditionalSets == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7671
try { dacfsub->m_pDACF->m_pAdditionalSetLabels = new char*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSetLabels = NULL; }
7672
if (dacfsub->m_pDACF->m_pAdditionalSetLabels == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7674
dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
7676
for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7678
dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
7679
dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
7682
mprintf(YELLOW," Please note: ");
7683
mprintf("The lifetime is two times the integral value!\n\n");
7685
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7686
dacfsub->m_pDACF->Fit_PolyExp(z2,5000);
7688
if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
7690
mprintf(YELLOW," DACF fit integral overview:\n");
7691
mprintf(" (use the row with the highest R value)\n\n");
7692
mprintf(WHITE," Degree R Integral [ps] Lifetime [ps]\n");
7693
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7695
if (dacfsub->m_pDACF->m_pFitIntegral[z2] >= 0)
7696
mprintf(" %d %10.8f %-10G %-10G\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2],dacfsub->m_pDACF->m_pFitIntegral[z2],dacfsub->m_pDACF->m_pFitIntegral[z2]*2.0);
7697
else mprintf(" %d %10.8f - -\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2]);
7702
sprintf(buf,"dacf_%s%s.csv",dacfsub->m_sName,multibuf);
7703
mprintf(" Saving DACF File as \"%s\"...\n",buf);
7704
dacfsub->m_pDACF->Write("",buf,"",false);
7705
sprintf(buf,"dacf_%s%s.agr",dacfsub->m_sName,multibuf);
7706
mprintf(" Saving DACF Agr File as \"%s\"...\n",buf);
7707
dacfsub->m_pDACF->WriteAgr("",buf,"","",false);
7709
if (o->m_pDACF->m_bLifetimeSpectrum)
7711
for (z2=0;z2<o->m_pDACF->m_oaLTSpectra.GetSize();z2++)
7713
mprintf(WHITE,"\n * Lifetime Spectrum %d\n\n",z2+1);
7714
((CLTSpec*)o->m_pDACF->m_oaLTSpectra[z2])->ComputeSpectrum("dacf",dacfsub->m_sName,multibuf,"",dacfsub->m_pDACF);
7716
/* sprintf(buf,"dacf_lspectrum_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7717
mprintf(" Saving DACF lifetime spectrum as \"%s\"...\n",buf);
7718
dacfsub->m_pDACF->Fit_ExpSpectrum(o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_fLSpecMinExp,o->m_pDACF->m_fLSpecMaxExp,buf,o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iMaxLMIter,false,true);
7720
sprintf(buf,"dacf_lsfit_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7721
mprintf(" Saving DACF lifetime spectrum fit as \"%s\"...\n",buf);
7722
dacfsub->m_pDACF->Write("",buf,"",false);*/
7728
mprintf(WHITE,"\nDimer Lifetime Distribution Function\n");
7729
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDF->m_fBinEntries,dacfsub->m_pDLDF->m_fSkipEntries,dacfsub->m_pDLDF->m_fBinEntries+dacfsub->m_pDLDF->m_fSkipEntries);
7730
sprintf(buf,"dldf_%s%s.csv",dacfsub->m_sName,multibuf);
7731
mprintf(" Saving DLDF File as \"%s\"...\n",buf);
7732
dacfsub->m_pDLDF->Write("",buf,"",false);
7733
sprintf(buf,"dldf_%s%s.agr",dacfsub->m_sName,multibuf);
7734
mprintf(" Saving DLDF Agr File as \"%s\"...\n",buf);
7735
dacfsub->m_pDLDF->WriteAgr("",buf,"","",false);
7740
mprintf(WHITE,"\nDimer Lifetime Displacement Distribution Function\n");
7741
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDisp->m_fBinEntries,dacfsub->m_pDLDisp->m_fSkipEntries,dacfsub->m_pDLDisp->m_fBinEntries+dacfsub->m_pDLDisp->m_fSkipEntries);
7742
mprintf(" Normalizing bin integral to 1000000...\n");
7743
dacfsub->m_pDLDisp->NormalizeBinIntegral(1000000.0);
7744
sprintf(buf,"dldisp_%s%s",dacfsub->m_sName,multibuf);
7745
mprintf(" Saving DLDisp triples as \"%s_triples.csv\"...\n",buf);
7746
dacfsub->m_pDLDisp->Write("",buf,"_triples.csv");
7747
mprintf(" Saving DLDisp matrix as \"%s_matrix.csv\"...\n",buf);
7748
dacfsub->m_pDLDisp->WriteCSV("",buf,"_matrix.csv");
7749
mprintf(" Saving DLDisp Mathematica Notebook \"%s.nb\"...\n",buf);
7750
dacfsub->m_pDLDisp->WriteMathematicaNb("",buf,".nb",false);
7751
mprintf(" Saving DLDisp Gnuplot Input \"%s.gp\"...\n",buf);
7752
dacfsub->m_pDLDisp->WriteGnuplotInput("",buf,"",false);
7757
mprintf(WHITE,"\nPair Mean Square Displacement\n");
7758
mprintf(" %.0f Bin entries have been made.\n",dacfsub->m_pPairMSD->m_fBinEntries);
7759
mprintf(" Calculating average values...\n");
7760
dacfsub->m_pPairMSD->BuildAverage();
7761
sprintf(buf,"pairmsd_%s%s",dacfsub->m_sName,multibuf);
7762
mprintf(" Saving Pair MSD as \"%s.csv\"...\n",buf);
7763
dacfsub->m_pPairMSD->Write("",buf,".csv");
7766
if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
7768
mprintf(WHITE,"\n*** Condition Grid fitting overview:\n\n");
7769
mprintf(" Degree R(min) R(avg) R(max)\n");
7770
o->m_pDACF->CalcGridFitParms();
7771
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7772
mprintf(" %d %10.8f %10.8f %10.8f\n",z2,o->m_pDACF->m_pFitRMin[z2],o->m_pDACF->m_pFitRAvg[z2],o->m_pDACF->m_pFitRMax[z2]);
7775
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7777
if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
7779
if (o->m_pDACF->m_bGridCon)
7781
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7782
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7784
o->m_pDACF->CreateGridFit2DF(temp2df,z2,false);
7785
sprintf(buf,"dacf_gridint_%s%s_%dexp",o->m_pDACF->m_sName,multibuf,z2);
7786
mprintf(" Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7787
temp2df->Write("",buf,"_triples.csv");
7788
mprintf(" Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7789
temp2df->WriteCSV("",buf,"_matrix.csv");
7790
mprintf(" Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7791
temp2df->WriteMathematicaNb("",buf,".nb",false);
7792
mprintf(" Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7793
temp2df->WriteGnuplotInput("",buf,"",false);
7796
if (o->m_pDACF->m_bGridInt)
7798
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7799
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7801
o->m_pDACF->CreateGridFit2DF(temp2df,z2,true);
7802
sprintf(buf,"dacf_gridint_%s%s_%dexp_int%.2f",o->m_pDACF->m_sName,multibuf,z2,o->m_pDACF->m_fGridIntGap);
7803
mprintf(" Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7804
temp2df->Write("",buf,"_triples.csv");
7805
mprintf(" Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7806
temp2df->WriteCSV("",buf,"_matrix.csv");
7807
mprintf(" Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7808
temp2df->WriteMathematicaNb("",buf,".nb",false);
7809
mprintf(" Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7810
temp2df->WriteGnuplotInput("",buf,"",false);
7815
if (o->m_pDACF->m_bGridCon)
7817
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
7818
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7820
// o->m_pDACF->CreateGridFitDF(tdf,z2,false);
7827
} // END IF AGGREGATION
7831
mprintf(WHITE,"* Density Distribution Function\n");
7832
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDensityDF->m_pDensDF->m_fBinEntries,o->m_pDensityDF->m_pDensDF->m_fSkipEntries,ZeroDivide(o->m_pDensityDF->m_pDensDF->m_fSkipEntries,o->m_pDensityDF->m_pDensDF->m_fBinEntries+o->m_pDensityDF->m_pDensDF->m_fSkipEntries)*100.0);
7834
mprintf(" Correcting radial distribution...\n");
7835
o->m_pDensityDF->m_pDensDF->CorrectRadialDist();
7837
mprintf(" Scaling values to match final density...\n");
7839
if (o->m_pDensityDF->m_bDensityMass)
7841
o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7842
o->m_pDensityDF->m_pDensDF->MultiplyBin(1.66054e6 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7845
o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7846
o->m_pDensityDF->m_pDensDF->MultiplyBin(1.0e9 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
7849
/* if (g_bDoubleBox)
7851
o->m_pDensityDF->m_pDensDF->MultiplyBin(g_iDoubleBoxFactor);
7852
o->m_pDensityDF->m_pDensDF->MultiplyIntegral(g_iDoubleBoxFactor);
7855
sprintf(buf,"density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
7856
mprintf(" Saving Density DF as \"%s\"...\n",buf);
7857
o->m_pDensityDF->m_pDensDF->Write("",buf,"",true);
7858
sprintf(buf,"density_df_%s%s.agr",o->m_pDensityDF->m_sName,multibuf);
7859
mprintf(" Saving Density DF AGR file as \"%s\"...\n",buf);
7860
o->m_pDensityDF->m_pDensDF->WriteAgr("",buf,"",o->m_pDensityDF->m_sName,true);
7861
if (o->m_pDensityDF->m_iHistogramRes != 0)
7863
mprintf(" Calculating Histogram...\n");
7864
o->m_pDensityDF->m_pDensDF->CalcHistogram();
7865
sprintf(buf,"his_density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
7866
mprintf(" Saving Histogram as \"%s\"...\n",buf);
7867
o->m_pDensityDF->m_pDensDF->WriteHistogram("",buf,"");
7873
mprintf(WHITE,"* Vector Reorientation Dynamics\n");
7874
o->m_pRDyn->Finish(multibuf);
7879
mprintf(WHITE,"* IR Spectrum\n");
7880
o->m_pIRSpec->Finish(multibuf);
7885
mprintf(WHITE,"* Velocity Autocorrelation Function\n");
7886
if (o->m_pVACF->m_bDerivative)
7888
mprintf(" Deriving velocities...\n");
7889
mprintf(WHITE," [");
7890
tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
7891
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
7893
if (fmod(z2,tfs) < 1)
7895
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
7897
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
7898
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
7900
mprintf(WHITE,"]\n");
7902
if (g_bVACFCacheMode)
7904
mprintf(" Autocorrelating cached vectors...\n");
7905
mprintf(WHITE," [");
7906
tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
7908
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7909
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7911
ptfa2->SetSize(g_iSteps);
7913
try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
7914
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7916
ptfa3->SetSize(g_iSteps);
7918
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7919
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7921
ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
7923
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
7925
for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
7927
if (o->m_pVACF->m_bMassWeight)
7928
tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
7930
for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
7932
if (fmod(ti,tfs) < 1)
7934
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
7937
for (z5=0;z5<(int)g_iSteps;z5++)
7938
(*ptfa2)[z5] = (*ptfa)[z5*3];
7939
ac->AutoCorrelate(ptfa2,ptfa3);
7940
// mprintf("Lokal Atom %d X: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7941
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7942
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7945
for (z5=0;z5<(int)g_iSteps;z5++)
7946
(*ptfa2)[z5] = (*ptfa)[z5*3+1];
7947
ac->AutoCorrelate(ptfa2,ptfa3);
7948
// mprintf("Lokal Atom %d Y: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7949
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7950
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7953
for (z5=0;z5<(int)g_iSteps;z5++)
7954
(*ptfa2)[z5] = (*ptfa)[z5*3+2];
7955
ac->AutoCorrelate(ptfa2,ptfa3);
7956
// mprintf("Lokal Atom %d Z: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
7957
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
7958
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
7970
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
7972
if (fmod(z2,tfs) < 1)
7974
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
7975
for (z3=0;z3<o->m_pVACF->m_iSize;z3+=o->m_pVACF->m_iStride) // Das ist das Tau
7978
for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
7979
tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
7980
o->m_pVACF->m_pData[z3/o->m_pVACF->m_iStride] += tf/(g_iSteps-z3);
7984
mprintf(WHITE,"]\n");
7985
// mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
7986
mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",ti,g_iSteps,o->m_pVACF->m_iSize);
7987
o->m_pVACF->MultiplyCached(1.0/g_iGesAtomCount);
7988
} else o->m_pVACF->Multiply(1.0/g_iGesAtomCount);
7989
/* sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
7990
mprintf(" Saving ACF as %s ...\n",buf);
7991
o->m_pVACF->WriteACF("",buf,"");*/
7993
sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
7994
mprintf(" Saving ACF as %s ...\n",buf);
7995
o->m_pVACF->WriteACF("",buf,"");
7997
if (o->m_pVACF->m_iMirror != 0)
7999
mprintf(" Mirroring ACF...\n");
8000
o->m_pVACF->Mirror(o->m_pVACF->m_iMirror);
8001
sprintf(buf,"acf_%s%s.m.csv",o->m_pVACF->m_sName,multibuf);
8002
mprintf(" Saving mirrored ACF as %s ...\n",buf);
8003
o->m_pVACF->WriteACF("",buf,"");
8006
if (o->m_pVACF->m_bWindowFunction)
8008
mprintf(" Applying window function to ACF...\n");
8009
o->m_pVACF->Window();
8010
sprintf(buf,"acf_%s%s.w.csv",o->m_pVACF->m_sName,multibuf);
8011
mprintf(" Saving windowed ACF as %s ...\n",buf);
8012
o->m_pVACF->WriteACF("",buf,"");
8015
if (o->m_pVACF->m_bSpectrum)
8017
mprintf(" Performing fourier transformation...\n");
8019
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
8020
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8022
/* if (o->m_pVACF->m_bMirror)
8023
g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
8024
else */g_pFFT->PrepareFFT_C2C(o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding);
8025
o->m_pVACF->Transform(g_pFFT);
8027
o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
8028
if (o->m_pVACF->m_bACF_DB)
8030
mprintf(" Normalising spectrum to decibel...\n");
8031
o->m_pVACF->m_pSpectrum->MakeDB();
8034
mprintf(" Normalising integral of spectrum...\n");
8035
o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
8037
/* if (o->m_pVACF->m_bWindowFunction)
8039
sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
8040
mprintf(" Saving spectrum as %s ...\n",buf);
8041
o->m_pVACF->m_pSpectrum->Write("",buf,"");
8044
sprintf(buf,"power_%s%s.csv",o->m_pVACF->m_sName,multibuf);
8045
mprintf(" Saving spectrum as %s ...\n",buf);
8046
o->m_pVACF->m_pSpectrum->Write("",buf,"");
8053
mprintf(WHITE,"* Mean Square Displacement\n");
8054
if (g_bMSDCacheMode)
8056
mprintf(" Autocorrelating cached vectors...\n");
8057
// mprintf(WHITE," [");
8058
// tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms)/60.0;
8059
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
8061
// if (fmod(z2,tfs) < 1.0)
8062
// mprintf(WHITE,"#");
8063
mprintf(" %4d/%d: [",z2+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms);
8064
tfs = o->m_pMSD->m_iResolution/50.0;
8065
ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[z2];
8066
for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8068
if (fmod(z3,tfs) < 1.0)
8072
if (o->m_pMSD->m_bTakeX && o->m_pMSD->m_bTakeY && o->m_pMSD->m_bTakeZ)
8074
for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8075
tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2) + pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2) + pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8078
for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8080
if (o->m_pMSD->m_bTakeX)
8081
tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2);
8082
if (o->m_pMSD->m_bTakeY)
8083
tf += pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2);
8084
if (o->m_pMSD->m_bTakeZ)
8085
tf += pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8089
o->m_pMSD->m_pMSD->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8090
o->m_pMSD->m_pMSD->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8091
if (o->m_pMSD->m_bSplit)
8093
o->m_pMSD->m_pSplitMSD[z2]->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8094
o->m_pMSD->m_pSplitMSD[z2]->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8099
for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8100
o->m_pMSD->m_pMSD->m_pBin[z3/o->m_pMSD->m_iStride] /= ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;
8101
// mprintf(WHITE,"]\n");
8104
o->m_pMSD->m_pMSD->BuildAverage();
8106
mprintf(" %.0f bin entries.\n",o->m_pMSD->m_pMSD->m_fBinEntries);
8107
o->m_pMSD->m_pMSD->CalcDeriv(1.0f);
8108
sprintf(buf,"msd_%s%s.csv",o->m_pMSD->m_sName,multibuf);
8109
mprintf(" Saving result as %s ...\n",buf);
8110
if (o->m_pMSD->m_bSplit)
8112
o->m_pMSD->WriteSplit(buf);
8113
} else o->m_pMSD->m_pMSD->Write("",buf,"");
8114
mprintf(WHITE,"\n Performing linear regression on interval %.2f - %.2f ps...\n",o->m_pMSD->m_pMSD->m_fMinVal+0.5*(o->m_pMSD->m_pMSD->m_fMaxVal-o->m_pMSD->m_pMSD->m_fMinVal),o->m_pMSD->m_pMSD->m_fMaxVal);
8115
o->m_pMSD->m_pMSD->LinReg(o->m_pMSD->m_pMSD->m_iResolution/2,o->m_pMSD->m_pMSD->m_iResolution-1,&c0,&c1,&r);
8116
mprintf(" MSD(t) = %.6f + %.6f * t (units: [MSD] = pm^2, [t] = ps).\n",c0,c1);
8117
mprintf(" R = %.6f\n",r);
8119
if (o->m_pMSD->m_bTakeX)
8121
if (o->m_pMSD->m_bTakeY)
8123
if (o->m_pMSD->m_bTakeZ)
8126
mprintf(" Please note: Dimensionality of the system is %d here.\n",ti);
8127
mprintf(" Diffusion coefficient D = %.6f pm^2/ps = %G m^2/s.\n",c1/2.0/ti,c1/2.0e12/ti);
8128
mprintf(" (assuming <x^2> = %d * D * t)\n\n",2*ti);
8133
mprintf(WHITE,"* Neighborhood Analysis\n");
8134
mprintf(" %.0f bin entries.\n",o->m_pNbAnalysis->m_fBinEntries);
8135
/* for (z2=0;z2<o->m_pNbAnalysis->m_iMaxNbCount-o->m_pNbAnalysis->m_iMinNbCount;z2++)
8136
mprintf(" - %d: %.0f bin entries, %.0f skipped.\n",z2+1,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fBinEntries,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fSkipEntries);
8139
try { pf = new float[o->m_pNbAnalysis->m_iNbCount]; } catch(...) { pf = NULL; }
8140
if (pf == NULL) NewException((double)o->m_pNbAnalysis->m_iNbCount*sizeof(float),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8142
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8143
pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
8145
sprintf(buf,"nbh_ncf_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8146
mprintf(" Saving neighbor count function as %s ...\n",buf);
8147
a = OpenFileWrite(buf,true);
8148
mfprintf(a,"# distance [pm]; ");
8149
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8151
mfprintf(a,"%d neighbors",z3);
8152
if (z3 < o->m_pNbAnalysis->m_iNbCount)
8156
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8158
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8159
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8161
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaNPF[z3])->m_pBin[z2]/o->m_pNbAnalysis->m_pNPFCount->m_pBin[z2]*100.0f);
8162
if (z3 < o->m_pNbAnalysis->m_iNbCount)
8169
sprintf(buf,"nbh_dist_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8170
mprintf(" Calculating mean values and standard deviation...\n");
8171
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8172
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CalcMeanSD();
8173
mprintf(" Saving neighborhood distribution as %s ...\n",buf);
8174
a = OpenFileWrite(buf,true);
8175
mfprintf(a,"# distance [pm]; ");
8176
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8178
mfprintf(a,"%d. neighbor",z3+1);
8179
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8183
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8185
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8186
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8188
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8189
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8196
sprintf(buf,"nbh_minmaxavgsd_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8197
mprintf(" Saving neighborhood min/max/avg/sd as %s ...\n",buf);
8198
a = OpenFileWrite(buf,true);
8199
mfprintf(a,"# n-th neighbor; min. dist [pm]; max. dist [pm]; avg. dist [pm]; standard deviation [pm]\n");
8200
for (z2=0;z2<o->m_pNbAnalysis->m_iNbCount;z2++)
8202
mfprintf(a,"%d; %.4f; %.4f; %.4f; %.4f",z2+1,o->m_pNbAnalysis->m_pDistMin[z2],o->m_pNbAnalysis->m_pDistMax[z2],((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fMean,((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_fSD);
8207
sprintf(buf,"nbh_rdf_decomp_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8208
mprintf(" Saving neighborhood RDF decomposition as %s ...\n",buf);
8209
a = OpenFileWrite(buf,true);
8210
mfprintf(a,"# distance [pm]; ");
8211
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8213
mfprintf(a,"%d. neighbor",z3+1);
8214
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8218
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8220
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
8221
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
8223
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8225
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8227
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
8229
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8231
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8232
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8234
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8235
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8242
sprintf(buf,"nbh_rdf_decomp_cumulative_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8243
mprintf(" Saving cumulative neighborhood RDF decomposition as %s ...\n",buf);
8244
a = OpenFileWrite(buf,true);
8245
mfprintf(a,"# distance [pm]; ");
8246
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8248
mfprintf(a,"%d. neighbor",z3+1);
8249
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8253
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8254
for (z3=1;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8255
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2] += ((CDF*)o->m_pNbAnalysis->m_oaDF[z3-1])->m_pBin[z2];
8256
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8258
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8259
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8261
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8262
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8273
for (zr=0;zr<g_iCDFChannels;zr++)
8275
if (o->m_pDipDF[zr] == NULL)
8277
mprintf(WHITE,"* Dipole Distribution Function\n");
8278
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,ZeroDivide(o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries+o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries)*100.0);
8279
o->m_pDipDF[zr]->m_pDipoleDF->CalcMeanSD();
8280
mprintf(" Mean value: %10G Debye Standard deviation: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMean,o->m_pDipDF[zr]->m_pDipoleDF->m_fSD);
8281
mprintf(" Min. value: %10G Debye Max. value: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMinInput,o->m_pDipDF[zr]->m_pDipoleDF->m_fMaxInput);
8282
o->m_pDipDF[zr]->m_pDipoleDF->NormBinIntegral();
8283
sprintf(buf,"dipole_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8284
mprintf(" Saving dipole distribution as %s ...\n",buf);
8285
o->m_pDipDF[zr]->m_pDipoleDF->Write("",buf,"",false);
8286
sprintf(buf,"dipole_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8287
mprintf(" Saving dipole distribution AGR file as \"%s\"...\n",buf);
8288
o->m_pDipDF[zr]->m_pDipoleDF->WriteAgr("",buf,"",o->m_pDipDF[zr]->m_sName,false);
8289
if (o->m_pDipDF[zr]->m_iHistogramRes != 0)
8291
mprintf(" Calculating Histogram...\n");
8292
o->m_pDipDF[zr]->m_pDipoleDF->CalcHistogram();
8293
sprintf(buf,"his_dipdf_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8294
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8295
o->m_pDipDF[zr]->m_pDipoleDF->WriteHistogram("",buf,"");
8299
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8301
fclose(o->m_pDipDF[zr]->m_fDipole[0]);
8302
mprintf(" Saving temporal development as dipole_timedev_%s%s.csv\n",o->m_pDipDF[zr]->m_sName,multibuf);
8305
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8307
fclose(o->m_pDipDF[zr]->m_fDipole[z2]);
8308
mprintf(" Saving temporal development as dipole_timedev_%s_ref%d%s.csv\n",o->m_pDipDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8311
if (o->m_bCombinedPlot)
8313
sprintf(buf,"combined_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8314
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8315
o->m_pDipDF[zr]->m_pDipoleDF->CreateCombinedPlot(false);
8316
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->WriteAgr(buf,false);
8320
if (o->m_bObsCertain && o->m_bDecompDist)
8322
sprintf(buf,"dipdf_decomp_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8323
mprintf(" Saving DipDF decomposition as \"%s\"...\n",buf);
8324
o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti("",buf,"");
8325
sprintf(buf,"dipdf_decomp_%s%s_cumulative.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8326
mprintf(" Saving cumulative DipoleDF decomposition as \"%s\"...\n",buf);
8327
o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti_Cumulative("",buf,"");
8331
o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
8337
for (zr=0;zr<g_iCDFChannels;zr++)
8339
if (o->m_pVDF[zr] == NULL)
8341
mprintf(WHITE,"* Velocity Distribution Function\n");
8342
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVDF[zr]->m_pVDF->m_fBinEntries,o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,ZeroDivide(o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,o->m_pVDF[zr]->m_pVDF->m_fBinEntries+o->m_pVDF[zr]->m_pVDF->m_fSkipEntries)*100.0);
8343
o->m_pVDF[zr]->m_pVDF->CalcMeanSD();
8344
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMean,o->m_pVDF[zr]->m_pVDF->m_fSD);
8345
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMinInput,o->m_pVDF[zr]->m_pVDF->m_fMaxInput);
8346
o->m_pVDF[zr]->m_pVDF->NormBinIntegral();
8347
sprintf(buf,"vdf_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8348
mprintf(" Saving velocity distribution as %s ...\n",buf);
8349
o->m_pVDF[zr]->m_pVDF->Write("",buf,"",false);
8350
sprintf(buf,"vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8351
mprintf(" Saving velocity distribution AGR file as \"%s\"...\n",buf);
8352
o->m_pVDF[zr]->m_pVDF->WriteAgr("",buf,"",o->m_pVDF[zr]->m_sName,false);
8353
if (o->m_pVDF[zr]->m_iHistogramRes != 0)
8355
mprintf(" Calculating Histogram...\n");
8356
o->m_pVDF[zr]->m_pVDF->CalcHistogram();
8357
sprintf(buf,"his_vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8358
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8359
o->m_pVDF[zr]->m_pVDF->WriteHistogram("",buf,"");
8363
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8365
fclose(o->m_pVDF[zr]->m_fSpeed[0]);
8366
mprintf(" Saving temporal development as vdf_timedev_%s%s.csv\n",o->m_pVDF[zr]->m_sName,multibuf);
8369
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8371
fclose(o->m_pVDF[zr]->m_fSpeed[z2]);
8372
mprintf(" Saving temporal development as vdf_timedev_%s_ref%d%s.csv\n",o->m_pVDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8375
if (o->m_bCombinedPlot)
8377
sprintf(buf,"combined_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8378
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8379
o->m_pVDF[zr]->m_pVDF->CreateCombinedPlot(false);
8380
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->WriteAgr(buf,false);
8384
if (o->m_bObsCertain && o->m_bDecompDist)
8386
sprintf(buf,"vdf_decomp_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8387
mprintf(" Saving VDF decomposition as \"%s\"...\n",buf);
8388
o->m_pVDF[zr]->m_pVDF->WriteMulti("",buf,"");
8389
sprintf(buf,"vdf_decomp_%s%s_cumulative.csv",o->m_pVDF[zr]->m_sName,multibuf);
8390
mprintf(" Saving cumulative VDF decomposition as \"%s\"...\n",buf);
8391
o->m_pVDF[zr]->m_pVDF->WriteMulti_Cumulative("",buf,"");
8395
o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
8401
for (zr=0;zr<g_iCDFChannels;zr++)
8403
if (o->m_pPlDF[zr] == NULL)
8405
mprintf(WHITE,"* Plane Distance Distribution Function\n");
8406
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries,o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,ZeroDivide(o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries+o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries)*100.0);
8407
o->m_pPlDF[zr]->m_pPlDF->CalcMeanSD();
8408
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMean,o->m_pPlDF[zr]->m_pPlDF->m_fSD);
8409
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMinInput,o->m_pPlDF[zr]->m_pPlDF->m_fMaxInput);
8410
o->m_pPlDF[zr]->m_pPlDF->NormBinIntegral();
8411
sprintf(buf,"pldf_%s%s.csv",o->m_pPlDF[zr]->m_sName,multibuf);
8412
mprintf(" Saving plane distance distribution as %s ...\n",buf);
8413
o->m_pPlDF[zr]->m_pPlDF->Write("",buf,"",false);
8414
sprintf(buf,"pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8415
mprintf(" Saving plane distance distribution AGR file as \"%s\"...\n",buf);
8416
o->m_pPlDF[zr]->m_pPlDF->WriteAgr("",buf,"",o->m_pPlDF[zr]->m_sName,false);
8417
if (o->m_pPlDF[zr]->m_iHistogramRes != 0)
8419
mprintf(" Calculating Histogram...\n");
8420
o->m_pPlDF[zr]->m_pPlDF->CalcHistogram();
8421
sprintf(buf,"his_pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8422
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8423
o->m_pPlDF[zr]->m_pPlDF->WriteHistogram("",buf,"");
8430
for (zr=0;zr<g_iCDFChannels;zr++)
8432
if (o->m_pLiDF[zr] == NULL)
8434
mprintf(WHITE,"* Line Distance Distribution Function\n");
8435
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries,o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,ZeroDivide(o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries+o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries)*100.0);
8436
o->m_pLiDF[zr]->m_pLiDF->CalcMeanSD();
8437
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMean,o->m_pLiDF[zr]->m_pLiDF->m_fSD);
8438
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMinInput,o->m_pLiDF[zr]->m_pLiDF->m_fMaxInput);
8440
if (o->m_pLiDF[zr]->m_bRadialCorrect)
8442
mprintf(" Correcting radial distribution...\n");
8443
o->m_pLiDF[zr]->m_pLiDF->CorrectLiRadialDist();
8445
if (o->m_bOthers && o->m_pLiDF[zr]->m_bRadialCorrect)
8447
mprintf(" Scaling LiDF to uniform density...\n");
8448
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8450
if (o->m_bObsCertain)
8452
o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / o->m_waObsRefList.GetSize());
8453
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / o->m_waObsRefList.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8456
o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8457
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8461
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_iDoubleBoxFactor);
8462
o->m_pLiDF[zr]->m_pLiDF->MultiplyIntegral(g_iDoubleBoxFactor);
8466
eprintf(" Uniform density not defined if box is not XYZ-periodic!\n");
8472
mprintf(" Scaling LiDF to integral value 1000 ...\n");
8473
o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral(1000.0);
8474
o->m_pLiDF[zr]->m_pLiDF->Integrate(false,1000.0);
8478
o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral();
8479
sprintf(buf,"lidf_%s%s.csv",o->m_pLiDF[zr]->m_sName,multibuf);
8480
mprintf(" Saving line distance distribution as %s ...\n",buf);
8481
o->m_pLiDF[zr]->m_pLiDF->Write("",buf,"",false);
8482
sprintf(buf,"lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8483
mprintf(" Saving line distance distribution AGR file as \"%s\"...\n",buf);
8484
o->m_pLiDF[zr]->m_pLiDF->WriteAgr("",buf,"",o->m_pLiDF[zr]->m_sName,false);
8485
if (o->m_pLiDF[zr]->m_iHistogramRes != 0)
8487
mprintf(" Calculating Histogram...\n");
8488
o->m_pLiDF[zr]->m_pLiDF->CalcHistogram();
8489
sprintf(buf,"his_lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8490
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8491
o->m_pLiDF[zr]->m_pLiDF->WriteHistogram("",buf,"");
8498
for (zr=0;zr<g_iCDFChannels;zr++)
8500
if (o->m_pADF[zr] == NULL)
8502
mprintf(WHITE,"* Angular Distribution Function\n");
8503
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pADF[zr]->m_pADF->m_fBinEntries,o->m_pADF[zr]->m_pADF->m_fSkipEntries,ZeroDivide(o->m_pADF[zr]->m_pADF->m_fSkipEntries,o->m_pADF[zr]->m_pADF->m_fBinEntries+o->m_pADF[zr]->m_pADF->m_fSkipEntries)*100.0);
8504
o->m_pADF[zr]->m_pADF->CalcMeanSD();
8505
if (o->m_pADF[zr]->m_bCosine)
8507
mprintf(" Mean value: %10G Standard deviation: %10G\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8508
mprintf(" Min. value: %10G Max. value: %10G\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8511
mprintf(" Mean value: %10G degree Standard deviation: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8512
mprintf(" Min. value: %10G degree Max. value: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8514
if (o->m_pADF[zr]->m_bStat)
8516
mprintf(" Applying cone correction...\n");
8517
o->m_pADF[zr]->m_pADF->AngleCorrect();
8519
/* if (o->m_pADF[zr]->m_bMirror)
8521
mprintf(" Making ADF mirror-symmetric...\n");
8522
if (o->m_pADF[zr]->m_bCosine)
8523
o->m_pADF[zr]->m_pADF->Mirror(0.0f);
8524
else o->m_pADF[zr]->m_pADF->Mirror(90.0f);
8526
o->m_pADF[zr]->m_pADF->NormBinIntegral();
8529
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8531
fclose(o->m_pADF[zr]->m_fAngle[0]);
8532
mprintf(" Saving temporal development as adf_timedev_%s%s.csv\n",o->m_pADF[zr]->m_sName,multibuf);
8535
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8537
fclose(o->m_pADF[zr]->m_fAngle[z2]);
8538
sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8539
mprintf(" Saving temporal development as %s\n",buf);
8542
// mprintf(" Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_pADF->m_sName);
8543
// FreeFileName("",o->m_pADF->m_sName,"_angle_stat.txt");
8544
// o->m_pADF->m_pAngleStat->Evaluate();
8545
// o->m_pADF->m_pAngleStat->Write("",o->m_pADF->m_sName,"_angle_stat.txt");
8546
// delete o->m_pAngleStat;
8547
delete[] o->m_pADF[zr]->m_fAngle;
8548
o->m_pADF[zr]->m_fAngle = NULL;
8549
if (o->m_bCombinedPlot)
8551
sprintf(buf,"combined_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8552
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8553
o->m_pADF[zr]->m_pADF->CreateCombinedPlot(false);
8554
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->WriteAgr(buf,false);
8557
sprintf(buf,"adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8558
mprintf(" Saving ADF as %s ...\n",buf);
8559
o->m_pADF[zr]->m_pADF->NormBinIntegral();
8560
o->m_pADF[zr]->m_pADF->Write("",buf,"",false);
8561
sprintf(buf,"adf_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8562
mprintf(" Saving ADF AGR file as \"%s\"...\n",buf);
8563
if (o->m_pADF[zr]->m_bCosine)
8564
o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8565
else o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8566
if (o->m_pADF[zr]->m_iHistogramRes != 0)
8568
mprintf(" Calculating Histogram...\n");
8569
o->m_pADF[zr]->m_pADF->CalcHistogram();
8570
sprintf(buf,"his_adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8571
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8572
o->m_pADF[zr]->m_pADF->WriteHistogram("",buf,"");
8575
if (o->m_bObsCertain && o->m_bDecompDist)
8577
sprintf(buf,"adf_decomp_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8578
mprintf(" Saving ADF decomposition as \"%s\"...\n",buf);
8579
o->m_pADF[zr]->m_pADF->WriteMulti("",buf,"");
8580
sprintf(buf,"adf_decomp_%s%s_cumulative.csv",o->m_pADF[zr]->m_sName,multibuf);
8581
mprintf(" Saving cumulative ADF decomposition as \"%s\"...\n",buf);
8582
o->m_pADF[zr]->m_pADF->WriteMulti_Cumulative("",buf,"");
8586
o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
8592
for (zr=0;zr<g_iCDFChannels;zr++)
8594
if (o->m_pDDF[zr] == NULL)
8596
mprintf(WHITE,"* Dihedral Distribution Function\n");
8597
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDDF[zr]->m_pDDF->m_fBinEntries,o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,ZeroDivide(o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,o->m_pDDF[zr]->m_pDDF->m_fBinEntries+o->m_pDDF[zr]->m_pDDF->m_fSkipEntries)*100.0);
8598
o->m_pDDF[zr]->m_pDDF->CalcMeanSD();
8599
if (o->m_pDDF[zr]->m_bCosine)
8601
mprintf(" Mean value: %10G Standard deviation: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8602
mprintf(" Min. value: %10G Max.value: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8605
mprintf(" Mean value: %10G degree Standard deviation: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8606
mprintf(" Min. value: %10G degree Max.value: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8610
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8612
fclose(o->m_pDDF[zr]->m_fAngle[0]);
8613
mprintf(" Saving temporal development as ddf_timedev_%s%s.csv\n",o->m_pDDF[zr]->m_sName,multibuf);
8616
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8618
fclose(o->m_pDDF[zr]->m_fAngle[z2]);
8619
sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8620
mprintf(" Saving temporal development as %s\n",buf);
8623
/* mprintf(" Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_sName);
8624
FreeFileName("",o->m_sName,"_angle_stat.txt");
8625
o->m_pAngleStat->Evaluate();
8626
o->m_pAngleStat->Write("",o->m_sName,"_angle_stat.txt");
8627
// delete o->m_pAngleStat;*/
8628
delete[] o->m_pDDF[zr]->m_fAngle;
8629
o->m_pDDF[zr]->m_fAngle = NULL;
8630
if (o->m_bCombinedPlot)
8632
sprintf(buf,"combined_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8633
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8634
o->m_pDDF[zr]->m_pDDF->CreateCombinedPlot(false);
8635
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->WriteAgr(buf,false);
8638
/* if (o->m_pDDF->m_iStat != 0)
8640
mprintf(" Korrigiere statistische Verteilung...\n");
8641
o->m_pDDF->m_pDDF->AngleCorrect();
8643
sprintf(buf,"ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8644
mprintf(" Saving DDF as %s ...\n",buf);
8645
o->m_pDDF[zr]->m_pDDF->NormBinIntegral();
8646
o->m_pDDF[zr]->m_pDDF->Write("",buf,"",false);
8647
sprintf(buf,"ddf_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8648
mprintf(" Saving DDF AGR file as \"%s\"...\n",buf);
8649
if (o->m_pDDF[zr]->m_bCosine)
8650
o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8651
else o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8652
if (o->m_pDDF[zr]->m_iHistogramRes != 0)
8654
mprintf(" Calculating Histogram...\n");
8655
o->m_pDDF[zr]->m_pDDF->CalcHistogram();
8656
sprintf(buf,"his_ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8657
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8658
o->m_pDDF[zr]->m_pDDF->WriteHistogram("",buf,"");
8661
if (o->m_bObsCertain && o->m_bDecompDist)
8663
sprintf(buf,"ddf_decomp_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8664
mprintf(" Saving DDF decomposition as \"%s\"...\n",buf);
8665
o->m_pDDF[zr]->m_pDDF->WriteMulti("",buf,"");
8666
sprintf(buf,"ddf_decomp_%s%s_cumulative.csv",o->m_pDDF[zr]->m_sName,multibuf);
8667
mprintf(" Saving cumulative DDF decomposition as \"%s\"...\n",buf);
8668
o->m_pDDF[zr]->m_pDDF->WriteMulti_Cumulative("",buf,"");
8672
o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
6009
o->m_pPlProj->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
6014
o->m_pRevSDF->BuildAtomList(smfix,sm,&templa);
6015
for (z4=0;z4<templa.GetSize();z4++)
6016
o->m_pRevSDF->m_vaData[z3].Add(g_pTempTimestep->m_vaCoords[templa[z4]]);
6019
} // Ende FOR Alle anderen Molekuele durchgehen
6020
if (o->m_bSecondShowMol && (!secondmolrun))
6022
secondmolrun = true;
6023
goto _secondmolstart;
6025
} // Ende IF m_bOthers
6029
if (o->m_pSDF->m_bSDFMirrorBisect)
6031
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
6032
vec3 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])];
6033
vec1 = CrossP(vec2,vec3);
6037
if (o->m_pSDF->m_bCutPlane)
6039
o->m_pSDF->m_fAtom2PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])][0];
6040
o->m_pSDF->m_fAtom3PosX += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][0];
6041
o->m_pSDF->m_fAtom3PosY += g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[2]])->GetAt(g_iFixAtom[2])][1];
6042
o->m_pSDF->m_fPosCounter++;
6047
for (z5=0;z5<o->m_pSDF->m_vaData[0].GetSize();z5++)
6049
vec0 = o->m_pSDF->m_vaData[0][z5];
6051
if (o->m_pSDF->m_bVdWSpheres)
6052
o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[0][z5]);
6053
else o->m_pSDF->m_pSDF->AddToBin(vec0);
6055
if (o->m_pSDF->m_bSDFMirrorXY)
6058
o->m_pSDF->m_pSDF->AddToBin(vec0);
6061
if (o->m_pSDF->m_bSDFMirrorBisect)
6063
vec3.PointRoot(vec1,vec2,vec0);
6067
o->m_pSDF->m_pSDF->AddToBin(vec0);
6068
if (o->m_pSDF->m_bSDFMirrorXY)
6071
o->m_pSDF->m_pSDF->AddToBin(vec0);
6077
for (z4=0;z4<o->m_iShowMolCount;z4++)
6079
for (z5=0;z5<o->m_pSDF->m_vaData[z4].GetSize();z5++)
6081
vec0 = o->m_pSDF->m_vaData[z4][z5];
6083
if (o->m_pSDF->m_bVdWSpheres)
6084
o->m_pSDF->m_pSDF->AddToBin_Sphere(vec0,o->m_pSDF->m_faRadius[z4][z5]);
6085
else o->m_pSDF->m_pSDF->AddToBin(vec0);
6087
if (o->m_pSDF->m_bSDFMirrorXY)
6090
o->m_pSDF->m_pSDF->AddToBin(vec0);
6093
if (o->m_pSDF->m_bSDFMirrorBisect)
6095
vec3.PointRoot(vec1,vec2,vec0);
6099
o->m_pSDF->m_pSDF->AddToBin(vec0);
6100
if (o->m_pSDF->m_bSDFMirrorXY)
6103
o->m_pSDF->m_pSDF->AddToBin(vec0);
6115
for (z5=0;z5<o->m_pPlProj->m_vaData[0].GetSize();z5++)
6117
vec0 = o->m_pPlProj->m_vaData[0][z5];
6119
if ((vec0[2] >= o->m_pPlProj->m_fSliceBorder[0]) && (vec0[2] <= o->m_pPlProj->m_fSliceBorder[1]))
6120
o->m_pPlProj->m_p2DF->AddToBin(vec0[0],vec0[1]);
6124
for (z4=0;z4<o->m_iShowMolCount;z4++)
6126
for (z5=0;z5<o->m_pPlProj->m_vaData[z4].GetSize();z5++)
6128
vec0 = o->m_pPlProj->m_vaData[z4][z5];
6130
if ((vec0[2] >= o->m_pPlProj->m_fSliceBorder[0]) && (vec0[2] <= o->m_pPlProj->m_fSliceBorder[1]))
6131
o->m_pPlProj->m_p2DF->AddToBin(vec0[0],vec0[1]);
6139
vec2 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])];
6140
tf4 = g_pTempTimestep->m_vaCoords[((CxIntArray*)smfix->m_oaAtomOffset[g_iFixAtomType[1]])->GetAt(g_iFixAtom[1])].GetLength();
6141
o->m_pRevSDF->m_fSecondAtomPosX += tf4;
6142
o->m_pRevSDF->m_fSecondAtomCount++;
6145
for (z5=0;z5<o->m_pRevSDF->m_vaData[0].GetSize();z5++)
6147
vec0 = o->m_pRevSDF->m_vaData[0][z5];
6148
tf = fabs(Angle(vec2,vec0));
6149
tf2 = vec0.GetLength();
6151
if (o->m_pRevSDF->m_bCorrectAngle)
6153
if ((tf < 0.001) || (tf > Pi-0.001))
6155
else tf3 /= sin(tf);
6157
if (o->m_pRevSDF->m_bCorrectRadial)
6158
tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
6159
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
6160
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
6161
if (o->m_pRevSDF->m_bMirrorY)
6163
if (o->m_pRevSDF->m_bMirrorBond)
6165
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6166
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6169
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
6170
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
6176
for (z4=0;z4<o->m_iShowMolCount;z4++)
6178
for (z5=0;z5<o->m_pRevSDF->m_vaData[z4].GetSize();z5++)
6180
vec0 = o->m_pRevSDF->m_vaData[z4][z5];
6181
tf = fabs(Angle(vec2,vec0));
6182
tf2 = vec0.GetLength();
6184
if (o->m_pRevSDF->m_bCorrectAngle)
6186
if ((tf < 0.001) || (tf > Pi-0.001))
6188
else tf3 /= sin(tf);
6190
if (o->m_pRevSDF->m_bCorrectRadial)
6191
tf3 /= tf2; // Erste Potenz, da 2D-Grid (SDF hat "nullte Potenz" ^^)
6192
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,cos(tf)*tf2,tf3);
6193
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,cos(tf)*tf2,tf3);
6194
if (o->m_pRevSDF->m_bMirrorY)
6196
if (o->m_pRevSDF->m_bMirrorBond)
6198
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6199
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,tf4-cos(tf)*tf2,tf3);
6202
o->m_pRevSDF->m_p2DF->AddToBin(sin(tf)*tf2,-cos(tf)*tf2,tf3);
6203
o->m_pRevSDF->m_p2DF->AddToBin(-sin(tf)*tf2,-cos(tf)*tf2,tf3);
6211
if (g_bCDF && (!g_bDeriv || (g_iSteps > 2)))
6213
if (o->m_bSecondShowMol)
6215
for (zr=0;zr<g_iCDFChannels;zr++)
6217
switch(g_iObsChannel[zr])
6220
apfa[zr] = o->m_pRDF[zr]->m_faData;
6221
apba[zr] = o->m_pRDF[zr]->m_baDataEnabled;
6224
apfa[zr] = o->m_pADF[zr]->m_faData;
6225
apba[zr] = o->m_pADF[zr]->m_baDataEnabled;
6228
apfa[zr] = o->m_pDDF[zr]->m_faData;
6229
apba[zr] = o->m_pDDF[zr]->m_baDataEnabled;
6232
apfa[zr] = o->m_pDipDF[zr]->m_faData;
6233
apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled;
6236
apfa[zr] = o->m_pVDF[zr]->m_faData;
6237
apba[zr] = o->m_pVDF[zr]->m_baDataEnabled;
6240
apfa[zr] = o->m_pPlDF[zr]->m_faData;
6241
apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled;
6244
apfa[zr] = o->m_pLiDF[zr]->m_faData;
6245
apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled;
6250
if (g_iCDFChannels == 2)
6252
for (z4=0;z4<o->m_iShowMolCount;z4++)
6254
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6256
for (z8=0;z8<o->m_iShowMol2Count;z8++)
6258
if (o->m_bExclude1eq2 && (z4 == z8))
6261
for (z7=0;z7<apfa[1][z8].GetSize();z7++)
6263
if (o->m_bBinOnlyPassedAtoms)
6265
if ((apba[0][z4][z5] == 0) || (apba[1][z8][z7] == 0))
6268
if (o->m_bBinOnlyNotPassedAtoms)
6270
if ((apba[0][z4][z5] != 0) && (apba[1][z8][z7] != 0))
6274
o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z8][z7]);
6277
if (o->m_pCDF->m_bDumpDat)
6278
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; %d; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,z5+1,apfa[0][z4][z5],apfa[1][z8][z7]);
6284
} else // IF NOT SECOND_OM
6286
for (zr=0;zr<g_iCDFChannels;zr++)
6288
switch(g_iObsChannel[zr])
6291
apfa[zr] = o->m_pRDF[zr]->m_faData;
6292
apba[zr] = o->m_pRDF[zr]->m_baDataEnabled;
6295
apfa[zr] = o->m_pADF[zr]->m_faData;
6296
apba[zr] = o->m_pADF[zr]->m_baDataEnabled;
6299
apfa[zr] = o->m_pDDF[zr]->m_faData;
6300
apba[zr] = o->m_pDDF[zr]->m_baDataEnabled;
6303
apfa[zr] = o->m_pDipDF[zr]->m_faData;
6304
apba[zr] = o->m_pDipDF[zr]->m_baDataEnabled;
6307
apfa[zr] = o->m_pVDF[zr]->m_faData;
6308
apba[zr] = o->m_pVDF[zr]->m_baDataEnabled;
6311
apfa[zr] = o->m_pPlDF[zr]->m_faData;
6312
apba[zr] = o->m_pPlDF[zr]->m_baDataEnabled;
6315
apfa[zr] = o->m_pLiDF[zr]->m_faData;
6316
apba[zr] = o->m_pLiDF[zr]->m_baDataEnabled;
6321
if (g_iCDFChannels == 2)
6323
for (z4=0;z4<o->m_iShowMolCount;z4++)
6326
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6328
for (z7=0;z7<apfa[1][z4].GetSize();z7++)
6331
/* Workaround for symmetrical DDFs (double data amount) */
6332
if (g_iObsChannel[0] == 2)
6334
if (o->m_pDDF[0]->m_bSymm)
6336
if (g_iObsChannel[1] == 2)
6338
if (o->m_pDDF[1]->m_bSymm)
6340
if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6346
if (o->m_pCDF->m_pCombineList[(z5/2)*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6350
if (g_iObsChannel[1] == 2)
6352
if (o->m_pDDF[1]->m_bSymm)
6354
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+(z7/2)] == 0)
6359
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6364
if (o->m_bBinOnlyPassedAtoms)
6366
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z7] == 0))
6369
if (o->m_bBinOnlyNotPassedAtoms)
6371
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z7] != 0))
6374
o->m_pCDF->m_p2DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z7]);
6376
if (o->m_pCDF->m_bDumpDat)
6377
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; ; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z7]);
6380
ti = o->m_waSaveShowList.GetPosition(z4);
6381
if ((ti2 != -1) && (ti != -1))
6383
if (o->m_bSaveSeparateFiles)
6384
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6385
else mfprintf(o->m_pCDF->m_fTimeDev[0],"; %10.3f; %10.3f",apfa[0][z4][z5],apfa[1][z4][z7]);
6386
if (o->m_pCDF->m_bTDAnimation)
6387
o->m_pCDF->m_pTDAPlot->AddXYTupel((ti2*o->m_waSaveShowList.GetSize()+ti)*o->m_pCDF->m_iCombinationsEnabled+ticomb,apfa[0][z4][z5],apfa[1][z4][z7]);
6394
if (o->m_bTimeDev && (ti2 != -1))
6396
if (o->m_bSaveSeparateFiles)
6397
mfprintf(o->m_pCDF->m_fTimeDev[ti2],"\n");
6398
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6399
mfprintf(o->m_pCDF->m_fTimeDev[0],"\n");
6401
} // END IF CHANNELS == 2
6403
if (g_iCDFChannels == 3)
6405
for (z4=0;z4<o->m_iShowMolCount;z4++)
6408
for (z5=0;z5<apfa[0][z4].GetSize();z5++)
6410
for (z8=0;z8<apfa[1][z4].GetSize();z8++)
6412
for (z7=0;z7<apfa[2][z4].GetSize();z7++)
6414
if (o->m_pCDF->m_pCombineList[z5*o->m_pCDF->m_iCombinations[1]*o->m_pCDF->m_iCombinations[2]+z8*o->m_pCDF->m_iCombinations[1]+z7] == 0)
6416
if (o->m_bBinOnlyPassedAtoms)
6418
if ((apba[0][z4][z5] == 0) || (apba[1][z4][z8] == 0) || (apba[2][z4][z7] == 0))
6421
if (o->m_bBinOnlyNotPassedAtoms)
6423
if ((apba[0][z4][z5] != 0) && (apba[1][z4][z8] != 0) && (apba[2][z4][z7] != 0))
6426
o->m_pCDF->m_p3DF->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6428
o->m_pCDF->m_p3DF->m_p2DF[0]->AddToBin(apfa[0][z4][z5],apfa[1][z4][z8]);
6429
o->m_pCDF->m_p3DF->m_p2DF[1]->AddToBin(apfa[0][z4][z5],apfa[2][z4][z7]);
6430
o->m_pCDF->m_p3DF->m_p2DF[2]->AddToBin(apfa[1][z4][z8],apfa[2][z4][z7]);
6432
if (o->m_pCDF->m_bDumpDat)
6433
mfprintf(o->m_pCDF->m_fDump,"%d; %d; %d; ; %10.3f; %10.3f; %10.3f\n",(int)g_iSteps,z2+1,z4+1,apfa[0][z4][z5],apfa[1][z4][z8],apfa[2][z4][z7]);
6438
} // END IF CHANNELS == 3
6439
} // IF NOT SECOND_OM
6442
for (zr=0;zr<g_iCDFChannels;zr++)
6444
if (g_bRDF && !(o->m_bObsCertain && o->m_bDecompDist) && (!o->m_bDecompType) && (o->m_pRDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6448
if (o->m_bSecondShowMol && (zr == 1))
6450
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6452
for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6454
if (o->m_bBinOnlyPassedAtoms)
6455
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6457
if (o->m_bBinOnlyNotPassedAtoms)
6458
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6460
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6465
for (z4=0;z4<o->m_iShowMolCount;z4++)
6467
for (z5=0;z5<o->m_pRDF[zr]->m_faData[z4].GetSize();z5++)
6469
if (o->m_bBinOnlyPassedAtoms)
6470
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] == 0)
6472
if (o->m_bBinOnlyNotPassedAtoms)
6473
if (o->m_pRDF[zr]->m_baDataEnabled[z4][z5] != 0)
6475
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[z4][z5]);
6481
for (z5=0;z5<o->m_pRDF[zr]->m_faData[0].GetSize();z5++)
6482
o->m_pRDF[zr]->m_pRDF->AddToBin(o->m_pRDF[zr]->m_faData[0][z5]);
6484
if (o->m_bTimeDev && (ti2 != -1))
6486
if (o->m_bSaveSeparateFiles)
6487
mfprintf(o->m_pRDF[zr]->m_fDist[ti2],"\n");
6488
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6489
mfprintf(o->m_pRDF[zr]->m_fDist[0],"\n");
6493
if (g_bVDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pVDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6497
if (o->m_bSecondShowMol && (zr == 1))
6499
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6500
for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6501
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6504
for (z4=0;z4<o->m_iShowMolCount;z4++)
6506
for (z5=0;z5<o->m_pVDF[zr]->m_faData[z4].GetSize();z5++)
6508
if (o->m_bBinOnlyPassedAtoms)
6509
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] == 0)
6511
if (o->m_bBinOnlyNotPassedAtoms)
6512
if (o->m_pVDF[zr]->m_baDataEnabled[z4][z5] != 0)
6514
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[z4][z5]);
6520
for (z5=0;z5<o->m_pVDF[zr]->m_faData[0].GetSize();z5++)
6521
o->m_pVDF[zr]->m_pVDF->AddToBin(o->m_pVDF[zr]->m_faData[0][z5]);
6523
if (o->m_bTimeDev && (ti2 != -1))
6525
if (o->m_bSaveSeparateFiles)
6526
mfprintf(o->m_pVDF[zr]->m_fSpeed[ti2],"\n");
6527
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6528
mfprintf(o->m_pVDF[zr]->m_fSpeed[0],"\n");
6532
if (g_bDipDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDipDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6536
if (o->m_bSecondShowMol && (zr == 1))
6538
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6539
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6540
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6543
for (z4=0;z4<o->m_iShowMolCount;z4++)
6545
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[z4].GetSize();z5++)
6547
if (o->m_bBinOnlyPassedAtoms)
6548
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] == 0)
6550
if (o->m_bBinOnlyNotPassedAtoms)
6551
if (o->m_pDipDF[zr]->m_baDataEnabled[z4][z5] != 0)
6553
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[z4][z5]);
6559
for (z5=0;z5<o->m_pDipDF[zr]->m_faData[0].GetSize();z5++)
6560
o->m_pDipDF[zr]->m_pDipoleDF->AddToBin(o->m_pDipDF[zr]->m_faData[0][z5]);
6562
if (o->m_bTimeDev && (ti2 != -1))
6564
if (o->m_bSaveSeparateFiles)
6565
mfprintf(o->m_pDipDF[zr]->m_fDipole[ti2],"\n");
6566
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6567
mfprintf(o->m_pDipDF[zr]->m_fDipole[0],"\n");
6571
if (g_bADF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pADF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6575
if (o->m_bSecondShowMol && (zr == 1))
6577
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6578
for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6579
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6582
for (z4=0;z4<o->m_iShowMolCount;z4++)
6584
for (z5=0;z5<o->m_pADF[zr]->m_faData[z4].GetSize();z5++)
6586
if (o->m_bBinOnlyPassedAtoms)
6587
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] == 0)
6589
if (o->m_bBinOnlyNotPassedAtoms)
6590
if (o->m_pADF[zr]->m_baDataEnabled[z4][z5] != 0)
6592
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[z4][z5]);
6598
for (z5=0;z5<o->m_pADF[zr]->m_faData[0].GetSize();z5++)
6599
o->m_pADF[zr]->m_pADF->AddToBin(o->m_pADF[zr]->m_faData[0][z5]);
6601
if (o->m_bTimeDev && (ti2 != -1))
6603
if (o->m_bSaveSeparateFiles)
6604
mfprintf(o->m_pADF[zr]->m_fAngle[ti2],"\n");
6605
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6606
mfprintf(o->m_pADF[zr]->m_fAngle[0],"\n");
6610
if (g_bDDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pDDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6614
if (o->m_bSecondShowMol && (zr == 1))
6616
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6617
for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6618
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6621
for (z4=0;z4<o->m_iShowMolCount;z4++)
6623
for (z5=0;z5<o->m_pDDF[zr]->m_faData[z4].GetSize();z5++)
6625
if (o->m_bBinOnlyPassedAtoms)
6626
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] == 0)
6628
if (o->m_bBinOnlyNotPassedAtoms)
6629
if (o->m_pDDF[zr]->m_baDataEnabled[z4][z5] != 0)
6631
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[z4][z5]);
6637
for (z5=0;z5<o->m_pDDF[zr]->m_faData[0].GetSize();z5++)
6638
o->m_pDDF[zr]->m_pDDF->AddToBin(o->m_pDDF[zr]->m_faData[0][z5]);
6640
if (o->m_bTimeDev && (ti2 != -1))
6642
if (o->m_bSaveSeparateFiles)
6643
mfprintf(o->m_pDDF[zr]->m_fAngle[ti2],"\n");
6644
else if (ti2 == (int)o->m_waSaveRefList.GetSize()-1)
6645
mfprintf(o->m_pDDF[zr]->m_fAngle[0],"\n");
6649
if (g_bPlDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pPlDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6653
if (o->m_bSecondShowMol && (zr == 1))
6655
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6656
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6657
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6660
for (z4=0;z4<o->m_iShowMolCount;z4++)
6662
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[z4].GetSize();z5++)
6664
if (o->m_bBinOnlyPassedAtoms)
6665
if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] == 0)
6667
if (o->m_bBinOnlyNotPassedAtoms)
6668
if (o->m_pPlDF[zr]->m_baDataEnabled[z4][z5] != 0)
6670
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[z4][z5]);
6676
for (z5=0;z5<o->m_pPlDF[zr]->m_faData[0].GetSize();z5++)
6677
o->m_pPlDF[zr]->m_pPlDF->AddToBin(o->m_pPlDF[zr]->m_faData[0][z5]);
6681
if (g_bLiDF && !(o->m_bObsCertain && o->m_bDecompDist) && (o->m_pLiDF[zr] != NULL) && (!g_bDeriv || (g_iSteps > 2)))
6685
if (o->m_bSecondShowMol && (zr == 1))
6687
for (z4=0;z4<o->m_iShowMol2Count;z4++)
6688
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6689
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6692
for (z4=0;z4<o->m_iShowMolCount;z4++)
6694
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[z4].GetSize();z5++)
6696
if (o->m_bBinOnlyPassedAtoms)
6697
if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] == 0)
6699
if (o->m_bBinOnlyNotPassedAtoms)
6700
if (o->m_pLiDF[zr]->m_baDataEnabled[z4][z5] != 0)
6702
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[z4][z5]);
6708
for (z5=0;z5<o->m_pLiDF[zr]->m_faData[0].GetSize();z5++)
6709
o->m_pLiDF[zr]->m_pLiDF->AddToBin(o->m_pLiDF[zr]->m_faData[0][z5]);
6713
} // FOR CDFChannels
6715
} // Ende FOR g_oaObserv.GetSize
6716
} // Ende IF [blabla]
6718
if (g_bMiddleAvg) // Referenzmolekuel mitteln
6721
ti2 = (g_iSteps-2)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()+z2;
6722
// Jeden Atomtyp des Zielmolekuels durchgehen
6723
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z3++)
6725
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z4++)
6727
// Atome vertauschen, aber nicht im allerersten Durchgang hier, und nur wenn mehr als 1 Atom dieser Sorte
6728
if ((g_iSwapAtoms) && (ti2 != 0) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3]>1))
6730
vec4 = g_pRefMol[cc];
6731
vec4 /= (float)ti2; // der bisherige Mittelwert des Referenzmolekuels
6732
tf = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],vec4); // der Abstand dieses Atoms von seinem Aequivalent im Referenzmolekuel
6734
for (z5=z4+1;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z3];z5++) // Alle folgenden Atome dieser Sorte durchgehen
6736
tf2 = VecDist(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z5)],vec4);
6737
if (tf2 < tf) // Das andere Atom ist naeher am Platz im Referenzmolekuel als das eigentlich vorgesehene
6743
if (ti3 != -1) // Ein Anderes ist naeher dran als unseres: Vertausche diese beiden
6745
Swap(g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)],g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(ti3)]);
6746
pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+(cc-z4+ti3)] += 1;
6747
pSwapMatrix[(cc-z4+ti3)*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc] += 1;
6749
} // Ende IF SwapAtoms
6750
g_pRefMol[cc] += g_pTempTimestep->m_vaCoords[((CxIntArray*)((CSingleMolecule*)g_oaSingleMolecules[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex[z2]])->m_oaAtomOffset[z3])->GetAt(z4)];
6752
} // Ende FOR Atom des Referenzmolekuels
6753
} // Ende FOR Atomtyp des Referenzmolekuels
6754
} // Ende IF Referenzmolekuel mitteln
6755
} // Ende FOR RefMol (z2)
6757
for (z6=0;z6<g_oaObserv.GetSize();z6++)
6759
o = (CObservation*)g_oaObserv[z6];
6761
if (o->m_pConditions != NULL)
6762
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6763
if (o->m_pConditions->m_iPassCounter[z2] != 0)
6764
o->m_pConditions->m_iOMPassCounter[z2]++;
6766
if (o->m_pConditionsOM2 != NULL)
6767
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
6768
if (o->m_pConditionsOM2->m_iPassCounter[z2] != 0)
6769
o->m_pConditionsOM2->m_iOMPassCounter[z2]++;
6773
for (zr=0;zr<g_iCDFChannels;zr++)
6775
if (o->m_pRDF[zr] != NULL)
6776
if (o->m_pRDF[zr]->m_bCalcSD)
6777
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishStep();
6786
if ((g_iMaxStep > 0) && ((int)g_iSteps >= g_iMaxStep))
6788
mprintf("\n\nMaximum step count of %d reached, stopping.",g_iMaxStep);
6793
/*************************************************************************
6794
*************** Ende Hauptschleife ***************************************
6795
*************************************************************************/
6800
if (g_bUseVelocities)
6803
mprintf(WHITE,"\n\n########## Analysis finished ##########\n");
6806
mprintf("\n%d time steps processed (every %dth from %d).\n\n",g_iSteps/g_iStride,g_iStride,g_iSteps);
6807
else mprintf("\n%d time steps processed.\n\n",g_iSteps);
6812
if (g_fForce != NULL)
6814
if ((g_bNPT) && (g_sNPTFile[0] != 0))
6817
if (g_bDipole && g_bDumpDipoleVector)
6819
fclose(g_fDumpDipole);
6820
mprintf(" Dipole vectors written to file \"dipole_vectors.csv\".\n");
6821
if (g_bDumpDipoleXYZ)
6823
fclose(g_fDumpDipoleXYZ);
6824
mprintf(" Dipole XYZ trajectory written to file \"dipole_vectors.xyz\".\n");
6830
/************ Interface **************/
6831
Interface_AfterAnalysis();
6836
g_pVoroWrapper->Finish();
6841
g_pVoroAnalysis->Finish();
6846
if (!ReactSecondRun)
6849
g_pReact->DumpMolecules();
6850
g_pReact->CreateOutput();
6852
if (g_pReact->m_oaReactTrajectories.GetSize() != 0)
6854
if (!ReactSecondRun)
6856
mprintf(WHITE,"Starting second pass for Reaction Analysis...\n\n");
6857
ReactSecondRun = true;
6861
mprintf(WHITE,"Second pass for Reaction Analysis finished.\n\n");
6865
g_bAbortAnalysis = true;
6867
if (g_bSaveCondSnapshot)
6869
fclose(g_fSaveCondFile);
6870
mprintf("%d condition snapshots saved as savecondition.xyz\n\n",g_iSaveCondCount);
6875
mprintf(WHITE,"*** Microheterogeneity Analysis\n\n");
6876
for (z=0;z<g_pMicroHet->m_oaObservations.GetSize();z++)
6878
mho = (CMicroHetObservation*)g_pMicroHet->m_oaObservations[z];
6879
mprintf(WHITE," * Observation %d: %s\n",z+1,mho->m_sName);
6883
/* mprintf(" Creating Microheterogeneity plot...\n");
6884
sprintf(buf,"microhet_df_obs%d%s",z+1,multibuf);
6885
mho->BuildSlices(buf);*/
6887
mprintf(" Creating entry plot...\n");
6888
sprintf(buf,"microhet_entry_obs%d%s",z+1,multibuf);
6889
mho->BuildZeroPlot(buf,true);
6894
if (mho->m_bCDF_Dens)
6895
mho->BuildCDF(0,z,multibuf);
6897
if (mho->m_bCDF_Tot)
6898
mho->BuildCDF(1,z,multibuf);
6900
if (mho->m_bCDF_Mode3)
6901
mho->BuildCDF(2,z,multibuf);
6907
if (g_bClusterAnalysis)
6909
mprintf(WHITE,"*** Cluster Analysis\n\n");
6910
g_pClusterAnalysis->BuildClusterDistribution();
6911
g_pClusterAnalysis->WriteOutput(multibuf);
6916
mprintf(WHITE,"*** FES Analysis\n\n");
6927
mprintf(WHITE,"*** Bond autocorrelation function\n");
6928
if (g_bBondACFDebug)
6930
mprintf(" Writing \"bondacf.agr\"...\n");
6932
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6933
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6935
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6936
gc->SetRangeY(0,250);
6938
gc->SetLabelX("Time [ps]");
6939
gc->SetLabelY("Bond length [pm]");
6940
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6942
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6943
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6945
bond = (CMolBond*)sm->m_oaBonds[z3];
6947
for (z4=0;z4<bond->m_faData.GetSize();z4++)
6948
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6951
gc->WriteAgr("bondacf.agr",false);
6954
mprintf(" Differentiating bond length developments...\n");
6955
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6957
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6958
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6960
bond = (CMolBond*)sm->m_oaBonds[z3];
6961
for (z4=0;z4<bond->m_faData.GetSize()-1;z4++)
6962
bond->m_faData[z4] = bond->m_faData[z4+1] - bond->m_faData[z4];
6965
if (g_bBondACFDebug)
6967
mprintf(" Writing \"bondacf_diff.agr\"...\n");
6969
try { gc = new CGrace(); } catch(...) { gc = NULL; }
6970
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
6972
gc->SetRangeX(0,g_iSteps*g_fTimestepLength/1000.0);
6973
gc->SetRangeY(-15,15);
6975
gc->SetLabelX("Time [ps]");
6976
gc->SetLabelY("Bond length change rate");
6977
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6979
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6980
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
6982
bond = (CMolBond*)sm->m_oaBonds[z3];
6984
for (z4=0;z4<bond->m_faData.GetSize();z4++)
6985
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
6988
gc->WriteAgr("bondacf_diff.agr",false);
6991
mprintf(" Autocorrelating bond length developments...\n");
6992
mprintf(WHITE," [");
6994
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
6996
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
6997
tfs += sm->m_oaBonds.GetSize();
7001
/* fft = new CFFT();
7002
fft->PrepareFFT_C2C(g_iSteps*2);
7004
fft2->PrepareInverseFFT_C2C(g_iSteps*2);*/
7006
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7007
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7009
ac->Init(g_iSteps,g_iBondACFDepth,g_bACFFFT);
7010
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
7012
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
7013
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
7015
if (fmod(ti2,tfs) < 1.0)
7017
bond = (CMolBond*)sm->m_oaBonds[z3];
7018
ac->AutoCorrelate(&bond->m_faData,&tempfa);
7019
bond->m_faData.CopyFrom(&tempfa);
7024
mprintf(WHITE,"]\n");
7025
if (g_bBondACFDebug)
7027
mprintf(" Writing \"bondacf_autocorr.agr\"...\n");
7029
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7030
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7032
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
7033
gc->SetRangeY(-25,25);
7035
gc->SetLabelX("Time [ps]");
7036
gc->SetLabelY("ACF(Bond length change rate)");
7037
for (z2=0;z2<g_oaSingleMolecules.GetSize();z2++)
7039
sm = (CSingleMolecule*)g_oaSingleMolecules[z2];
7040
for (z3=0;z3<sm->m_oaBonds.GetSize();z3++)
7042
bond = (CMolBond*)sm->m_oaBonds[z3];
7044
for (z4=0;z4<g_iBondACFDepth;z4++)
7045
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
7048
gc->WriteAgr("bondacf_autocorr.agr",false);
7051
mprintf(" Merging equivalent Bonds...\n");
7052
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7054
m = (CMolecule*)g_oaMolecules[z0];
7055
sm2 = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7056
for (z2=0;z2<m->m_laSingleMolIndex.GetSize();z2++)
7058
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[z2]];
7059
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7061
bg = (CMolBondGroup*)sm->m_oaBondGroups[z3];
7062
for (z4=1;z4<bg->m_oaBonds.GetSize();z4++)
7064
bond = (CMolBond*)bg->m_oaBonds[z4];
7065
for (z5=0;z5<g_iBondACFDepth;z5++)
7066
((CMolBond*)((CMolBondGroup*)sm2->m_oaBondGroups[z3])->m_oaBonds[0])->m_faData[z5] += bond->m_faData[z5];
7071
if (g_bBondACFSymmetrize)
7073
mprintf(" Symmetrizing bond ACFs...\n");
7074
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7076
m = (CMolecule*)g_oaMolecules[z0];
7077
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7078
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7080
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7081
bond->m_faData.SetSize(2*g_iBondACFDepth);
7082
for (z4=0;z4<g_iBondACFDepth;z4++)
7083
bond->m_faData[z4+g_iBondACFDepth] = bond->m_faData[z4];
7084
for (z4=0;z4<g_iBondACFDepth;z4++)
7085
bond->m_faData[z4] = bond->m_faData[2*g_iBondACFDepth-z4-1];
7088
g_iBondACFDepth *= 2;
7090
if (g_bBondACFWindow)
7092
mprintf(" Applying Window Function...\n");
7093
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7095
m = (CMolecule*)g_oaMolecules[z0];
7096
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7097
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7099
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7100
for (z4=0;z4<g_iBondACFDepth;z4++)
7101
bond->m_faData[z4] *= (float)pow(sin(z4*Pi/(bond->m_faData.GetSize()-1)),2);
7105
if (g_bBondACFNormalize)
7107
mprintf(" Normalizing bond ACFs...\n");
7108
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7110
m = (CMolecule*)g_oaMolecules[z0];
7111
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7112
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7114
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7116
for (z4=0;z4<g_iBondACFDepth;z4++)
7117
if (tf < bond->m_faData[z4])
7118
tf = bond->m_faData[z4];
7119
for (z4=0;z4<g_iBondACFDepth;z4++)
7120
bond->m_faData[z4] /= (float)tf;
7124
mprintf(" Writing \"bondacf_ac_merged.agr\"...\n");
7126
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7127
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7129
gc->SetRangeX(0,g_iBondACFDepth*g_fTimestepLength/1000.0);
7130
gc->SetRangeY(-200,200);
7132
gc->SetLabelX("Time [ps]");
7133
gc->SetLabelY("Sum ACF(Bond length change rate)");
7134
gc->CurrentGraph()->m_bLegend = true;
7135
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7137
m = (CMolecule*)g_oaMolecules[z0];
7138
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7139
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7141
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7143
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7144
gc->SetDatasetName(buf);
7145
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
7146
for (z4=0;z4<g_iBondACFDepth;z4++)
7147
gc->AddXYTupel(z4*g_fTimestepLength/1000.0,bond->m_faData[z4]);
7150
gc->WriteAgr("bondacf_ac_merged.agr",false);
7152
mprintf(" Applying Fourier Transformation...\n");
7154
try { fft = new CFFT(); } catch(...) { fft = NULL; }
7155
if (fft == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7157
fft->PrepareFFT_C2C(g_iBondACFDepth);
7159
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7161
m = (CMolecule*)g_oaMolecules[z0];
7162
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7163
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7165
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7166
for (z4=0;z4<g_iBondACFDepth;z4++)
7168
fft->m_pInput[z4*2] = bond->m_faData[z4];
7169
fft->m_pInput[z4*2+1] = 0;
7172
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7174
bond->m_faData[z4] = (float)(pow(fft->m_pOutput[z4*2],2) + pow(fft->m_pOutput[z4*2+1],2)) / g_iBondACFDepth;
7175
if (bond->m_faData[z4] > tf3)
7176
tf3 = bond->m_faData[z4];
7181
mprintf(" Writing \"bond_spectrum.agr\"...\n");
7183
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7184
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7186
gc->SetRangeX(0,4000.0);
7187
gc->SetRangeY(0,tf3*1.1);
7189
gc->SetLabelX("Wave number [1/cm]");
7190
gc->SetLabelY("Intensity");
7191
gc->CurrentGraph()->m_bInvertXAxis = true;
7192
gc->CurrentGraph()->m_bLegend = true;
7193
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7195
m = (CMolecule*)g_oaMolecules[z0];
7196
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7197
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7199
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7201
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7202
gc->SetDatasetName(buf);
7203
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth*2);
7204
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7205
gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,bond->m_faData[z4]);
7208
gc->WriteAgr("bond_spectrum.agr",false);
7210
for (z5=1;z5<5;z5++)
7212
mprintf(" Smoothing spectrum, degree %d...\n",z5);
7213
mprintf(" Writing \"bond_spectrum_s%d.agr\"...\n",z5);
7215
try { gc = new CGrace(); } catch(...) { gc = NULL; }
7216
if (gc == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7218
gc->SetRangeX(0,4000.0);
7219
gc->SetRangeY(0,tf3*1.1);
7221
gc->SetLabelX("Wave number [1/cm]");
7222
gc->SetLabelY("Intensity");
7223
gc->CurrentGraph()->m_bInvertXAxis = true;
7224
gc->CurrentGraph()->m_bLegend = true;
7226
try { gc2 = new CGrace(); } catch(...) { gc2 = NULL; }
7227
if (gc2 == NULL) NewException((double)sizeof(CGrace),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7229
gc2->SetRangeX(0,4000.0);
7230
gc2->SetRangeY(0,tf3*1.1);
7232
gc2->SetLabelX("Wave number [1/cm]");
7233
gc2->SetLabelY("Intensity");
7234
gc2->CurrentGraph()->m_bInvertXAxis = true;
7235
gc2->CurrentGraph()->m_bLegend = true;
7237
tempfa.SetSize(g_iBondACFDepth/2);
7238
tempfa2.SetSize(g_iBondACFDepth/2);
7240
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7243
for (z0=0;z0<g_oaMolecules.GetSize();z0++)
7245
m = (CMolecule*)g_oaMolecules[z0];
7246
sm = (CSingleMolecule*)g_oaSingleMolecules[m->m_laSingleMolIndex[0]];
7247
for (z3=0;z3<sm->m_oaBondGroups.GetSize();z3++)
7249
bond = (CMolBond*)((CMolBondGroup*)sm->m_oaBondGroups[z3])->m_oaBonds[0];
7251
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7255
for (z6=-z5;z6<=z5;z6++)
7257
if ((z4+z6 < 0) || (z4+z6 >= g_iBondACFDepth/2))
7259
tf += bond->m_faData[z4+z6] / (pow((double)z6,2)+1.0);
7260
tf2 += 1.0 / (pow((double)z6,2)+1.0);
7262
tempfa[z4] = (float)(tf / tf2);
7263
tempfa2[z4] += tempfa[z4];
7268
sprintf(buf,"%s %s%d - %s%d",m->m_sName,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[0]]])->m_sName,bond->m_iAtom[0]+1,((CAtom*)g_oaAtoms[sm->m_baAtomIndex[bond->m_iAtomType[1]]])->m_sName,bond->m_iAtom[1]+1);
7269
gc->SetDatasetName(buf);
7270
gc2->SetDatasetName(buf);
7271
((CGraceDataset*)gc->CurrentGraph()->m_oaDatasets[gc->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7272
((CGraceDataset*)gc2->CurrentGraph()->m_oaDatasets[gc2->CurrentGraph()->m_oaDatasets.GetSize()-1])->m_faValues.SetMaxSize(g_iBondACFDepth);
7274
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7275
gc->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa[z4]);
7277
for (z4=0;z4<g_iBondACFDepth/2;z4++)
7278
gc2->AddXYTupel(z4*2.0/g_iBondACFDepth*1E7f/299.792f/2.0f/g_fTimestepLength/g_iStride,tempfa2[z4]);
7282
sprintf(buf,"bond_spectrum_s%d.agr",z5);
7283
gc->WriteAgr(buf,false);
7286
mprintf(" Writing \"bond_spectrum_cumulative_s%d.agr\"...\n",z5);
7287
sprintf(buf,"bond_spectrum_cumulative_s%d.agr",z5);
7288
gc2->WriteAgr(buf,false);
7296
mprintf("\nTrajectory of reference molecule was saved as %s.\n",g_sRefEnv);
7299
#ifdef TARGET_WINDOWS
7300
sprintf(buf,"tdo_pymol_%s_%d%s.bat",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7302
sprintf(buf,"tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7304
mprintf("Saving TDO PyMol script as %s.\n",buf);
7305
tfi = OpenFileWrite(buf,true);
7306
#ifdef TARGET_WINDOWS
7307
mfprintf(tfi,"pymolwin ");
7309
mfprintf(tfi,"pymol ");
7311
for (z=0;z<g_laTDOSteps.GetSize();z++)
7312
mfprintf(tfi,"tdo_%s_%d_%06d%s.xyz ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],multibuf);
7313
mfprintf(tfi,"-d \"set sphere_scale,0.25\" ");
7314
mfprintf(tfi,"-d \"set stick_radius,0.17\" ");
7315
mfprintf(tfi,"-d \"set ray_trace_mode,1\" ");
7316
mfprintf(tfi,"-d \"set fog,0\" ");
7317
mfprintf(tfi,"-d \"set ray_trace_fog,0\" ");
7318
mfprintf(tfi,"-d \"set bg_rgb,(1,1,1)\" ");
7319
mfprintf(tfi,"-d \"set ray_shadow,0\" ");
7320
mfprintf(tfi,"-d \"set ray_shadows,0\" ");
7321
mfprintf(tfi,"-d \"set ray_interior_shadows,0\" ");
7322
mfprintf(tfi,"-d \"show sticks; show spheres\" ");
7324
for (z=0;z<g_laTDOSteps.GetSize();z++)
7326
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7328
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7330
mfprintf(tfi,"-d \"set_color mol_%s_%d, [%d,%d,%d]\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CAtom*)g_oaAtoms[z2])->m_pElement->ColorR((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorG((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching),((CAtom*)g_oaAtoms[z2])->m_pElement->ColorB((float)z/(g_laTDOSteps.GetSize()-1)*g_fTDOBleaching));
7333
for (z=0;z<g_laTDOSteps.GetSize();z++)
7335
for (z2=0;z2<g_oaAtoms.GetSize();z2++)
7337
if ((z2 == g_iVirtAtomType) && (!g_bSaveVirtAtoms))
7339
mfprintf(tfi,"-d \"color mol_%s_%d, tdo_%s_%d_%06d and name %s\" ",((CAtom*)g_oaAtoms[z2])->m_sName,z+1,((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,g_laTDOSteps[z],((CAtom*)g_oaAtoms[z2])->m_sName);
7345
sprintf(buf,"chmod 755 tdo_pymol_%s_%d%s.sh",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,g_iSaveRefMol+1,multibuf);
7346
mprintf("Executing \"%s\"...\n",buf);
7354
mprintf("\nCluster trajectory was saved as %s.\n",g_sRefEnv);
7357
if (g_bSaveJustTraj)
7359
fclose(g_fSaveJustTraj);
7360
/* strcpy(buf,g_sInputTraj);
7361
p = strrchr(buf,'.');
7363
strcat(buf,multibuf);
7364
strcat(buf,".out.xyz");*/
7365
// mprintf("\nProcessed output trajectory was saved as traj_out.xyz\n",buf);
7368
if (g_bIRSpec && g_bGlobalIR)
7370
mprintf(WHITE,"\n*** Global IR Spectrum\n");
7371
g_pGlobalIR->Finish(multibuf);
7374
if (g_bVACF && g_bGlobalVACF)
7376
mprintf(WHITE,"\n*** Global velocity autocorrelation function\n");
7377
if (g_pGlobalVACF->m_bDerivative)
7379
mprintf(" Deriving velocities...\n");
7380
mprintf(WHITE," [");
7381
tfs = g_iGesAtomCount/60.0;
7383
for (z2=0;z2<g_iGesAtomCount;z2++)
7385
if (fmod(z2,tfs) < 1)
7388
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7391
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7393
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
7394
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
7398
mprintf(WHITE,"]\n");
7400
if (g_bVACFCacheMode)
7402
tfs = g_iGesAtomCount/60.0;
7405
mprintf(" Autocorrelating cached vectors...\n");
7406
mprintf(WHITE," [");
7407
/* fft = new CFFT();
7408
fft->PrepareFFT_C2C(2*g_iSteps);
7410
fft2->PrepareInverseFFT_C2C(2*g_iSteps);*/
7412
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7413
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7415
ptfa2->SetSize(g_iSteps);
7417
try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
7418
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7420
ptfa3->SetSize(g_iSteps);
7422
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
7423
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7425
ac->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
7427
for (z2=0;z2<g_iGesAtomCount;z2++)
7429
if (fmod(z2,tfs) < 1.0)
7432
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7435
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7437
if (g_pGlobalVACF->m_bMassWeight)
7438
tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
7442
for (z3=0;z3<(int)g_iSteps;z3++)
7443
(*ptfa2)[z3] = (*ptfa)[z3*3];
7444
ac->AutoCorrelate(ptfa2,ptfa3);
7445
// mprintf("Global Atom %d X: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7446
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7447
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7450
for (z3=0;z3<(int)g_iSteps;z3++)
7451
(*ptfa2)[z3] = (*ptfa)[z3*3+1];
7452
ac->AutoCorrelate(ptfa2,ptfa3);
7453
// mprintf("Global Atom %d Y: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7454
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7455
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7458
for (z3=0;z3<(int)g_iSteps;z3++)
7459
(*ptfa2)[z3] = (*ptfa)[z3*3+2];
7460
ac->AutoCorrelate(ptfa2,ptfa3);
7461
// mprintf("Global Atom %d Z: %f + %f = %f.\n",z2+1,g_pGlobalVACF->m_pData[0],(*ptfa3)[0]*tf,g_pGlobalVACF->m_pData[0]+(*ptfa3)[0]*tf);
7462
for (z3=0;z3<(int)g_pGlobalVACF->m_iSize;z3++)
7463
g_pGlobalVACF->m_pData[z3] += (*ptfa3)[z3] * tf;
7474
mprintf(" Autocorrelating cached vectors...\n");
7475
mprintf(WHITE," [");
7476
for (z2=0;z2<g_iGesAtomCount;z2++)
7478
if (fmod(z2,tfs) < 1.0)
7480
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[z2];
7481
for (z3=0;z3<g_pGlobalVACF->m_iSize;z3+=g_pGlobalVACF->m_iStride) // Das ist das Tau
7484
for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
7485
tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
7486
g_pGlobalVACF->m_pData[z3/g_pGlobalVACF->m_iStride] += tf/(g_iSteps-z3);
7490
mprintf(WHITE,"]\n");
7491
mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
7492
g_pGlobalVACF->MultiplyCached(1.0/g_iGesAtomCount);
7494
if (g_pGlobalVACF->m_bDecomposeModes)
7496
tfs = g_iGesAtomCount*g_iGesAtomCount*3/60.0;
7498
mprintf(" Allocating cross-correlation matrix (%s)...\n",FormatBytes((double)sizeof(float)*g_pGlobalVACF->m_iSize*g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3));
7500
g_pGlobalVACF->m_oaCCRMatrix.SetMaxSize(g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);
7501
for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)
7503
for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)
7505
// mprintf("X: %X\n",g_pGlobalVACF);
7506
// mprintf("%d - %d -->\n",z2,z3);
7507
try { ptfa = new CxFloatArray("main():ptfa"); } catch(...) { ptfa = NULL; }
7508
if (ptfa == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7511
ptfa->SetSize(g_pGlobalVACF->m_iSize);
7513
// mprintf("X2: %X\n",g_pGlobalVACF);
7514
g_pGlobalVACF->m_oaCCRMatrix.Add(ptfa);
7515
// mprintf("%d - %d <--\n",z2,z3);
7519
mprintf(" Computing %d cross-correlations...\n",g_pGlobalVACF->m_iParticles*3*g_pGlobalVACF->m_iParticles*3);
7520
mprintf(WHITE," [");
7522
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
7523
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7525
ptfa2->SetSize(g_iSteps);
7527
try { ptfa2b = new CxFloatArray("main():ptfa2b"); } catch(...) { ptfa2b = NULL; }
7528
if (ptfa2b == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7530
ptfa2b->SetSize(g_iSteps);
7532
try { ccr = new CCrossCorrelation(); } catch(...) { ccr = NULL; }
7533
if (ccr == NULL) NewException((double)sizeof(CCrossCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7535
ccr->Init(g_iSteps,g_pGlobalVACF->m_iSize,g_bACFFFT);
7539
for (z2=0;z2<g_iGesAtomCount;z2++)
7541
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z2] > 1000))
7544
ptfa = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti];
7546
for (z2b=0;z2b<3;z2b++)
7549
for (z3=0;z3<g_iGesAtomCount;z3++)
7551
if (fmod(z2*g_iGesAtomCount*3+z2b*g_iGesAtomCount+z3,tfs) < 1.0)
7554
if (g_pGlobalVACF->m_bExcludeR0 && (g_waAtomRealElement[z3] > 1000))
7557
ptfab = (CxFloatArray*)g_pGlobalVACF->m_oaCache[ti2];
7559
if (g_pGlobalVACF->m_bMassWeight)
7560
tf = ((CAtom*)g_oaAtoms[g_waAtomRealElement[z2]])->m_pElement->m_fMass;
7563
for (z3b=0;z3b<3;z3b++)
7565
for (z4=0;z4<(int)g_iSteps;z4++)
7567
(*ptfa2)[z4] = (*ptfa)[z4*3+z2b];
7568
(*ptfa2b)[z4] = (*ptfab)[z4*3+z3b];
7570
ccr->CrossCorrelate(ptfa2,ptfa2b,(CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b]);
7571
// mprintf("z2=%d, z2b=%d, z3=%d, z3b=%d, I=%d\n",z2,z2b,z3,z3b,ti*g_pGlobalVACF->m_iParticles*9 + z2b*g_pGlobalVACF->m_iParticles*3 + ti2*3 + z3b);
7583
mprintf(WHITE,"]\n");
7585
/* for (z2=0;z2<g_pGlobalVACF->m_iParticles*3;z2++)
7587
for (z3=0;z3<g_pGlobalVACF->m_iParticles*3;z3++)
7588
mprintf("%6G ",((CxFloatArray*)g_pGlobalVACF->m_oaCCRMatrix[z2*g_pGlobalVACF->m_iParticles*3+z3])->GetAt(0));
7592
Interface_DecomposeModes(g_pGlobalVACF->m_iParticles*3, &g_pGlobalVACF->m_oaCCRMatrix);
7594
} // END IF m_bDecomposeModes
7596
} else g_pGlobalVACF->Multiply(1.0/g_iGesAtomCount);
7598
mprintf(" Saving global VACF as acf_global%s.csv ...\n",multibuf);
7599
g_pGlobalVACF->WriteACF("acf_global",multibuf,".csv");
7601
if (g_pGlobalVACF->m_iMirror != 0)
7603
mprintf(" Mirroring global VACF...\n");
7604
g_pGlobalVACF->Mirror(g_pGlobalVACF->m_iMirror);
7605
mprintf(" Saving mirrored global VACF as acf_global.m%s.csv ...\n",multibuf);
7606
g_pGlobalVACF->WriteACF("acf_global.m",multibuf,".csv");
7609
if (g_pGlobalVACF->m_bWindowFunction)
7611
mprintf(" Applying window function...\n");
7612
g_pGlobalVACF->Window();
7613
mprintf(" Saving windowed global VACF as acf_global.w%s.csv ...\n",multibuf);
7614
g_pGlobalVACF->WriteACF("acf_global.w",multibuf,".csv");
7617
if (g_pGlobalVACF->m_bSpectrum)
7619
mprintf(" Performing Fourier transformation...\n");
7621
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
7622
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7624
g_pFFT->PrepareFFT_C2C(g_pGlobalVACF->m_iSize+g_pGlobalVACF->m_iZeroPadding);
7625
g_pGlobalVACF->Transform(g_pFFT);
7627
g_pGlobalVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
7628
if (g_pGlobalVACF->m_bACF_DB)
7630
mprintf(" Normalising spectrum to decibel...\n");
7631
g_pGlobalVACF->m_pSpectrum->MakeDB();
7634
mprintf(" Normalising integral of spectrum...\n");
7635
g_pGlobalVACF->m_pSpectrum->SetIntegral(1000000.0f);
7637
if (g_pGlobalVACF->m_bWindowFunction)
7639
mprintf(" Saving spectrum as power_global_w%s.csv ...\n",multibuf);
7640
g_pGlobalVACF->m_pSpectrum->Write("power_global_w",multibuf,".csv");
7643
mprintf(" Saving spectrum as power_global%s.csv ...\n",multibuf);
7644
g_pGlobalVACF->m_pSpectrum->Write("power_global",multibuf,".csv");
7652
for (z=0;z<g_iVFCorrCount;z++)
7653
fclose(g_fVFCorr[z]);
7659
for (z=0;z<g_oaObserv.GetSize();z++)
7661
o = (CObservation*)g_oaObserv[z];
7662
mprintf(YELLOW,"\n>>> Observation %d >>>\n",z+1);
7664
if (o->m_pConditions != NULL)
7666
if (o->m_bSecondShowMol)
7667
mprintf(WHITE,"\n#### Condition between RM and 1st OM ####\n");
7669
o->m_pConditions->PrintData();
7670
if (o->m_pConditions->m_oaConditionSubGroups.GetSize()==2)
7671
o->m_pConditions->PrintTable();
7674
if ((o->m_bSecondShowMol) && (o->m_pConditionsOM2 != NULL))
7676
mprintf(WHITE,"\n\n#### Condition between RM and 2nd OM ####\n");
7677
o->m_pConditionsOM2->PrintData();
7678
if (o->m_pConditionsOM2->m_oaConditionSubGroups.GetSize()==2)
7679
o->m_pConditionsOM2->PrintTable();
7684
mprintf(WHITE,"* Aggregation Functions\n");
7685
if ((g_iMaxStep > 0) && (((int)g_iSteps*g_iStride) >= g_iMaxStep))
7686
g_pTempTimestep->CopyFrom(GetTimeStep(0)); // Max. Schrittzahl
7687
else g_pTempTimestep->CopyFrom(GetTimeStep(1)); // End Of File
7688
for (zs=0;zs<o->m_pDACF->m_oaSubDACFs.GetSize();zs++)
7690
dacfsub = (CDACFSub*)o->m_pDACF->m_oaSubDACFs[zs];
7691
mprintf(WHITE,"\n > Value Set %d: %s\n",zs+1,dacfsub->m_sName);
7693
o->m_pDACF->FinishDACFSub(g_pTempTimestep,dacfsub);
7695
sprintf(buf,"cond_%s.txt",dacfsub->m_sName);
7696
dacfsub->m_pCondition->PrintData(buf);
7698
mprintf(WHITE,"Neighbour Count Distribution\n");
7699
mprintf(" %.0f Bin entries have been made.\n",dacfsub->m_pNDF->m_fBinEntries);
7700
sprintf(buf,"ncd_%s%s.csv",dacfsub->m_sName,multibuf);
7701
mprintf(" Writing Neighbor Count Distribution File \"%s\"...\n",buf);
7702
dacfsub->m_pNDF->Write_Int("",buf,"");
7706
mprintf(WHITE,"\nDimer Displacement Distribution Function\n");
7707
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDDisp->m_fBinEntries,dacfsub->m_pDDisp->m_fSkipEntries,dacfsub->m_pDDisp->m_fBinEntries+dacfsub->m_pDDisp->m_fSkipEntries);
7708
sprintf(buf,"ddisp_%s%s.csv",dacfsub->m_sName,multibuf);
7709
mprintf(" Saving DDisp File as \"%s\"...\n",buf);
7710
dacfsub->m_pDDisp->Write("",buf,"",false);
7711
sprintf(buf,"ddisp_%s%s.agr",dacfsub->m_sName,multibuf);
7712
mprintf(" Saving DDisp Agr File as \"%s\"...\n",buf);
7713
dacfsub->m_pDDisp->WriteAgr("",buf,"","",false);
7718
mprintf(WHITE,"\nDimer Existence Autocorrelation Function\n");
7719
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDACF->m_fBinEntries,dacfsub->m_pDACF->m_fSkipEntries,dacfsub->m_pDACF->m_fBinEntries+dacfsub->m_pDACF->m_fSkipEntries);
7721
if (dacfsub->m_bBorderMode)
7723
mprintf(" *** New Border Mode ***\n");
7724
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7725
dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps-z2;
7728
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7729
dacfsub->m_pDACF->m_pBin[z2] /= g_iSteps;
7732
if (dacfsub->m_bNewMode)
7734
mprintf(" *** New Mode Processing ***\n");
7735
mprintf(WHITE," [");
7736
tfs = ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize() * ((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize() / 60.0;
7737
ptfa = new CxFloatArray();
7738
ptfa2 = new CxFloatArray();
7739
ac = new CAutoCorrelation();
7740
ac->Init(g_iSteps,o->m_pDACF->m_iDACFRes,true);
7742
ptfa->SetSize(g_iSteps);
7743
ptfa2->SetSize(o->m_pDACF->m_iDACFRes);
7745
for (z2=0;z2<o->m_pDACF->m_iDACFRes;z2++)
7746
dacfsub->m_pDACF->m_pBin[z2] = 0;
7748
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iFirstMol])->m_laSingleMolIndex.GetSize();z2++)
7750
for (z3=0;z3<((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize();z3++)
7752
if (fmod(z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3,tfs) < 1.0)
7755
for (z5=0;z5<(int)g_iSteps;z5++)
7758
for (z4=0;z4<dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize();z4+=2)
7760
for (z5=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4);z5<=dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetAt(z4+1);z5++)
7764
// if (dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize() != 0)
7765
// mprintf("\n%d-%d: %d ",z2,z3,dacfsub->m_piaIntervals[z2*((CMolecule*)g_oaMolecules[o->m_pDACF->m_iSecondMol])->m_laSingleMolIndex.GetSize()+z3].GetSize()/2);
7767
ac->AutoCorrelate(ptfa,ptfa2);
7769
/* if ((z2==0) && (z3==28))
7773
sprintf(buf,"condfunc_%d_%d.csv",z2,z3);
7774
tfia = fopen(buf,"wt");
7775
for (z4=0;z4<(int)g_iSteps;z4++)
7776
fprintf(tfia,"%d; %f\n",z4,(*ptfa)[z4]);
7779
sprintf(buf,"condacf_%d_%d.csv",z2,z3);
7780
tfia = fopen(buf,"wt");
7781
for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7782
fprintf(tfia,"%d; %f\n",z4,(*ptfa2)[z4]);
7786
for (z4=0;z4<o->m_pDACF->m_iDACFRes;z4++)
7787
dacfsub->m_pDACF->m_pBin[z4] += (*ptfa2)[z4];
7790
mprintf(WHITE,"]\n");
7793
if (dacfsub->m_bCorrectEq)
7795
if (dacfsub->m_iRefMol == dacfsub->m_iShowMol)
7797
tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7798
mprintf(" Ensemble Average is %.6f%c.\n",tf,'%');
7800
tf = 1.0/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7801
dacfsub->m_pDACF->MultiplyBin(tf);
7803
tf = dacfsub->m_fEqCounter/g_iSteps/(((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()-1)/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize();
7805
mprintf(" Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7806
dacfsub->m_pDACF->SubtractBin(tf);
7809
tf = 100.0*dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7810
mprintf(" Ensemble Average is %.6f%c.\n",tf,'%');
7812
tf = 1.0/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7813
dacfsub->m_pDACF->MultiplyBin(tf);
7815
tf = dacfsub->m_fEqCounter/g_iSteps/((CMolecule*)g_oaMolecules[dacfsub->m_iRefMol])->m_laSingleMolIndex.GetSize()/((CMolecule*)g_oaMolecules[dacfsub->m_iShowMol])->m_laSingleMolIndex.GetSize();
7817
mprintf(" Subtracting squared average value (%G - %G)...\n",dacfsub->m_pDACF->m_pBin[0],tf);
7818
dacfsub->m_pDACF->SubtractBin(tf);
7822
if (dacfsub->m_pDACF->m_pBin[0] != 0)
7824
mprintf(" Normalizing DACF with factor 1/%G ...\n",dacfsub->m_pDACF->m_pBin[0]);
7825
dacfsub->m_pDACF->MultiplyBin(1.0/dacfsub->m_pDACF->m_pBin[0]);
7826
} else mprintf(" Not normalizing this DACF, first entry is 0.\n");
7828
if (o->m_pDACF->m_bFitDACF)
7832
try { dacfsub->m_pDACF->m_pParameters = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pParameters = NULL; }
7833
if (dacfsub->m_pDACF->m_pParameters == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7835
try { dacfsub->m_pDACF->m_pFitIntegral = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pFitIntegral = NULL; }
7836
if (dacfsub->m_pDACF->m_pFitIntegral == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7838
try { dacfsub->m_pDACF->m_pCorrCoeff = new double[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pCorrCoeff = NULL; }
7839
if (dacfsub->m_pDACF->m_pCorrCoeff == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7841
try { dacfsub->m_pDACF->m_pAdditionalSets = new double*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSets = NULL; }
7842
if (dacfsub->m_pDACF->m_pAdditionalSets == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(double*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7844
try { dacfsub->m_pDACF->m_pAdditionalSetLabels = new char*[o->m_pDACF->m_iFitDegreeMax+1]; } catch(...) { dacfsub->m_pDACF->m_pAdditionalSetLabels = NULL; }
7845
if (dacfsub->m_pDACF->m_pAdditionalSetLabels == NULL) NewException((double)(o->m_pDACF->m_iFitDegreeMax+1)*sizeof(char*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7847
dacfsub->m_pDACF->m_iAdditionalSets = o->m_pDACF->m_iFitDegreeMax+1;
7849
for (z2=0;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7851
dacfsub->m_pDACF->m_pAdditionalSets[z2] = NULL;
7852
dacfsub->m_pDACF->m_pAdditionalSetLabels[z2] = NULL;
7855
mprintf(YELLOW," Please note: ");
7856
mprintf("The lifetime is two times the integral value!\n\n");
7858
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7859
dacfsub->m_pDACF->Fit_PolyExp(z2,5000);
7861
if (o->m_pDACF->m_iFitDegreeMin != o->m_pDACF->m_iFitDegreeMax)
7863
mprintf(YELLOW," DACF fit integral overview:\n");
7864
mprintf(" (use the row with the highest R value)\n\n");
7865
mprintf(WHITE," Degree R Integral [ps] Lifetime [ps]\n");
7866
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7868
if (dacfsub->m_pDACF->m_pFitIntegral[z2] >= 0)
7869
mprintf(" %d %10.8f %-10G %-10G\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2],dacfsub->m_pDACF->m_pFitIntegral[z2],dacfsub->m_pDACF->m_pFitIntegral[z2]*2.0);
7870
else mprintf(" %d %10.8f - -\n",z2,dacfsub->m_pDACF->m_pCorrCoeff[z2]);
7875
sprintf(buf,"dacf_%s%s.csv",dacfsub->m_sName,multibuf);
7876
mprintf(" Saving DACF File as \"%s\"...\n",buf);
7877
dacfsub->m_pDACF->Write("",buf,"",false);
7878
sprintf(buf,"dacf_%s%s.agr",dacfsub->m_sName,multibuf);
7879
mprintf(" Saving DACF Agr File as \"%s\"...\n",buf);
7880
dacfsub->m_pDACF->WriteAgr("",buf,"","",false);
7882
if (o->m_pDACF->m_bLifetimeSpectrum)
7884
for (z2=0;z2<o->m_pDACF->m_oaLTSpectra.GetSize();z2++)
7886
mprintf(WHITE,"\n * Lifetime Spectrum %d\n\n",z2+1);
7887
((CLTSpec*)o->m_pDACF->m_oaLTSpectra[z2])->ComputeSpectrum("dacf",dacfsub->m_sName,multibuf,"",dacfsub->m_pDACF);
7889
/* sprintf(buf,"dacf_lspectrum_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7890
mprintf(" Saving DACF lifetime spectrum as \"%s\"...\n",buf);
7891
dacfsub->m_pDACF->Fit_ExpSpectrum(o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_fLSpecMinExp,o->m_pDACF->m_fLSpecMaxExp,buf,o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iMaxLMIter,false,true);
7893
sprintf(buf,"dacf_lsfit_N%d_P%d_I%d_%s%s.csv",o->m_pDACF->m_iLSpecData,o->m_pDACF->m_iLSpecPoints,o->m_pDACF->m_iMaxLMIter,dacfsub->m_sName,multibuf);
7894
mprintf(" Saving DACF lifetime spectrum fit as \"%s\"...\n",buf);
7895
dacfsub->m_pDACF->Write("",buf,"",false);*/
7901
mprintf(WHITE,"\nDimer Lifetime Distribution Function\n");
7902
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDF->m_fBinEntries,dacfsub->m_pDLDF->m_fSkipEntries,dacfsub->m_pDLDF->m_fBinEntries+dacfsub->m_pDLDF->m_fSkipEntries);
7903
sprintf(buf,"dldf_%s%s.csv",dacfsub->m_sName,multibuf);
7904
mprintf(" Saving DLDF File as \"%s\"...\n",buf);
7905
dacfsub->m_pDLDF->Write("",buf,"",false);
7906
sprintf(buf,"dldf_%s%s.agr",dacfsub->m_sName,multibuf);
7907
mprintf(" Saving DLDF Agr File as \"%s\"...\n",buf);
7908
dacfsub->m_pDLDF->WriteAgr("",buf,"","",false);
7913
mprintf(WHITE,"\nDimer Lifetime Displacement Distribution Function\n");
7914
mprintf(" %.0f Bin entries have been made (%.0f skipped, %.0f total).\n",dacfsub->m_pDLDisp->m_fBinEntries,dacfsub->m_pDLDisp->m_fSkipEntries,dacfsub->m_pDLDisp->m_fBinEntries+dacfsub->m_pDLDisp->m_fSkipEntries);
7915
mprintf(" Normalizing bin integral to 1000000...\n");
7916
dacfsub->m_pDLDisp->NormalizeBinIntegral(1000000.0);
7917
sprintf(buf,"dldisp_%s%s",dacfsub->m_sName,multibuf);
7918
mprintf(" Saving DLDisp triples as \"%s_triples.csv\"...\n",buf);
7919
dacfsub->m_pDLDisp->Write("",buf,"_triples.csv");
7920
mprintf(" Saving DLDisp matrix as \"%s_matrix.csv\"...\n",buf);
7921
dacfsub->m_pDLDisp->WriteCSV("",buf,"_matrix.csv");
7922
mprintf(" Saving DLDisp Mathematica Notebook \"%s.nb\"...\n",buf);
7923
dacfsub->m_pDLDisp->WriteMathematicaNb("",buf,".nb",false);
7924
mprintf(" Saving DLDisp Gnuplot Input \"%s.gp\"...\n",buf);
7925
dacfsub->m_pDLDisp->WriteGnuplotInput("",buf,"",false);
7930
mprintf(WHITE,"\nPair Mean Square Displacement\n");
7931
mprintf(" %.0f Bin entries have been made.\n",dacfsub->m_pPairMSD->m_fBinEntries);
7932
mprintf(" Calculating average values...\n");
7933
dacfsub->m_pPairMSD->BuildAverage();
7934
sprintf(buf,"pairmsd_%s%s",dacfsub->m_sName,multibuf);
7935
mprintf(" Saving Pair MSD as \"%s.csv\"...\n",buf);
7936
dacfsub->m_pPairMSD->Write("",buf,".csv");
7939
if (o->m_pDACF->m_bDACFGrid && o->m_pDACF->m_bFitDACF)
7941
mprintf(WHITE,"\n*** Condition Grid fitting overview:\n\n");
7942
mprintf(" Degree R(min) R(avg) R(max)\n");
7943
o->m_pDACF->CalcGridFitParms();
7944
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7945
mprintf(" %d %10.8f %10.8f %10.8f\n",z2,o->m_pDACF->m_pFitRMin[z2],o->m_pDACF->m_pFitRAvg[z2],o->m_pDACF->m_pFitRMax[z2]);
7948
for (z2=o->m_pDACF->m_iFitDegreeMin;z2<=o->m_pDACF->m_iFitDegreeMax;z2++)
7950
if ((o->m_pDACF->m_iGridMode == 3) || (o->m_pDACF->m_iGridMode == 5))
7952
if (o->m_pDACF->m_bGridCon)
7954
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7955
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7957
o->m_pDACF->CreateGridFit2DF(temp2df,z2,false);
7958
sprintf(buf,"dacf_gridint_%s%s_%dexp",o->m_pDACF->m_sName,multibuf,z2);
7959
mprintf(" Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7960
temp2df->Write("",buf,"_triples.csv");
7961
mprintf(" Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7962
temp2df->WriteCSV("",buf,"_matrix.csv");
7963
mprintf(" Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7964
temp2df->WriteMathematicaNb("",buf,".nb",false);
7965
mprintf(" Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7966
temp2df->WriteGnuplotInput("",buf,"",false);
7969
if (o->m_pDACF->m_bGridInt)
7971
try { temp2df = new C2DF(); } catch(...) { temp2df = NULL; }
7972
if (temp2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7974
o->m_pDACF->CreateGridFit2DF(temp2df,z2,true);
7975
sprintf(buf,"dacf_gridint_%s%s_%dexp_int%.2f",o->m_pDACF->m_sName,multibuf,z2,o->m_pDACF->m_fGridIntGap);
7976
mprintf(" Saving Grid Integral triples as \"%s_triples.csv\"...\n",buf);
7977
temp2df->Write("",buf,"_triples.csv");
7978
mprintf(" Saving Grid Integral matrix as \"%s_matrix.csv\"...\n",buf);
7979
temp2df->WriteCSV("",buf,"_matrix.csv");
7980
mprintf(" Saving Grid Integral Mathematica Notebook \"%s.nb\"...\n",buf);
7981
temp2df->WriteMathematicaNb("",buf,".nb",false);
7982
mprintf(" Saving Grid Integral Gnuplot Input \"%s.gp\"...\n",buf);
7983
temp2df->WriteGnuplotInput("",buf,"",false);
7988
if (o->m_pDACF->m_bGridCon)
7990
try { tdf = new CDF(); } catch(...) { tdf = NULL; }
7991
if (tdf == NULL) NewException((double)sizeof(CDF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
7993
// o->m_pDACF->CreateGridFitDF(tdf,z2,false);
8000
} // END IF AGGREGATION
8004
mprintf(WHITE,"* Density Distribution Function\n");
8005
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDensityDF->m_pDensDF->m_fBinEntries,o->m_pDensityDF->m_pDensDF->m_fSkipEntries,ZeroDivide(o->m_pDensityDF->m_pDensDF->m_fSkipEntries,o->m_pDensityDF->m_pDensDF->m_fBinEntries+o->m_pDensityDF->m_pDensDF->m_fSkipEntries)*100.0);
8007
mprintf(" Correcting radial distribution...\n");
8008
o->m_pDensityDF->m_pDensDF->CorrectRadialDist();
8010
mprintf(" Scaling values to match final density...\n");
8012
if (o->m_pDensityDF->m_bDensityMass)
8014
o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8015
o->m_pDensityDF->m_pDensDF->MultiplyBin(1.66054e6 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8018
o->m_pDensityDF->m_pDensDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8019
o->m_pDensityDF->m_pDensDF->MultiplyBin(1.0e9 / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8022
/* if (g_bDoubleBox)
8024
o->m_pDensityDF->m_pDensDF->MultiplyBin(g_iDoubleBoxFactor);
8025
o->m_pDensityDF->m_pDensDF->MultiplyIntegral(g_iDoubleBoxFactor);
8028
sprintf(buf,"density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
8029
mprintf(" Saving Density DF as \"%s\"...\n",buf);
8030
o->m_pDensityDF->m_pDensDF->Write("",buf,"",true);
8031
sprintf(buf,"density_df_%s%s.agr",o->m_pDensityDF->m_sName,multibuf);
8032
mprintf(" Saving Density DF AGR file as \"%s\"...\n",buf);
8033
o->m_pDensityDF->m_pDensDF->WriteAgr("",buf,"",o->m_pDensityDF->m_sName,true);
8034
if (o->m_pDensityDF->m_iHistogramRes != 0)
8036
mprintf(" Calculating Histogram...\n");
8037
o->m_pDensityDF->m_pDensDF->CalcHistogram();
8038
sprintf(buf,"his_density_df_%s%s.csv",o->m_pDensityDF->m_sName,multibuf);
8039
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8040
o->m_pDensityDF->m_pDensDF->WriteHistogram("",buf,"");
8046
mprintf(WHITE,"* Vector Reorientation Dynamics\n");
8047
o->m_pRDyn->Finish(multibuf);
8052
mprintf(WHITE,"* IR Spectrum\n");
8053
o->m_pIRSpec->Finish(multibuf);
8058
mprintf(WHITE,"* Velocity Autocorrelation Function\n");
8059
if (o->m_pVACF->m_bDerivative)
8061
mprintf(" Deriving velocities...\n");
8062
mprintf(WHITE," [");
8063
tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
8064
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
8066
if (fmod(z2,tfs) < 1)
8068
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
8070
for (z3=0;z3<(int)g_iSteps*3-3;z3++)
8071
(*ptfa)[z3] = (*ptfa)[z3+3] - (*ptfa)[z3];
8073
mprintf(WHITE,"]\n");
8075
if (g_bVACFCacheMode)
8077
mprintf(" Autocorrelating cached vectors...\n");
8078
mprintf(WHITE," [");
8079
tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes)/60.0;
8081
try { ptfa2 = new CxFloatArray("main():ptfa2"); } catch(...) { ptfa2 = NULL; }
8082
if (ptfa2 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8084
ptfa2->SetSize(g_iSteps);
8086
try { ptfa3 = new CxFloatArray("main():ptfa3"); } catch(...) { ptfa3 = NULL; }
8087
if (ptfa3 == NULL) NewException((double)sizeof(CxFloatArray),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8089
ptfa3->SetSize(g_iSteps);
8091
try { ac = new CAutoCorrelation(); } catch(...) { ac = NULL; }
8092
if (ac == NULL) NewException((double)sizeof(CAutoCorrelation),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8094
ac->Init(g_iSteps,o->m_pVACF->m_iSize,g_bACFFFT);
8096
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize();z2++)
8098
for (z3=0;z3<o->m_pVACF->m_oAtoms.m_baAtomType.GetSize();z3++)
8100
if (o->m_pVACF->m_bMassWeight)
8101
tf = ((CAtom*)g_oaAtoms[o->m_pVACF->m_oAtoms.m_baRealAtomType[z3]])->m_pElement->m_fMass;
8103
for (z4=0;z4<((CxIntArray*)o->m_pVACF->m_oAtoms.m_oaAtoms[z3])->GetSize();z4++)
8105
if (fmod(ti,tfs) < 1)
8107
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[ti];
8110
for (z5=0;z5<(int)g_iSteps;z5++)
8111
(*ptfa2)[z5] = (*ptfa)[z5*3];
8112
ac->AutoCorrelate(ptfa2,ptfa3);
8113
// mprintf("Lokal Atom %d X: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
8114
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
8115
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
8118
for (z5=0;z5<(int)g_iSteps;z5++)
8119
(*ptfa2)[z5] = (*ptfa)[z5*3+1];
8120
ac->AutoCorrelate(ptfa2,ptfa3);
8121
// mprintf("Lokal Atom %d Y: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
8122
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
8123
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
8126
for (z5=0;z5<(int)g_iSteps;z5++)
8127
(*ptfa2)[z5] = (*ptfa)[z5*3+2];
8128
ac->AutoCorrelate(ptfa2,ptfa3);
8129
// mprintf("Lokal Atom %d Z: %f + %f = %f.\n",ti+1,o->m_pVACF->m_pData[0],(*ptfa3)[0]*tf,o->m_pVACF->m_pData[0]+(*ptfa3)[0]*tf);
8130
for (z5=0;z5<(int)o->m_pVACF->m_iSize;z5++)
8131
o->m_pVACF->m_pData[z5] += (*ptfa3)[z5]*tf;
8143
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pVACF->m_iShowAtomGes;z2++)
8145
if (fmod(z2,tfs) < 1)
8147
ptfa = (CxFloatArray*)o->m_pVACF->m_oaCache[z2];
8148
for (z3=0;z3<o->m_pVACF->m_iSize;z3+=o->m_pVACF->m_iStride) // Das ist das Tau
8151
for (z4=0;z4<(int)g_iSteps-z3;z4++) // Das ist der Startpunkt
8152
tf += (*ptfa)[z4*3]*(*ptfa)[(z4+z3)*3] + (*ptfa)[z4*3+1]*(*ptfa)[(z4+z3)*3+1] + (*ptfa)[z4*3+2]*(*ptfa)[(z4+z3)*3+2];
8153
o->m_pVACF->m_pData[z3/o->m_pVACF->m_iStride] += tf/(g_iSteps-z3);
8157
mprintf(WHITE,"]\n");
8158
// mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",g_pGlobalVACF->m_oaCache.GetSize(),g_iSteps,g_pGlobalVACF->m_iSize);
8159
mprintf(" %d atoms, %d time steps and %d correlation depths processed.\n",ti,g_iSteps,o->m_pVACF->m_iSize);
8160
o->m_pVACF->MultiplyCached(1.0/g_iGesAtomCount);
8161
} else o->m_pVACF->Multiply(1.0/g_iGesAtomCount);
8162
/* sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
8163
mprintf(" Saving ACF as %s ...\n",buf);
8164
o->m_pVACF->WriteACF("",buf,"");*/
8166
sprintf(buf,"acf_%s%s.csv",o->m_pVACF->m_sName,multibuf);
8167
mprintf(" Saving ACF as %s ...\n",buf);
8168
o->m_pVACF->WriteACF("",buf,"");
8170
if (o->m_pVACF->m_iMirror != 0)
8172
mprintf(" Mirroring ACF...\n");
8173
o->m_pVACF->Mirror(o->m_pVACF->m_iMirror);
8174
sprintf(buf,"acf_%s%s.m.csv",o->m_pVACF->m_sName,multibuf);
8175
mprintf(" Saving mirrored ACF as %s ...\n",buf);
8176
o->m_pVACF->WriteACF("",buf,"");
8179
if (o->m_pVACF->m_bWindowFunction)
8181
mprintf(" Applying window function to ACF...\n");
8182
o->m_pVACF->Window();
8183
sprintf(buf,"acf_%s%s.w.csv",o->m_pVACF->m_sName,multibuf);
8184
mprintf(" Saving windowed ACF as %s ...\n",buf);
8185
o->m_pVACF->WriteACF("",buf,"");
8188
if (o->m_pVACF->m_bSpectrum)
8190
mprintf(" Performing fourier transformation...\n");
8192
try { g_pFFT = new CFFT(); } catch(...) { g_pFFT = NULL; }
8193
if (g_pFFT == NULL) NewException((double)sizeof(CFFT),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8195
/* if (o->m_pVACF->m_bMirror)
8196
g_pFFT->PrepareFFT_C2C((o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding)*2);
8197
else */g_pFFT->PrepareFFT_C2C(o->m_pVACF->m_iSize+o->m_pVACF->m_iZeroPadding);
8198
o->m_pVACF->Transform(g_pFFT);
8200
o->m_pVACF->m_pSpectrum->SetMaxRWL(1E7f/299.792f/g_fTimestepLength/g_iStride);
8201
if (o->m_pVACF->m_bACF_DB)
8203
mprintf(" Normalising spectrum to decibel...\n");
8204
o->m_pVACF->m_pSpectrum->MakeDB();
8207
mprintf(" Normalising integral of spectrum...\n");
8208
o->m_pVACF->m_pSpectrum->SetIntegral(1000000.0f);
8210
/* if (o->m_pVACF->m_bWindowFunction)
8212
sprintf(buf,"power_%s_w%s.csv",o->m_pVACF->m_sName,multibuf);
8213
mprintf(" Saving spectrum as %s ...\n",buf);
8214
o->m_pVACF->m_pSpectrum->Write("",buf,"");
8217
sprintf(buf,"power_%s%s.csv",o->m_pVACF->m_sName,multibuf);
8218
mprintf(" Saving spectrum as %s ...\n",buf);
8219
o->m_pVACF->m_pSpectrum->Write("",buf,"");
8226
mprintf(WHITE,"* Mean Square Displacement\n");
8227
if (g_bMSDCacheMode)
8229
mprintf(" Autocorrelating cached vectors...\n");
8230
// mprintf(WHITE," [");
8231
// tfs = (((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms)/60.0;
8232
for (z2=0;z2<((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;z2++)
8234
// if (fmod(z2,tfs) < 1.0)
8235
// mprintf(WHITE,"#");
8236
mprintf(" %4d/%d: [",z2+1,((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms);
8237
tfs = o->m_pMSD->m_iResolution/50.0;
8238
ptfa = (CxFloatArray*)o->m_pMSD->m_oaCache[z2];
8239
for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8241
if (fmod(z3,tfs) < 1.0)
8245
if (o->m_pMSD->m_bTakeX && o->m_pMSD->m_bTakeY && o->m_pMSD->m_bTakeZ)
8247
for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8248
tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2) + pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2) + pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8251
for (z4=0;z4<(int)g_iSteps/g_iStride-z3-1;z4+=o->m_pMSD->m_iStride2) // Das ist der Startpunkt
8253
if (o->m_pMSD->m_bTakeX)
8254
tf += pow((*ptfa)[(z3+z4)*3]-(*ptfa)[z4*3],2);
8255
if (o->m_pMSD->m_bTakeY)
8256
tf += pow((*ptfa)[(z3+z4)*3+1]-(*ptfa)[z4*3+1],2);
8257
if (o->m_pMSD->m_bTakeZ)
8258
tf += pow((*ptfa)[(z3+z4)*3+2]-(*ptfa)[z4*3+2],2);
8262
o->m_pMSD->m_pMSD->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8263
o->m_pMSD->m_pMSD->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8264
if (o->m_pMSD->m_bSplit)
8266
o->m_pMSD->m_pSplitMSD[z2]->AddToBin_Index(z3/o->m_pMSD->m_iStride,tf/(g_iSteps/g_iStride-z3-1)*o->m_pMSD->m_iStride2);
8267
o->m_pMSD->m_pSplitMSD[z2]->m_fBinEntries += (g_iSteps/g_iStride-z3-1)/o->m_pMSD->m_iStride2;
8272
for (z3=0;z3<o->m_pMSD->m_iResolution;z3+=o->m_pMSD->m_iStride) // Das ist das Tau
8273
o->m_pMSD->m_pMSD->m_pBin[z3/o->m_pMSD->m_iStride] /= ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()*o->m_pMSD->m_iShowAtoms;
8274
// mprintf(WHITE,"]\n");
8277
o->m_pMSD->m_pMSD->BuildAverage();
8279
mprintf(" %.0f bin entries.\n",o->m_pMSD->m_pMSD->m_fBinEntries);
8280
o->m_pMSD->m_pMSD->CalcDeriv(1.0f);
8281
sprintf(buf,"msd_%s%s.csv",o->m_pMSD->m_sName,multibuf);
8282
mprintf(" Saving result as %s ...\n",buf);
8283
if (o->m_pMSD->m_bSplit)
8285
o->m_pMSD->WriteSplit(buf);
8286
} else o->m_pMSD->m_pMSD->Write("",buf,"");
8287
mprintf(WHITE,"\n Performing linear regression on interval %.2f - %.2f ps...\n",o->m_pMSD->m_pMSD->m_fMinVal+0.5*(o->m_pMSD->m_pMSD->m_fMaxVal-o->m_pMSD->m_pMSD->m_fMinVal),o->m_pMSD->m_pMSD->m_fMaxVal);
8288
o->m_pMSD->m_pMSD->LinReg(o->m_pMSD->m_pMSD->m_iResolution/2,o->m_pMSD->m_pMSD->m_iResolution-1,&c0,&c1,&r);
8289
mprintf(" MSD(t) = %.6f + %.6f * t (units: [MSD] = pm^2, [t] = ps).\n",c0,c1);
8290
mprintf(" R = %.6f\n",r);
8292
if (o->m_pMSD->m_bTakeX)
8294
if (o->m_pMSD->m_bTakeY)
8296
if (o->m_pMSD->m_bTakeZ)
8299
mprintf(" Please note: Dimensionality of the system is %d here.\n",ti);
8300
mprintf(" Diffusion coefficient D = %.6f pm^2/ps = %G m^2/s.\n",c1/2.0/ti,c1/2.0e12/ti);
8301
mprintf(" (assuming <x^2> = %d * D * t)\n\n",2*ti);
8306
mprintf(WHITE,"* Neighborhood Analysis\n");
8307
mprintf(" %.0f bin entries.\n",o->m_pNbAnalysis->m_fBinEntries);
8308
/* for (z2=0;z2<o->m_pNbAnalysis->m_iMaxNbCount-o->m_pNbAnalysis->m_iMinNbCount;z2++)
8309
mprintf(" - %d: %.0f bin entries, %.0f skipped.\n",z2+1,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fBinEntries,((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fSkipEntries);
8312
try { pf = new float[o->m_pNbAnalysis->m_iNbCount]; } catch(...) { pf = NULL; }
8313
if (pf == NULL) NewException((double)o->m_pNbAnalysis->m_iNbCount*sizeof(float),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8315
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8316
pf[z3] = (float)((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->NormBinIntegral();
8318
sprintf(buf,"nbh_ncf_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8319
mprintf(" Saving neighbor count function as %s ...\n",buf);
8320
a = OpenFileWrite(buf,true);
8321
mfprintf(a,"# distance [pm]; ");
8322
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8324
mfprintf(a,"%d neighbors",z3);
8325
if (z3 < o->m_pNbAnalysis->m_iNbCount)
8329
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8331
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8332
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount+1;z3++)
8334
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaNPF[z3])->m_pBin[z2]/o->m_pNbAnalysis->m_pNPFCount->m_pBin[z2]*100.0f);
8335
if (z3 < o->m_pNbAnalysis->m_iNbCount)
8342
sprintf(buf,"nbh_dist_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8343
mprintf(" Calculating mean values and standard deviation...\n");
8344
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8345
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CalcMeanSD();
8346
mprintf(" Saving neighborhood distribution as %s ...\n",buf);
8347
a = OpenFileWrite(buf,true);
8348
mfprintf(a,"# distance [pm]; ");
8349
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8351
mfprintf(a,"%d. neighbor",z3+1);
8352
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8356
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8358
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8359
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8361
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8362
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8369
sprintf(buf,"nbh_minmaxavgsd_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8370
mprintf(" Saving neighborhood min/max/avg/sd as %s ...\n",buf);
8371
a = OpenFileWrite(buf,true);
8372
mfprintf(a,"# n-th neighbor; min. dist [pm]; max. dist [pm]; avg. dist [pm]; standard deviation [pm]\n");
8373
for (z2=0;z2<o->m_pNbAnalysis->m_iNbCount;z2++)
8375
mfprintf(a,"%d; %.4f; %.4f; %.4f; %.4f",z2+1,o->m_pNbAnalysis->m_pDistMin[z2],o->m_pNbAnalysis->m_pDistMax[z2],((CDF*)o->m_pNbAnalysis->m_oaDF[z2])->m_fMean,((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_fSD);
8380
sprintf(buf,"nbh_rdf_decomp_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8381
mprintf(" Saving neighborhood RDF decomposition as %s ...\n",buf);
8382
a = OpenFileWrite(buf,true);
8383
mfprintf(a,"# distance [pm]; ");
8384
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8386
mfprintf(a,"%d. neighbor",z3+1);
8387
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8391
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8393
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(pf[z3]);
8394
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->CorrectRadialDist();
8396
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8398
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize());
8400
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->MultiplyBin(g_iDoubleBoxFactor);
8402
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8404
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8405
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8407
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8408
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8415
sprintf(buf,"nbh_rdf_decomp_cumulative_%s%s.csv",o->m_pNbAnalysis->m_sName,multibuf);
8416
mprintf(" Saving cumulative neighborhood RDF decomposition as %s ...\n",buf);
8417
a = OpenFileWrite(buf,true);
8418
mfprintf(a,"# distance [pm]; ");
8419
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8421
mfprintf(a,"%d. neighbor",z3+1);
8422
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8426
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8427
for (z3=1;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8428
((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2] += ((CDF*)o->m_pNbAnalysis->m_oaDF[z3-1])->m_pBin[z2];
8429
for (z2=0;z2<o->m_pNbAnalysis->m_iResolution;z2++)
8431
mfprintf(a,"%.4f; ",o->m_pNbAnalysis->m_fMinDist+(z2+0.5)*(o->m_pNbAnalysis->m_fMaxDist-o->m_pNbAnalysis->m_fMinDist)/o->m_pNbAnalysis->m_iResolution);
8432
for (z3=0;z3<o->m_pNbAnalysis->m_iNbCount;z3++)
8434
mfprintf(a,"%.6f",((CDF*)o->m_pNbAnalysis->m_oaDF[z3])->m_pBin[z2]);
8435
if (z3 < o->m_pNbAnalysis->m_iNbCount-1)
8446
for (zr=0;zr<g_iCDFChannels;zr++)
8448
if (o->m_pDipDF[zr] == NULL)
8450
mprintf(WHITE,"* Dipole Distribution Function\n");
8451
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,ZeroDivide(o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries,o->m_pDipDF[zr]->m_pDipoleDF->m_fSkipEntries+o->m_pDipDF[zr]->m_pDipoleDF->m_fBinEntries)*100.0);
8452
o->m_pDipDF[zr]->m_pDipoleDF->CalcMeanSD();
8453
mprintf(" Mean value: %10G Debye Standard deviation: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMean,o->m_pDipDF[zr]->m_pDipoleDF->m_fSD);
8454
mprintf(" Min. value: %10G Debye Max. value: %10G Debye\n",o->m_pDipDF[zr]->m_pDipoleDF->m_fMinInput,o->m_pDipDF[zr]->m_pDipoleDF->m_fMaxInput);
8455
o->m_pDipDF[zr]->m_pDipoleDF->NormBinIntegral();
8456
sprintf(buf,"dipole_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8457
mprintf(" Saving dipole distribution as %s ...\n",buf);
8458
o->m_pDipDF[zr]->m_pDipoleDF->Write("",buf,"",false);
8459
sprintf(buf,"dipole_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8460
mprintf(" Saving dipole distribution AGR file as \"%s\"...\n",buf);
8461
o->m_pDipDF[zr]->m_pDipoleDF->WriteAgr("",buf,"",o->m_pDipDF[zr]->m_sName,false);
8462
if (o->m_pDipDF[zr]->m_iHistogramRes != 0)
8464
mprintf(" Calculating Histogram...\n");
8465
o->m_pDipDF[zr]->m_pDipoleDF->CalcHistogram();
8466
sprintf(buf,"his_dipdf_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8467
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8468
o->m_pDipDF[zr]->m_pDipoleDF->WriteHistogram("",buf,"");
8472
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8474
fclose(o->m_pDipDF[zr]->m_fDipole[0]);
8475
mprintf(" Saving temporal development as dipole_timedev_%s%s.csv\n",o->m_pDipDF[zr]->m_sName,multibuf);
8478
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8480
fclose(o->m_pDipDF[zr]->m_fDipole[z2]);
8481
mprintf(" Saving temporal development as dipole_timedev_%s_ref%d%s.csv\n",o->m_pDipDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8484
if (o->m_bCombinedPlot)
8486
sprintf(buf,"combined_%s%s.agr",o->m_pDipDF[zr]->m_sName,multibuf);
8487
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8488
o->m_pDipDF[zr]->m_pDipoleDF->CreateCombinedPlot(false);
8489
o->m_pDipDF[zr]->m_pDipoleDF->m_pCombinedPlot->WriteAgr(buf,false);
8493
if (o->m_bObsCertain && o->m_bDecompDist)
8495
sprintf(buf,"dipdf_decomp_%s%s.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8496
mprintf(" Saving DipDF decomposition as \"%s\"...\n",buf);
8497
o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti("",buf,"");
8498
sprintf(buf,"dipdf_decomp_%s%s_cumulative.csv",o->m_pDipDF[zr]->m_sName,multibuf);
8499
mprintf(" Saving cumulative DipoleDF decomposition as \"%s\"...\n",buf);
8500
o->m_pDipDF[zr]->m_pDipoleDF->WriteMulti_Cumulative("",buf,"");
8504
o->WriteTimeDiff(o->m_pDipDF[zr]->m_pDipoleDF,"DipDF","dipdf",o->m_pDipDF[zr]->m_sName,multibuf,false);
8510
for (zr=0;zr<g_iCDFChannels;zr++)
8512
if (o->m_pVDF[zr] == NULL)
8514
mprintf(WHITE,"* Velocity Distribution Function\n");
8515
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVDF[zr]->m_pVDF->m_fBinEntries,o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,ZeroDivide(o->m_pVDF[zr]->m_pVDF->m_fSkipEntries,o->m_pVDF[zr]->m_pVDF->m_fBinEntries+o->m_pVDF[zr]->m_pVDF->m_fSkipEntries)*100.0);
8516
o->m_pVDF[zr]->m_pVDF->CalcMeanSD();
8517
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMean,o->m_pVDF[zr]->m_pVDF->m_fSD);
8518
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pVDF[zr]->m_pVDF->m_fMinInput,o->m_pVDF[zr]->m_pVDF->m_fMaxInput);
8519
o->m_pVDF[zr]->m_pVDF->NormBinIntegral();
8520
sprintf(buf,"vdf_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8521
mprintf(" Saving velocity distribution as %s ...\n",buf);
8522
o->m_pVDF[zr]->m_pVDF->Write("",buf,"",false);
8523
sprintf(buf,"vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8524
mprintf(" Saving velocity distribution AGR file as \"%s\"...\n",buf);
8525
o->m_pVDF[zr]->m_pVDF->WriteAgr("",buf,"",o->m_pVDF[zr]->m_sName,false);
8526
if (o->m_pVDF[zr]->m_iHistogramRes != 0)
8528
mprintf(" Calculating Histogram...\n");
8529
o->m_pVDF[zr]->m_pVDF->CalcHistogram();
8530
sprintf(buf,"his_vdf_%s%s.agr",o->m_pVDF[zr]->m_sName,multibuf);
8531
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8532
o->m_pVDF[zr]->m_pVDF->WriteHistogram("",buf,"");
8536
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8538
fclose(o->m_pVDF[zr]->m_fSpeed[0]);
8539
mprintf(" Saving temporal development as vdf_timedev_%s%s.csv\n",o->m_pVDF[zr]->m_sName,multibuf);
8542
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8544
fclose(o->m_pVDF[zr]->m_fSpeed[z2]);
8545
mprintf(" Saving temporal development as vdf_timedev_%s_ref%d%s.csv\n",o->m_pVDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8548
if (o->m_bCombinedPlot)
8550
sprintf(buf,"combined_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8551
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8552
o->m_pVDF[zr]->m_pVDF->CreateCombinedPlot(false);
8553
o->m_pVDF[zr]->m_pVDF->m_pCombinedPlot->WriteAgr(buf,false);
8557
if (o->m_bObsCertain && o->m_bDecompDist)
8559
sprintf(buf,"vdf_decomp_%s%s.csv",o->m_pVDF[zr]->m_sName,multibuf);
8560
mprintf(" Saving VDF decomposition as \"%s\"...\n",buf);
8561
o->m_pVDF[zr]->m_pVDF->WriteMulti("",buf,"");
8562
sprintf(buf,"vdf_decomp_%s%s_cumulative.csv",o->m_pVDF[zr]->m_sName,multibuf);
8563
mprintf(" Saving cumulative VDF decomposition as \"%s\"...\n",buf);
8564
o->m_pVDF[zr]->m_pVDF->WriteMulti_Cumulative("",buf,"");
8568
o->WriteTimeDiff(o->m_pVDF[zr]->m_pVDF,"VDF","vdf",o->m_pVDF[zr]->m_sName,multibuf,false);
8574
for (zr=0;zr<g_iCDFChannels;zr++)
8576
if (o->m_pPlDF[zr] == NULL)
8578
mprintf(WHITE,"* Plane Distance Distribution Function\n");
8579
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries,o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,ZeroDivide(o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries,o->m_pPlDF[zr]->m_pPlDF->m_fBinEntries+o->m_pPlDF[zr]->m_pPlDF->m_fSkipEntries)*100.0);
8580
o->m_pPlDF[zr]->m_pPlDF->CalcMeanSD();
8581
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMean,o->m_pPlDF[zr]->m_pPlDF->m_fSD);
8582
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pPlDF[zr]->m_pPlDF->m_fMinInput,o->m_pPlDF[zr]->m_pPlDF->m_fMaxInput);
8583
o->m_pPlDF[zr]->m_pPlDF->NormBinIntegral();
8584
sprintf(buf,"pldf_%s%s.csv",o->m_pPlDF[zr]->m_sName,multibuf);
8585
mprintf(" Saving plane distance distribution as %s ...\n",buf);
8586
o->m_pPlDF[zr]->m_pPlDF->Write("",buf,"",false);
8587
sprintf(buf,"pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8588
mprintf(" Saving plane distance distribution AGR file as \"%s\"...\n",buf);
8589
o->m_pPlDF[zr]->m_pPlDF->WriteAgr("",buf,"",o->m_pPlDF[zr]->m_sName,false);
8590
if (o->m_pPlDF[zr]->m_iHistogramRes != 0)
8592
mprintf(" Calculating Histogram...\n");
8593
o->m_pPlDF[zr]->m_pPlDF->CalcHistogram();
8594
sprintf(buf,"his_pldf_%s%s.agr",o->m_pPlDF[zr]->m_sName,multibuf);
8595
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8596
o->m_pPlDF[zr]->m_pPlDF->WriteHistogram("",buf,"");
8603
for (zr=0;zr<g_iCDFChannels;zr++)
8605
if (o->m_pLiDF[zr] == NULL)
8607
mprintf(WHITE,"* Line Distance Distribution Function\n");
8608
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries,o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,ZeroDivide(o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries,o->m_pLiDF[zr]->m_pLiDF->m_fBinEntries+o->m_pLiDF[zr]->m_pLiDF->m_fSkipEntries)*100.0);
8609
o->m_pLiDF[zr]->m_pLiDF->CalcMeanSD();
8610
mprintf(" Mean value: %10G pm/ps Standard deviation: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMean,o->m_pLiDF[zr]->m_pLiDF->m_fSD);
8611
mprintf(" Min. value: %10G pm/ps Max. value: %10G pm/ps\n",o->m_pLiDF[zr]->m_pLiDF->m_fMinInput,o->m_pLiDF[zr]->m_pLiDF->m_fMaxInput);
8613
if (o->m_pLiDF[zr]->m_bRadialCorrect)
8615
mprintf(" Correcting radial distribution...\n");
8616
o->m_pLiDF[zr]->m_pLiDF->CorrectLiRadialDist();
8618
if (o->m_bOthers && o->m_pLiDF[zr]->m_bRadialCorrect)
8620
mprintf(" Scaling LiDF to uniform density...\n");
8621
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8623
if (o->m_bObsCertain)
8625
o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / o->m_waObsRefList.GetSize());
8626
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / o->m_waObsRefList.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8629
o->m_pLiDF[zr]->m_pLiDF->Integrate(true,1.0 / g_iSteps / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8630
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pLiDF[zr]->m_iRefAtomGes);
8634
o->m_pLiDF[zr]->m_pLiDF->MultiplyBin(g_iDoubleBoxFactor);
8635
o->m_pLiDF[zr]->m_pLiDF->MultiplyIntegral(g_iDoubleBoxFactor);
8639
eprintf(" Uniform density not defined if box is not XYZ-periodic!\n");
8645
mprintf(" Scaling LiDF to integral value 1000 ...\n");
8646
o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral(1000.0);
8647
o->m_pLiDF[zr]->m_pLiDF->Integrate(false,1000.0);
8651
o->m_pLiDF[zr]->m_pLiDF->NormBinIntegral();
8652
sprintf(buf,"lidf_%s%s.csv",o->m_pLiDF[zr]->m_sName,multibuf);
8653
mprintf(" Saving line distance distribution as %s ...\n",buf);
8654
o->m_pLiDF[zr]->m_pLiDF->Write("",buf,"",false);
8655
sprintf(buf,"lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8656
mprintf(" Saving line distance distribution AGR file as \"%s\"...\n",buf);
8657
o->m_pLiDF[zr]->m_pLiDF->WriteAgr("",buf,"",o->m_pLiDF[zr]->m_sName,false);
8658
if (o->m_pLiDF[zr]->m_iHistogramRes != 0)
8660
mprintf(" Calculating Histogram...\n");
8661
o->m_pLiDF[zr]->m_pLiDF->CalcHistogram();
8662
sprintf(buf,"his_lidf_%s%s.agr",o->m_pLiDF[zr]->m_sName,multibuf);
8663
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8664
o->m_pLiDF[zr]->m_pLiDF->WriteHistogram("",buf,"");
8671
for (zr=0;zr<g_iCDFChannels;zr++)
8673
if (o->m_pADF[zr] == NULL)
8675
mprintf(WHITE,"* Angular Distribution Function\n");
8676
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pADF[zr]->m_pADF->m_fBinEntries,o->m_pADF[zr]->m_pADF->m_fSkipEntries,ZeroDivide(o->m_pADF[zr]->m_pADF->m_fSkipEntries,o->m_pADF[zr]->m_pADF->m_fBinEntries+o->m_pADF[zr]->m_pADF->m_fSkipEntries)*100.0);
8677
o->m_pADF[zr]->m_pADF->CalcMeanSD();
8678
if (o->m_pADF[zr]->m_bCosine)
8680
mprintf(" Mean value: %10G Standard deviation: %10G\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8681
mprintf(" Min. value: %10G Max. value: %10G\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8684
mprintf(" Mean value: %10G degree Standard deviation: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMean,o->m_pADF[zr]->m_pADF->m_fSD);
8685
mprintf(" Min. value: %10G degree Max. value: %10G degree\n",o->m_pADF[zr]->m_pADF->m_fMinInput,o->m_pADF[zr]->m_pADF->m_fMaxInput);
8687
if (o->m_pADF[zr]->m_bStat)
8689
mprintf(" Applying cone correction...\n");
8690
o->m_pADF[zr]->m_pADF->AngleCorrect();
8692
/* if (o->m_pADF[zr]->m_bMirror)
8694
mprintf(" Making ADF mirror-symmetric...\n");
8695
if (o->m_pADF[zr]->m_bCosine)
8696
o->m_pADF[zr]->m_pADF->Mirror(0.0f);
8697
else o->m_pADF[zr]->m_pADF->Mirror(90.0f);
8699
o->m_pADF[zr]->m_pADF->NormBinIntegral();
8702
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8704
fclose(o->m_pADF[zr]->m_fAngle[0]);
8705
mprintf(" Saving temporal development as adf_timedev_%s%s.csv\n",o->m_pADF[zr]->m_sName,multibuf);
8708
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8710
fclose(o->m_pADF[zr]->m_fAngle[z2]);
8711
sprintf(buf,"adf_timedev_%s_ref%d%s.csv",o->m_pADF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8712
mprintf(" Saving temporal development as %s\n",buf);
8715
// mprintf(" Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_pADF->m_sName);
8716
// FreeFileName("",o->m_pADF->m_sName,"_angle_stat.txt");
8717
// o->m_pADF->m_pAngleStat->Evaluate();
8718
// o->m_pADF->m_pAngleStat->Write("",o->m_pADF->m_sName,"_angle_stat.txt");
8719
// delete o->m_pAngleStat;
8720
delete[] o->m_pADF[zr]->m_fAngle;
8721
o->m_pADF[zr]->m_fAngle = NULL;
8722
if (o->m_bCombinedPlot)
8724
sprintf(buf,"combined_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8725
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8726
o->m_pADF[zr]->m_pADF->CreateCombinedPlot(false);
8727
o->m_pADF[zr]->m_pADF->m_pCombinedPlot->WriteAgr(buf,false);
8730
sprintf(buf,"adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8731
mprintf(" Saving ADF as %s ...\n",buf);
8732
o->m_pADF[zr]->m_pADF->NormBinIntegral();
8733
o->m_pADF[zr]->m_pADF->Write("",buf,"",false);
8734
sprintf(buf,"adf_%s%s.agr",o->m_pADF[zr]->m_sName,multibuf);
8735
mprintf(" Saving ADF AGR file as \"%s\"...\n",buf);
8736
if (o->m_pADF[zr]->m_bCosine)
8737
o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8738
else o->m_pADF[zr]->m_pADF->WriteAgr("",buf,"",o->m_pADF[zr]->m_sName,false);
8739
if (o->m_pADF[zr]->m_iHistogramRes != 0)
8741
mprintf(" Calculating Histogram...\n");
8742
o->m_pADF[zr]->m_pADF->CalcHistogram();
8743
sprintf(buf,"his_adf_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8744
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8745
o->m_pADF[zr]->m_pADF->WriteHistogram("",buf,"");
8748
if (o->m_bObsCertain && o->m_bDecompDist)
8750
sprintf(buf,"adf_decomp_%s%s.csv",o->m_pADF[zr]->m_sName,multibuf);
8751
mprintf(" Saving ADF decomposition as \"%s\"...\n",buf);
8752
o->m_pADF[zr]->m_pADF->WriteMulti("",buf,"");
8753
sprintf(buf,"adf_decomp_%s%s_cumulative.csv",o->m_pADF[zr]->m_sName,multibuf);
8754
mprintf(" Saving cumulative ADF decomposition as \"%s\"...\n",buf);
8755
o->m_pADF[zr]->m_pADF->WriteMulti_Cumulative("",buf,"");
8759
o->WriteTimeDiff(o->m_pADF[zr]->m_pADF,"ADF","adf",o->m_pADF[zr]->m_sName,multibuf,false);
8765
for (zr=0;zr<g_iCDFChannels;zr++)
8767
if (o->m_pDDF[zr] == NULL)
8769
mprintf(WHITE,"* Dihedral Distribution Function\n");
8770
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pDDF[zr]->m_pDDF->m_fBinEntries,o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,ZeroDivide(o->m_pDDF[zr]->m_pDDF->m_fSkipEntries,o->m_pDDF[zr]->m_pDDF->m_fBinEntries+o->m_pDDF[zr]->m_pDDF->m_fSkipEntries)*100.0);
8771
o->m_pDDF[zr]->m_pDDF->CalcMeanSD();
8772
if (o->m_pDDF[zr]->m_bCosine)
8774
mprintf(" Mean value: %10G Standard deviation: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8775
mprintf(" Min. value: %10G Max.value: %10G\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8778
mprintf(" Mean value: %10G degree Standard deviation: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMean,o->m_pDDF[zr]->m_pDDF->m_fSD);
8779
mprintf(" Min. value: %10G degree Max.value: %10G degree\n",o->m_pDDF[zr]->m_pDDF->m_fMinInput,o->m_pDDF[zr]->m_pDDF->m_fMaxInput);
8783
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8785
fclose(o->m_pDDF[zr]->m_fAngle[0]);
8786
mprintf(" Saving temporal development as ddf_timedev_%s%s.csv\n",o->m_pDDF[zr]->m_sName,multibuf);
8789
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8791
fclose(o->m_pDDF[zr]->m_fAngle[z2]);
8792
sprintf(buf,"ddf_timedev_%s_ref%d%s.csv",o->m_pDDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8793
mprintf(" Saving temporal development as %s\n",buf);
8796
/* mprintf(" Speichere Winkel-Statistik als %s_angle_stat.txt\n",o->m_sName);
8797
FreeFileName("",o->m_sName,"_angle_stat.txt");
8798
o->m_pAngleStat->Evaluate();
8799
o->m_pAngleStat->Write("",o->m_sName,"_angle_stat.txt");
8800
// delete o->m_pAngleStat;*/
8801
delete[] o->m_pDDF[zr]->m_fAngle;
8802
o->m_pDDF[zr]->m_fAngle = NULL;
8803
if (o->m_bCombinedPlot)
8805
sprintf(buf,"combined_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8806
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8807
o->m_pDDF[zr]->m_pDDF->CreateCombinedPlot(false);
8808
o->m_pDDF[zr]->m_pDDF->m_pCombinedPlot->WriteAgr(buf,false);
8811
/* if (o->m_pDDF->m_iStat != 0)
8813
mprintf(" Korrigiere statistische Verteilung...\n");
8814
o->m_pDDF->m_pDDF->AngleCorrect();
8816
sprintf(buf,"ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8817
mprintf(" Saving DDF as %s ...\n",buf);
8818
o->m_pDDF[zr]->m_pDDF->NormBinIntegral();
8819
o->m_pDDF[zr]->m_pDDF->Write("",buf,"",false);
8820
sprintf(buf,"ddf_%s%s.agr",o->m_pDDF[zr]->m_sName,multibuf);
8821
mprintf(" Saving DDF AGR file as \"%s\"...\n",buf);
8822
if (o->m_pDDF[zr]->m_bCosine)
8823
o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8824
else o->m_pDDF[zr]->m_pDDF->WriteAgr("",buf,"",o->m_pDDF[zr]->m_sName,false);
8825
if (o->m_pDDF[zr]->m_iHistogramRes != 0)
8827
mprintf(" Calculating Histogram...\n");
8828
o->m_pDDF[zr]->m_pDDF->CalcHistogram();
8829
sprintf(buf,"his_ddf_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8830
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8831
o->m_pDDF[zr]->m_pDDF->WriteHistogram("",buf,"");
8834
if (o->m_bObsCertain && o->m_bDecompDist)
8836
sprintf(buf,"ddf_decomp_%s%s.csv",o->m_pDDF[zr]->m_sName,multibuf);
8837
mprintf(" Saving DDF decomposition as \"%s\"...\n",buf);
8838
o->m_pDDF[zr]->m_pDDF->WriteMulti("",buf,"");
8839
sprintf(buf,"ddf_decomp_%s%s_cumulative.csv",o->m_pDDF[zr]->m_sName,multibuf);
8840
mprintf(" Saving cumulative DDF decomposition as \"%s\"...\n",buf);
8841
o->m_pDDF[zr]->m_pDDF->WriteMulti_Cumulative("",buf,"");
8845
o->WriteTimeDiff(o->m_pDDF[zr]->m_pDDF,"DDF","ddf",o->m_pDDF[zr]->m_sName,multibuf,true);
8851
mprintf(WHITE,"* Spatial Distribution Function\n");
8852
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pSDF->m_pSDF->m_fBinEntries,o->m_pSDF->m_pSDF->m_fSkipEntries,ZeroDivide(o->m_pSDF->m_pSDF->m_fSkipEntries,o->m_pSDF->m_pSDF->m_fBinEntries+o->m_pSDF->m_pSDF->m_fSkipEntries)*100.0);
8853
o->m_pSDF->m_pSDF->CalcMaxEntry();
8854
mprintf(" Raw data range from %.0f to %.0f hits.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry);
8855
mprintf(" The volume of one bin is %.3f pm^3.\n",pow(o->m_pSDF->m_fRadius*2.0/o->m_pSDF->m_iResolution,3));
8856
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8857
mprintf(" The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pSDF->m_fParticleDensity);
8858
else mprintf(" The uniform particle density of non-periodic boxes is not defined.\n");
8859
/* switch(g_iSDFScale)
8862
mprintf(" Scaling values to ppm...\n");
8863
o->m_pSDF->m_pSDF->MultiplyBin(1000000.0 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8866
mprintf(" Scaling values to pm^-3...\n");
8867
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8870
mprintf(" Scaling values to nm^-3...\n");*/
8873
mprintf(" Scaling values relative to average particle density...\n");
8874
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes / o->m_pSDF->m_fParticleDensity * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8878
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius/2.0*1000.0,3) / (double)g_iSteps * g_iStride / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8882
if ((!g_bPeriodicX) || (!g_bPeriodicY) || (!g_bPeriodicZ))
8884
o->m_pSDF->m_pSDF->MultiplyBin(1.0/o->m_pSDF->m_fParticleDensity);
8885
mprintf(WHITE," Bin values are given relative to this uniform particle density.\n");
8889
mprintf(WHITE," Bin values are given in nm^-3 (particle density).\n");
8891
o->m_pSDF->m_pSDF->CalcMaxEntry();
8892
mprintf(" Data range from %.6f to %.6f%s.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8894
if (o->m_pSDF->m_bInvert)
8896
mprintf(" Inverting SDF...\n");
8897
o->m_pSDF->m_pSDF->Invert();
8899
if (o->m_pSDF->m_bCutPlane)
8901
mprintf(" Creating Cut Plane...\n");
8902
o->m_pSDF->CreateCutPlane();
8903
sprintf(buf,"sdf_cut_%s%s",o->m_pSDF->m_sName,multibuf);
8904
mprintf(" Saving SDF Cut Plane triples as \"%s_triples.csv\"...\n",buf);
8905
o->m_pSDF->m_pCutPlane->Write("",buf,"_triples.csv");
8906
mprintf(" Saving SDF Cut Plane matrix as \"%s_matrix.csv\"...\n",buf);
8907
o->m_pSDF->m_pCutPlane->WriteCSV("",buf,"_matrix.csv");
8908
mprintf(" Saving CDF Mathematica Notebook as \"%s.nb\"...\n",buf);
8909
o->m_pSDF->m_pCutPlane->WriteMathematicaNb("",buf,".nb",false);
8910
mprintf(" Saving CDF Gnuplot Input as \"%s.gp\"...\n",buf);
8911
o->m_pSDF->m_pCutPlane->WriteGnuplotInput("",buf,"",false);
8913
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
8915
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
8916
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8918
tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
8921
tempSDF->Smooth(z2);
8923
tempSDF->CalcMaxEntry();
8924
mprintf(" Data range from %.6f to %.6f%s.\n",tempSDF->m_fMinEntry,tempSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8925
if (o->m_pSDF->m_bClipPlane)
8927
mprintf(" Creating Clip Plane in %c direction with value %.3f...\n",(o->m_pSDF->m_iClipDirection==0)?'X':((o->m_pSDF->m_iClipDirection==1)?'Y':'Z'),o->m_pSDF->m_fClipValue);
8928
o->m_pSDF->m_pSDF->ClipPlane(o->m_pSDF->m_iClipDirection,o->m_pSDF->m_fClipValue);
8931
if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_PLT"))
8934
sprintf(buf,".s%d%s.plt",z2,multibuf);
8935
else sprintf(buf,"%s.plt",multibuf);
8936
mprintf(" Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8937
tempSDF->WritePLT("sdf_",o->m_pSDF->m_sName,buf,true);
8940
if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_CUBE"))
8943
sprintf(buf,".s%d%s.cube",z2,multibuf);
8944
else sprintf(buf,"%s.cube",multibuf);
8945
mprintf(" Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8946
tempSDF->WriteCube("sdf_",o->m_pSDF->m_sName,buf,true);
8949
if (o->m_pSDF->m_iHistogramRes != 0)
8952
sprintf(buf,".s%d%s.csv",z2,multibuf);
8953
else sprintf(buf,"%s.csv",multibuf);
8954
mprintf(" Saving SDF Histogram as \"his_sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8955
tempSDF->CalcHistogram();
8956
tempSDF->WriteHistogram("his_sdf_",o->m_pSDF->m_sName,buf);
8959
mprintf(YELLOW,"\n Important: ");
8960
mprintf(WHITE,"The PLT/CUBE files only contain the volumetric data.\n");
8961
mprintf(WHITE," The atoms of the reference molecule are saved in the ref_*.xyz file!\n");
8962
mprintf(WHITE," You need to load *both files* into the visualization program (e.g. VMD).\n");
8678
mprintf(WHITE,"* Spatial Distribution Function\n");
8679
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pSDF->m_pSDF->m_fBinEntries,o->m_pSDF->m_pSDF->m_fSkipEntries,ZeroDivide(o->m_pSDF->m_pSDF->m_fSkipEntries,o->m_pSDF->m_pSDF->m_fBinEntries+o->m_pSDF->m_pSDF->m_fSkipEntries)*100.0);
8680
o->m_pSDF->m_pSDF->CalcMaxEntry();
8681
mprintf(" Raw data range from %.0f to %.0f hits.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry);
8682
mprintf(" The volume of one bin is %.3f pm^3.\n",pow(o->m_pSDF->m_fRadius*2.0/o->m_pSDF->m_iResolution,3));
8683
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8684
mprintf(" The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pSDF->m_fParticleDensity);
8685
mprintf(" The uniform particle density of non-periodic boxes is not defined.\n");
8686
/* switch(g_iSDFScale)
8689
mprintf(" Scaling values to ppm...\n");
8690
o->m_pSDF->m_pSDF->MultiplyBin(1000000.0 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8693
mprintf(" Scaling values to pm^-3...\n");
8694
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8697
mprintf(" Scaling values to nm^-3...\n");*/
8700
mprintf(" Scaling values relative to average particle density...\n");
8701
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes / o->m_pSDF->m_fParticleDensity * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8705
o->m_pSDF->m_pSDF->MultiplyBin(pow(o->m_pSDF->m_iResolution/o->m_pSDF->m_fRadius/2.0*1000.0,3) / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pSDF->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8709
if ((!g_bPeriodicX) || (!g_bPeriodicY) || (!g_bPeriodicZ))
8711
o->m_pSDF->m_pSDF->MultiplyBin(1.0/o->m_pSDF->m_fParticleDensity);
8712
mprintf(WHITE," Bin values are given relative to this uniform particle density.\n");
8716
mprintf(WHITE," Bin values are given in nm^-3 (particle density).\n");
8718
o->m_pSDF->m_pSDF->CalcMaxEntry();
8719
mprintf(" Data range from %.6f to %.6f%s.\n",o->m_pSDF->m_pSDF->m_fMinEntry,o->m_pSDF->m_pSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8721
if (o->m_pSDF->m_bInvert)
8723
mprintf(" Inverting SDF...\n");
8724
o->m_pSDF->m_pSDF->Invert();
8726
if (o->m_pSDF->m_bCutPlane)
8728
mprintf(" Creating Cut Plane...\n");
8729
o->m_pSDF->CreateCutPlane();
8730
sprintf(buf,"sdf_cut_%s%s",o->m_pSDF->m_sName,multibuf);
8731
mprintf(" Saving SDF Cut Plane triples as \"%s_triples.csv\"...\n",buf);
8732
o->m_pSDF->m_pCutPlane->Write("",buf,"_triples.csv");
8733
mprintf(" Saving SDF Cut Plane matrix as \"%s_matrix.csv\"...\n",buf);
8734
o->m_pSDF->m_pCutPlane->WriteCSV("",buf,"_matrix.csv");
8735
mprintf(" Saving CDF Mathematica Notebook as \"%s.nb\"...\n",buf);
8736
o->m_pSDF->m_pCutPlane->WriteMathematicaNb("",buf,".nb",false);
8737
mprintf(" Saving CDF Gnuplot Input as \"%s.gp\"...\n",buf);
8738
o->m_pSDF->m_pCutPlane->WriteGnuplotInput("",buf,"",false);
8740
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
8742
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
8743
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
8745
tempSDF->CopyFrom(o->m_pSDF->m_pSDF);
8748
tempSDF->Smooth(z2);
8750
tempSDF->CalcMaxEntry();
8751
mprintf(" Data range from %.6f to %.6f%s.\n",tempSDF->m_fMinEntry,tempSDF->m_fMaxEntry,g_bSDFUniform?"":" nm^-3");
8752
if (o->m_pSDF->m_bClipPlane)
8754
mprintf(" Creating Clip Plane in %c direction with value %.3f...\n",(o->m_pSDF->m_iClipDirection==0)?'X':((o->m_pSDF->m_iClipDirection==1)?'Y':'Z'),o->m_pSDF->m_fClipValue);
8755
o->m_pSDF->m_pSDF->ClipPlane(o->m_pSDF->m_iClipDirection,o->m_pSDF->m_fClipValue);
8758
if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_PLT"))
8761
sprintf(buf,".s%d%s.plt",z2,multibuf);
8762
else sprintf(buf,"%s.plt",multibuf);
8763
mprintf(" Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8764
tempSDF->WritePLT("sdf_",o->m_pSDF->m_sName,buf,true);
8767
if (g_pDatabase->GetBool("/PLOT3D/FORMATS/WRITE_CUBE"))
8770
sprintf(buf,".s%d%s.cube",z2,multibuf);
8771
else sprintf(buf,"%s.cube",multibuf);
8772
mprintf(" Saving SDF as \"sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8773
tempSDF->WriteCube("sdf_",o->m_pSDF->m_sName,buf,true);
8776
if (o->m_pSDF->m_iHistogramRes != 0)
8779
sprintf(buf,".s%d%s.csv",z2,multibuf);
8780
else sprintf(buf,"%s.csv",multibuf);
8781
mprintf(" Saving SDF Histogram as \"his_sdf_%s%s\"...\n",o->m_pSDF->m_sName,buf);
8782
tempSDF->CalcHistogram();
8783
tempSDF->WriteHistogram("his_sdf_",o->m_pSDF->m_sName,buf);
8786
mprintf(YELLOW,"\n Important: ");
8787
mprintf(WHITE,"The PLT/CUBE files only contain the volumetric data.\n");
8788
mprintf(WHITE," The atoms of the reference molecule are saved in the ref_*.xyz file!\n");
8789
mprintf(WHITE," You need to load *both files* into the visualization program (e.g. VMD).\n");
8794
for (zr=0;zr<g_iCDFChannels;zr++)
8796
if (o->m_pRDF[zr] == NULL)
8798
mprintf(WHITE,"* Radial Distribution Function\n");
8799
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRDF[zr]->m_pRDF->m_fBinEntries,o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,ZeroDivide(o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,o->m_pRDF[zr]->m_pRDF->m_fBinEntries+o->m_pRDF[zr]->m_pRDF->m_fSkipEntries)*100.0);
8800
o->m_pRDF[zr]->m_pRDF->CalcMeanSD();
8801
mprintf(" Mean value: %10G pm Standard deviation: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMean,o->m_pRDF[zr]->m_pRDF->m_fSD);
8802
mprintf(" Min. value: %10G pm Max.value: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMinInput,o->m_pRDF[zr]->m_pRDF->m_fMaxInput);
8804
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1.0 / g_iSteps);
8806
if (o->m_pRDF[zr]->m_bCalcSD)
8808
mprintf(GREEN,"\n>>> Standard Deviation Engine >>>\n\n");
8809
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishAnalysis();
8810
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->DumpData(o->m_pRDF[zr]->m_pRDF,o->m_pRDF[zr]->m_fSDTimesSigma,o->m_pRDF[zr]->m_bSDVerbose);
8811
mprintf(GREEN,"\n<<< Standard Deviation Engine <<<\n\n");
8813
if (o->m_pRDF[zr]->m_bAdaptive)
8815
// o->m_pRDF[zr]->m_pRDF->WriteHenry("rdf_",o->m_pRDF[zr]->m_sName,".csv");
8816
o->m_pRDF[zr]->m_pRDF->PrepareAdapt();
8817
o->m_pRDF[zr]->m_pRDF->BinTree_RadialDist();
8818
if (o->m_iShowMol == g_iFixMol)
8819
o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/(((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()-1.0f)/o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
8820
else o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
8822
mprintf(" Saving RDF as \"rdf_%s.csv\"...\n",o->m_pRDF[zr]->m_sName);
8823
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".001.csv",5,10,0.001,true);
8824
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".002.csv",5,10,0.002,true);
8825
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".005.csv",5,10,0.005,true);
8826
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".010.csv",5,10,0.01,true);
8827
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".020.csv",5,10,0.02,true);
8828
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".050.csv",5,10,0.05,true);
8829
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",5,10,0.1,true);
8831
/* o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".50.csv",16,0,50,true);
8832
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",16,0,100,true);
8833
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".500.csv",16,0,500,true);
8834
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".1000.csv",16,0,1000,true);*/
8837
if (o->m_pRDF[zr]->m_bRadialCorrect)
8839
mprintf(" Correcting radial distribution...\n");
8840
o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
8842
if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
8844
if (o->m_pRDF[zr]->m_bProbDens)
8846
mprintf(" Scaling RDF to nm^(-3) ...\n");
8847
if (o->m_bObsCertain)
8849
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
8850
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8853
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8854
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8858
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
8859
o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
8863
mprintf(" Scaling RDF to uniform density ...\n");
8864
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8866
if (o->m_bObsCertain)
8868
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
8869
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8872
if (g_bRegionAnalysis)
8874
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 * g_iSteps / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) * o->m_pRDF[zr]->m_iShowAtomGes * ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() * o->m_pRDF[zr]->m_iRefAtomGes);
8875
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ * g_iSteps / (4.0/3.0*Pi) / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) );
8878
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
8879
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
8884
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
8885
o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
8889
eprintf(" Uniform density not defined if box is not XYZ-periodic!\n");
8896
mprintf(" Scaling RDF to integral value 1000 ...\n");
8897
o->m_pRDF[zr]->m_pRDF->NormBinIntegral(1000.0);
8898
o->m_pRDF[zr]->m_pRDF->Integrate(false,1000.0);
8900
sprintf(buf,"rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
8901
mprintf(" Saving RDF as \"%s\"...\n",buf);
8902
o->m_pRDF[zr]->m_pRDF->Write("",buf,"",true);
8903
sprintf(buf,"rdf_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
8904
mprintf(" Saving RDF AGR file as \"%s\"...\n",buf);
8905
o->m_pRDF[zr]->m_pRDF->WriteAgr("",buf,"",o->m_pRDF[zr]->m_sName,true);
8906
if (o->m_pRDF[zr]->m_iHistogramRes != 0)
8908
mprintf(" Calculating Histogram...\n");
8909
o->m_pRDF[zr]->m_pRDF->CalcHistogram();
8910
sprintf(buf,"his_rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
8911
mprintf(" Saving Histogram as \"%s\"...\n",buf);
8912
o->m_pRDF[zr]->m_pRDF->WriteHistogram("",buf,"");
8914
if (o->m_bObsCertain && o->m_bDecompDist)
8916
sprintf(buf,"rdf_decomp_mol_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
8917
mprintf(" Saving RDF molecule decomposition as \"%s.csv\"...\n",buf);
8918
o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
8919
mprintf(" Saving RDF molecule decomposition as \"%s.agr\"...\n",buf);
8920
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
8922
sprintf(buf,"rdf_decomp_nb_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
8923
mprintf(" Saving cumulative RDF molecule decomposition as \"%s.csv\"...\n",buf);
8924
o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
8925
mprintf(" Saving cumulative RDF molecule decomposition as \"%s.agr\"...\n",buf);
8926
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
8928
if (o->m_bDecompType)
8930
sprintf(buf,"rdf_decomp_type_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
8931
mprintf(" Saving RDF type decomposition as \"%s.csv\"...\n",buf);
8932
o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
8933
mprintf(" Saving RDF type decomposition as \"%s.agr\"...\n",buf);
8934
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
8936
sprintf(buf,"rdf_decomp_type_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
8937
mprintf(" Saving cumulative RDF type decomposition as \"%s.csv\"...\n",buf);
8938
o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
8939
mprintf(" Saving cumulative RDF type decomposition as \"%s.agr\"...\n",buf);
8940
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
8944
o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
8946
if (o->m_pRDF[zr]->m_bACF)
8948
o->m_pRDF[zr]->Autocorrelate();
8953
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
8955
fclose(o->m_pRDF[zr]->m_fDist[0]);
8956
mprintf(" Saving temporal development as \"rdf_timedev_%s%s.csv\"...\n",o->m_pRDF[zr]->m_sName,multibuf);
8959
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
8961
fclose(o->m_pRDF[zr]->m_fDist[z2]);
8962
sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
8963
mprintf(" Saving temporal development as \"%s\"...\n",buf);
8966
delete[] o->m_pRDF[zr]->m_fDist;
8967
o->m_pRDF[zr]->m_fDist = NULL;
8968
if (o->m_bCombinedPlot)
8970
sprintf(buf,"combined_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
8971
mprintf(" Saving combined plot as \"%s\"...\n",buf);
8972
o->m_pRDF[zr]->m_pRDF->CreateCombinedPlot(true);
8973
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->WriteAgr(buf,false);
8981
mprintf(WHITE,"* Van Hove Correlation Function\n");
8982
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVHDF->m_pVHDF->m_fBinEntries,o->m_pVHDF->m_pVHDF->m_fSkipEntries,ZeroDivide(o->m_pVHDF->m_pVHDF->m_fSkipEntries,o->m_pVHDF->m_pVHDF->m_fBinEntries+o->m_pVHDF->m_pVHDF->m_fSkipEntries)*100.0);
8983
o->m_pVHDF->CorrectCount();
8984
if (o->m_pVHDF->m_bRadialCorrect)
8986
mprintf(" Correcting radial distribution...\n");
8987
o->m_pVHDF->m_pVHDF->CorrectRadialDist(1);
8988
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
8990
mprintf(" Normalizing bin to uniform density...\n");
8991
o->m_pVHDF->m_pVHDF->MultiplyBin(3.0f/4.0f/Pi*g_fBoxX*g_fBoxY*g_fBoxZ);
8994
o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
8997
mprintf(" Normalizing bin integral to 1000000...\n");
8998
o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
9001
sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9003
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9005
mprintf(" Saving VHCF triples as \"%s_triples.csv\"...\n",buf);
9006
o->m_pVHDF->m_pVHDF->Write("",buf,"_triples.csv");
9009
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9011
mprintf(" Saving VHCF matrix as \"%s_matrix.csv\"...\n",buf);
9012
o->m_pVHDF->m_pVHDF->WriteCSV("",buf,"_matrix.csv");
9015
if (o->m_pVHDF->m_iGraceBunchDist > 0)
9017
sprintf(buf,"vhcf_dist_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9018
mprintf(" Saving VHCF distance Grace Stack as \"%s\"...\n",buf);
9019
o->m_pVHDF->m_pVHDF->WriteGraceBunch(0,o->m_pVHDF->m_iGraceBunchDist,1.0f,"",buf,"");
9022
if (o->m_pVHDF->m_iGraceBunchTime > 0)
9024
sprintf(buf,"vhcf_time_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9025
mprintf(" Saving VHCF time Grace Stack as \"%s\"...\n",buf);
9026
o->m_pVHDF->m_pVHDF->WriteGraceBunch(1,o->m_pVHDF->m_iGraceBunchTime,1.0f,"",buf,"");
9029
if (o->m_pVHDF->m_bSwapAxes)
9030
o->m_pVHDF->m_pVHDF->SwapAxes();
9032
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9034
sprintf(buf,"vhcf_%s%s.nb",o->m_pVHDF->m_sName,multibuf);
9035
mprintf(" Saving VHCF Mathematica Notebook as \"%s\"...\n",buf);
9036
o->m_pVHDF->m_pVHDF->WriteMathematicaNb("",buf,"",false);
9039
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9041
sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9042
mprintf(" Saving VHCF Gnuplot Input as \"%s.gp\"...\n",buf);
9043
o->m_pVHDF->m_pVHDF->WriteGnuplotInput("",buf,"",false);
9049
if (g_iCDFChannels == 2)
9051
mprintf(WHITE,"* Combined Distribution Function (2D)\n");
9052
/* if (o->m_pConditions != NULL)
9054
mprintf(" Conditions: %.2f percent of the molecules passed.\n",o->m_pConditions->m_fPassed/(o->m_pConditions->m_fPassed+o->m_pConditions->m_fFailed)*100.0);
9055
mprintf(" After conditions: ");
9056
} else mprintf(" ");*/
9057
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p2DF->m_fBinEntries,o->m_pCDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p2DF->m_fSkipEntries,o->m_pCDF->m_p2DF->m_fSkipEntries+o->m_pCDF->m_p2DF->m_fBinEntries)*100.0);
9058
if (o->m_pCDF->m_p2DF->m_fBinEntries == 0)
9060
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9063
for (z2=0;z2<2;z2++)
9065
if (g_iObsChannel[z2] == 0)
9067
if ((o->m_pRDF[z2]->m_bRadialCorrect) && (o->m_pCDF->m_iNormalize != 3))
9069
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9070
o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
9073
if (g_iObsChannel[z2] == 1)
9075
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine) && (o->m_pCDF->m_iNormalize != 3))
9077
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9078
o->m_pCDF->m_p2DF->CorrectAngle(z2);
9080
if (o->m_pADF[z2]->m_bMirror)
9082
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9083
if (o->m_pADF[z2]->m_bCosine)
9084
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9085
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9088
if (g_iObsChannel[z2] == 6)
9090
if (o->m_pLiDF[z2]->m_bRadialCorrect)
9092
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9093
o->m_pCDF->m_p2DF->CorrectLiRadialDist(z2);
9097
o->m_pCDF->m_fFactor = 1.0;
9098
switch(o->m_pCDF->m_iNormalize)
9101
mprintf(" Normalizing CDF to uniform density.\n");
9102
o->m_pCDF->m_p2DF->NormalizeUniform(g_fBoxX*g_fBoxY*g_fBoxZ/g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pCDF->m_iCombinationsEnabled);
9105
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9106
o->m_pCDF->m_p2DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9109
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9110
o->m_pCDF->m_fFactor = o->m_pCDF->m_p2DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9113
mprintf(" Not normalizing this CDF.\n");
9117
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9119
mprintf(" Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9120
o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_triples.csv");
9123
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9125
mprintf(" Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9126
o->m_pCDF->m_p2DF->WriteCSV(o->m_pCDF->m_sName,multibuf,"_matrix.csv");
9129
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9131
mprintf(" Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9132
o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,".nb",false);
9135
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9137
mprintf(" Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9138
o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"",false);
9141
mprintf(" Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_sName,multibuf);
9142
o->m_pCDF->m_p2DF->WriteCombinedPlot(o->m_pCDF->m_sName,multibuf,"_combined.agr");
9143
if (o->m_pCDF->m_iHistogramRes != 0)
9145
mprintf(" Calculating Histogram...\n");
9146
o->m_pCDF->m_p2DF->CalcHistogram();
9147
sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9148
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9149
o->m_pCDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9152
if (o->m_pCDF->m_bGraceBunch)
9154
if (o->m_pCDF->m_iGraceBunchC1 > 0)
9156
if ((g_iObsChannel[1] == 0) && (o->m_bOthers))
9157
tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[1]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[1]->m_iRefAtomGes;
9159
sprintf(buf,"cdf_c1_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9160
mprintf(" Saving CDF Channel 1 Grace Stack as \"%s\"...\n",buf);
9161
o->m_pCDF->m_p2DF->WriteGraceBunch(0,o->m_pCDF->m_iGraceBunchC1,(float)tf,"",buf,"");
9163
if (o->m_pCDF->m_iGraceBunchC2 > 0)
9165
if ((g_iObsChannel[0] == 0) && (o->m_bOthers))
9166
tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[0]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[0]->m_iRefAtomGes;
9168
sprintf(buf,"cdf_c2_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9169
mprintf(" Saving CDF Channel 2 Grace Stack as \"%s\"...\n",buf);
9170
o->m_pCDF->m_p2DF->WriteGraceBunch(1,o->m_pCDF->m_iGraceBunchC2,(float)tf,"",buf,"");
9174
if (o->m_pCDF->m_bAxisDivide)
9176
if (o->m_pCDF->m_bAxisDivideAll)
9178
mprintf(" Saving CDF X projection as \"%s%s_pX.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9179
o->m_pCDF->m_p2DF->WriteXProjection(o->m_pCDF->m_sName,multibuf,"_pX.csv");
9181
mprintf(" Saving CDF Y projection as \"%s%s_pY.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9182
o->m_pCDF->m_p2DF->WriteYProjection(o->m_pCDF->m_sName,multibuf,"_pY.csv");
9184
mprintf(" Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9186
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9187
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9189
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9190
if (g_iObsChannel[0] == 0)
9191
if (o->m_pRDF[0]->m_bRadialCorrect)
9192
tempc2df->UnCorrectRadialDist(0);
9193
if (g_iObsChannel[0] == 1)
9194
if (o->m_pADF[0]->m_bStat && (!o->m_pADF[0]->m_bCosine))
9195
tempc2df->UnCorrectAngle(0);
9196
tempc2df->NormalizeXCount();
9197
switch(o->m_pCDF->m_iNormalize)
9200
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9203
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9208
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
9209
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nX",false);
9212
mprintf(" Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9214
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9215
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9217
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9218
if (g_iObsChannel[1] == 0)
9219
if (o->m_pRDF[1]->m_bRadialCorrect)
9220
tempc2df->UnCorrectRadialDist(1);
9221
if (g_iObsChannel[1] == 1)
9222
if (o->m_pADF[1]->m_bStat && (!o->m_pADF[1]->m_bCosine))
9223
tempc2df->UnCorrectAngle(1);
9224
tempc2df->NormalizeYCount();
9225
switch(o->m_pCDF->m_iNormalize)
9228
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9231
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9236
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
9237
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nY",false);
9240
mprintf(" Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9242
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9243
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9245
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9246
for (z2=0;z2<2;z2++)
9248
if (g_iObsChannel[z2] == 0)
9249
if (o->m_pRDF[z2]->m_bRadialCorrect)
9250
tempc2df->UnCorrectRadialDist(z2);
9251
if (g_iObsChannel[z2] == 1)
9252
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9253
tempc2df->UnCorrectAngle(z2);
9255
tempc2df->NormalizeXCount();
9256
tempc2df->NormalizeYCount();
9257
switch(o->m_pCDF->m_iNormalize)
9260
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9263
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9268
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
9269
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nXY",false);
9273
mprintf(" Calculating tensor product of CDF projections...\n");
9275
try { o->m_pCDF->m_pTensorProduct = new C2DF(); } catch(...) { o->m_pCDF->m_pTensorProduct = NULL; }
9276
if (o->m_pCDF->m_pTensorProduct == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9278
o->m_pCDF->m_pTensorProduct->CopyFrom(o->m_pCDF->m_p2DF);
9279
o->m_pCDF->m_pTensorProduct->MakeTensorProduct(o->m_pCDF->m_p2DF);
9280
switch(o->m_pCDF->m_iNormalize)
9283
o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9286
o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9291
if (o->m_pCDF->m_bAxisDivideAll)
9293
mprintf(" Saving tensor product as \"%s%s_tensor.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9294
o->m_pCDF->m_pTensorProduct->Write(o->m_pCDF->m_sName,multibuf,"_tensor.dat");
9295
mprintf(" Saving tensor product Mathematica Notebook as \"%s%s_tensor.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9296
o->m_pCDF->m_pTensorProduct->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensor.nb",false);
9297
mprintf(" Saving tensor product Gnuplot Input as \"%s%s_tensor.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9298
o->m_pCDF->m_pTensorProduct->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_tensor",false);
9299
mprintf(" Calculating difference between CDF and tensor product...\n");
9301
o->m_pCDF->m_p2DF->Subtract(o->m_pCDF->m_pTensorProduct);
9302
o->m_pCDF->m_p2DF->CalcMaxEntry();
9303
o->m_pCDF->m_p2DF->m_iColorScale = 4; // PlusMinus Scale
9304
o->m_pCDF->m_p2DF->m_fPlotExp = 1.0;
9305
// o->m_pCDF->m_p2DF->m_fMathematicaColorOffset = max(fabs(o->m_pCDF->m_p2DF->m_fMinEntry),fabs(o->m_pCDF->m_p2DF->m_fMaxEntry)) / 3.0;
9306
// o->m_pCDF->m_p2DF->m_fMathematicaColorScale = o->m_pCDF->m_p2DF->m_fMathematicaColorOffset * 2.0;
9307
mprintf(" Saving +/- correlation plot as \"%s%s_correlation.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9308
o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_correlation.dat");
9309
mprintf(" Saving +/- correlation plot Mathematica Notebook as \"%s%s_correlation.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9310
o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_correlation.nb",false);
9311
mprintf(" Saving +/- correlation plot Gnuplot Input as \"%s%s_correlation.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9312
o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_correlation",false);
9313
} // END IF AXISDIVIDE
9314
if (o->m_pCDF->m_bDumpDat)
9316
fclose(o->m_pCDF->m_fDump);
9317
mprintf(" CDF raw data saved as cdfdump_%dd_%s%s.csv.\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9321
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
9323
fclose(o->m_pCDF->m_fTimeDev[0]);
9324
// sprintf(buf,"cdf_timedev_%dd_%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9325
mprintf(" Temporal development saved as cdf_timedev_%dd%s%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9328
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
9330
fclose(o->m_pCDF->m_fTimeDev[z2]);
9331
mprintf(" Temporal development saved as cdf_timedev_%dd%s_ref%d%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9334
if (o->m_pCDF->m_bTDAnimation)
9336
mprintf(WHITE," * Time dependent animation *\n");
9337
sprintf(buf,"animation_complete_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9338
mprintf(" Saving complete Plot as \"%s\"...\n",buf);
9339
for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9341
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9342
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
9344
o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9345
sprintf(buf,"render_%s%s",o->m_pCDF->m_sName,multibuf);
9346
mprintf(" Saving xmgrace render script for animation as \"%s\"...\n",buf);
9347
a = OpenFileWrite("gracebatch",true);
9348
mfprintf(a,"PRINT TO \"output.png\"\n");
9349
mfprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
9350
mfprintf(a,"PAGE SIZE %d, %d\n",o->m_pCDF->m_iTDAResX,o->m_pCDF->m_iTDAResY);
9351
mfprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
9352
mfprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
9353
mfprintf(a,"PRINT\n");
9355
a = OpenFileWrite(buf,true);
9356
if (o->m_pCDF->m_bTDATrace)
9358
for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9360
o->m_pCDF->m_pTDAPlot->DuplicateSet(z2);
9361
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9362
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.7));
9363
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,3.0f);
9364
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,GraceColor(z2,0.0));
9367
for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
9369
if (o->m_pCDF->m_bTDATrace)
9371
for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9373
o->m_pCDF->m_pTDAPlot->SetSetRange(z3+o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9374
o->m_pCDF->m_pTDAPlot->SetSetRange(z3,0,z2*o->m_pCDF->m_iTDAStride);
9378
for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9379
o->m_pCDF->m_pTDAPlot->SetSetRange(z3,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9382
sprintf(buf,"animation_%05d_%s%s.agr",z2+1,o->m_pCDF->m_sName,multibuf);
9383
mprintf(" Saving frame \"%s\"...\n",buf);
9384
o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9385
mfprintf(a,"echo 'Printing frame %d of %d'\n",z2+1,o->m_pCDF->m_iTDASteps);
9386
mfprintf(a,"xmgrace %s -batch gracebatch -nosafe -hardcopy\n",buf);
9387
mfprintf(a,"mv output.png frame%04d.png\n",z2+1);
9392
} // END IF CHANNELS == 2
9394
if (g_iCDFChannels == 3)
9396
mprintf(WHITE,"* Combined Distribution Function (3D)\n");
9397
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_fBinEntries,o->m_pCDF->m_p3DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_fSkipEntries,o->m_pCDF->m_p3DF->m_fSkipEntries+o->m_pCDF->m_p3DF->m_fBinEntries)*100.0);
9398
if (o->m_pCDF->m_p3DF->m_fBinEntries == 0)
9400
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9403
o->m_pCDF->m_p3DF->CalcMaxEntry();
9404
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9405
for (z2=0;z2<g_iCDFChannels;z2++)
9407
if (g_iObsChannel[z2] == 0)
9409
if (o->m_pRDF[z2]->m_bRadialCorrect)
9411
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9412
o->m_pCDF->m_p3DF->CorrectRadialDist(z2);
9413
o->m_pCDF->m_p3DF->CalcMaxEntry();
9414
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9417
if (g_iObsChannel[z2] == 1)
9419
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9421
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9422
o->m_pCDF->m_p3DF->CorrectAngle(z2);
9423
o->m_pCDF->m_p3DF->CalcMaxEntry();
9424
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9426
if (o->m_pADF[z2]->m_bMirror)
9428
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9429
if (o->m_pADF[z2]->m_bCosine)
9430
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9431
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9432
o->m_pCDF->m_p3DF->CalcMaxEntry();
9433
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9437
// o->m_pCDF->m_p3DF->CalcMaxEntry();
9438
// mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9439
o->m_pCDF->m_fFactor = 1.0;
9440
switch(o->m_pCDF->m_iNormalize)
9443
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9444
o->m_pCDF->m_p3DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9445
o->m_pCDF->m_p3DF->CalcMaxEntry();
9446
mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9449
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9450
o->m_pCDF->m_fFactor = o->m_pCDF->m_p3DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9451
mprintf(" Factor was %G.\n",o->m_pCDF->m_fFactor);
9452
o->m_pCDF->m_p3DF->CalcMaxEntry();
9453
mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9456
mprintf(" Not normalizing this CDF.\n");
9460
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9462
try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
9463
if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9465
temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
9468
temp3DF->Smooth(z2);
9469
sprintf(buf,".s%d%s.plt",z2,multibuf);
9470
} else sprintf(buf,"%s.plt",multibuf);
9471
mprintf(" Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9472
temp3DF->WritePLT("",o->m_pCDF->m_sName,buf,false);
9475
sprintf(buf,".s%d%s.cube",z2,multibuf);
9476
else sprintf(buf,"%s.cube",multibuf);
9477
mprintf(" Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9478
temp3DF->WriteCube("",o->m_pCDF->m_sName,buf,false);
9479
if (o->m_pCDF->m_iHistogramRes != 0)
9481
mprintf(" Calculating Histogram...\n");
9482
temp3DF->CalcHistogram();
9484
sprintf(buf,"his_%s.s%d",o->m_pCDF->m_sName,z2);
9485
else sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9486
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9487
temp3DF->WriteHistogram(buf,multibuf,".csv");
9490
if (o->m_pCDF->m_b3DSlices)
9492
for (z3=0;z3<3;z3++)
9494
if (o->m_pCDF->m_i3DSliceIntervals[z3] != 0)
9497
mprintf(WHITE," * Creating channel %d smooth grade %d slices...\n",z3+1,z2);
9498
else mprintf(WHITE," * Creating channel %d slices...\n",z3+1);
9500
try { temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]]; } catch(...) { temp2dfa = NULL; }
9501
if (temp2dfa == NULL) NewException((double)o->m_pCDF->m_i3DSliceIntervals[z3]*sizeof(C2DF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9504
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9506
try { temp2dfa[z4] = new C2DF(); } catch(...) { temp2dfa[z4] = NULL; }
9507
if (temp2dfa[z4] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9509
temp3DF->CreateSlice(z3,(int)((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),(int)((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]);
9510
mprintf(" - %2d: %9.4f - %9.4f (%3d - %3d), Intensity range %.3f ... %.3f\n",z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),int((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),int((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]->m_fMinEntry,temp2dfa[z4]->m_fMaxEntry);
9511
if (temp2dfa[z4]->m_fMaxEntry > tf)
9512
tf = temp2dfa[z4]->m_fMaxEntry;
9515
mprintf(" Setting common intensity range to 0 ... %.3f.\n",tf);
9517
mprintf(" Writing out slice files...\n",z3+1);
9519
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9521
temp2dfa[z4]->m_fMinEntry = 0;
9522
temp2dfa[z4]->m_fMaxEntry = tf;
9524
sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9525
else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9526
mprintf(" %s ...\n",buf);
9527
temp2dfa[z4]->WriteMathematicaNb("",buf,"",true);
9529
sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9530
else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9531
mprintf(" %s.gp ...\n",buf);
9532
temp2dfa[z4]->WriteGnuplotInput("",buf,"",true);
9535
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9536
delete temp2dfa[z4];
9544
mprintf(" Writing out 2D projections...\n");
9545
for (z3=0;z3<3;z3++)
9547
mprintf(WHITE," * CDF 2D projection on channel %d\n",z3+1);
9548
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries+o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries)*100.0);
9564
for (z2=0;z2<2;z2++)
9566
if (g_iObsChannel[tia[z2]] == 0)
9568
if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
9570
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9571
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
9574
if (g_iObsChannel[tia[z2]] == 1)
9576
if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
9578
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9579
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
9581
/* if (o->m_pADF[z2]->m_bMirror)
9583
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9584
if (o->m_pADF[z2]->m_bCosine)
9585
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9586
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9590
o->m_pCDF->m_fFactor = 1.0;
9591
switch(o->m_pCDF->m_iNormalize)
9594
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9595
o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9598
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9599
o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9602
mprintf(" Not normalizing this CDF.\n");
9605
mprintf(" Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9606
o->m_pCDF->m_p3DF->m_p2DF[z3]->Write(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_triples.csv");
9607
mprintf(" Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9608
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCSV(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_matrix.csv");
9609
mprintf(" Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9610
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteMathematicaNb(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,".nb",false);
9611
mprintf(" Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9612
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteGnuplotInput(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"",false);
9613
mprintf(" Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9614
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCombinedPlot(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_combined.agr");
9615
if (o->m_pCDF->m_iHistogramRes != 0)
9617
mprintf(" Calculating Histogram...\n");
9618
o->m_pCDF->m_p3DF->m_p2DF[z3]->CalcHistogram();
9619
sprintf(buf,"his_%s",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName);
9620
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9621
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteHistogram(buf,multibuf,".csv");
9624
} // END IF CHANNELS == 3
9630
mprintf(WHITE,"* Pseudo SDF\n");
9631
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRevSDF->m_p2DF->m_fBinEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pRevSDF->m_p2DF->m_fSkipEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries+o->m_pRevSDF->m_p2DF->m_fBinEntries)*100.0);
9632
if (o->m_pRevSDF->m_p2DF->m_fBinEntries == 0)
9634
eprintf(" There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
9637
mprintf(" Normalizing integral value to %.2f.\n",1000000.0f);
9638
o->m_pRevSDF->m_p2DF->NormalizeBinIntegral(1000000.0f);
9639
if (o->m_pRevSDF->m_bDrawAtoms)
9641
mprintf(" Inserting reference atoms into the Pseudo SDF plot...\n");
9643
if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius == 0)
9644
o->m_pRevSDF->m_p2DF->AddCircle(0,0,50.0,0.4,0.4,0.4);
9645
else o->m_pRevSDF->m_p2DF->AddCircle(0,0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorB/255.0);
9647
if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius == 0)
9648
o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,50.0,0.4,0.4,0.4);
9649
else o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorB/255.0);
9651
mprintf(" Saving PseudoSDF triples as \"%s%s_triples.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9652
o->m_pRevSDF->m_p2DF->Write(o->m_pRevSDF->m_sName,multibuf,"_triples.csv");
9653
mprintf(" Saving PseudoSDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9654
o->m_pRevSDF->m_p2DF->WriteCSV(o->m_pRevSDF->m_sName,multibuf,"_matrix.csv");
9655
mprintf(" Saving PseudoSDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pRevSDF->m_sName,multibuf);
9656
o->m_pRevSDF->m_p2DF->WriteMathematicaNb(o->m_pRevSDF->m_sName,multibuf,".nb",false);
9657
mprintf(" Saving PseudoSDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pRevSDF->m_sName,multibuf);
9658
o->m_pRevSDF->m_p2DF->WriteGnuplotInput(o->m_pRevSDF->m_sName,multibuf,"",false);
9659
if (o->m_pRevSDF->m_iHistogramRes != 0)
8967
mprintf(WHITE,"* Plane Projection Distribution Function\n");
8968
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pPlProj->m_p2DF->m_fBinEntries,o->m_pPlProj->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pPlProj->m_p2DF->m_fSkipEntries,o->m_pPlProj->m_p2DF->m_fBinEntries+o->m_pPlProj->m_p2DF->m_fSkipEntries)*100.0);
8969
if (o->m_pPlProj->m_p2DF->m_fBinEntries == 0)
8971
eprintf(" There were no bin entries. Check your function definition. Skipping this Plane Projection DF.\n\n");
8975
o->m_pPlProj->m_p2DF->CalcMaxEntry();
8976
mprintf(" Raw data range from %.0f to %.0f hits.\n",o->m_pPlProj->m_p2DF->m_fMinEntry,o->m_pPlProj->m_p2DF->m_fMaxEntry);
8977
mprintf(" The volume of one bin is %.3f pm^3.\n",(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])*(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])*(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])/o->m_pPlProj->m_iResolution[0]/o->m_pPlProj->m_iResolution[1]);
8979
if ((g_bPeriodicX) && (g_bPeriodicY) && (g_bPeriodicZ))
8981
mprintf(" System is periodic, normalizing values to uniform density.\n");
8982
mprintf(" The uniform particle density of this observation is %.6f nm^-3.\n",o->m_pPlProj->m_fParticleDensity);
8983
// mprintf(" (%f)\n",(double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9 / (double)g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pPlProj->m_iShowAtomGes * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8984
// mprintf(" o->m_pPlProj->m_iShowAtomGes = %d\n",o->m_pPlProj->m_iShowAtomGes);
8985
// mprintf(" 1/Vol = %f\n",(double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9);
8986
o->m_pPlProj->m_p2DF->MultiplyBin((double)o->m_pPlProj->m_iResolution[0]*o->m_pPlProj->m_iResolution[1]/(o->m_pPlProj->m_fMaxVal[0]-o->m_pPlProj->m_fMinVal[0])/(o->m_pPlProj->m_fMaxVal[1]-o->m_pPlProj->m_fMinVal[1])/(o->m_pPlProj->m_fSliceBorder[1]-o->m_pPlProj->m_fSliceBorder[0])*1.0e9 / (double)g_iSteps * g_iStride / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /* / o->m_pPlProj->m_iShowAtomGes*/ * (g_bDoubleBox?g_iDoubleBoxFactor:1));
8987
// mprintf(" (%f)\n",1.0/o->m_pPlProj->m_fParticleDensity);
8988
o->m_pPlProj->m_p2DF->MultiplyBin(1.0/o->m_pPlProj->m_fParticleDensity);
8991
mprintf(" System is non-periodic, normalizing integral value to %.2f.\n",1000000.0f);
8992
o->m_pPlProj->m_p2DF->NormalizeBinIntegral(1000000.0f);
8995
o->m_pPlProj->m_p2DF->CalcMaxEntry();
8996
mprintf(" Resulting data range from %.6f to %.6f.\n",o->m_pPlProj->m_p2DF->m_fMinEntry,o->m_pPlProj->m_p2DF->m_fMaxEntry);
8998
if (o->m_pPlProj->m_bDrawAtoms)
9000
mprintf(" Inserting reference atoms into the Plane Projection DF plot...\n");
9002
for (z3=0;z3<o->m_pPlProj->m_oDrawAtoms.m_oaAtoms.GetSize();z3++)
9004
ti2 = o->m_pPlProj->m_oDrawAtoms.m_baRealAtomType[z3];
9005
for (z4=0;z4<((CxIntArray*)o->m_pPlProj->m_oDrawAtoms.m_oaAtoms[z3])->GetSize();z4++)
9007
if (o->m_pPlProj->m_bAverageAtomPos)
9008
o->m_pPlProj->m_vaAtomPos[ti] /= o->m_pPlProj->m_iAverageCounter;
9010
if (((CAtom*)g_oaAtoms[ti2])->m_pElement->m_fRadius == 0)
9011
o->m_pPlProj->m_p2DF->AddCircle(o->m_pPlProj->m_vaAtomPos[ti][0],o->m_pPlProj->m_vaAtomPos[ti][1],25.0,0.4,0.4,0.4);
9012
else o->m_pPlProj->m_p2DF->AddCircle(o->m_pPlProj->m_vaAtomPos[ti][0],o->m_pPlProj->m_vaAtomPos[ti][1],((CAtom*)g_oaAtoms[ti2])->m_pElement->m_fRadius*0.6,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[ti2])->m_pElement->m_iColorB/255.0);
9019
mprintf(" Saving Plane Projection DF triples as \"%s%s_triples.csv\"...\n",o->m_pPlProj->m_sName,multibuf);
9020
o->m_pPlProj->m_p2DF->Write(o->m_pPlProj->m_sName,multibuf,"_triples.csv");
9021
mprintf(" Saving Plane Projection DF matrix as \"%s%s_matrix.csv\"...\n",o->m_pPlProj->m_sName,multibuf);
9022
o->m_pPlProj->m_p2DF->WriteCSV(o->m_pPlProj->m_sName,multibuf,"_matrix.csv");
9023
mprintf(" Saving Plane Projection DF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pPlProj->m_sName,multibuf);
9024
o->m_pPlProj->m_p2DF->WriteMathematicaNb(o->m_pPlProj->m_sName,multibuf,".nb",false);
9025
mprintf(" Saving Plane Projection DF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pPlProj->m_sName,multibuf);
9026
o->m_pPlProj->m_p2DF->WriteGnuplotInput(o->m_pPlProj->m_sName,multibuf,"",false);
9027
if (o->m_pPlProj->m_iHistogramRes != 0)
9661
9029
mprintf(" Calculating Histogram...\n");
9662
o->m_pRevSDF->m_p2DF->CalcHistogram();
9663
sprintf(buf,"his_%s",o->m_pRevSDF->m_sName);
9030
o->m_pPlProj->m_p2DF->CalcHistogram();
9031
sprintf(buf,"his_%s",o->m_pPlProj->m_sName);
9664
9032
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9665
o->m_pRevSDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9667
if (o->m_pRevSDF->m_bCreateRevSDF)
9669
mprintf(" Creating volumetric Revolution SDF...\n");
9670
o->m_pRevSDF->CreateRevSDF();
9671
sprintf(buf,"revsdf_ref_%s.xyz",o->m_pRevSDF->m_sName);
9672
mprintf(" Saving Revolution SDF reference structure as \"%s\"...\n",buf);
9673
a = OpenFileWrite(buf,true);
9674
mfprintf(a,"2\n\n%s 0.0 0.0 0.0\n%s 0.0 %f 0.0\n",((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount/100.0);
9676
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9678
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
9679
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9681
tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
9684
tempSDF->Smooth(z2);
9685
sprintf(buf,".s%d%s.plt",z2,multibuf);
9686
} else sprintf(buf,"%s.plt",multibuf);
9687
mprintf(" Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9688
tempSDF->WritePLT("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9691
sprintf(buf,".s%d%s.cube",z2,multibuf);
9692
else sprintf(buf,"%s.cube",multibuf);
9693
mprintf(" Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9694
tempSDF->WriteCube("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9697
sprintf(buf,".s%d%s.his",z2,multibuf);
9698
else sprintf(buf,"%s.his",multibuf);
9699
mprintf(" Saving Revolution SDF Histogram as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9700
tempSDF->CalcHistogram();
9701
tempSDF->WriteHistogram("revsdf_",o->m_pRevSDF->m_sName,buf);
9702
if (o->m_pRevSDF->m_iHistogramRes != 0)
9704
mprintf(" Calculating Histogram...\n");
9705
tempSDF->CalcHistogram();
9706
sprintf(buf2,"his_revsdf_%s",o->m_pRevSDF->m_sName);
9707
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf2,buf);
9708
tempSDF->WriteHistogram(buf2,buf,".csv");
9716
if (g_bSDF || g_bAvg || g_bVoidSDF)
9718
sprintf(buf,"ref_%s_%s%d_%s%d_%s%d%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,g_iFixAtom[0]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,g_iFixAtom[1]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[2]])->m_sName,g_iFixAtom[2]+1,multibuf);
9720
mprintf("\n*** Reference molecule ***\n");
9722
mprintf("Saving reference molecule as \"%s\"...",buf);
9723
a = OpenFileWrite(buf,true);
9726
eprintf("\nError: Could not open %s for writing.\n",buf);
9729
if (!g_bSaveVirtAtoms)
9730
mfprintf(a," %d \n\n",(int)(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes-((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize()));
9731
else mfprintf(a," %d \n\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
9733
for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
9735
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
9737
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
9741
g_pRefMol[cc][0] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9742
g_pRefMol[cc][1] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9743
g_pRefMol[cc][2] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9745
if (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType)
9746
mfprintf(a," %s %9.6f %9.6f %9.6f\n",((CVirtualAtom*)g_oaVirtualAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms[z2]])->m_sLabel,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
9747
else mfprintf(a," %s %9.6f %9.6f %9.6f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z]])->m_sName,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
9755
mprintf("\n*** This is the swap matrix of reference molecule %s:\n (It shows how often the atoms\n have been swapped with each other)\n\n ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
9756
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
9758
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
9760
if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
9762
mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
9769
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
9771
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
9773
mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
9774
if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
9779
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
9781
for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
9783
if ((z2 == z4) && (z3 == z5))
9788
if (pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] != 0)
9789
mprintf("%3.0f%c ",(double)pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] * 100.0f / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize(),'%');
9790
else mprintf(" - ");
9803
if (g_bMultiInterval)
9806
mprintf(YELLOW,"***********************************************\n");
9807
mprintf(YELLOW,"*** Interval %2d (%6d - %6d) finished. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
9808
mprintf(YELLOW,"***********************************************\n\n");
9810
if (multicounter < g_laMultiIntervalStart.GetSize())
9811
goto _multiintervalstart;
9814
g_iEndTime = time(NULL);
9815
if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
9817
mprintf(WHITE,"\nAnalysis was running for %dh %dm %ds.\n",(g_iEndTime-g_iStartTime)/3600,((g_iEndTime-g_iStartTime)/60)%60,(g_iEndTime-g_iStartTime)%60);
9818
mprintf(WHITE," (%.3f steps per second)\n\n",g_iSteps/g_iStride/((double)g_iEndTime-g_iStartTime));
9819
} else mprintf("\n");
9828
mprintf(WHITE,"*** The End ***\n\n");
9830
UninstallSignalHandler();
9831
if (g_fInput != NULL)
9833
if (g_pDatabase != NULL)
9838
if (g_pTempTimestep != NULL)
9840
delete g_pTempTimestep;
9841
g_pTempTimestep = NULL;
9853
RemoveAllAnalyses();
9854
RemoveAllElements();
9856
RemoveAllMolecules();
9857
RemoveAllObservations();
9862
//////////////// Cross-Correlation Test 1
9864
/* CAutoCorrelation acx, acf;
9865
CCrossCorrelation ccx, ccf;
9866
CxFloatArray i1, i2, opx, opf, opcx, opcf;
9873
i1[z] = ((rand()%200)/100.0)-1.0;
9877
acx.Init(32,32,false);
9878
acx.AutoCorrelate(&i1,&opx);
9880
acf.Init(32,32,true);
9881
acf.AutoCorrelate(&i1,&opf);
9883
ccx.Init(32,32,false);
9884
ccx.CrossCorrelate(&i1,&i2,&opcx);
9886
ccf.Init(32,32,true);
9887
ccf.CrossCorrelate(&i1,&i2,&opcf);
9890
mprintf("%8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],opx[z],opf[z],opcx[z],opcf[z]);
9896
//////////////// Cross-Correlation Test 2
9898
/* CCrossCorrelation ccx, ccf;
9899
CxFloatArray i1, i2, opcx, opcf;
9906
i1[z] = ((rand()%200)/100.0)-1.0;
9907
i2[z] = ((rand()%200)/100.0)-1.0;
9910
ccx.Init(32,32,false);
9911
ccx.CrossCorrelate(&i1,&i2,&opcx);
9913
ccf.Init(32,32,true);
9914
ccf.CrossCorrelate(&i1,&i2,&opcf);
9917
mprintf("%8.4f - %8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],i2[z],opcx[z],opcf[z],ccf.m_pFFTback->m_pOutput[2*z]/64.0/(32-z),ccf.m_pFFTback->m_pOutput[2*z+1]/64.0/(32-z));
9924
/* a = fopen("E:\\tmptraj.xyz","wt");
9926
for (z=0;z<200000;z++)
9928
mfprintf(a,"4\n\n");
9929
mfprintf(a,"Ne %f %f %f\n",sin(pow(z/50.0,1.1))*3.0,cos(pow(z/50.0,1.1))*3.0,0);
9930
mfprintf(a,"Ne %f %f %f\n",-sin(pow(z/50.0,1.1))*3.0,-cos(pow(z/50.0,1.1))*3.0,0);
9932
mfprintf(a,"Ne %f %f %f\n",0.0,0.0,cos(z/33.0)*2.0+4.0);
9933
mfprintf(a,"Ne %f %f %f\n",0.0,0.0,-cos(z/33.0)*2.0-4.0);
9939
// mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
9941
/* CClusterAnalysis *can;
9942
can = new CClusterAnalysis();
9947
can->AddParticle(rand()%20,rand()%20,rand()%20);
9953
can->DumpAgr("C:\\Software\\test.csv");
9960
CreateTicks(0,540,maj,min);
9963
/* CExtendedCondition *ec;
9965
ec = new CExtendedCondition();
9976
if (!ec->Evaluate())
9982
printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
9986
double *px, *py, *pp, r, integral;
9988
px = new double[100];
9989
py = new double[100];
10002
py[z] = 0.2 * exp(-0.004 * z) + 0.3 * exp(-0.05 * z) + 0.5 * exp(-0.15 * z) + 0.1 * exp(-0.1 * z);
10005
w.Fit_TriExp(100,px,py,pp,r,integral);
10012
df3->m_fMinVal[0] = -100;
10013
df3->m_fMaxVal[0] = 100;
10014
df3->m_fMinVal[1] = -100;
10015
df3->m_fMaxVal[1] = 100;
10016
df3->m_fMinVal[2] = -100;
10017
df3->m_fMaxVal[2] = 100;
10018
df3->m_iRes[0] = 101;
10019
df3->m_iRes[1] = 101;
10020
df3->m_iRes[2] = 101;
10023
for (z=0;z<101;z++)
10024
for (z2=0;z2<101;z2++)
10025
for (z3=0;z3<101;z3++)
10026
if (sqrt(pow(z-50,2)+pow(z2-50,2)+pow(z3-50,2)) < 30)
10027
df3->AddToBin(CxVector3(z-50,z2-50,z3-50));
10029
df3->WritePLT("","C:\\test.plt","",true);
10030
df3->WriteCube("","C:\\test.cube","",true);
10036
mdf->m_fMinVal = 0;
10037
mdf->m_fMaxVal = 1;
10038
mdf->m_iResolution = 20;
10042
for (z=0;z<1000000;z++)
10043
mdf->AddToBin(z/999999.0);
10044
mdf->Write("","D:\\Software\\out.csv","");
10047
/* CAutoCorrelation *ac;
10049
ac = new CAutoCorrelation();
10053
ac->Init(N,N,false);
10055
ptfa = new CxFloatArray();
10057
ptfa2 = new CxFloatArray();
10061
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10063
ac->AutoCorrelate(ptfa,ptfa2);
10065
mprintf("Classic:\n");
10067
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10069
ac->Init(N,N,true);
10072
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10074
ac->AutoCorrelate(ptfa,ptfa2);
10076
mprintf("\nFFT:\n");
10078
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10085
/* fft = new CFFT();
10087
fft->PrepareFFT_R2C(300);
10089
for (z=0;z<300;z++)
10091
fft->m_pInput[z*2] = sin(z/3.1) * exp(-10.0/z);
10092
fft->m_pInput[z*2+1] = sin(z/2.7+1.0) * exp(-2.0/z);
10097
for (z=0;z<300;z++)
10098
mprintf("%03d: % 10.6f % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
10103
/* CxVector3 v1, v2, v3, v;
10105
v1 = CxVector3(0,0,0);
10106
v2 = CxVector3(1,0,0);
10107
v3 = CxVector3(1,1,0);
10109
v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
10116
/* fft = new CFFT();
10117
fft->PrepareFFT_C2C(20);
10122
fft->m_pInput[2*z] = sin(2*z*17.89) * exp(-0.1*z*2);
10123
fft->m_pInput[2*z+1] = sin((2*z+1)*17.89) * exp(-0.1*(2*z+1));
10126
fft->m_pInput[2*z] = 0;
10127
fft->m_pInput[2*z+1] = 0;
10129
printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
10131
printf("Transforming...\n");
10134
printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
10140
/* vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
10141
vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
10143
tf = DotP(vec0,vec1);
10145
tf2 = Angle_Deg(vec0,vec1);
10147
printf("DotP: %f, Length 1: %f, Length 2: %f, DotP/Length1/Length2: %.10f, Angle: %.10f\n",tf,vec0.GetLength(),vec1.GetLength(),tf/vec0.GetLength()/vec1.GetLength(),tf2);
10149
printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
10153
/* CxVector3 a1, a2, a3;
10155
a1 = CxVector3(0,1.0,0);
10156
a2 = CxVector3(0,-1.0,0.0001);
10157
a3 = CxVector3(1.0,0,0);
10159
mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
10163
/* CGrace *g = new CGrace();
10165
g->m_fMinValX = 1.37;
10166
g->m_fMaxValX = 2.53;
10167
g->m_fMinValY = 225;
10168
g->m_fMaxValY = 8337;
10171
printf("X: %f - %f Ticks %f\nY: %f - %f Ticks %f\n",g->m_fMinRangeX,g->m_fMaxRangeX,g->m_fTickMajorX,g->m_fMinRangeY,g->m_fMaxRangeY,g->m_fTickMajorY);
10174
/* CDatabaseTable *dt = new CDatabaseTable();
10176
dt->AddInt(0,0,12345);
10177
dt->AddInt(1,1,123456);
10178
dt->AddInt(2,2,123);
10180
dt->AddInt(4,4,123456789);
10182
dt->AddDouble(1,0,13.45);
10183
dt->AddDouble(2,1,3.199);
10184
dt->AddDouble(3,2,1367.4597);
10185
dt->AddDouble(4,3,13.45);
10186
dt->AddDouble(0,4,1.45);
10188
dt->AddString(2,0,"Hallo!");
10189
dt->AddString(3,1,"Hiu");
10190
dt->AddString(4,2,"Hallo Welt!");
10191
dt->AddString(0,3,"Dies ist ein Test");
10192
dt->AddString(1,4,"^^");
10194
dt->AddBool(3,0,true);
10195
dt->AddBool(4,1,false);
10196
dt->AddBool(0,2,true);
10197
dt->AddBool(1,3,false);
10198
dt->AddBool(2,4,true);
10201
a = fopen("table.dat","wt");
10202
dt->DumpOutputFile(a);
10207
/* CFFAtomNode *no;
10209
no = new CFFAtomNode();
10211
no->REC_Parse("O2=O(C,Si(O,S)(C))",0);
10213
no->REC_DumpTree(0,0xFFFFFFFF,false);
10224
t2df->m_iRes[0] = 100;
10225
t2df->m_iRes[1] = 100;
10226
t2df->m_fMinVal[0] = 0;
10227
t2df->m_fMaxVal[0] = 500.0;
10228
t2df->m_fMinVal[1] = 0;
10229
t2df->m_fMaxVal[1] = 500.0;
10235
aa = fopen(argv[1],"rt");
10248
buf[strlen(buf)-1] = 0;
10249
pp = strchr(buf,' ');
10254
// mprintf("%f | %f\n",tf,tf2);
10255
t2df->AddToBin(tf,tf2);
10260
mprintf("\n%.0f Entries, %.0f skipped.\n\n",t2df->m_fBinEntries,t2df->m_fSkipEntries);
10262
t2df->CorrectRadialDist(0);
10263
t2df->CorrectRadialDist(1);
10264
t2df->NormalizeBinIntegral(1000000.0);
10266
t2df->WriteMathematicaNb("cdf.nb","","",false);
10271
/***********************************************************************************************************/
10276
0, 166, 333, 500, 667, 834, 1001, 1168, 1335, 1502,
10277
1669, 1836, 2003, 2170, 2337, 2504, 2671, 2838, 3004, 3171,
10278
3338, 3505, 3672, 3839, 4006, 4173, 4340, 4507, 4674, 4841,
10279
5008, 5175, 5342, 5509, 5676, 5843, 6009, 6176, 6343, 6510,
10280
6677, 6844, 7011, 7178, 7345, 7512, 7679, 7846, 8013, 8180,
10281
8347, 8514, 8681, 8847, 9014, 9181, 9348, 9515, 9682, 9849,
10282
10016, 10183, 10350, 10517, 10684, 10851, 11018, 11185, 11352, 11519,
10283
11686, 11852, 12019, 12186, 12353, 12520, 12687, 12854, 13021, 13188,
10284
13355, 13522, 13689, 13856, 14023, 14190, 14357, 14524, 14691, 14857,
10285
15024, 15191, 15358, 15525, 15692, 15859, 16026, 16193, 16360, 16527,
10286
16694, 16861, 17028, 17195, 17362, 17529, 17695, 17862, 18029, 18196,
10287
18363, 18530, 18697, 18864, 19031, 19198, 19365, 19532, 19699, 19866,
10288
20033, 20200, 20367, 20534, 20700, 20867, 21034, 21201, 21368, 21535,
10289
21702, 21869, 22036, 22203, 22370, 22537, 22704, 22871, 23038, 23205,
10290
23372, 23538, 23705, 23872, 24039, 24206, 24373, 24540, 24707, 24874,
10291
25041, 25208, 25375, 25542, 25709, 25876, 26043, 26210, 26377, 26543,
10292
26710, 26877, 27044, 27211, 27378, 27545, 27712, 27879, 28046, 28213,
10293
28380, 28547, 28714, 28881, 29048, 29215, 29382, 29548, 29715, 29882,
10294
30049, 30216, 30383, 30550, 30717, 30884, 31051, 31218, 31385, 31552,
10295
31719, 31886, 32053, 32220, 32386, 32553, 32720, 32887, 33054, 33221,
10296
33388, 33555, 33722, 33889, 34056, 34223, 34390, 34557, 34724, 34891,
10297
35058, 35225, 35391, 35558, 35725, 35892, 36059, 36226, 36393, 36560,
10298
36727, 36894, 37061, 37228, 37395, 37562, 37729, 37896, 38063, 38230,
10299
38396, 38563, 38730, 38897, 39064, 39231, 39398, 39565, 39732, 39899,
10300
40066, 40233, 40400, 40567, 40734, 40901, 41068, 41234, 41401, 41568,
10301
41735, 41902, 42069, 42236, 42403, 42570, 42737, 42904, 43071, 43238,
10302
43405, 43572, 43739, 43906, 44073, 44239, 44406, 44573, 44740, 44907,
10303
45074, 45241, 45408, 45575, 45742, 45909, 46076, 46243, 46410, 46577,
10304
46744, 46911, 47077, 47244, 47411, 47578, 47745, 47912, 48079, 48246,
10305
48413, 48580, 48747, 48914, 49081, 49248, 49415, 49582, 49749, 49916,
10306
50082, 50249, 50416, 50583, 50750, 50917, 51084, 51251, 51418, 51585,
10307
51752, 51919, 52086, 52253, 52420, 52587, 52754, 52921, 53087, 53254,
10308
53421, 53588, 53755, 53922, 54089, 54256, 54423, 54590, 54757, 54924,
10309
55091, 55258, 55425, 55592, 55759, 55925, 56092, 56259, 56426, 56593,
10310
56760, 56927, 57094, 57261, 57428, 57595, 57762, 57929, 58096, 58263,
10311
58430, 58597, 58764, 58930, 59097, 59264, 59431, 59598, 59765, 59932,
10312
60099, 60266, 60433, 60600, 60767, 60934, 61101, 61268, 61435, 61602,
10313
61768, 61935, 62102, 62269, 62436, 62603, 62770, 62937, 63104, 63271,
10314
63438, 63605, 63772, 63939, 64106, 64273, 64440, 64607, 64773, 64940,
10315
65107, 65274, 65441, 65608, 65775, 65942, 66109, 66276, 66443, 66610,
10316
66777, 66944, 67111, 67278, 67445, 67612, 67778, 67945, 68112, 68279,
10317
68446, 68613, 68780, 68947, 69114, 69281, 69448, 69615, 69782, 69949,
10318
70116, 70283, 70450, 70616, 70783, 70950, 71117, 71284, 71451, 71618,
10319
71785, 71952, 72119, 72286, 72453, 72620, 72787, 72954, 73121, 73288,
10320
73455, 73621, 73788, 73955, 74122, 74289, 74456, 74623, 74790, 74957,
10321
75124, 75291, 75458, 75625, 75792, 75959, 76126, 76293, 76460, 76626,
10322
76793, 76960, 77127, 77294, 77461, 77628, 77795, 77962, 78129, 78296,
10323
78463, 78630, 78797, 78964, 79131, 79298, 79464, 79631, 79798, 79965,
10324
80132, 80299, 80466, 80633, 80800, 80967, 81134, 81301, 81468, 81635,
10325
81802, 81969, 82136, 82303, 82469, 82636, 82803, 82970, 83137, 83304,
10326
83471, 83638, 83805, 83972, 84139, 84306, 84473, 84640, 84807, 84974,
10327
85141, 85307, 85474, 85641, 85808, 85975, 86142, 86309, 86476, 86643,
10328
86810, 86977, 87144, 87311, 87478, 87645, 87812, 87979, 88146, 88312,
10329
88479, 88646, 88813, 88980, 89147, 89314, 89481, 89648, 89815, 89982,
10330
90149, 90316, 90483, 90650, 90817, 90984, 91151, 91317, 91484, 91651,
10331
91818, 91985, 92152, 92319, 92486, 92653, 92820, 92987, 93154, 93321,
10332
93488, 93655, 93822, 93989, 94155, 94322, 94489, 94656, 94823, 94990,
10333
95157, 95324, 95491, 95658, 95825, 95992, 96159, 96326, 96493, 96660,
10334
96827, 96994, 97160, 97327, 97494, 97661, 97828, 97995, 98162, 98329,
10335
98496, 98663, 98830, 98997, 99164, 99331, 99498, 99665, 99832, 99999 };
10939
double coeff[] = { 200.00000,191.41233,183.19339,175.32736,167.79909,160.59407,
10940
153.69842,147.09886,140.78267,134.73769,128.95227,123.41527,
10941
118.11602,113.04431,108.19037,103.54485,99.09880,94.84366,
10942
90.77123,86.87366,83.14344,79.57340,76.15664,72.88660,
10943
69.75697,66.76172,63.89508,61.15153,58.52578,56.01278,
10944
53.60768,51.30585,49.10286,46.99446,44.97660,43.04537,
10945
41.19708,39.42814,37.73516,36.11487,34.56416,33.08003,
10946
31.65963,30.30021,28.99917,27.75399,26.56228,25.42174,
10947
24.33017,23.28547,22.28563,21.32872,20.41290,19.53641,
10948
18.69754,17.89470,17.12633,16.39096,15.68715,15.01357,
10949
14.36892,13.75194,13.16145,12.59632,12.05545,11.53781,
10950
11.04240,10.56825,10.11447,9.68017,9.26452,8.86672,
10951
8.48600,8.12162,7.77289,7.43914,7.11971,6.81400,
10952
6.52142,6.24140,5.97341,5.71692,5.47144,5.23651,
10953
5.01166,4.79647,4.59051,4.39341,4.20476,4.02421,
10954
3.85142,3.68605,3.52777,3.37630,3.23132,3.09258,
10955
2.95979,2.83270,2.71107,2.59466,2.48325,2.37662,
10956
2.27457,2.17691,2.08343,1.99397,1.90836,1.82641,
10957
1.74799,1.67293,1.60110,1.53235,1.46656,1.40358,
10958
1.34332,1.28564,1.23043,1.17760,1.12704,1.07864,
10959
1.03233,0.98800,0.94558,0.90498,0.86612,0.82893,
10960
0.79334,0.75927,0.72667,0.69547,0.66561,0.63703,
10961
0.60967,0.58349,0.55844,0.53446,0.51151,0.48955,
10962
0.46853,0.44841,0.42916,0.41073,0.39309,0.37621,
10963
0.36006,0.34460,0.32980,0.31564,0.30209,0.28912,
10964
0.27670,0.26482,0.25345,0.24257,0.23215,0.22218,
10965
0.21264,0.20351,0.19478,0.18641,0.17841,0.17075,
10966
0.16342,0.15640,0.14968,0.14326,0.13711,0.13122,
10967
0.12558,0.12019,0.11503,0.11009,0.10536,0.10084,
10968
0.09651,0.09237,0.08840,0.08460,0.08097,0.07749,
10969
0.07417,0.07098,0.06793,0.06502,0.06223,0.05955,
10970
0.05700,0.05455,0.05221,0.04997,0.04782,0.04577,
10971
0.04380,0.04192,0.04012,0.03840,0.03675,0.03517,
10972
0.03366,0.03222,0.03083,0.02951,0.02824,0.02703,
10973
0.02587,0.02476,0.02369,0.02268,0.02170,0.02077,
10974
0.01988,0.01903,0.01821,0.01743,0.01668,0.01596,
10975
0.01528,0.01462,0.01399,0.01339,0.01282,0.01227,
10976
0.01174,0.01124,0.01075,0.01029,0.00985,0.00943,
10977
0.00902,0.00864,0.00826,0.00791,0.00757,0.00724,
10978
0.00693,0.00664,0.00635,0.00608,0.00582,0.00557,
10979
0.00533,0.00510,0.00488,0.00467,0.00447,0.00428,
10980
0.00409,0.00392,0.00375,0.00359,0.00344,0.00329,
10981
0.00315,0.00301,0.00288,0.00276,0.00264,0.00253,
10982
0.00242,0.00231,0.00222,0.00212,0.00203,0.00194,
10983
0.00186,0.00178,0.00170,0.00163,0.00156,0.00149,
10984
0.00143,0.00137,0.00131,0.00125,0.00120,0.00115,
10985
0.00110,0.00105,0.00101,0.00096,0.00092,0.00088,
10986
0.00084,0.00081,0.00077,0.00074,0.00071,0.00068,
10987
0.00065,0.00062,0.00059,0.00057,0.00054,0.00052,
10988
0.00050,0.00048,0.00046,0.00044,0.00042,0.00040 };
10992
for (z=0;z<600;z++)
10993
xv[z] = xv0[z]*0.005;
11000
tmpdf->m_fMinVal = 0;
11001
tmpdf->m_fMaxVal = 500.0;
11002
tmpdf->m_iResolution = 600;
11003
tmpdf->m_bLeft = true;
11006
for (z=0;z<600;z++)
11007
tmpdf->m_pBin[z] = yv[z];
11009
tlsp = new CLTSpec();
11010
tlsp->m_bLSpecDataLin = true;
11011
tlsp->m_fLSpecMinExp = 0.005;
11012
tlsp->m_fLSpecMaxExp = 2500.0;
11013
tlsp->m_iLSpecData = 600;
11014
tlsp->m_iLSpecPoints = 300;
11015
tlsp->m_iMaxLMIter = 200;
11016
tlsp->m_fLSpecZeroWeight = 1.0;
11018
tlsp->ComputeSpectrum("rdyn","bla","","",tmpdf);
11023
/****************************************************************************************************************/
9033
o->m_pPlProj->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9035
mprintf(WHITE,"\n Note: ");
9036
mprintf("The atoms of the ref. molecule are only drawn in the Mathematica Notebook (.nb)!\n\n");
9042
for (zr=0;zr<g_iCDFChannels;zr++)
9044
if (o->m_pRDF[zr] == NULL)
9046
mprintf(WHITE,"* Radial Distribution Function\n");
9047
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRDF[zr]->m_pRDF->m_fBinEntries,o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,ZeroDivide(o->m_pRDF[zr]->m_pRDF->m_fSkipEntries,o->m_pRDF[zr]->m_pRDF->m_fBinEntries+o->m_pRDF[zr]->m_pRDF->m_fSkipEntries)*100.0);
9048
o->m_pRDF[zr]->m_pRDF->CalcMeanSD();
9049
mprintf(" Mean value: %10G pm Standard deviation: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMean,o->m_pRDF[zr]->m_pRDF->m_fSD);
9050
mprintf(" Min. value: %10G pm Max.value: %10G pm\n",o->m_pRDF[zr]->m_pRDF->m_fMinInput,o->m_pRDF[zr]->m_pRDF->m_fMaxInput);
9052
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1.0 / g_iSteps);
9054
if (o->m_pRDF[zr]->m_bCalcSD)
9056
mprintf(GREEN,"\n>>> Standard Deviation Engine >>>\n\n");
9057
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->FinishAnalysis();
9058
o->m_pRDF[zr]->m_pRDF->m_pSDEngine->DumpData(o->m_pRDF[zr]->m_pRDF,o->m_pRDF[zr]->m_fSDTimesSigma,o->m_pRDF[zr]->m_bSDVerbose);
9059
mprintf(GREEN,"\n<<< Standard Deviation Engine <<<\n\n");
9061
if (o->m_pRDF[zr]->m_bAdaptive)
9063
// o->m_pRDF[zr]->m_pRDF->WriteHenry("rdf_",o->m_pRDF[zr]->m_sName,".csv");
9064
o->m_pRDF[zr]->m_pRDF->PrepareAdapt();
9065
o->m_pRDF[zr]->m_pRDF->BinTree_RadialDist();
9066
if (o->m_iShowMol == g_iFixMol)
9067
o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/(((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()-1.0f)/o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
9068
else o->m_pRDF[zr]->m_pRDF->BinTree_MultiplyBin(3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[zr]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[zr]->m_iRefAtomGes);
9070
mprintf(" Saving RDF as \"rdf_%s.csv\"...\n",o->m_pRDF[zr]->m_sName);
9071
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".001.csv",5,10,0.001,true);
9072
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".002.csv",5,10,0.002,true);
9073
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".005.csv",5,10,0.005,true);
9074
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".010.csv",5,10,0.01,true);
9075
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".020.csv",5,10,0.02,true);
9076
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".050.csv",5,10,0.05,true);
9077
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",5,10,0.1,true);
9079
/* o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".50.csv",16,0,50,true);
9080
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".100.csv",16,0,100,true);
9081
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".500.csv",16,0,500,true);
9082
o->m_pRDF[zr]->m_pRDF->WriteAdapted("rdf_",o->m_pRDF[zr]->m_sName,".1000.csv",16,0,1000,true);*/
9085
if (o->m_pRDF[zr]->m_bRadialCorrect)
9087
mprintf(" Correcting radial distribution...\n");
9089
if (o->m_pRDF[zr]->m_bLongMode)
9091
o->m_pRDF[zr]->m_pRDF->CorrectRadialDistLong();
9094
o->m_pRDF[zr]->m_pRDF->CorrectRadialDist();
9097
if (o->m_bOthers && o->m_pRDF[zr]->m_bRadialCorrect)
9099
if (o->m_pRDF[zr]->m_bProbDens)
9101
mprintf(" Scaling RDF to nm^(-3) ...\n");
9102
if (o->m_bObsCertain)
9104
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
9105
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
9108
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9109
o->m_pRDF[zr]->m_pRDF->MultiplyBin(1e9 / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
9113
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
9114
o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
9118
mprintf(" Scaling RDF to uniform density ...\n");
9119
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
9121
if (o->m_bObsCertain)
9123
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / o->m_waObsRefList.GetSize());
9124
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / o->m_waObsRefList.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / o->m_waObsShowList.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
9127
if (g_bRegionAnalysis)
9129
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 * g_iSteps / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) * o->m_pRDF[zr]->m_iShowAtomGes * ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() * o->m_pRDF[zr]->m_iRefAtomGes);
9130
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ * g_iSteps / (4.0/3.0*Pi) / (o->m_pRDF[zr]->m_pRDF->m_fBinEntries + o->m_pRDF[zr]->m_pRDF-> m_fSkipEntries) );
9133
o->m_pRDF[zr]->m_pRDF->Integrate(true,1.0 / (double)((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9134
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_fBoxX*g_fBoxY*g_fBoxZ / (4.0/3.0*Pi) / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iShowAtomGes / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pRDF[zr]->m_iRefAtomGes);
9139
o->m_pRDF[zr]->m_pRDF->MultiplyBin(g_iDoubleBoxFactor);
9140
o->m_pRDF[zr]->m_pRDF->MultiplyIntegral(g_iDoubleBoxFactor);
9144
eprintf(" Uniform density not defined if box is not XYZ-periodic!\n");
9151
mprintf(" Scaling RDF to integral value 1000 ...\n");
9152
o->m_pRDF[zr]->m_pRDF->NormBinIntegral(1000.0);
9153
o->m_pRDF[zr]->m_pRDF->Integrate(false,1000.0);
9155
sprintf(buf,"rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
9156
mprintf(" Saving RDF as \"%s\"...\n",buf);
9157
o->m_pRDF[zr]->m_pRDF->Write("",buf,"",true);
9158
sprintf(buf,"rdf_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
9159
mprintf(" Saving RDF AGR file as \"%s\"...\n",buf);
9160
o->m_pRDF[zr]->m_pRDF->WriteAgr("",buf,"",o->m_pRDF[zr]->m_sName,true);
9161
if (o->m_pRDF[zr]->m_iHistogramRes != 0)
9163
mprintf(" Calculating Histogram...\n");
9164
o->m_pRDF[zr]->m_pRDF->CalcHistogram();
9165
sprintf(buf,"his_rdf_%s%s.csv",o->m_pRDF[zr]->m_sName,multibuf);
9166
mprintf(" Saving Histogram as \"%s\"...\n",buf);
9167
o->m_pRDF[zr]->m_pRDF->WriteHistogram("",buf,"");
9169
if (o->m_bObsCertain && o->m_bDecompDist)
9171
sprintf(buf,"rdf_decomp_mol_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
9172
mprintf(" Saving RDF molecule decomposition as \"%s.csv\"...\n",buf);
9173
o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
9174
mprintf(" Saving RDF molecule decomposition as \"%s.agr\"...\n",buf);
9175
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
9177
sprintf(buf,"rdf_decomp_nb_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
9178
mprintf(" Saving cumulative RDF molecule decomposition as \"%s.csv\"...\n",buf);
9179
o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
9180
mprintf(" Saving cumulative RDF molecule decomposition as \"%s.agr\"...\n",buf);
9181
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
9183
if (o->m_bDecompType)
9185
sprintf(buf,"rdf_decomp_type_%s%s",o->m_pRDF[zr]->m_sName,multibuf);
9186
mprintf(" Saving RDF type decomposition as \"%s.csv\"...\n",buf);
9187
o->m_pRDF[zr]->m_pRDF->WriteMulti("",buf,".csv");
9188
mprintf(" Saving RDF type decomposition as \"%s.agr\"...\n",buf);
9189
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr("",buf,".agr",buf,true);
9191
sprintf(buf,"rdf_decomp_type_%s%s_cumulative",o->m_pRDF[zr]->m_sName,multibuf);
9192
mprintf(" Saving cumulative RDF type decomposition as \"%s.csv\"...\n",buf);
9193
o->m_pRDF[zr]->m_pRDF->WriteMulti_Cumulative("",buf,".csv");
9194
mprintf(" Saving cumulative RDF type decomposition as \"%s.agr\"...\n",buf);
9195
o->m_pRDF[zr]->m_pRDF->WriteMultiAgr_Cumulative("",buf,".agr",buf,true);
9199
o->WriteTimeDiff(o->m_pRDF[zr]->m_pRDF,"RDF","rdf",o->m_pRDF[zr]->m_sName,multibuf,false);
9201
if (o->m_pRDF[zr]->m_bACF)
9203
o->m_pRDF[zr]->Autocorrelate();
9208
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
9210
fclose(o->m_pRDF[zr]->m_fDist[0]);
9211
mprintf(" Saving temporal development as \"rdf_timedev_%s%s.csv\"...\n",o->m_pRDF[zr]->m_sName,multibuf);
9214
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
9216
fclose(o->m_pRDF[zr]->m_fDist[z2]);
9217
sprintf(buf,"rdf_timedev_%s_ref%d%s.csv",o->m_pRDF[zr]->m_sName,o->m_waSaveRefList[z2]+1,multibuf);
9218
mprintf(" Saving temporal development as \"%s\"...\n",buf);
9221
delete[] o->m_pRDF[zr]->m_fDist;
9222
o->m_pRDF[zr]->m_fDist = NULL;
9223
if (o->m_bCombinedPlot)
9225
sprintf(buf,"combined_%s%s.agr",o->m_pRDF[zr]->m_sName,multibuf);
9226
mprintf(" Saving combined plot as \"%s\"...\n",buf);
9227
o->m_pRDF[zr]->m_pRDF->CreateCombinedPlot(true);
9228
o->m_pRDF[zr]->m_pRDF->m_pCombinedPlot->WriteAgr(buf,false);
9236
mprintf(WHITE,"* Van Hove Correlation Function\n");
9237
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pVHDF->m_pVHDF->m_fBinEntries,o->m_pVHDF->m_pVHDF->m_fSkipEntries,ZeroDivide(o->m_pVHDF->m_pVHDF->m_fSkipEntries,o->m_pVHDF->m_pVHDF->m_fBinEntries+o->m_pVHDF->m_pVHDF->m_fSkipEntries)*100.0);
9238
o->m_pVHDF->CorrectCount();
9239
if (o->m_pVHDF->m_bRadialCorrect)
9241
mprintf(" Correcting radial distribution...\n");
9242
o->m_pVHDF->m_pVHDF->CorrectRadialDist(1);
9243
if (g_bPeriodicX && g_bPeriodicY && g_bPeriodicZ)
9245
mprintf(" Normalizing bin to uniform density...\n");
9246
o->m_pVHDF->m_pVHDF->MultiplyBin(3.0f/4.0f/Pi*g_fBoxX*g_fBoxY*g_fBoxZ);
9249
o->m_pVHDF->m_pVHDF->MultiplyBin(g_iDoubleBoxFactor);
9252
mprintf(" Normalizing bin integral to 1000000...\n");
9253
o->m_pVHDF->m_pVHDF->NormalizeBinIntegral(1000000.0);
9256
sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9258
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9260
mprintf(" Saving VHCF triples as \"%s_triples.csv\"...\n",buf);
9261
o->m_pVHDF->m_pVHDF->Write("",buf,"_triples.csv");
9264
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9266
mprintf(" Saving VHCF matrix as \"%s_matrix.csv\"...\n",buf);
9267
o->m_pVHDF->m_pVHDF->WriteCSV("",buf,"_matrix.csv");
9270
if (o->m_pVHDF->m_iGraceBunchDist > 0)
9272
sprintf(buf,"vhcf_dist_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9273
mprintf(" Saving VHCF distance Grace Stack as \"%s\"...\n",buf);
9274
o->m_pVHDF->m_pVHDF->WriteGraceBunch(0,o->m_pVHDF->m_iGraceBunchDist,1.0f,"",buf,"");
9277
if (o->m_pVHDF->m_iGraceBunchTime > 0)
9279
sprintf(buf,"vhcf_time_%s%s.agr",o->m_pVHDF->m_sName,multibuf);
9280
mprintf(" Saving VHCF time Grace Stack as \"%s\"...\n",buf);
9281
o->m_pVHDF->m_pVHDF->WriteGraceBunch(1,o->m_pVHDF->m_iGraceBunchTime,1.0f,"",buf,"");
9284
if (o->m_pVHDF->m_bSwapAxes)
9285
o->m_pVHDF->m_pVHDF->SwapAxes();
9287
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9289
sprintf(buf,"vhcf_%s%s.nb",o->m_pVHDF->m_sName,multibuf);
9290
mprintf(" Saving VHCF Mathematica Notebook as \"%s\"...\n",buf);
9291
o->m_pVHDF->m_pVHDF->WriteMathematicaNb("",buf,"",false);
9294
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9296
sprintf(buf,"vhcf_%s%s",o->m_pVHDF->m_sName,multibuf);
9297
mprintf(" Saving VHCF Gnuplot Input as \"%s.gp\"...\n",buf);
9298
o->m_pVHDF->m_pVHDF->WriteGnuplotInput("",buf,"",false);
9304
if (g_iCDFChannels == 2)
9306
mprintf(WHITE,"* Combined Distribution Function (2D)\n");
9307
/* if (o->m_pConditions != NULL)
9309
mprintf(" Conditions: %.2f percent of the molecules passed.\n",o->m_pConditions->m_fPassed/(o->m_pConditions->m_fPassed+o->m_pConditions->m_fFailed)*100.0);
9310
mprintf(" After conditions: ");
9311
} else mprintf(" ");*/
9312
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p2DF->m_fBinEntries,o->m_pCDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p2DF->m_fSkipEntries,o->m_pCDF->m_p2DF->m_fSkipEntries+o->m_pCDF->m_p2DF->m_fBinEntries)*100.0);
9313
if (o->m_pCDF->m_p2DF->m_fBinEntries == 0)
9315
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9318
for (z2=0;z2<2;z2++)
9320
if (g_iObsChannel[z2] == 0)
9322
if ((o->m_pRDF[z2]->m_bRadialCorrect) && (o->m_pCDF->m_iNormalize != 3))
9324
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9325
o->m_pCDF->m_p2DF->CorrectRadialDist(z2);
9328
if (g_iObsChannel[z2] == 1)
9330
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine) && (o->m_pCDF->m_iNormalize != 3))
9332
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9333
o->m_pCDF->m_p2DF->CorrectAngle(z2);
9335
if (o->m_pADF[z2]->m_bMirror)
9337
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9338
if (o->m_pADF[z2]->m_bCosine)
9339
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9340
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9343
if (g_iObsChannel[z2] == 6)
9345
if (o->m_pLiDF[z2]->m_bRadialCorrect)
9347
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9348
o->m_pCDF->m_p2DF->CorrectLiRadialDist(z2);
9352
o->m_pCDF->m_fFactor = 1.0;
9353
switch(o->m_pCDF->m_iNormalize)
9356
mprintf(" Normalizing CDF to uniform density.\n");
9357
o->m_pCDF->m_p2DF->NormalizeUniform(g_fBoxX*g_fBoxY*g_fBoxZ/g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() / ((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize() / o->m_pCDF->m_iCombinationsEnabled);
9360
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9361
o->m_pCDF->m_p2DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9364
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9365
o->m_pCDF->m_fFactor = o->m_pCDF->m_p2DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9368
mprintf(" Not normalizing this CDF.\n");
9372
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_TRIPLES"))
9374
mprintf(" Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9375
o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_triples.csv");
9378
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATRIX"))
9380
mprintf(" Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9381
o->m_pCDF->m_p2DF->WriteCSV(o->m_pCDF->m_sName,multibuf,"_matrix.csv");
9384
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_MATHEMATICA"))
9386
mprintf(" Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9387
o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,".nb",false);
9390
if (g_pDatabase->GetBool("/PLOT2D/FORMATS/WRITE_GNUPLOT"))
9392
mprintf(" Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9393
o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"",false);
9396
mprintf(" Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_sName,multibuf);
9397
o->m_pCDF->m_p2DF->WriteCombinedPlot(o->m_pCDF->m_sName,multibuf,"_combined.agr");
9398
if (o->m_pCDF->m_iHistogramRes != 0)
9400
mprintf(" Calculating Histogram...\n");
9401
o->m_pCDF->m_p2DF->CalcHistogram();
9402
sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9403
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9404
o->m_pCDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9407
if (o->m_pCDF->m_bGraceBunch)
9409
if (o->m_pCDF->m_iGraceBunchC1 > 0)
9411
if ((g_iObsChannel[1] == 0) && (o->m_bOthers))
9412
tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[1]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[1]->m_iRefAtomGes;
9414
sprintf(buf,"cdf_c1_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9415
mprintf(" Saving CDF Channel 1 Grace Stack as \"%s\"...\n",buf);
9416
o->m_pCDF->m_p2DF->WriteGraceBunch(0,o->m_pCDF->m_iGraceBunchC1,(float)tf,"",buf,"");
9418
if (o->m_pCDF->m_iGraceBunchC2 > 0)
9420
if ((g_iObsChannel[0] == 0) && (o->m_bOthers))
9421
tf = 1.0 / o->m_pCDF->m_fFactor * 3.0f/4.0f/Pi/g_iSteps*g_fBoxX*g_fBoxY*g_fBoxZ/((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize() /o->m_pRDF[0]->m_iShowAtomGes/((CMolecule*)g_oaMolecules[o->m_iShowMol])->m_laSingleMolIndex.GetSize()/o->m_pRDF[0]->m_iRefAtomGes;
9423
sprintf(buf,"cdf_c2_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9424
mprintf(" Saving CDF Channel 2 Grace Stack as \"%s\"...\n",buf);
9425
o->m_pCDF->m_p2DF->WriteGraceBunch(1,o->m_pCDF->m_iGraceBunchC2,(float)tf,"",buf,"");
9429
if (o->m_pCDF->m_bAxisDivide)
9431
if (o->m_pCDF->m_bAxisDivideAll)
9433
mprintf(" Saving CDF X projection as \"%s%s_pX.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9434
o->m_pCDF->m_p2DF->WriteXProjection(o->m_pCDF->m_sName,multibuf,"_pX.csv");
9436
mprintf(" Saving CDF Y projection as \"%s%s_pY.csv\"...\n",o->m_pCDF->m_sName,multibuf);
9437
o->m_pCDF->m_p2DF->WriteYProjection(o->m_pCDF->m_sName,multibuf,"_pY.csv");
9439
mprintf(" Saving X-normalized CDF Mathematica Notebook as \"%s%s_nX.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9441
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9442
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9444
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9445
if (g_iObsChannel[0] == 0)
9446
if (o->m_pRDF[0]->m_bRadialCorrect)
9447
tempc2df->UnCorrectRadialDist(0);
9448
if (g_iObsChannel[0] == 1)
9449
if (o->m_pADF[0]->m_bStat && (!o->m_pADF[0]->m_bCosine))
9450
tempc2df->UnCorrectAngle(0);
9451
tempc2df->NormalizeXCount();
9452
switch(o->m_pCDF->m_iNormalize)
9455
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9458
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9463
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nX.nb",false);
9464
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nX",false);
9467
mprintf(" Saving Y-normalized CDF Mathematica Notebook as \"%s%s_nY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9469
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9470
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9472
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9473
if (g_iObsChannel[1] == 0)
9474
if (o->m_pRDF[1]->m_bRadialCorrect)
9475
tempc2df->UnCorrectRadialDist(1);
9476
if (g_iObsChannel[1] == 1)
9477
if (o->m_pADF[1]->m_bStat && (!o->m_pADF[1]->m_bCosine))
9478
tempc2df->UnCorrectAngle(1);
9479
tempc2df->NormalizeYCount();
9480
switch(o->m_pCDF->m_iNormalize)
9483
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9486
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9491
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nY.nb",false);
9492
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nY",false);
9495
mprintf(" Saving XY-normalized CDF Mathematica Notebook as \"%s%s_nXY.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9497
try { tempc2df = new C2DF(); } catch(...) { tempc2df = NULL; }
9498
if (tempc2df == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9500
tempc2df->CopyFrom(o->m_pCDF->m_p2DF);
9501
for (z2=0;z2<2;z2++)
9503
if (g_iObsChannel[z2] == 0)
9504
if (o->m_pRDF[z2]->m_bRadialCorrect)
9505
tempc2df->UnCorrectRadialDist(z2);
9506
if (g_iObsChannel[z2] == 1)
9507
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9508
tempc2df->UnCorrectAngle(z2);
9510
tempc2df->NormalizeXCount();
9511
tempc2df->NormalizeYCount();
9512
switch(o->m_pCDF->m_iNormalize)
9515
tempc2df->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9518
tempc2df->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9523
tempc2df->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_nXY.nb",false);
9524
tempc2df->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_nXY",false);
9528
mprintf(" Calculating tensor product of CDF projections...\n");
9530
try { o->m_pCDF->m_pTensorProduct = new C2DF(); } catch(...) { o->m_pCDF->m_pTensorProduct = NULL; }
9531
if (o->m_pCDF->m_pTensorProduct == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9533
o->m_pCDF->m_pTensorProduct->CopyFrom(o->m_pCDF->m_p2DF);
9534
o->m_pCDF->m_pTensorProduct->MakeTensorProduct(o->m_pCDF->m_p2DF);
9535
switch(o->m_pCDF->m_iNormalize)
9538
o->m_pCDF->m_pTensorProduct->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9541
o->m_pCDF->m_pTensorProduct->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9546
if (o->m_pCDF->m_bAxisDivideAll)
9548
mprintf(" Saving tensor product as \"%s%s_tensor.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9549
o->m_pCDF->m_pTensorProduct->Write(o->m_pCDF->m_sName,multibuf,"_tensor.dat");
9550
mprintf(" Saving tensor product Mathematica Notebook as \"%s%s_tensor.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9551
o->m_pCDF->m_pTensorProduct->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_tensor.nb",false);
9552
mprintf(" Saving tensor product Gnuplot Input as \"%s%s_tensor.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9553
o->m_pCDF->m_pTensorProduct->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_tensor",false);
9554
mprintf(" Calculating difference between CDF and tensor product...\n");
9556
o->m_pCDF->m_p2DF->Subtract(o->m_pCDF->m_pTensorProduct);
9557
o->m_pCDF->m_p2DF->CalcMaxEntry();
9558
o->m_pCDF->m_p2DF->m_iColorScale = 4; // PlusMinus Scale
9559
o->m_pCDF->m_p2DF->m_fPlotExp = 1.0;
9560
// o->m_pCDF->m_p2DF->m_fMathematicaColorOffset = max(fabs(o->m_pCDF->m_p2DF->m_fMinEntry),fabs(o->m_pCDF->m_p2DF->m_fMaxEntry)) / 3.0;
9561
// o->m_pCDF->m_p2DF->m_fMathematicaColorScale = o->m_pCDF->m_p2DF->m_fMathematicaColorOffset * 2.0;
9562
mprintf(" Saving +/- correlation plot as \"%s%s_correlation.dat\"...\n",o->m_pCDF->m_sName,multibuf);
9563
o->m_pCDF->m_p2DF->Write(o->m_pCDF->m_sName,multibuf,"_correlation.dat");
9564
mprintf(" Saving +/- correlation plot Mathematica Notebook as \"%s%s_correlation.nb\"...\n",o->m_pCDF->m_sName,multibuf);
9565
o->m_pCDF->m_p2DF->WriteMathematicaNb(o->m_pCDF->m_sName,multibuf,"_correlation.nb",false);
9566
mprintf(" Saving +/- correlation plot Gnuplot Input as \"%s%s_correlation.gp\"...\n",o->m_pCDF->m_sName,multibuf);
9567
o->m_pCDF->m_p2DF->WriteGnuplotInput(o->m_pCDF->m_sName,multibuf,"_correlation",false);
9568
} // END IF AXISDIVIDE
9569
if (o->m_pCDF->m_bDumpDat)
9571
fclose(o->m_pCDF->m_fDump);
9572
mprintf(" CDF raw data saved as cdfdump_%dd_%s%s.csv.\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9576
if ((o->m_waSaveRefList.GetSize() == 1) || (!o->m_bSaveSeparateFiles))
9578
fclose(o->m_pCDF->m_fTimeDev[0]);
9579
// sprintf(buf,"cdf_timedev_%dd_%s_ref%d%s.csv",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9580
mprintf(" Temporal development saved as cdf_timedev_%dd%s%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,multibuf);
9583
for (z2=0;z2<o->m_waSaveRefList.GetSize();z2++)
9585
fclose(o->m_pCDF->m_fTimeDev[z2]);
9586
mprintf(" Temporal development saved as cdf_timedev_%dd%s_ref%d%s.csv\n",g_iCDFChannels,o->m_pCDF->m_sShortName,z2+1,multibuf);
9589
if (o->m_pCDF->m_bTDAnimation)
9591
mprintf(WHITE," * Time dependent animation *\n");
9592
sprintf(buf,"animation_complete_%s%s.agr",o->m_pCDF->m_sName,multibuf);
9593
mprintf(" Saving complete Plot as \"%s\"...\n",buf);
9594
for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9596
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9597
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.0));
9599
o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9600
sprintf(buf,"render_%s%s",o->m_pCDF->m_sName,multibuf);
9601
mprintf(" Saving xmgrace render script for animation as \"%s\"...\n",buf);
9602
a = OpenFileWrite("gracebatch",true);
9603
mfprintf(a,"PRINT TO \"output.png\"\n");
9604
mfprintf(a,"HARDCOPY DEVICE \"PNG\"\n");
9605
mfprintf(a,"PAGE SIZE %d, %d\n",o->m_pCDF->m_iTDAResX,o->m_pCDF->m_iTDAResY);
9606
mfprintf(a,"DEVICE \"PNG\" FONT ANTIALIASING on\n");
9607
mfprintf(a,"DEVICE \"PNG\" OP \"compression:9\"\n");
9608
mfprintf(a,"PRINT\n");
9610
a = OpenFileWrite(buf,true);
9611
if (o->m_pCDF->m_bTDATrace)
9613
for (z2=0;z2<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z2++)
9615
o->m_pCDF->m_pTDAPlot->DuplicateSet(z2);
9616
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(z2,2.0f);
9617
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(z2,GraceColor(z2,0.7));
9618
o->m_pCDF->m_pTDAPlot->SetSetLineWidth(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,3.0f);
9619
o->m_pCDF->m_pTDAPlot->SetSetLineColorLong(o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled+z2,GraceColor(z2,0.0));
9622
for (z2=0;z2<o->m_pCDF->m_iTDASteps;z2++)
9624
if (o->m_pCDF->m_bTDATrace)
9626
for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9628
o->m_pCDF->m_pTDAPlot->SetSetRange(z3+o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9629
o->m_pCDF->m_pTDAPlot->SetSetRange(z3,0,z2*o->m_pCDF->m_iTDAStride);
9633
for (z3=0;z3<o->m_waSaveRefList.GetSize()*o->m_waSaveShowList.GetSize()*o->m_pCDF->m_iCombinationsEnabled;z3++)
9634
o->m_pCDF->m_pTDAPlot->SetSetRange(z3,z2*o->m_pCDF->m_iTDAStride,z2*o->m_pCDF->m_iTDAStride+o->m_pCDF->m_iTDATail);
9637
sprintf(buf,"animation_%05d_%s%s.agr",z2+1,o->m_pCDF->m_sName,multibuf);
9638
mprintf(" Saving frame \"%s\"...\n",buf);
9639
o->m_pCDF->m_pTDAPlot->WriteAgr(buf,false);
9640
mfprintf(a,"echo 'Printing frame %d of %d'\n",z2+1,o->m_pCDF->m_iTDASteps);
9641
mfprintf(a,"xmgrace %s -batch gracebatch -nosafe -hardcopy\n",buf);
9642
mfprintf(a,"mv output.png frame%04d.png\n",z2+1);
9647
} // END IF CHANNELS == 2
9649
if (g_iCDFChannels == 3)
9651
mprintf(WHITE,"* Combined Distribution Function (3D)\n");
9652
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_fBinEntries,o->m_pCDF->m_p3DF->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_fSkipEntries,o->m_pCDF->m_p3DF->m_fSkipEntries+o->m_pCDF->m_p3DF->m_fBinEntries)*100.0);
9653
if (o->m_pCDF->m_p3DF->m_fBinEntries == 0)
9655
eprintf(" There were no bin entries. Check your CDF definition. Skipping this CDF.\n\n");
9658
o->m_pCDF->m_p3DF->CalcMaxEntry();
9659
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9660
for (z2=0;z2<g_iCDFChannels;z2++)
9662
if (g_iObsChannel[z2] == 0)
9664
if (o->m_pRDF[z2]->m_bRadialCorrect)
9666
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9667
o->m_pCDF->m_p3DF->CorrectRadialDist(z2);
9668
o->m_pCDF->m_p3DF->CalcMaxEntry();
9669
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9672
if (g_iObsChannel[z2] == 1)
9674
if (o->m_pADF[z2]->m_bStat && (!o->m_pADF[z2]->m_bCosine))
9676
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9677
o->m_pCDF->m_p3DF->CorrectAngle(z2);
9678
o->m_pCDF->m_p3DF->CalcMaxEntry();
9679
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9681
if (o->m_pADF[z2]->m_bMirror)
9683
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9684
if (o->m_pADF[z2]->m_bCosine)
9685
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9686
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9687
o->m_pCDF->m_p3DF->CalcMaxEntry();
9688
mprintf(" Data range from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9692
// o->m_pCDF->m_p3DF->CalcMaxEntry();
9693
// mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9694
o->m_pCDF->m_fFactor = 1.0;
9695
switch(o->m_pCDF->m_iNormalize)
9698
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9699
o->m_pCDF->m_p3DF->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9700
o->m_pCDF->m_p3DF->CalcMaxEntry();
9701
mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9704
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9705
o->m_pCDF->m_fFactor = o->m_pCDF->m_p3DF->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9706
mprintf(" Factor was %G.\n",o->m_pCDF->m_fFactor);
9707
o->m_pCDF->m_p3DF->CalcMaxEntry();
9708
mprintf(" Data range now from %G to %G.\n",o->m_pCDF->m_p3DF->m_fMinEntry,o->m_pCDF->m_p3DF->m_fMaxEntry);
9711
mprintf(" Not normalizing this CDF.\n");
9715
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9717
try { temp3DF = new C3DF(); } catch(...) { temp3DF = NULL; }
9718
if (temp3DF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9720
temp3DF->CopyFrom(o->m_pCDF->m_p3DF);
9723
temp3DF->Smooth(z2);
9724
sprintf(buf,".s%d%s.plt",z2,multibuf);
9725
} else sprintf(buf,"%s.plt",multibuf);
9726
mprintf(" Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9727
temp3DF->WritePLT("",o->m_pCDF->m_sName,buf,false);
9730
sprintf(buf,".s%d%s.cube",z2,multibuf);
9731
else sprintf(buf,"%s.cube",multibuf);
9732
mprintf(" Saving 3D CDF as \"%s%s\"...\n",o->m_pCDF->m_sName,buf);
9733
temp3DF->WriteCube("",o->m_pCDF->m_sName,buf,false);
9734
if (o->m_pCDF->m_iHistogramRes != 0)
9736
mprintf(" Calculating Histogram...\n");
9737
temp3DF->CalcHistogram();
9739
sprintf(buf,"his_%s.s%d",o->m_pCDF->m_sName,z2);
9740
else sprintf(buf,"his_%s",o->m_pCDF->m_sName);
9741
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9742
temp3DF->WriteHistogram(buf,multibuf,".csv");
9745
if (o->m_pCDF->m_b3DSlices)
9747
for (z3=0;z3<3;z3++)
9749
if (o->m_pCDF->m_i3DSliceIntervals[z3] != 0)
9752
mprintf(WHITE," * Creating channel %d smooth grade %d slices...\n",z3+1,z2);
9753
else mprintf(WHITE," * Creating channel %d slices...\n",z3+1);
9755
try { temp2dfa = new C2DF*[o->m_pCDF->m_i3DSliceIntervals[z3]]; } catch(...) { temp2dfa = NULL; }
9756
if (temp2dfa == NULL) NewException((double)o->m_pCDF->m_i3DSliceIntervals[z3]*sizeof(C2DF*),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9759
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9761
try { temp2dfa[z4] = new C2DF(); } catch(...) { temp2dfa[z4] = NULL; }
9762
if (temp2dfa[z4] == NULL) NewException((double)sizeof(C2DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9764
temp3DF->CreateSlice(z3,(int)((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),(int)((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]);
9765
mprintf(" - %2d: %9.4f - %9.4f (%3d - %3d), Intensity range %.3f ... %.3f\n",z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),int((double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]),int((z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*o->m_pCDF->m_p3DF->m_iRes[z3]-1),temp2dfa[z4]->m_fMinEntry,temp2dfa[z4]->m_fMaxEntry);
9766
if (temp2dfa[z4]->m_fMaxEntry > tf)
9767
tf = temp2dfa[z4]->m_fMaxEntry;
9770
mprintf(" Setting common intensity range to 0 ... %.3f.\n",tf);
9772
mprintf(" Writing out slice files...\n",z3+1);
9774
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9776
temp2dfa[z4]->m_fMinEntry = 0;
9777
temp2dfa[z4]->m_fMaxEntry = tf;
9779
sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9780
else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.nb",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9781
mprintf(" %s ...\n",buf);
9782
temp2dfa[z4]->WriteMathematicaNb("",buf,"",true);
9784
sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f.s%d",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),z2);
9785
else sprintf(buf,"%s_slice_ch%d_%d_%.3f-%.3f",o->m_pCDF->m_sName,z3+1,z4+1,o->m_pCDF->m_p3DF->m_fMinVal[z3]+(double)z4/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]),o->m_pCDF->m_p3DF->m_fMinVal[z3]+(z4+1.0)/o->m_pCDF->m_i3DSliceIntervals[z3]*(o->m_pCDF->m_p3DF->m_fMaxVal[z3]-o->m_pCDF->m_p3DF->m_fMinVal[z3]));
9786
mprintf(" %s.gp ...\n",buf);
9787
temp2dfa[z4]->WriteGnuplotInput("",buf,"",true);
9790
for (z4=0;z4<o->m_pCDF->m_i3DSliceIntervals[z3];z4++)
9791
delete temp2dfa[z4];
9799
mprintf(" Writing out 2D projections...\n");
9800
for (z3=0;z3<3;z3++)
9802
mprintf(WHITE," * CDF 2D projection on channel %d\n",z3+1);
9803
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,ZeroDivide(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries,o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fSkipEntries+o->m_pCDF->m_p3DF->m_p2DF[z3]->m_fBinEntries)*100.0);
9819
for (z2=0;z2<2;z2++)
9821
if (g_iObsChannel[tia[z2]] == 0)
9823
if (o->m_pRDF[tia[z2]]->m_bRadialCorrect)
9825
mprintf(" Correcting radial distribution for CDF channel %d...\n",z2+1);
9826
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectRadialDist(z2);
9829
if (g_iObsChannel[tia[z2]] == 1)
9831
if (o->m_pADF[tia[z2]]->m_bStat && (!o->m_pADF[tia[z2]]->m_bCosine))
9833
mprintf(" Correcting angular distribution for CDF channel %d...\n",z2+1);
9834
o->m_pCDF->m_p3DF->m_p2DF[z3]->CorrectAngle(z2);
9836
/* if (o->m_pADF[z2]->m_bMirror)
9838
mprintf(" Making channel %d mirror-symmetric...\n",z2+1);
9839
if (o->m_pADF[z2]->m_bCosine)
9840
o->m_pCDF->m_p2DF->Mirror(0.0f,z2);
9841
else o->m_pCDF->m_p2DF->Mirror(90.0f,z2);
9845
o->m_pCDF->m_fFactor = 1.0;
9846
switch(o->m_pCDF->m_iNormalize)
9849
mprintf(" Normalizing maximum value to %.2f.\n",o->m_pCDF->m_fNormValue);
9850
o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBin(0.0,o->m_pCDF->m_fNormValue);
9853
mprintf(" Normalizing integral value to %.2f.\n",o->m_pCDF->m_fNormValue);
9854
o->m_pCDF->m_p3DF->m_p2DF[z3]->NormalizeBinIntegral(o->m_pCDF->m_fNormValue);
9857
mprintf(" Not normalizing this CDF.\n");
9860
mprintf(" Saving CDF triples as \"%s%s_triples.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9861
o->m_pCDF->m_p3DF->m_p2DF[z3]->Write(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_triples.csv");
9862
mprintf(" Saving CDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9863
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCSV(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_matrix.csv");
9864
mprintf(" Saving CDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9865
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteMathematicaNb(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,".nb",false);
9866
mprintf(" Saving CDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9867
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteGnuplotInput(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"",false);
9868
mprintf(" Saving combined plot AGR file as \"%s%s_combined.agr\"...\n",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf);
9869
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteCombinedPlot(o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName,multibuf,"_combined.agr");
9870
if (o->m_pCDF->m_iHistogramRes != 0)
9872
mprintf(" Calculating Histogram...\n");
9873
o->m_pCDF->m_p3DF->m_p2DF[z3]->CalcHistogram();
9874
sprintf(buf,"his_%s",o->m_pCDF->m_p3DF->m_p2DF[z3]->m_sName);
9875
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9876
o->m_pCDF->m_p3DF->m_p2DF[z3]->WriteHistogram(buf,multibuf,".csv");
9879
} // END IF CHANNELS == 3
9885
mprintf(WHITE,"* Pseudo SDF\n");
9886
mprintf(" %.0f bin entries, %.0f out of bin range (%.2f percent).\n",o->m_pRevSDF->m_p2DF->m_fBinEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries,ZeroDivide(o->m_pRevSDF->m_p2DF->m_fSkipEntries,o->m_pRevSDF->m_p2DF->m_fSkipEntries+o->m_pRevSDF->m_p2DF->m_fBinEntries)*100.0);
9887
if (o->m_pRevSDF->m_p2DF->m_fBinEntries == 0)
9889
eprintf(" There were no bin entries. Check your function definition. Skipping this PseudoSDF.\n\n");
9892
mprintf(" Normalizing integral value to %.2f.\n",1000000.0f);
9893
o->m_pRevSDF->m_p2DF->NormalizeBinIntegral(1000000.0f);
9894
if (o->m_pRevSDF->m_bDrawAtoms)
9896
mprintf(" Inserting reference atoms into the Pseudo SDF plot...\n");
9898
if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius == 0)
9899
o->m_pRevSDF->m_p2DF->AddCircle(0,0,50.0,0.4,0.4,0.4);
9900
else o->m_pRevSDF->m_p2DF->AddCircle(0,0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_pElement->m_iColorB/255.0);
9902
if (((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius == 0)
9903
o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,50.0,0.4,0.4,0.4);
9904
else o->m_pRevSDF->m_p2DF->AddCircle(0,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_fRadius*0.75,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorR/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorG/255.0,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_pElement->m_iColorB/255.0);
9906
mprintf(" Saving PseudoSDF triples as \"%s%s_triples.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9907
o->m_pRevSDF->m_p2DF->Write(o->m_pRevSDF->m_sName,multibuf,"_triples.csv");
9908
mprintf(" Saving PseudoSDF matrix as \"%s%s_matrix.csv\"...\n",o->m_pRevSDF->m_sName,multibuf);
9909
o->m_pRevSDF->m_p2DF->WriteCSV(o->m_pRevSDF->m_sName,multibuf,"_matrix.csv");
9910
mprintf(" Saving PseudoSDF Mathematica Notebook as \"%s%s.nb\"...\n",o->m_pRevSDF->m_sName,multibuf);
9911
o->m_pRevSDF->m_p2DF->WriteMathematicaNb(o->m_pRevSDF->m_sName,multibuf,".nb",false);
9912
mprintf(" Saving PseudoSDF Gnuplot Input as \"%s%s.gp\"...\n",o->m_pRevSDF->m_sName,multibuf);
9913
o->m_pRevSDF->m_p2DF->WriteGnuplotInput(o->m_pRevSDF->m_sName,multibuf,"",false);
9914
if (o->m_pRevSDF->m_iHistogramRes != 0)
9916
mprintf(" Calculating Histogram...\n");
9917
o->m_pRevSDF->m_p2DF->CalcHistogram();
9918
sprintf(buf,"his_%s",o->m_pRevSDF->m_sName);
9919
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf,multibuf);
9920
o->m_pRevSDF->m_p2DF->WriteHistogram(buf,multibuf,".csv");
9922
if (o->m_pRevSDF->m_bCreateRevSDF)
9924
mprintf(" Creating volumetric Revolution SDF...\n");
9925
o->m_pRevSDF->CreateRevSDF();
9926
sprintf(buf,"revsdf_ref_%s.xyz",o->m_pRevSDF->m_sName);
9927
mprintf(" Saving Revolution SDF reference structure as \"%s\"...\n",buf);
9928
a = OpenFileWrite(buf,true);
9929
mfprintf(a,"2\n\n%s 0.0 0.0 0.0\n%s 0.0 %f 0.0\n",((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,o->m_pRevSDF->m_fSecondAtomPosX/o->m_pRevSDF->m_fSecondAtomCount/100.0);
9931
for (z2=0;z2<=g_iSDFSmoothGrade;z2++)
9933
try { tempSDF = new C3DF(); } catch(...) { tempSDF = NULL; }
9934
if (tempSDF == NULL) NewException((double)sizeof(C3DF),__FILE__,__LINE__,__PRETTY_FUNCTION__);
9936
tempSDF->CopyFrom(o->m_pRevSDF->m_pRevSDF);
9939
tempSDF->Smooth(z2);
9940
sprintf(buf,".s%d%s.plt",z2,multibuf);
9941
} else sprintf(buf,"%s.plt",multibuf);
9942
mprintf(" Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9943
tempSDF->WritePLT("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9946
sprintf(buf,".s%d%s.cube",z2,multibuf);
9947
else sprintf(buf,"%s.cube",multibuf);
9948
mprintf(" Saving Revolution SDF as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9949
tempSDF->WriteCube("revsdf_",o->m_pRevSDF->m_sName,buf,true);
9952
sprintf(buf,".s%d%s.his",z2,multibuf);
9953
else sprintf(buf,"%s.his",multibuf);
9954
mprintf(" Saving Revolution SDF Histogram as \"revsdf_%s%s\"...\n",o->m_pRevSDF->m_sName,buf);
9955
tempSDF->CalcHistogram();
9956
tempSDF->WriteHistogram("revsdf_",o->m_pRevSDF->m_sName,buf);
9957
if (o->m_pRevSDF->m_iHistogramRes != 0)
9959
mprintf(" Calculating Histogram...\n");
9960
tempSDF->CalcHistogram();
9961
sprintf(buf2,"his_revsdf_%s",o->m_pRevSDF->m_sName);
9962
mprintf(" Saving Histogram as \"%s%s.csv\"...\n",buf2,buf);
9963
tempSDF->WriteHistogram(buf2,buf,".csv");
9971
if (g_bSDF || g_bAvg || g_bVoidSDF)
9973
sprintf(buf,"ref_%s_%s%d_%s%d_%s%d%s.xyz",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName,((CAtom*)g_oaAtoms[g_iFixRealAtomType[0]])->m_sName,g_iFixAtom[0]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[1]])->m_sName,g_iFixAtom[1]+1,((CAtom*)g_oaAtoms[g_iFixRealAtomType[2]])->m_sName,g_iFixAtom[2]+1,multibuf);
9975
mprintf("\n*** Reference molecule ***\n");
9977
mprintf("Saving reference molecule as \"%s\"...",buf);
9978
a = OpenFileWrite(buf,true);
9981
eprintf("\nError: Could not open %s for writing.\n",buf);
9984
if (!g_bSaveVirtAtoms)
9985
mfprintf(a," %d \n\n",(int)(((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes-((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms.GetSize()));
9986
else mfprintf(a," %d \n\n",((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes);
9988
for (z=0;z<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z++)
9990
if ((!g_bSaveVirtAtoms) && (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType))
9992
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z];z2++)
9996
g_pRefMol[cc][0] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9997
g_pRefMol[cc][1] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
9998
g_pRefMol[cc][2] /= ((float)g_iSteps * ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize());
10000
if (((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z] == g_iVirtAtomType)
10001
mfprintf(a," %s %9.6f %9.6f %9.6f\n",((CVirtualAtom*)g_oaVirtualAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_laVirtualAtoms[z2]])->m_sLabel,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
10002
else mfprintf(a," %s %9.6f %9.6f %9.6f\n",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z]])->m_sName,g_pRefMol[cc][0]/100.0,g_pRefMol[cc][1]/100.0,g_pRefMol[cc][2]/100.0);
10007
mprintf("Done.\n");
10010
mprintf("\n*** This is the swap matrix of reference molecule %s:\n (It shows how often the atoms\n have been swapped with each other)\n\n ",((CMolecule*)g_oaMolecules[g_iFixMol])->m_sName);
10011
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
10013
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
10015
if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
10017
mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
10024
for (z2=0;z2<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z2++)
10026
for (z3=0;z3<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z2];z3++)
10028
mprintf("%s%d ",((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName,z3+1);
10029
if (((CAtom*)g_oaAtoms[((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex[z2]])->m_sName[1] == 0)
10034
for (z4=0;z4<((CMolecule*)g_oaMolecules[g_iFixMol])->m_baAtomIndex.GetSize();z4++)
10036
for (z5=0;z5<((CMolecule*)g_oaMolecules[g_iFixMol])->m_waAtomCount[z4];z5++)
10038
if ((z2 == z4) && (z3 == z5))
10043
if (pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] != 0)
10044
mprintf("%3.0f%c ",(double)pSwapMatrix[cc*((CMolecule*)g_oaMolecules[g_iFixMol])->m_iAtomGes+cc2] * 100.0f / g_iSteps / ((CMolecule*)g_oaMolecules[g_iFixMol])->m_laSingleMolIndex.GetSize(),'%');
10045
else mprintf(" - ");
10058
if (g_bMultiInterval)
10061
mprintf(YELLOW,"***********************************************\n");
10062
mprintf(YELLOW,"*** Interval %2d (%6d - %6d) finished. ***\n",multicounter+1,g_laMultiIntervalStart[multicounter]+1,g_laMultiIntervalEnd[multicounter]+1);
10063
mprintf(YELLOW,"***********************************************\n\n");
10065
if (multicounter < g_laMultiIntervalStart.GetSize())
10066
goto _multiintervalstart;
10069
g_iEndTime = time(NULL);
10070
if (((g_iEndTime-g_iStartTime) > 5) && (g_iStartTime != 0))
10072
mprintf(WHITE,"\nAnalysis was running for %dh %dm %ds.\n",(g_iEndTime-g_iStartTime)/3600,((g_iEndTime-g_iStartTime)/60)%60,(g_iEndTime-g_iStartTime)%60);
10073
mprintf(WHITE," (%.3f steps per second)\n\n",g_iSteps/g_iStride/((double)g_iEndTime-g_iStartTime));
10074
} else mprintf("\n");
10083
mprintf(WHITE,"*** The End ***\n\n");
10085
UninstallSignalHandler();
10086
if (g_fInput != NULL)
10088
if (g_pDatabase != NULL)
10090
delete g_pDatabase;
10091
g_pDatabase = NULL;
10093
if (g_pTempTimestep != NULL)
10095
delete g_pTempTimestep;
10096
g_pTempTimestep = NULL;
10108
RemoveAllAnalyses();
10109
RemoveAllElements();
10111
RemoveAllMolecules();
10112
RemoveAllObservations();
10117
//////////////// Cross-Correlation Test 1
10119
/* CAutoCorrelation acx, acf;
10120
CCrossCorrelation ccx, ccf;
10121
CxFloatArray i1, i2, opx, opf, opcx, opcf;
10128
i1[z] = ((rand()%200)/100.0)-1.0;
10132
acx.Init(32,32,false);
10133
acx.AutoCorrelate(&i1,&opx);
10135
acf.Init(32,32,true);
10136
acf.AutoCorrelate(&i1,&opf);
10138
ccx.Init(32,32,false);
10139
ccx.CrossCorrelate(&i1,&i2,&opcx);
10141
ccf.Init(32,32,true);
10142
ccf.CrossCorrelate(&i1,&i2,&opcf);
10145
mprintf("%8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],opx[z],opf[z],opcx[z],opcf[z]);
10151
//////////////// Cross-Correlation Test 2
10153
/* CCrossCorrelation ccx, ccf;
10154
CxFloatArray i1, i2, opcx, opcf;
10161
i1[z] = ((rand()%200)/100.0)-1.0;
10162
i2[z] = ((rand()%200)/100.0)-1.0;
10165
ccx.Init(32,32,false);
10166
ccx.CrossCorrelate(&i1,&i2,&opcx);
10168
ccf.Init(32,32,true);
10169
ccf.CrossCorrelate(&i1,&i2,&opcf);
10172
mprintf("%8.4f - %8.4f - %8.4f - %8.4f - %8.4f - %8.4f\n",i1[z],i2[z],opcx[z],opcf[z],ccf.m_pFFTback->m_pOutput[2*z]/64.0/(32-z),ccf.m_pFFTback->m_pOutput[2*z+1]/64.0/(32-z));
10179
/* a = fopen("E:\\tmptraj.xyz","wt");
10181
for (z=0;z<200000;z++)
10183
mfprintf(a,"4\n\n");
10184
mfprintf(a,"Ne %f %f %f\n",sin(pow(z/50.0,1.1))*3.0,cos(pow(z/50.0,1.1))*3.0,0);
10185
mfprintf(a,"Ne %f %f %f\n",-sin(pow(z/50.0,1.1))*3.0,-cos(pow(z/50.0,1.1))*3.0,0);
10187
mfprintf(a,"Ne %f %f %f\n",0.0,0.0,cos(z/33.0)*2.0+4.0);
10188
mfprintf(a,"Ne %f %f %f\n",0.0,0.0,-cos(z/33.0)*2.0-4.0);
10194
// mprintf("\"%s\"\n\"%d\"\n\"%s\"\n",RemovePath(__FILE__),__LINE__,__PRETTY_FUNCTION__);
10196
/* CClusterAnalysis *can;
10197
can = new CClusterAnalysis();
10202
can->AddParticle(rand()%20,rand()%20,rand()%20);
10208
can->DumpAgr("C:\\Software\\test.csv");
10215
CreateTicks(0,540,maj,min);
10218
/* CExtendedCondition *ec;
10220
ec = new CExtendedCondition();
10231
if (!ec->Evaluate())
10237
printf("%G * d + %G * a %c %G.\n",ec->m_fX,ec->m_fY,ec->m_bLarger?'>':'<',ec->m_fZ);
10241
double *px, *py, *pp, r, integral;
10243
px = new double[100];
10244
py = new double[100];
10245
pp = new double[6];
10254
for (z=0;z<100;z++)
10257
py[z] = 0.2 * exp(-0.004 * z) + 0.3 * exp(-0.05 * z) + 0.5 * exp(-0.15 * z) + 0.1 * exp(-0.1 * z);
10260
w.Fit_TriExp(100,px,py,pp,r,integral);
10267
df3->m_fMinVal[0] = -100;
10268
df3->m_fMaxVal[0] = 100;
10269
df3->m_fMinVal[1] = -100;
10270
df3->m_fMaxVal[1] = 100;
10271
df3->m_fMinVal[2] = -100;
10272
df3->m_fMaxVal[2] = 100;
10273
df3->m_iRes[0] = 101;
10274
df3->m_iRes[1] = 101;
10275
df3->m_iRes[2] = 101;
10278
for (z=0;z<101;z++)
10279
for (z2=0;z2<101;z2++)
10280
for (z3=0;z3<101;z3++)
10281
if (sqrt(pow(z-50,2)+pow(z2-50,2)+pow(z3-50,2)) < 30)
10282
df3->AddToBin(CxVector3(z-50,z2-50,z3-50));
10284
df3->WritePLT("","C:\\test.plt","",true);
10285
df3->WriteCube("","C:\\test.cube","",true);
10291
mdf->m_fMinVal = 0;
10292
mdf->m_fMaxVal = 1;
10293
mdf->m_iResolution = 20;
10297
for (z=0;z<1000000;z++)
10298
mdf->AddToBin(z/999999.0);
10299
mdf->Write("","D:\\Software\\out.csv","");
10302
/* CAutoCorrelation *ac;
10304
ac = new CAutoCorrelation();
10308
ac->Init(N,N,false);
10310
ptfa = new CxFloatArray();
10312
ptfa2 = new CxFloatArray();
10316
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10318
ac->AutoCorrelate(ptfa,ptfa2);
10320
mprintf("Classic:\n");
10322
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10324
ac->Init(N,N,true);
10327
ptfa->SetAt(z,sin(z/1.3)*exp(-0.01*z));
10329
ac->AutoCorrelate(ptfa,ptfa2);
10331
mprintf("\nFFT:\n");
10333
mprintf("%02d: %.10f\n",z,ptfa2->GetAt(z));
10340
/* fft = new CFFT();
10342
fft->PrepareFFT_R2C(300);
10344
for (z=0;z<300;z++)
10346
fft->m_pInput[z*2] = sin(z/3.1) * exp(-10.0/z);
10347
fft->m_pInput[z*2+1] = sin(z/2.7+1.0) * exp(-2.0/z);
10352
for (z=0;z<300;z++)
10353
mprintf("%03d: % 10.6f % 10.6f\n",z+1,fft->m_pOutput[z*2],fft->m_pOutput[z*2+1]);
10358
/* CxVector3 v1, v2, v3, v;
10360
v1 = CxVector3(0,0,0);
10361
v2 = CxVector3(1,0,0);
10362
v3 = CxVector3(1,1,0);
10364
v = PointFromRAD(v1,v2,v3,3,3.1415926/2,3.1415926/2);
10371
/* fft = new CFFT();
10372
fft->PrepareFFT_C2C(20);
10377
fft->m_pInput[2*z] = sin(2*z*17.89) * exp(-0.1*z*2);
10378
fft->m_pInput[2*z+1] = sin((2*z+1)*17.89) * exp(-0.1*(2*z+1));
10381
fft->m_pInput[2*z] = 0;
10382
fft->m_pInput[2*z+1] = 0;
10384
printf("%2d: % f + I * % f\n",z+1,fft->m_pInput[2*z],fft->m_pInput[2*z+1]);
10386
printf("Transforming...\n");
10389
printf("%2d: % f + I * % f\n",z+1,fft->m_pOutput[2*z],fft->m_pOutput[2*z+1]);
10395
/* vec0 = CxVector3(-4.20694017, 9.48010063, -2.43410969);
10396
vec1 = CxVector3(0.159780025, -0.360321045, 0.0924463272);
10398
tf = DotP(vec0,vec1);
10400
tf2 = Angle_Deg(vec0,vec1);
10402
printf("DotP: %f, Length 1: %f, Length 2: %f, DotP/Length1/Length2: %.10f, Angle: %.10f\n",tf,vec0.GetLength(),vec1.GetLength(),tf/vec0.GetLength()/vec1.GetLength(),tf2);
10404
printf("acos(1)=%f, acos(-1)=%f\n",acos(1.0f),acos(-1.0f));
10408
/* CxVector3 a1, a2, a3;
10410
a1 = CxVector3(0,1.0,0);
10411
a2 = CxVector3(0,-1.0,0.0001);
10412
a3 = CxVector3(1.0,0,0);
10414
mprintf("Dihedral = %.3f\n",Dihedral(a1,a2,a3,false));
10418
/* CGrace *g = new CGrace();
10420
g->m_fMinValX = 1.37;
10421
g->m_fMaxValX = 2.53;
10422
g->m_fMinValY = 225;
10423
g->m_fMaxValY = 8337;
10426
printf("X: %f - %f Ticks %f\nY: %f - %f Ticks %f\n",g->m_fMinRangeX,g->m_fMaxRangeX,g->m_fTickMajorX,g->m_fMinRangeY,g->m_fMaxRangeY,g->m_fTickMajorY);
10429
/* CDatabaseTable *dt = new CDatabaseTable();
10431
dt->AddInt(0,0,12345);
10432
dt->AddInt(1,1,123456);
10433
dt->AddInt(2,2,123);
10435
dt->AddInt(4,4,123456789);
10437
dt->AddDouble(1,0,13.45);
10438
dt->AddDouble(2,1,3.199);
10439
dt->AddDouble(3,2,1367.4597);
10440
dt->AddDouble(4,3,13.45);
10441
dt->AddDouble(0,4,1.45);
10443
dt->AddString(2,0,"Hallo!");
10444
dt->AddString(3,1,"Hiu");
10445
dt->AddString(4,2,"Hallo Welt!");
10446
dt->AddString(0,3,"Dies ist ein Test");
10447
dt->AddString(1,4,"^^");
10449
dt->AddBool(3,0,true);
10450
dt->AddBool(4,1,false);
10451
dt->AddBool(0,2,true);
10452
dt->AddBool(1,3,false);
10453
dt->AddBool(2,4,true);
10456
a = fopen("table.dat","wt");
10457
dt->DumpOutputFile(a);
10462
/* CFFAtomNode *no;
10464
no = new CFFAtomNode();
10466
no->REC_Parse("O2=O(C,Si(O,S)(C))",0);
10468
no->REC_DumpTree(0,0xFFFFFFFF,false);
10479
t2df->m_iRes[0] = 100;
10480
t2df->m_iRes[1] = 100;
10481
t2df->m_fMinVal[0] = 0;
10482
t2df->m_fMaxVal[0] = 500.0;
10483
t2df->m_fMinVal[1] = 0;
10484
t2df->m_fMaxVal[1] = 500.0;
10490
aa = fopen(argv[1],"rt");
10503
buf[strlen(buf)-1] = 0;
10504
pp = strchr(buf,' ');
10509
// mprintf("%f | %f\n",tf,tf2);
10510
t2df->AddToBin(tf,tf2);
10515
mprintf("\n%.0f Entries, %.0f skipped.\n\n",t2df->m_fBinEntries,t2df->m_fSkipEntries);
10517
t2df->CorrectRadialDist(0);
10518
t2df->CorrectRadialDist(1);
10519
t2df->NormalizeBinIntegral(1000000.0);
10521
t2df->WriteMathematicaNb("cdf.nb","","",false);
10526
/***********************************************************************************************************/
10531
0, 166, 333, 500, 667, 834, 1001, 1168, 1335, 1502,
10532
1669, 1836, 2003, 2170, 2337, 2504, 2671, 2838, 3004, 3171,
10533
3338, 3505, 3672, 3839, 4006, 4173, 4340, 4507, 4674, 4841,
10534
5008, 5175, 5342, 5509, 5676, 5843, 6009, 6176, 6343, 6510,
10535
6677, 6844, 7011, 7178, 7345, 7512, 7679, 7846, 8013, 8180,
10536
8347, 8514, 8681, 8847, 9014, 9181, 9348, 9515, 9682, 9849,
10537
10016, 10183, 10350, 10517, 10684, 10851, 11018, 11185, 11352, 11519,
10538
11686, 11852, 12019, 12186, 12353, 12520, 12687, 12854, 13021, 13188,
10539
13355, 13522, 13689, 13856, 14023, 14190, 14357, 14524, 14691, 14857,
10540
15024, 15191, 15358, 15525, 15692, 15859, 16026, 16193, 16360, 16527,
10541
16694, 16861, 17028, 17195, 17362, 17529, 17695, 17862, 18029, 18196,
10542
18363, 18530, 18697, 18864, 19031, 19198, 19365, 19532, 19699, 19866,
10543
20033, 20200, 20367, 20534, 20700, 20867, 21034, 21201, 21368, 21535,
10544
21702, 21869, 22036, 22203, 22370, 22537, 22704, 22871, 23038, 23205,
10545
23372, 23538, 23705, 23872, 24039, 24206, 24373, 24540, 24707, 24874,
10546
25041, 25208, 25375, 25542, 25709, 25876, 26043, 26210, 26377, 26543,
10547
26710, 26877, 27044, 27211, 27378, 27545, 27712, 27879, 28046, 28213,
10548
28380, 28547, 28714, 28881, 29048, 29215, 29382, 29548, 29715, 29882,
10549
30049, 30216, 30383, 30550, 30717, 30884, 31051, 31218, 31385, 31552,
10550
31719, 31886, 32053, 32220, 32386, 32553, 32720, 32887, 33054, 33221,
10551
33388, 33555, 33722, 33889, 34056, 34223, 34390, 34557, 34724, 34891,
10552
35058, 35225, 35391, 35558, 35725, 35892, 36059, 36226, 36393, 36560,
10553
36727, 36894, 37061, 37228, 37395, 37562, 37729, 37896, 38063, 38230,
10554
38396, 38563, 38730, 38897, 39064, 39231, 39398, 39565, 39732, 39899,
10555
40066, 40233, 40400, 40567, 40734, 40901, 41068, 41234, 41401, 41568,
10556
41735, 41902, 42069, 42236, 42403, 42570, 42737, 42904, 43071, 43238,
10557
43405, 43572, 43739, 43906, 44073, 44239, 44406, 44573, 44740, 44907,
10558
45074, 45241, 45408, 45575, 45742, 45909, 46076, 46243, 46410, 46577,
10559
46744, 46911, 47077, 47244, 47411, 47578, 47745, 47912, 48079, 48246,
10560
48413, 48580, 48747, 48914, 49081, 49248, 49415, 49582, 49749, 49916,
10561
50082, 50249, 50416, 50583, 50750, 50917, 51084, 51251, 51418, 51585,
10562
51752, 51919, 52086, 52253, 52420, 52587, 52754, 52921, 53087, 53254,
10563
53421, 53588, 53755, 53922, 54089, 54256, 54423, 54590, 54757, 54924,
10564
55091, 55258, 55425, 55592, 55759, 55925, 56092, 56259, 56426, 56593,
10565
56760, 56927, 57094, 57261, 57428, 57595, 57762, 57929, 58096, 58263,
10566
58430, 58597, 58764, 58930, 59097, 59264, 59431, 59598, 59765, 59932,
10567
60099, 60266, 60433, 60600, 60767, 60934, 61101, 61268, 61435, 61602,
10568
61768, 61935, 62102, 62269, 62436, 62603, 62770, 62937, 63104, 63271,
10569
63438, 63605, 63772, 63939, 64106, 64273, 64440, 64607, 64773, 64940,
10570
65107, 65274, 65441, 65608, 65775, 65942, 66109, 66276, 66443, 66610,
10571
66777, 66944, 67111, 67278, 67445, 67612, 67778, 67945, 68112, 68279,
10572
68446, 68613, 68780, 68947, 69114, 69281, 69448, 69615, 69782, 69949,
10573
70116, 70283, 70450, 70616, 70783, 70950, 71117, 71284, 71451, 71618,
10574
71785, 71952, 72119, 72286, 72453, 72620, 72787, 72954, 73121, 73288,
10575
73455, 73621, 73788, 73955, 74122, 74289, 74456, 74623, 74790, 74957,
10576
75124, 75291, 75458, 75625, 75792, 75959, 76126, 76293, 76460, 76626,
10577
76793, 76960, 77127, 77294, 77461, 77628, 77795, 77962, 78129, 78296,
10578
78463, 78630, 78797, 78964, 79131, 79298, 79464, 79631, 79798, 79965,
10579
80132, 80299, 80466, 80633, 80800, 80967, 81134, 81301, 81468, 81635,
10580
81802, 81969, 82136, 82303, 82469, 82636, 82803, 82970, 83137, 83304,
10581
83471, 83638, 83805, 83972, 84139, 84306, 84473, 84640, 84807, 84974,
10582
85141, 85307, 85474, 85641, 85808, 85975, 86142, 86309, 86476, 86643,
10583
86810, 86977, 87144, 87311, 87478, 87645, 87812, 87979, 88146, 88312,
10584
88479, 88646, 88813, 88980, 89147, 89314, 89481, 89648, 89815, 89982,
10585
90149, 90316, 90483, 90650, 90817, 90984, 91151, 91317, 91484, 91651,
10586
91818, 91985, 92152, 92319, 92486, 92653, 92820, 92987, 93154, 93321,
10587
93488, 93655, 93822, 93989, 94155, 94322, 94489, 94656, 94823, 94990,
10588
95157, 95324, 95491, 95658, 95825, 95992, 96159, 96326, 96493, 96660,
10589
96827, 96994, 97160, 97327, 97494, 97661, 97828, 97995, 98162, 98329,
10590
98496, 98663, 98830, 98997, 99164, 99331, 99498, 99665, 99832, 99999 };
11194
double coeff[] = { 200.00000,191.41233,183.19339,175.32736,167.79909,160.59407,
11195
153.69842,147.09886,140.78267,134.73769,128.95227,123.41527,
11196
118.11602,113.04431,108.19037,103.54485,99.09880,94.84366,
11197
90.77123,86.87366,83.14344,79.57340,76.15664,72.88660,
11198
69.75697,66.76172,63.89508,61.15153,58.52578,56.01278,
11199
53.60768,51.30585,49.10286,46.99446,44.97660,43.04537,
11200
41.19708,39.42814,37.73516,36.11487,34.56416,33.08003,
11201
31.65963,30.30021,28.99917,27.75399,26.56228,25.42174,
11202
24.33017,23.28547,22.28563,21.32872,20.41290,19.53641,
11203
18.69754,17.89470,17.12633,16.39096,15.68715,15.01357,
11204
14.36892,13.75194,13.16145,12.59632,12.05545,11.53781,
11205
11.04240,10.56825,10.11447,9.68017,9.26452,8.86672,
11206
8.48600,8.12162,7.77289,7.43914,7.11971,6.81400,
11207
6.52142,6.24140,5.97341,5.71692,5.47144,5.23651,
11208
5.01166,4.79647,4.59051,4.39341,4.20476,4.02421,
11209
3.85142,3.68605,3.52777,3.37630,3.23132,3.09258,
11210
2.95979,2.83270,2.71107,2.59466,2.48325,2.37662,
11211
2.27457,2.17691,2.08343,1.99397,1.90836,1.82641,
11212
1.74799,1.67293,1.60110,1.53235,1.46656,1.40358,
11213
1.34332,1.28564,1.23043,1.17760,1.12704,1.07864,
11214
1.03233,0.98800,0.94558,0.90498,0.86612,0.82893,
11215
0.79334,0.75927,0.72667,0.69547,0.66561,0.63703,
11216
0.60967,0.58349,0.55844,0.53446,0.51151,0.48955,
11217
0.46853,0.44841,0.42916,0.41073,0.39309,0.37621,
11218
0.36006,0.34460,0.32980,0.31564,0.30209,0.28912,
11219
0.27670,0.26482,0.25345,0.24257,0.23215,0.22218,
11220
0.21264,0.20351,0.19478,0.18641,0.17841,0.17075,
11221
0.16342,0.15640,0.14968,0.14326,0.13711,0.13122,
11222
0.12558,0.12019,0.11503,0.11009,0.10536,0.10084,
11223
0.09651,0.09237,0.08840,0.08460,0.08097,0.07749,
11224
0.07417,0.07098,0.06793,0.06502,0.06223,0.05955,
11225
0.05700,0.05455,0.05221,0.04997,0.04782,0.04577,
11226
0.04380,0.04192,0.04012,0.03840,0.03675,0.03517,
11227
0.03366,0.03222,0.03083,0.02951,0.02824,0.02703,
11228
0.02587,0.02476,0.02369,0.02268,0.02170,0.02077,
11229
0.01988,0.01903,0.01821,0.01743,0.01668,0.01596,
11230
0.01528,0.01462,0.01399,0.01339,0.01282,0.01227,
11231
0.01174,0.01124,0.01075,0.01029,0.00985,0.00943,
11232
0.00902,0.00864,0.00826,0.00791,0.00757,0.00724,
11233
0.00693,0.00664,0.00635,0.00608,0.00582,0.00557,
11234
0.00533,0.00510,0.00488,0.00467,0.00447,0.00428,
11235
0.00409,0.00392,0.00375,0.00359,0.00344,0.00329,
11236
0.00315,0.00301,0.00288,0.00276,0.00264,0.00253,
11237
0.00242,0.00231,0.00222,0.00212,0.00203,0.00194,
11238
0.00186,0.00178,0.00170,0.00163,0.00156,0.00149,
11239
0.00143,0.00137,0.00131,0.00125,0.00120,0.00115,
11240
0.00110,0.00105,0.00101,0.00096,0.00092,0.00088,
11241
0.00084,0.00081,0.00077,0.00074,0.00071,0.00068,
11242
0.00065,0.00062,0.00059,0.00057,0.00054,0.00052,
11243
0.00050,0.00048,0.00046,0.00044,0.00042,0.00040 };
11247
for (z=0;z<600;z++)
11248
xv[z] = xv0[z]*0.005;
11255
tmpdf->m_fMinVal = 0;
11256
tmpdf->m_fMaxVal = 500.0;
11257
tmpdf->m_iResolution = 600;
11258
tmpdf->m_bLeft = true;
11261
for (z=0;z<600;z++)
11262
tmpdf->m_pBin[z] = yv[z];
11264
tlsp = new CLTSpec();
11265
tlsp->m_bLSpecDataLin = true;
11266
tlsp->m_fLSpecMinExp = 0.005;
11267
tlsp->m_fLSpecMaxExp = 2500.0;
11268
tlsp->m_iLSpecData = 600;
11269
tlsp->m_iLSpecPoints = 300;
11270
tlsp->m_iMaxLMIter = 200;
11271
tlsp->m_fLSpecZeroWeight = 1.0;
11273
tlsp->ComputeSpectrum("rdyn","bla","","",tmpdf);
11278
/****************************************************************************************************************/