26 #include <queso/VectorSequence.h>
27 #include <queso/GslVector.h>
28 #include <queso/GslMatrix.h>
33 template <
class V,
class M>
36 unsigned int subSequenceSize,
37 const std::string& name)
39 m_env (vectorSpace.env()),
40 m_vectorSpace (vectorSpace),
42 m_fftObj (new
Fft<double>(m_env)),
44 m_unifiedMinPlain (NULL),
46 m_unifiedMaxPlain (NULL),
47 m_subMeanPlain (NULL),
48 m_unifiedMeanPlain (NULL),
49 m_subMedianPlain (NULL),
50 m_unifiedMedianPlain (NULL),
51 m_subSampleVariancePlain (NULL),
52 m_unifiedSampleVariancePlain(NULL),
54 m_unifiedBoxPlain (NULL)
56 if (subSequenceSize) {};
59 template <
class V,
class M>
63 this->deleteStoredVectors();
64 if (m_fftObj != NULL)
delete m_fftObj;
68 template <
class V,
class M>
72 unsigned int unifiedNumSamples = 0;
74 bool useOnlyInter0Comm = (m_vectorSpace.numOfProcsForStorage() == 1);
76 if (useOnlyInter0Comm) {
77 if (m_env.inter0Rank() >= 0) {
78 unsigned int subNumSamples = this->subSequenceSize();
80 "BaseVectorSequence<V,M>::unifiedSequenceSize()",
81 "failed MPI.Allreduce() for unifiedSequenceSize()");
85 unifiedNumSamples = this->subSequenceSize();
91 "BaseVectorSequence<V,M>::unifiedSequenceSize()",
92 "parallel vectors not supported yet");
95 return unifiedNumSamples;
98 template <
class V,
class M>
102 return m_vectorSpace.dimLocal();
105 template <
class V,
class M>
109 return m_vectorSpace.dimGlobal();
112 template <
class V,
class M>
116 return m_vectorSpace;
119 template <
class V,
class M>
126 template <
class V,
class M>
134 template <
class V,
class M>
138 unsigned int numPos = this->subSequenceSize();
140 this->resetValues(0,numPos);
141 this->resizeSequence(0);
147 template <
class V,
class M>
151 if (m_subMinPlain == NULL) {
152 m_subMinPlain = m_vectorSpace.newVector();
153 if (m_subMaxPlain == NULL) m_subMaxPlain = m_vectorSpace.newVector();
154 subMinMaxExtra(0,this->subSequenceSize(),*m_subMinPlain,*m_subMaxPlain);
157 return *m_subMinPlain;
160 template <
class V,
class M>
164 if (m_unifiedMinPlain == NULL) {
165 m_unifiedMinPlain = m_vectorSpace.newVector();
166 if (m_unifiedMaxPlain == NULL) m_unifiedMaxPlain = m_vectorSpace.newVector();
167 unifiedMinMaxExtra(0,this->subSequenceSize(),*m_unifiedMinPlain,*m_unifiedMaxPlain);
170 return *m_unifiedMinPlain;
173 template <
class V,
class M>
177 if (m_subMaxPlain == NULL) {
178 if (m_subMinPlain == NULL) m_subMinPlain = m_vectorSpace.newVector();
179 m_subMaxPlain = m_vectorSpace.newVector();
180 subMinMaxExtra(0,this->subSequenceSize(),*m_subMinPlain,*m_subMaxPlain);
183 return *m_subMaxPlain;
186 template <
class V,
class M>
190 if (m_unifiedMaxPlain == NULL) {
191 if (m_unifiedMinPlain == NULL) m_unifiedMinPlain = m_vectorSpace.newVector();
192 m_unifiedMaxPlain = m_vectorSpace.newVector();
193 unifiedMinMaxExtra(0,this->subSequenceSize(),*m_unifiedMinPlain,*m_unifiedMaxPlain);
196 return *m_unifiedMaxPlain;
199 template <
class V,
class M>
203 if (m_subMeanPlain == NULL) {
204 m_subMeanPlain = m_vectorSpace.newVector();
205 subMeanExtra(0,subSequenceSize(),*m_subMeanPlain);
208 return *m_subMeanPlain;
211 template <
class V,
class M>
215 if (m_unifiedMeanPlain == NULL) {
216 m_unifiedMeanPlain = m_vectorSpace.newVector();
217 unifiedMeanExtra(0,subSequenceSize(),*m_unifiedMeanPlain);
220 return *m_unifiedMeanPlain;
223 template <
class V,
class M>
227 if (m_subMedianPlain == NULL) {
228 m_subMedianPlain = m_vectorSpace.newVector();
229 subMedianExtra(0, subSequenceSize(), *m_subMedianPlain);
232 return *m_subMedianPlain;
235 template <
class V,
class M>
239 if (m_unifiedMedianPlain == NULL) {
240 m_unifiedMedianPlain = m_vectorSpace.newVector();
241 unifiedMedianExtra(0, subSequenceSize(), *m_unifiedMedianPlain);
244 return *m_unifiedMedianPlain;
247 template <
class V,
class M>
251 if (m_subSampleVariancePlain == NULL) {
252 m_subSampleVariancePlain = m_vectorSpace.newVector();
253 subSampleVarianceExtra(0,subSequenceSize(),subMeanPlain(),*m_subSampleVariancePlain);
256 return *m_subSampleVariancePlain;
259 template <
class V,
class M>
263 if (m_unifiedSampleVariancePlain == NULL) {
264 m_unifiedSampleVariancePlain = m_vectorSpace.newVector();
265 unifiedSampleVarianceExtra(0,subSequenceSize(),unifiedMeanPlain(),*m_unifiedSampleVariancePlain);
268 return *m_unifiedSampleVariancePlain;
271 template <
class V,
class M>
275 if (m_subBoxPlain == NULL) {
279 this->subMaxPlain());
282 return *m_subBoxPlain;
285 template <
class V,
class M>
289 if (m_unifiedBoxPlain == NULL) {
292 this->unifiedMinPlain(),
293 this->unifiedMaxPlain());
296 return *m_unifiedBoxPlain;
299 template <
class V,
class M>
304 delete m_subMinPlain;
305 m_subMinPlain = NULL;
307 if (m_unifiedMinPlain) {
308 delete m_unifiedMinPlain;
309 m_unifiedMinPlain = NULL;
312 delete m_subMaxPlain;
313 m_subMaxPlain = NULL;
315 if (m_unifiedMaxPlain) {
316 delete m_unifiedMaxPlain;
317 m_unifiedMaxPlain = NULL;
319 if (m_subMeanPlain) {
320 delete m_subMeanPlain;
321 m_subMeanPlain = NULL;
323 if (m_unifiedMeanPlain) {
324 delete m_unifiedMeanPlain;
325 m_unifiedMeanPlain = NULL;
327 if (m_subMedianPlain) {
328 delete m_subMedianPlain;
329 m_subMedianPlain = NULL;
331 if (m_unifiedMedianPlain) {
332 delete m_unifiedMedianPlain;
333 m_unifiedMedianPlain = NULL;
335 if (m_subSampleVariancePlain) {
336 delete m_subSampleVariancePlain;
337 m_subSampleVariancePlain = NULL;
339 if (m_unifiedSampleVariancePlain) {
340 delete m_unifiedSampleVariancePlain;
341 m_unifiedSampleVariancePlain = NULL;
344 delete m_subBoxPlain;
345 m_subBoxPlain = NULL;
347 if (m_unifiedBoxPlain) {
348 delete m_unifiedBoxPlain;
349 m_unifiedBoxPlain = NULL;
355 template <
class V,
class M>
359 unsigned int initialPos,
364 "BaseVectorSequence<V,M>::append()",
365 "initialPos is too big");
369 "BaseVectorSequence<V,M>::append()",
370 "numPos is too big");
372 this->deleteStoredVectors();
373 unsigned int currentSize = this->subSequenceSize();
374 this->resizeSequence(currentSize+numPos);
376 for (
unsigned int i = 0; i < numPos; ++i) {
378 this->setPositionValues(currentSize+i,tmpVec);
384 template <
class V,
class M>
390 if (m_env.subDisplayFile()) {
391 *m_env.subDisplayFile() <<
"Entering BaseVectorSequence<V,M>::subPositionsOfMaximum()"
392 <<
": subCorrespondingScalarValues,subSequenceSize() = " << subCorrespondingScalarValues.
subSequenceSize()
393 <<
", this->subSequenceSize = " << this->subSequenceSize()
399 "BaseVectorSequence<V,M>::subPositionsOfMaximum()",
402 double subMaxValue = subCorrespondingScalarValues.
subMaxPlain();
405 unsigned int subNumPos = 0;
406 for (
unsigned int i = 0; i < iMax; ++i) {
407 if (subCorrespondingScalarValues[i] == subMaxValue) {
412 V tmpVec(this->vectorSpace().zeroVector());
415 for (
unsigned int i = 0; i < iMax; ++i) {
416 if (subCorrespondingScalarValues[i] == subMaxValue) {
417 this->getPositionValues (i,tmpVec);
423 if (m_env.subDisplayFile()) {
424 *m_env.subDisplayFile() <<
"Leaving BaseVectorSequence<V,M>::subPositionsOfMaximum()"
431 template <
class V,
class M>
437 if (m_env.subDisplayFile()) {
438 *m_env.subDisplayFile() <<
"Entering BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()"
439 <<
": subCorrespondingScalarValues,subSequenceSize() = " << subCorrespondingScalarValues.
subSequenceSize()
440 <<
", this->subSequenceSize = " << this->subSequenceSize()
446 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
449 double subMaxValue = subCorrespondingScalarValues.
subMaxPlain();
454 double unifiedMaxValue;
455 std::vector<double> sendbufPos(1,0.);
456 for (
unsigned int i = 0; i < sendbufPos.size(); ++i) {
457 sendbufPos[i] = subMaxValue;
460 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
461 "failed MPI.Allreduce() for max");
465 for (
unsigned int i = 0; i < iMax; ++i) {
466 if (subCorrespondingScalarValues[i] == unifiedMaxValue) {
471 V tmpVec(this->vectorSpace().zeroVector());
474 for (
unsigned int i = 0; i < iMax; ++i) {
475 if (subCorrespondingScalarValues[i] == unifiedMaxValue) {
476 this->getPositionValues (i,tmpVec);
482 std::vector<int> auxBuf(1,0);
483 int unifiedNumPos = 0;
484 auxBuf[0] = subNumPos;
486 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
487 "failed MPI.Allreduce() for sum");
493 unsigned int Np = (
unsigned int) m_env.inter0Comm().NumProc();
495 std::vector<int> recvcntsPos(Np,0);
497 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
498 "failed MPI.Gatherv()");
499 if (m_env.inter0Rank() == 0) {
502 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
503 "failed MPI.Gather() result at proc 0 (recvcntsPos[0])");
506 std::vector<int> displsPos(Np,0);
507 for (
unsigned int nodeId = 1; nodeId < Np; ++nodeId) {
508 displsPos[nodeId] = displsPos[nodeId-1] + recvcntsPos[nodeId-1];
510 if (m_env.inter0Rank() == 0) {
513 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
514 "failed MPI.Gather() result at proc 0 (unifiedNumPos)");
520 unsigned int dimSize = m_vectorSpace.dimLocal();
521 int subNumDbs = subNumPos * dimSize;
522 std::vector<int> recvcntsDbs(Np,0);
524 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
525 "failed MPI.Gatherv()");
526 if (m_env.inter0Rank() == 0) {
529 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
530 "failed MPI.Gather() result at proc 0 (recvcntsDbs[0])");
533 std::vector<int> displsDbs(Np,0);
534 for (
unsigned int nodeId = 1; nodeId < Np; ++nodeId) {
535 displsDbs[nodeId] = displsDbs[nodeId-1] + recvcntsDbs[nodeId-1];
537 if (m_env.inter0Rank() == 0) {
538 UQ_FATAL_TEST_MACRO(((
int) (unifiedNumPos*dimSize)) != (displsDbs[Np - 1] + recvcntsDbs[Np - 1]),
540 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
541 "failed MPI.Gather() result at proc 0 (unifiedNumPos*dimSize)");
547 std::vector<double> sendbufDbs(subNumDbs,0.);
548 for (
unsigned int i = 0; i < (
unsigned int) subNumPos; ++i) {
550 for (
unsigned int j = 0; j < dimSize; ++j) {
551 sendbufDbs[i*dimSize + j] = tmpVec[j];
555 std::vector<double> recvbufDbs(unifiedNumPos * dimSize);
557 m_env.inter0Comm().Gatherv((
void *) &sendbufDbs[0], (
int) subNumDbs,
RawValue_MPI_DOUBLE, (
void *) &recvbufDbs[0], (
int *) &recvcntsDbs[0], (
int *) &displsDbs[0],
RawValue_MPI_DOUBLE, 0,
558 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
559 "failed MPI.Gatherv()");
564 if (m_env.inter0Rank() == (int) 0) {
565 for (
unsigned int i = 0; i < (
unsigned int) unifiedNumPos; ++i) {
566 for (
unsigned int j = 0; j < dimSize; ++j) {
567 tmpVec[j] = recvbufDbs[i*dimSize + j];
573 if (m_env.subDisplayFile()) {
574 *m_env.subDisplayFile() <<
"Leaving BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()"
578 return unifiedMaxValue;
581 template <
class V,
class M>
585 V gaussianVector(m_vectorSpace.zeroVector());
586 for (
unsigned int j = 0; j < this->subSequenceSize(); ++j) {
587 gaussianVector.cwSetGaussian(meanVec,stdDevVec);
588 this->setPositionValues(j,gaussianVector);
591 this->deleteStoredVectors();
596 template <
class V,
class M>
600 V uniformVector(m_vectorSpace.zeroVector());
601 for (
unsigned int j = 0; j < this->subSequenceSize(); ++j) {
602 uniformVector.cwSetUniform(aVec,bVec);
603 this->setPositionValues(j,uniformVector);
606 this->deleteStoredVectors();
611 template<
class V,
class M>
614 std::ofstream* passedOfs,
615 unsigned int& initialPos,
616 unsigned int& spacing)
618 if (m_env.subDisplayFile()) {
619 *m_env.subDisplayFile() <<
"\n"
620 <<
"\n-----------------------------------------------------"
621 <<
"\n Computing filter parameters for chain '" << m_name <<
"' ..."
622 <<
"\n-----------------------------------------------------"
627 bool okSituation = ((passedOfs == NULL ) ||
628 ((passedOfs != NULL) && (m_env.subRank() >= 0)));
631 "BaseVectorSequence<V,M>::computeFilterParams()",
632 "unexpected combination of file pointer and subRank");
637 if (m_env.subDisplayFile()) {
638 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
639 <<
"\n Finished computing filter parameters for chain '" << m_name <<
"'"
640 <<
": initialPos = " << initialPos
641 <<
", spacing = " << spacing
642 <<
"\n-----------------------------------------------------"
651 template <
class V,
class M>
659 "SequenceOfVectors<V,M>::copy()",
660 "incompatible vector space dimensions");
663 this->deleteStoredVectors();
673 #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS
674 template<
class V,
class M>
677 const SequenceStatisticalOptions& statisticalOptions,
678 std::ofstream* passedOfs)
680 if (m_env.subDisplayFile()) {
681 *m_env.subDisplayFile() <<
"\n"
682 <<
"\n-----------------------------------------------------"
683 <<
"\n Computing statistics for chain '" << m_name <<
"' ..."
684 <<
"\n-----------------------------------------------------"
689 bool okSituation = ((passedOfs == NULL ) ||
690 ((passedOfs != NULL) && (m_env.subRank() >= 0)));
693 "BaseVectorSequence<V,M>::computeStatistics()",
694 "unexpected combination of file pointer and subRank");
697 struct timeval timevalTmp;
698 iRC = gettimeofday(&timevalTmp, NULL);
699 double tmpRunTime = 0.;
702 std::vector<unsigned int> initialPosForStatistics(statisticalOptions.initialDiscardedPortions().size(),0);
703 for (
unsigned int i = 0; i < initialPosForStatistics.size(); ++i) {
704 initialPosForStatistics[i] = (
unsigned int) (statisticalOptions.initialDiscardedPortions()[i] * (double) (this->subSequenceSize()-1));
705 if (m_env.subDisplayFile()) {
706 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeStatistics()"
707 <<
": statisticalOptions.initialDiscardedPortions()[" << i <<
"] = " << statisticalOptions.initialDiscardedPortions()[i]
708 <<
", initialPosForStatistics[" << i <<
"] = " << initialPosForStatistics[i]
712 if (m_env.subDisplayFile()) {
713 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeStatistics(): initial positions for statistics =";
714 for (
unsigned int i = 0; i < initialPosForStatistics.size(); ++i) {
715 *m_env.subDisplayFile() <<
" " << initialPosForStatistics[i];
717 *m_env.subDisplayFile() << std::endl;
723 this->computeMeanVars(statisticalOptions,
730 #ifdef UQ_CODE_HAS_MONITORS
731 if (statisticalOptions.meanMonitorPeriod() != 0) {
732 this->computeMeanEvolution(statisticalOptions,
740 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
741 if ((statisticalOptions.bmmRun() ) &&
742 (initialPosForStatistics.size() > 0) &&
743 (statisticalOptions.bmmLengths().size() > 0)) {
744 this->computeBMM(statisticalOptions,
745 initialPosForStatistics,
752 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
753 if ((statisticalOptions.fftCompute() ) &&
754 (initialPosForStatistics.size() > 0)) {
755 this->computeFFT(statisticalOptions,
756 initialPosForStatistics,
763 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
764 if ((statisticalOptions.psdCompute() ) &&
765 (initialPosForStatistics.size() > 0)) {
766 this->computePSD(statisticalOptions,
767 initialPosForStatistics,
774 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
775 if ((statisticalOptions.psdAtZeroCompute() ) &&
776 (initialPosForStatistics.size() > 0) &&
777 (statisticalOptions.psdAtZeroNumBlocks().size() > 0)) {
778 this->computePSDAtZero(statisticalOptions,
779 initialPosForStatistics,
786 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
787 if ((statisticalOptions.gewekeCompute()) &&
788 (initialPosForStatistics.size() > 0)) {
789 this->computeGeweke(statisticalOptions,
790 initialPosForStatistics,
797 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
798 if ((statisticalOptions.meanStaccCompute()) &&
799 (initialPosForStatistics.size() > 0 )) {
800 this->computeMeanStacc(statisticalOptions,
801 initialPosForStatistics,
806 std::vector<unsigned int> lagsForCorrs(statisticalOptions.autoCorrNumLags(),1);
807 for (
unsigned int i = 1; i < lagsForCorrs.size(); ++i) {
808 lagsForCorrs[i] = statisticalOptions.autoCorrSecondLag() + (i-1)*statisticalOptions.autoCorrLagSpacing();
814 if ((statisticalOptions.autoCorrComputeViaDef()) &&
815 (initialPosForStatistics.size() > 0 ) &&
816 (lagsForCorrs.size() > 0 )) {
817 this->computeAutoCorrViaDef(statisticalOptions,
818 initialPosForStatistics,
826 if ((statisticalOptions.autoCorrComputeViaFft()) &&
827 (initialPosForStatistics.size() > 0 ) &&
828 (lagsForCorrs.size() > 0 )) {
829 this->computeAutoCorrViaFFT(statisticalOptions,
830 initialPosForStatistics,
838 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
839 if ((statisticalOptions.histCompute ()) ||
840 (statisticalOptions.cdfStaccCompute()) ||
841 (statisticalOptions.kdeCompute ())) {
843 if (statisticalOptions.kdeCompute())
845 this->computeHistCdfstaccKde(statisticalOptions,
852 if ((statisticalOptions.covMatrixCompute ()) ||
853 (statisticalOptions.corrMatrixCompute())) {
854 this->computeCovCorrMatrices(statisticalOptions,
859 if (m_env.subDisplayFile()) {
860 *m_env.subDisplayFile() <<
"All statistics of chain '" << m_name <<
"'"
861 <<
" took " << tmpRunTime
866 if (m_env.subDisplayFile()) {
867 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
868 <<
"\n Finished computing statistics for chain '" << m_name <<
"'"
869 <<
"\n-----------------------------------------------------"
877 template<
class V,
class M>
879 BaseVectorSequence<V,M>::computeMeanVars(
880 const SequenceStatisticalOptions& statisticalOptions,
881 std::ofstream* passedOfs,
888 struct timeval timevalTmp;
889 iRC = gettimeofday(&timevalTmp, NULL);
890 double tmpRunTime = 0.;
892 if (m_env.subDisplayFile()) {
893 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
894 <<
"\nComputing mean, sample variance and population variance"
898 V subChainMean(m_vectorSpace.zeroVector());
899 this->subMeanExtra(0,
900 this->subSequenceSize(),
903 V subChainMedian(m_vectorSpace.zeroVector());
904 this->subMedianExtra(0,
905 this->subSequenceSize(),
908 V subChainSampleVariance(m_vectorSpace.zeroVector());
909 this->subSampleVarianceExtra(0,
910 this->subSequenceSize(),
912 subChainSampleVariance);
914 if ((m_env.displayVerbosity() >= 5) && (m_env.subDisplayFile())) {
915 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeMeanVars()"
916 <<
": subChainMean.sizeLocal() = " << subChainMean.sizeLocal()
917 <<
", subChainMean = " << subChainMean
918 <<
", subChainMedian = " << subChainMedian
919 <<
", subChainSampleVariance.sizeLocal() = " << subChainSampleVariance.sizeLocal()
920 <<
", subChainSampleVariance = " << subChainSampleVariance
924 V estimatedVarianceOfSampleMean(subChainSampleVariance);
925 estimatedVarianceOfSampleMean /= (double) this->subSequenceSize();
926 bool savedVectorPrintState = estimatedVarianceOfSampleMean.getPrintHorizontally();
927 estimatedVarianceOfSampleMean.setPrintHorizontally(
false);
928 if (m_env.subDisplayFile()) {
929 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean for the whole chain '" << m_name <<
"'"
930 <<
", under independence assumption:"
932 << estimatedVarianceOfSampleMean
935 estimatedVarianceOfSampleMean.setPrintHorizontally(savedVectorPrintState);
937 V estimatedStdOfSampleMean(estimatedVarianceOfSampleMean);
938 estimatedStdOfSampleMean.cwSqrt();
939 savedVectorPrintState = estimatedStdOfSampleMean.getPrintHorizontally();
940 estimatedStdOfSampleMean.setPrintHorizontally(
false);
941 if (m_env.subDisplayFile()) {
942 *m_env.subDisplayFile() <<
"\nEstimated standard deviation of sample mean for the whole chain '" << m_name <<
"'"
943 <<
", under independence assumption:"
945 << estimatedStdOfSampleMean
948 estimatedStdOfSampleMean.setPrintHorizontally(savedVectorPrintState);
950 V subChainPopulationVariance(m_vectorSpace.zeroVector());
951 this->subPopulationVariance(0,
952 this->subSequenceSize(),
954 subChainPopulationVariance);
957 if (m_env.subDisplayFile()) {
958 *m_env.subDisplayFile() <<
"Sub Mean, median, and variances took " << tmpRunTime
963 if (m_env.subDisplayFile()) {
964 *m_env.subDisplayFile() <<
"\nSub mean, median, sample std, population std"
967 sprintf(line,
"%s%4s%s%6s%s%9s%s%9s%s",
977 *m_env.subDisplayFile() << line;
979 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
980 sprintf(line,
"\n%8.8s%2s%11.4e%2s%11.4e%2s%11.4e%2s%11.4e",
981 m_vectorSpace.localComponentName(i).c_str(),
987 std::sqrt(subChainSampleVariance[i]),
989 std::sqrt(subChainPopulationVariance[i]));
990 *m_env.subDisplayFile() << line;
992 *m_env.subDisplayFile() << std::endl;
995 if (subMeanPtr ) *subMeanPtr = subChainMean;
996 if (subMedianPtr ) *subMedianPtr = subChainMedian;
997 if (subSampleVarPtr) *subSampleVarPtr = subChainSampleVariance;
998 if (subPopulVarPtr ) *subPopulVarPtr = subChainPopulationVariance;
1000 if (m_env.numSubEnvironments() > 1) {
1002 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1003 V unifiedChainMean(m_vectorSpace.zeroVector());
1004 this->unifiedMeanExtra(0,
1005 this->subSequenceSize(),
1008 V unifiedChainMedian(m_vectorSpace.zeroVector());
1009 this->unifiedMedianExtra(0,
1010 this->subSequenceSize(),
1011 unifiedChainMedian);
1013 V unifiedChainSampleVariance(m_vectorSpace.zeroVector());
1014 this->unifiedSampleVarianceExtra(0,
1015 this->subSequenceSize(),
1017 unifiedChainSampleVariance);
1019 V unifiedChainPopulationVariance(m_vectorSpace.zeroVector());
1020 this->unifiedPopulationVariance(0,
1021 this->subSequenceSize(),
1023 unifiedChainPopulationVariance);
1025 if (m_env.inter0Rank() == 0) {
1026 if (m_env.subDisplayFile()) {
1027 *m_env.subDisplayFile() <<
"\nUnif mean, median, sample std, population std"
1030 sprintf(line,
"%s%4s%s%6s%s%9s%s%9s%s",
1040 *m_env.subDisplayFile() << line;
1042 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1043 sprintf(line,
"\n%8.8s%2s%11.4e%2s%11.4e%2s%11.4e%2s%11.4e",
1044 m_vectorSpace.localComponentName(i).c_str(),
1046 unifiedChainMean[i],
1048 unifiedChainMedian[i],
1050 std::sqrt(unifiedChainSampleVariance[i]),
1052 std::sqrt(unifiedChainPopulationVariance[i]));
1053 *m_env.subDisplayFile() << line;
1055 *m_env.subDisplayFile() << std::endl;
1062 "BaseVectorSequence<V,M>::computeMeanVars()",
1063 "unified min-max writing, parallel vectors not supported yet");
1067 if (m_env.subDisplayFile()) {
1068 *m_env.subDisplayFile() <<
"\nEnded computing mean, sample variance and population variance"
1069 <<
"\n-----------------------------------------------------"
1076 template<
class V,
class M>
1078 BaseVectorSequence<V,M>::computeAutoCorrViaDef(
1079 const SequenceStatisticalOptions& statisticalOptions,
1080 const std::vector<unsigned int>& initialPosForStatistics,
1081 const std::vector<unsigned int>& lagsForCorrs,
1082 std::ofstream* passedOfs)
1085 struct timeval timevalTmp;
1086 iRC = gettimeofday(&timevalTmp, NULL);
1087 double tmpRunTime = 0.;
1089 if (m_env.subDisplayFile()) {
1090 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1091 <<
"\nComputing autocorrelation coefficients (via def)"
1095 if (statisticalOptions.autoCorrDisplay() && (m_env.subDisplayFile())) {
1096 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaDef(): lags for autocorrelation (via def) = ";
1097 for (
unsigned int i = 0; i < lagsForCorrs.size(); ++i) {
1098 *m_env.subDisplayFile() <<
" " << lagsForCorrs[i];
1100 *m_env.subDisplayFile() << std::endl;
1103 TwoDArray<V> _2dArrayOfAutoCorrs(initialPosForStatistics.size(),lagsForCorrs.size());
1104 for (
unsigned int i = 0; i < _2dArrayOfAutoCorrs.numRows(); ++i) {
1105 for (
unsigned int j = 0; j < _2dArrayOfAutoCorrs.numCols(); ++j) {
1106 _2dArrayOfAutoCorrs.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
1110 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1111 unsigned int initialPos = initialPosForStatistics[initialPosId];
1112 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1113 unsigned int lag = lagsForCorrs[lagId];
1114 this->autoCorrViaDef(initialPos,
1115 this->subSequenceSize()-initialPos,
1117 _2dArrayOfAutoCorrs(initialPosId,lagId));
1125 if ((statisticalOptions.autoCorrDisplay()) && (m_env.subDisplayFile())) {
1126 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1127 *m_env.subDisplayFile() <<
"\nComputed autocorrelation coefficients (via def), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1128 <<
" (each column corresponds to a different lag)"
1133 *m_env.subDisplayFile() << line;
1134 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1135 sprintf(line,
"%10s%3d",
1137 lagsForCorrs[lagId]);
1138 *m_env.subDisplayFile() << line;
1141 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1142 sprintf(line,
"\n%9.9s",
1143 m_vectorSpace.localComponentName(i).c_str() );
1144 *m_env.subDisplayFile() << line;
1145 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1146 sprintf(line,
"%2s%11.4e",
1148 _2dArrayOfAutoCorrs(initialPosId,lagId)[i]);
1149 *m_env.subDisplayFile() << line;
1152 *m_env.subDisplayFile() << std::endl;
1157 if (m_env.subDisplayFile()) {
1158 *m_env.subDisplayFile() <<
"Chain autocorrelation (via def) took " << tmpRunTime
1164 if (statisticalOptions.autoCorrWrite() && passedOfs) {
1165 std::ofstream& ofsvar = *passedOfs;
1166 ofsvar << m_name <<
"_corrViaDefLags_sub" << m_env.subIdString() <<
" = zeros(" << 1
1167 <<
"," << lagsForCorrs.size()
1170 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1171 ofsvar << m_name <<
"_corrViaDefLags_sub" << m_env.subIdString() <<
"(" << 1
1173 <<
") = " << lagsForCorrs[lagId]
1178 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1179 ofsvar << m_name <<
"_corrViaDefInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
1180 <<
"," << lagsForCorrs.size()
1183 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1184 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1185 ofsvar << m_name <<
"_corrViaDefInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
1187 <<
") = " << _2dArrayOfAutoCorrs(initialPosId,lagId)[i]
1198 template<
class V,
class M>
1200 BaseVectorSequence<V,M>::computeAutoCorrViaFFT(
1201 const SequenceStatisticalOptions& statisticalOptions,
1202 const std::vector<unsigned int>& initialPosForStatistics,
1203 const std::vector<unsigned int>& lagsForCorrs,
1204 std::ofstream* passedOfs)
1207 struct timeval timevalTmp;
1208 iRC = gettimeofday(&timevalTmp, NULL);
1209 double tmpRunTime = 0.;
1211 if (m_env.subDisplayFile()) {
1212 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1213 <<
"\nComputing autocorrelation coefficients (via fft)"
1217 if (statisticalOptions.autoCorrDisplay() && (m_env.subDisplayFile())) {
1218 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaFFT(): lags for autocorrelation (via fft) = ";
1219 for (
unsigned int i = 0; i < lagsForCorrs.size(); ++i) {
1220 *m_env.subDisplayFile() <<
" " << lagsForCorrs[i];
1222 *m_env.subDisplayFile() << std::endl;
1225 TwoDArray<V> _2dArrayOfAutoCorrs(initialPosForStatistics.size(),lagsForCorrs.size());
1226 for (
unsigned int i = 0; i < _2dArrayOfAutoCorrs.numRows(); ++i) {
1227 for (
unsigned int j = 0; j < _2dArrayOfAutoCorrs.numCols(); ++j) {
1228 _2dArrayOfAutoCorrs.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
1231 std::vector<V*> corrVecs(lagsForCorrs.size(),NULL);
1232 std::vector<V*> corrSumVecs(initialPosForStatistics.size(),NULL);
1233 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1234 corrSumVecs[initialPosId] =
new V(m_vectorSpace.zeroVector()) ;
1235 unsigned int initialPos = initialPosForStatistics[initialPosId];
1236 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1237 corrVecs[lagId] =
new V(m_vectorSpace.zeroVector()) ;
1239 if (m_env.subDisplayFile()) {
1240 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaFFT()"
1241 <<
": about to call chain.autoCorrViaFft()"
1242 <<
" with initialPos = " << initialPos
1243 <<
", numPos = " << this->subSequenceSize()-initialPos
1244 <<
", lagsForCorrs.size() = " << lagsForCorrs.size()
1245 <<
", corrVecs.size() = " << corrVecs.size()
1248 this->autoCorrViaFft(initialPos,
1249 this->subSequenceSize()-initialPos,
1252 this->autoCorrViaFft(initialPos,
1253 this->subSequenceSize()-initialPos,
1254 (
unsigned int) (1.0 * (
double) (this->subSequenceSize()-initialPos)),
1255 *corrSumVecs[initialPosId]);
1256 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1257 _2dArrayOfAutoCorrs(initialPosId,lagId) = *(corrVecs[lagId]);
1260 for (
unsigned int j = 0; j < corrVecs.size(); ++j) {
1261 if (corrVecs[j] != NULL)
delete corrVecs[j];
1264 if (statisticalOptions.autoCorrDisplay()) {
1265 V subChainMean (m_vectorSpace.zeroVector());
1266 V subChainSampleVariance (m_vectorSpace.zeroVector());
1267 V estimatedVarianceOfSampleMean(m_vectorSpace.zeroVector());
1268 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1269 unsigned int initialPos = initialPosForStatistics[initialPosId];
1271 this->subMeanExtra(initialPos,
1272 this->subSequenceSize()-initialPos,
1275 this->subSampleVarianceExtra(initialPos,
1276 this->subSequenceSize()-initialPos,
1278 subChainSampleVariance);
1280 if (m_env.subDisplayFile()) {
1281 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through autocorrelation (via fft), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1284 estimatedVarianceOfSampleMean.cwSet(-1.);
1285 estimatedVarianceOfSampleMean += 2.* (*corrSumVecs[initialPosId]);
1286 estimatedVarianceOfSampleMean *= subChainSampleVariance;
1287 estimatedVarianceOfSampleMean /= (double) (this->subSequenceSize() - initialPos);
1288 bool savedVectorPrintState = estimatedVarianceOfSampleMean.getPrintHorizontally();
1289 estimatedVarianceOfSampleMean.setPrintHorizontally(
false);
1290 if (m_env.subDisplayFile()) {
1291 *m_env.subDisplayFile() << estimatedVarianceOfSampleMean
1294 estimatedVarianceOfSampleMean.setPrintHorizontally(savedVectorPrintState);
1296 if (m_env.subDisplayFile()) {
1297 *m_env.subDisplayFile() <<
"\nComputed autocorrelation coefficients (via fft), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1298 <<
" (each column corresponds to a different lag)"
1304 *m_env.subDisplayFile() << line;
1305 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1306 sprintf(line,
"%10s%3d",
1308 lagsForCorrs[lagId]);
1309 *m_env.subDisplayFile() << line;
1312 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1313 sprintf(line,
"\n%9.9s",
1314 m_vectorSpace.localComponentName(i).c_str() );
1315 *m_env.subDisplayFile() << line;
1316 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1317 sprintf(line,
"%2s%11.4e",
1319 _2dArrayOfAutoCorrs(initialPosId,lagId)[i]);
1320 *m_env.subDisplayFile() << line;
1323 *m_env.subDisplayFile() << std::endl;
1329 if (m_env.subDisplayFile()) {
1330 *m_env.subDisplayFile() <<
"Chain autocorrelation (via fft) took " << tmpRunTime
1336 if (statisticalOptions.autoCorrWrite() && passedOfs) {
1337 std::ofstream& ofsvar = *passedOfs;
1338 ofsvar << m_name <<
"_corrViaFftLags_sub" << m_env.subIdString() <<
" = zeros(" << 1
1339 <<
"," << lagsForCorrs.size()
1342 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1343 ofsvar << m_name <<
"_corrViaFftLags_sub" << m_env.subIdString() <<
"(" << 1
1345 <<
") = " << lagsForCorrs[lagId]
1350 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1351 ofsvar << m_name <<
"_corrViaFftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
1352 <<
"," << lagsForCorrs.size()
1355 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1356 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1357 ofsvar << m_name <<
"_corrViaFftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
1359 <<
") = " << _2dArrayOfAutoCorrs(initialPosId,lagId)[i]
1370 template<
class V,
class M>
1372 BaseVectorSequence<V,M>::computeHistCdfstaccKde(
1373 const SequenceStatisticalOptions& statisticalOptions,
1374 std::ofstream* passedOfs)
1376 if (m_env.subDisplayFile()) {
1377 *m_env.subDisplayFile() <<
"\n"
1378 <<
"\n-----------------------------------------------------"
1379 <<
"\n Computing histogram and/or cdf stacc and/or Kde for chain '" << m_name <<
"' ..."
1380 <<
"\n-----------------------------------------------------"
1386 struct timeval timevalTmp;
1391 double tmpRunTime = 0.;
1392 iRC = gettimeofday(&timevalTmp, NULL);
1393 if (m_env.subDisplayFile()) {
1394 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1395 <<
"\nComputing min and max for histograms and Kde"
1399 V statsMinPositions(m_vectorSpace.zeroVector());
1400 V statsMaxPositions(m_vectorSpace.zeroVector());
1401 this->subMinMaxExtra(0,
1402 this->subSequenceSize(),
1406 if (m_env.subDisplayFile()) {
1407 *m_env.subDisplayFile() <<
"\nComputed min values and max values for chain '" << m_name <<
"'"
1413 *m_env.subDisplayFile() << line;
1415 sprintf(line,
"%9s%s%9s%s",
1420 *m_env.subDisplayFile() << line;
1422 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1423 sprintf(line,
"\n%8.8s",
1424 m_vectorSpace.localComponentName(i).c_str() );
1425 *m_env.subDisplayFile() << line;
1427 sprintf(line,
"%2s%11.4e%2s%11.4e",
1429 statsMinPositions[i],
1431 statsMaxPositions[i]);
1432 *m_env.subDisplayFile() << line;
1434 *m_env.subDisplayFile() << std::endl;
1437 V unifiedStatsMinPositions(statsMinPositions);
1438 V unifiedStatsMaxPositions(statsMaxPositions);
1439 if (m_env.numSubEnvironments() > 1) {
1441 this->unifiedMinMaxExtra(0,
1442 this->subSequenceSize(),
1443 unifiedStatsMinPositions,
1444 unifiedStatsMaxPositions);
1447 if (m_env.subDisplayFile()) {
1448 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1449 if (m_env.inter0Rank() == 0) {
1450 *m_env.subDisplayFile() <<
"\nComputed unified min values and max values for chain '" << m_name <<
"'"
1456 *m_env.subDisplayFile() << line;
1458 sprintf(line,
"%9s%s%9s%s",
1463 *m_env.subDisplayFile() << line;
1465 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1466 sprintf(line,
"\n%8.8s",
1467 m_vectorSpace.localComponentName(i).c_str() );
1468 *m_env.subDisplayFile() << line;
1470 sprintf(line,
"%2s%11.4e%2s%11.4e",
1472 unifiedStatsMinPositions[i],
1474 unifiedStatsMaxPositions[i]);
1475 *m_env.subDisplayFile() << line;
1477 *m_env.subDisplayFile() << std::endl;
1483 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1484 "unified min-max writing, parallel vectors not supported yet");
1491 if (m_env.subDisplayFile()) {
1492 *m_env.subDisplayFile() <<
"Chain min and max took " << tmpRunTime
1500 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
1501 if ((statisticalOptions.histCompute() ) &&
1502 (statisticalOptions.histNumInternalBins() > 0)) {
1504 iRC = gettimeofday(&timevalTmp, NULL);
1505 if (m_env.subDisplayFile()) {
1506 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1507 <<
"\nComputing histograms"
1511 std::string subCoreName_HistCenters((std::string)(
"_HistCenters_sub")+m_env.subIdString());
1512 std::string uniCoreName_HistCenters((std::string)(
"_unifHistCenters_sub")+m_env.subIdString());
1513 if (m_env.numSubEnvironments() == 1) subCoreName_HistCenters = uniCoreName_HistCenters;
1515 std::string subCoreName_HistQuantts((std::string)(
"_HistQuantts_sub")+m_env.subIdString());
1516 std::string uniCoreName_HistQuantts((std::string)(
"_unifHistQuantts_sub")+m_env.subIdString());
1517 if (m_env.numSubEnvironments() == 1) subCoreName_HistQuantts = uniCoreName_HistQuantts;
1519 for (
unsigned int i = 0; i < statsMaxPositions.sizeLocal(); ++i) {
1520 statsMaxPositions[i] *= (1. + 1.e-15);
1524 std::vector<V*> histCentersForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1525 std::vector<V*> histQuanttsForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1526 this->subHistogram(0,
1529 histCentersForAllBins,
1530 histQuanttsForAllBins);
1534 std::ofstream& ofsvar = *passedOfs;
1535 ofsvar << m_name << subCoreName_HistCenters <<
" = zeros(" << this->vectorSizeLocal()
1536 <<
"," << histCentersForAllBins.size()
1539 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1540 for (
unsigned int j = 0; j < histCentersForAllBins.size(); ++j) {
1541 ofsvar << m_name << subCoreName_HistCenters <<
"(" << i+1
1543 <<
") = " << (*(histCentersForAllBins[j]))[i]
1549 ofsvar << m_name << subCoreName_HistQuantts <<
" = zeros(" << this->vectorSizeLocal()
1550 <<
"," << histQuanttsForAllBins.size()
1553 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1554 for (
unsigned int j = 0; j < histQuanttsForAllBins.size(); ++j) {
1555 ofsvar << m_name << subCoreName_HistQuantts <<
"(" << i+1
1557 <<
") = " << (*(histQuanttsForAllBins[j]))[i]
1564 for (
unsigned int i = 0; i < histQuanttsForAllBins.size(); ++i) {
1565 if (histQuanttsForAllBins[i] != NULL)
delete histQuanttsForAllBins[i];
1567 for (
unsigned int i = 0; i < histCentersForAllBins.size(); ++i) {
1568 if (histCentersForAllBins[i] != NULL)
delete histCentersForAllBins[i];
1571 std::vector<V*> unifiedHistCentersForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1572 std::vector<V*> unifiedHistQuanttsForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1573 if (m_env.numSubEnvironments() > 1) {
1575 this->unifiedHistogram(0,
1576 unifiedStatsMinPositions,
1577 unifiedStatsMaxPositions,
1578 unifiedHistCentersForAllBins,
1579 unifiedHistQuanttsForAllBins);
1583 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1584 if (m_env.inter0Rank() == 0) {
1585 std::ofstream& ofsvar = *passedOfs;
1586 ofsvar << m_name << uniCoreName_HistCenters <<
" = zeros(" << this->vectorSizeLocal()
1587 <<
"," << unifiedHistCentersForAllBins.size()
1590 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1591 for (
unsigned int j = 0; j < unifiedHistCentersForAllBins.size(); ++j) {
1592 ofsvar << m_name << uniCoreName_HistCenters <<
"(" << i+1
1594 <<
") = " << (*(unifiedHistCentersForAllBins[j]))[i]
1600 ofsvar << m_name << uniCoreName_HistQuantts <<
" = zeros(" << this->vectorSizeLocal()
1601 <<
"," << unifiedHistQuanttsForAllBins.size()
1604 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1605 for (
unsigned int j = 0; j < unifiedHistQuanttsForAllBins.size(); ++j) {
1606 ofsvar << m_name << uniCoreName_HistQuantts <<
"(" << i+1
1608 <<
") = " << (*(unifiedHistQuanttsForAllBins[j]))[i]
1618 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1619 "unified histogram writing, parallel vectors not supported yet");
1623 for (
unsigned int i = 0; i < unifiedHistQuanttsForAllBins.size(); ++i) {
1624 if (unifiedHistQuanttsForAllBins[i] != NULL)
delete unifiedHistQuanttsForAllBins[i];
1626 for (
unsigned int i = 0; i < unifiedHistCentersForAllBins.size(); ++i) {
1627 if (unifiedHistCentersForAllBins[i] != NULL)
delete unifiedHistCentersForAllBins[i];
1633 if (m_env.subDisplayFile()) {
1634 *m_env.subDisplayFile() <<
"Chain histograms took " << tmpRunTime
1640 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
1644 if ((statisticalOptions.cdfStaccCompute() ) &&
1645 (statisticalOptions.cdfStaccNumEvalPositions() > 0)) {
1647 iRC = gettimeofday(&timevalTmp, NULL);
1648 if (m_env.subDisplayFile()) {
1649 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1650 <<
"\nComputing cdf statistical accuracy"
1654 std::vector<V*> cdfStaccEvalPositions(statisticalOptions.cdfStaccNumEvalPositions(),NULL);
1657 cdfStaccEvalPositions);
1659 std::vector<V*> cdfStaccValues(statisticalOptions.cdfStaccNumEvalPositions(),NULL);
1660 this->subCdfStacc(0,
1661 cdfStaccEvalPositions,
1666 if (m_env.subDisplayFile()) {
1667 *m_env.subDisplayFile() <<
"Chain cdf statistical accuracy took " << tmpRunTime
1676 if ((statisticalOptions.kdeCompute() ) &&
1677 (statisticalOptions.kdeNumEvalPositions() > 0)) {
1679 iRC = gettimeofday(&timevalTmp, NULL);
1680 if (m_env.subDisplayFile()) {
1681 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1682 <<
"\nComputing Kde"
1686 std::string subCoreName_GaussianKdePositions((std::string)(
"_GkdePosits_sub")+m_env.subIdString());
1687 std::string uniCoreName_GaussianKdePositions((std::string)(
"_unifGkdePosits_sub")+m_env.subIdString());
1688 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdePositions = uniCoreName_GaussianKdePositions;
1690 std::string subCoreName_GaussianKdeScaleVec ((std::string)(
"_GkdeScalev_sub")+m_env.subIdString());
1691 std::string uniCoreName_GaussianKdeScaleVec ((std::string)(
"_unifGkdeScalev_sub")+m_env.subIdString());
1692 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdeScaleVec = uniCoreName_GaussianKdeScaleVec;
1694 std::string subCoreName_GaussianKdeValues ((std::string)(
"_GkdeValues_sub")+m_env.subIdString());
1695 std::string uniCoreName_GaussianKdeValues ((std::string)(
"_unifGkdeValues_sub")+m_env.subIdString());
1696 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdeValues = uniCoreName_GaussianKdeValues;
1698 V iqrVec(m_vectorSpace.zeroVector());
1699 this->subInterQuantileRange(0,
1702 V gaussianKdeScaleVec(m_vectorSpace.zeroVector());
1703 this->subScalesForKde(0,
1706 gaussianKdeScaleVec);
1708 std::vector<V*> kdeEvalPositions(statisticalOptions.kdeNumEvalPositions(),NULL);
1713 std::vector<V*> gaussianKdeDensities(statisticalOptions.kdeNumEvalPositions(),NULL);
1714 this->subGaussian1dKde(0,
1715 gaussianKdeScaleVec,
1717 gaussianKdeDensities);
1720 if (m_env.subDisplayFile()) {
1721 *m_env.subDisplayFile() <<
"\nComputed inter quantile ranges for chain '" << m_name <<
"'"
1727 *m_env.subDisplayFile() << line;
1729 sprintf(line,
"%9s%s",
1732 *m_env.subDisplayFile() << line;
1734 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1735 sprintf(line,
"\n%8.8s",
1736 m_vectorSpace.localComponentName(i).c_str() );
1737 *m_env.subDisplayFile() << line;
1739 sprintf(line,
"%2s%11.4e",
1742 *m_env.subDisplayFile() << line;
1744 *m_env.subDisplayFile() << std::endl;
1748 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1749 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1750 <<
", for chain '" << m_name <<
"'"
1751 <<
", about to write sub kde to ofstream with pointer = " << passedOfs
1755 std::ofstream& ofsvar = *passedOfs;
1756 ofsvar << m_name << subCoreName_GaussianKdePositions <<
" = zeros(" << this->vectorSizeLocal()
1757 <<
"," << kdeEvalPositions.size()
1760 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1761 for (
unsigned int j = 0; j < kdeEvalPositions.size(); ++j) {
1762 ofsvar << m_name << subCoreName_GaussianKdePositions <<
"(" << i+1
1764 <<
") = " << (*(kdeEvalPositions[j]))[i]
1770 ofsvar << m_name << subCoreName_GaussianKdeScaleVec <<
" = zeros(" << this->vectorSizeLocal()
1773 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1774 ofsvar << m_name << subCoreName_GaussianKdeScaleVec <<
"(" << i+1
1775 <<
") = " << gaussianKdeScaleVec[i]
1780 ofsvar << m_name << subCoreName_GaussianKdeValues <<
" = zeros(" << this->vectorSizeLocal()
1781 <<
"," << gaussianKdeDensities.size()
1784 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1785 for (
unsigned int j = 0; j < gaussianKdeDensities.size(); ++j) {
1786 ofsvar << m_name << subCoreName_GaussianKdeValues <<
"(" << i+1
1788 <<
") = " << (*(gaussianKdeDensities[j]))[i]
1795 for (
unsigned int i = 0; i < gaussianKdeDensities.size(); ++i) {
1796 if (gaussianKdeDensities[i] != NULL)
delete gaussianKdeDensities[i];
1798 for (
unsigned int i = 0; i < kdeEvalPositions.size(); ++i) {
1799 if (kdeEvalPositions[i] != NULL)
delete kdeEvalPositions[i];
1802 if ((
int) m_env.numSubEnvironments() > 1) {
1804 V unifiedIqrVec(m_vectorSpace.zeroVector());
1805 this->unifiedInterQuantileRange(0,
1809 V unifiedGaussianKdeScaleVec(m_vectorSpace.zeroVector());
1810 this->unifiedScalesForKde(0,
1813 unifiedGaussianKdeScaleVec);
1816 std::vector<V*> unifiedKdeEvalPositions(statisticalOptions.kdeNumEvalPositions(),NULL);
1818 unifiedStatsMaxPositions,
1819 unifiedKdeEvalPositions);
1821 std::vector<V*> unifiedGaussianKdeDensities(statisticalOptions.kdeNumEvalPositions(),NULL);
1822 this->unifiedGaussian1dKde(0,
1823 unifiedGaussianKdeScaleVec,
1824 unifiedKdeEvalPositions,
1825 unifiedGaussianKdeDensities);
1829 if (m_env.subDisplayFile()) {
1830 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1831 if (m_env.inter0Rank() == 0) {
1832 *m_env.subDisplayFile() <<
"\nComputed unified inter quantile ranges for chain '" << m_name <<
"'"
1838 *m_env.subDisplayFile() << line;
1840 sprintf(line,
"%9s%s",
1843 *m_env.subDisplayFile() << line;
1845 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1846 sprintf(line,
"\n%8.8s",
1847 m_vectorSpace.localComponentName(i).c_str() );
1848 *m_env.subDisplayFile() << line;
1850 sprintf(line,
"%2s%11.4e",
1853 *m_env.subDisplayFile() << line;
1855 *m_env.subDisplayFile() << std::endl;
1861 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1862 "unified iqr writing, parallel vectors not supported yet");
1867 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1868 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1869 <<
", for chain '" << m_name <<
"'"
1870 <<
", about to write unified kde to ofstream with pointer = " << passedOfs
1874 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1875 if (m_env.inter0Rank() == 0) {
1876 std::ofstream& ofsvar = *passedOfs;
1877 ofsvar << m_name << uniCoreName_GaussianKdePositions <<
" = zeros(" << this->vectorSizeLocal()
1878 <<
"," << unifiedKdeEvalPositions.size()
1881 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1882 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1883 <<
", for chain '" << m_name <<
"'"
1884 <<
": just wrote '... = zeros(.,.);' line to output file, which has pointer = " << passedOfs
1887 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1888 for (
unsigned int j = 0; j < unifiedKdeEvalPositions.size(); ++j) {
1889 ofsvar << m_name << uniCoreName_GaussianKdePositions <<
"(" << i+1
1891 <<
") = " << (*(unifiedKdeEvalPositions[j]))[i]
1897 ofsvar << m_name << uniCoreName_GaussianKdeScaleVec <<
" = zeros(" << this->vectorSizeLocal()
1900 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1901 ofsvar << m_name << uniCoreName_GaussianKdeScaleVec <<
"(" << i+1
1902 <<
") = " << unifiedGaussianKdeScaleVec[i]
1907 ofsvar << m_name << uniCoreName_GaussianKdeValues <<
" = zeros(" << this->vectorSizeLocal()
1908 <<
"," << unifiedGaussianKdeDensities.size()
1911 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1912 for (
unsigned int j = 0; j < unifiedGaussianKdeDensities.size(); ++j) {
1913 ofsvar << m_name << uniCoreName_GaussianKdeValues <<
"(" << i+1
1915 <<
") = " << (*(unifiedGaussianKdeDensities[j]))[i]
1925 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1926 "unified Kde writing, parallel vectors not supported yet");
1930 for (
unsigned int i = 0; i < unifiedGaussianKdeDensities.size(); ++i) {
1931 if (unifiedGaussianKdeDensities[i] != NULL)
delete unifiedGaussianKdeDensities[i];
1933 for (
unsigned int i = 0; i < unifiedKdeEvalPositions.size(); ++i) {
1934 if (unifiedKdeEvalPositions[i] != NULL)
delete unifiedKdeEvalPositions[i];
1940 if (m_env.subDisplayFile()) {
1941 *m_env.subDisplayFile() <<
"Chain Kde took " << tmpRunTime
1947 if (m_env.subDisplayFile()) {
1948 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1949 <<
"\n Finished computing histogram and/or cdf stacc and/or Kde for chain '" << m_name <<
"'"
1950 <<
"\n-----------------------------------------------------"
1958 template<
class V,
class M>
1960 BaseVectorSequence<V,M>::computeCovCorrMatrices(
1961 const SequenceStatisticalOptions& statisticalOptions,
1962 std::ofstream* passedOfs)
1964 if (m_env.subDisplayFile()) {
1965 *m_env.subDisplayFile() <<
"\n"
1966 <<
"\n-----------------------------------------------------"
1967 <<
"\n Computing covariance and correlation matrices for chain '" << m_name <<
"' ..."
1968 <<
"\n-----------------------------------------------------"
1975 M* covarianceMatrix =
new M(m_env,
1976 m_vectorSpace.map(),
1977 m_vectorSpace.dimGlobal());
1978 M* correlationMatrix =
new M(m_env,
1979 m_vectorSpace.map(),
1980 m_vectorSpace.dimGlobal());
1984 this->subSequenceSize(),
1986 *correlationMatrix);
1988 if (m_env.subDisplayFile()) {
1989 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1991 if (m_env.inter0Rank() == 0) {
1992 *m_env.subDisplayFile() <<
"\nBaseVectorSequence<V,M>::computeCovCorrMatrices"
1993 <<
", chain " << m_name
1994 <<
": contents of covariance matrix are\n" << *covarianceMatrix
1997 *m_env.subDisplayFile() <<
"\nBaseVectorSequence<V,M>::computeCovCorrMatrices"
1998 <<
", chain " << m_name
1999 <<
": contents of correlation matrix are\n" << *correlationMatrix
2006 "BaseVectorSequence<V,M>::computeCovCorrMatrices()",
2007 "parallel vectors not supported yet");
2011 delete correlationMatrix;
2012 delete covarianceMatrix;
2014 if (m_env.subDisplayFile()) {
2015 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2016 <<
"\n Finished computing covariance and correlation matrices for chain '" << m_name <<
"'"
2017 <<
"\n-----------------------------------------------------"
2024 #endif // #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS
2030 #ifdef UQ_CODE_HAS_MONITORS
2031 template<
class V,
class M>
2033 BaseVectorSequence<V,M>::computeMeanEvolution(
2034 const SequenceStatisticalOptions& statisticalOptions,
2035 std::ofstream* passedOfs)
2038 struct timeval timevalTmp;
2039 iRC = gettimeofday(&timevalTmp, NULL);
2040 double tmpRunTime = 0.;
2042 if (m_env.subDisplayFile()) {
2043 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2044 <<
"\nComputing mean evolution"
2048 unsigned int monitorPeriod = statisticalOptions.meanMonitorPeriod();
2049 unsigned int iMin = 0;
2050 unsigned int iMax = (
unsigned int) ( ((
double) this->subSequenceSize())/((double) monitorPeriod) );
2052 if (monitorPeriod == 1) {
2056 if (m_env.subDisplayFile()) {
2057 *m_env.subDisplayFile() <<
" Sub sequence size = " << this->subSequenceSize()
2058 <<
"\n Monitor period = " << monitorPeriod
2059 <<
"\n Number of monitoring positions = " << iMax
2063 this->subMeanMonitorAlloc(iMax);
2064 if (m_env.numSubEnvironments() > 1) {
2065 this->subMeanInter0MonitorAlloc(iMax);
2066 this->unifiedMeanMonitorAlloc(iMax);
2069 for (
unsigned int i = iMin; i < iMax; ++i) {
2070 unsigned int currentMonitoredFinalPosition = (i+1)*monitorPeriod - 1;
2071 V subMeanVec (m_vectorSpace.zeroVector());
2072 V subMeanCltStd(m_vectorSpace.zeroVector());
2073 this->subMeanMonitorRun(currentMonitoredFinalPosition,
2076 this->subMeanMonitorStore(i,
2077 currentMonitoredFinalPosition,
2081 if (m_env.numSubEnvironments() > 1) {
2082 V subMeanInter0Mean (m_vectorSpace.zeroVector());
2083 V subMeanInter0Clt95 (m_vectorSpace.zeroVector());
2084 V subMeanInter0Empirical90(m_vectorSpace.zeroVector());
2085 V subMeanInter0Min (m_vectorSpace.zeroVector());
2086 V subMeanInter0Max (m_vectorSpace.zeroVector());
2087 this->subMeanInter0MonitorRun(currentMonitoredFinalPosition,
2090 subMeanInter0Empirical90,
2093 this->subMeanInter0MonitorStore(i,
2094 currentMonitoredFinalPosition,
2097 subMeanInter0Empirical90,
2101 V unifiedMeanVec (m_vectorSpace.zeroVector());
2102 V unifiedMeanCltStd(m_vectorSpace.zeroVector());
2103 this->unifiedMeanMonitorRun(currentMonitoredFinalPosition,
2106 this->unifiedMeanMonitorStore(i,
2107 currentMonitoredFinalPosition,
2114 this->subMeanMonitorWrite(*passedOfs);
2115 if (m_env.numSubEnvironments() > 1) {
2116 this->subMeanInter0MonitorWrite(*passedOfs);
2117 this->unifiedMeanMonitorWrite(*passedOfs);
2121 this->subMeanMonitorFree();
2122 if (m_env.numSubEnvironments() > 1) {
2123 this->subMeanInter0MonitorFree();
2124 this->unifiedMeanMonitorFree();
2128 if (m_env.subDisplayFile()) {
2129 *m_env.subDisplayFile() <<
"Mean evolution took " << tmpRunTime
2136 #endif //#ifdef UQ_CODE_HAS_MONITORS
2143 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
2144 template<
class V,
class M>
2146 BaseVectorSequence<V,M>::computeBMM(
2147 const SequenceStatisticalOptions& statisticalOptions,
2148 const std::vector<unsigned int>& initialPosForStatistics,
2149 std::ofstream* passedOfs)
2152 struct timeval timevalTmp;
2153 iRC = gettimeofday(&timevalTmp, NULL);
2154 double tmpRunTime = 0.;
2156 if (m_env.subDisplayFile()) {
2157 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2158 <<
"\nComputing variance of sample mean through BMM"
2162 if (m_env.subDisplayFile()) {
2163 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeBMM(): lengths for batchs in BMM =";
2164 for (
unsigned int i = 0; i < statisticalOptions.bmmLengths().size(); ++i) {
2165 *m_env.subDisplayFile() <<
" " << statisticalOptions.bmmLengths()[i];
2167 *m_env.subDisplayFile() << std::endl;
2170 TwoDArray<V> _2dArrayOfBMM(initialPosForStatistics.size(),statisticalOptions.bmmLengths().size());
2171 for (
unsigned int i = 0; i < _2dArrayOfBMM.numRows(); ++i) {
2172 for (
unsigned int j = 0; j < _2dArrayOfBMM.numCols(); ++j) {
2173 _2dArrayOfBMM.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
2176 V bmmVec(m_vectorSpace.zeroVector());
2177 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2178 unsigned int initialPos = initialPosForStatistics[initialPosId];
2179 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2180 unsigned int batchLength = statisticalOptions.bmmLengths()[batchLengthId];
2181 this->bmm(initialPos,
2184 _2dArrayOfBMM(initialPosId,batchLengthId) = bmmVec;
2188 if (m_env.subDisplayFile()) {
2189 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2190 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through batch means method, for subchain beginning at position " << initialPosForStatistics[initialPosId]
2191 <<
" (each column corresponds to a batch length)"
2197 *m_env.subDisplayFile() << line;
2198 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2199 sprintf(line,
"%10s%3d",
2201 statisticalOptions.bmmLengths()[batchLengthId]);
2202 *m_env.subDisplayFile() << line;
2205 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2206 sprintf(line,
"\n%9.9s",
2207 m_vectorSpace.localComponentName(i).c_str() );
2208 *m_env.subDisplayFile() << line;
2209 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2210 sprintf(line,
"%2s%11.4e",
2212 _2dArrayOfBMM(initialPosId,batchLengthId)[i]);
2213 *m_env.subDisplayFile() << line;
2216 *m_env.subDisplayFile() << std::endl;
2221 if (m_env.subDisplayFile()) {
2222 *m_env.subDisplayFile() <<
"Chain BMM took " << tmpRunTime
2230 template<
class V,
class M>
2232 BaseVectorSequence<V,M>::computeFFT(
2233 const SequenceStatisticalOptions& statisticalOptions,
2234 const std::vector<unsigned int>& initialPosForStatistics,
2235 std::ofstream* passedOfs)
2238 struct timeval timevalTmp;
2239 iRC = gettimeofday(&timevalTmp, NULL);
2240 double tmpRunTime = 0.;
2242 if (m_env.subDisplayFile()) {
2243 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2244 <<
"\nComputing FFT of chain on parameter of id = " << statisticalOptions.fftParamId()
2248 std::vector<std::complex<double> > forwardResult(0,std::complex<double>(0.,0.));
2249 std::vector<std::complex<double> > inverseResult(0,std::complex<double>(0.,0.));
2250 Fft<std::complex<double> > fftObj(m_env);
2251 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2252 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2253 this->fftForward(initialPosition,
2254 statisticalOptions.fftSize(),
2255 statisticalOptions.fftParamId(),
2258 if (statisticalOptions.fftWrite() && passedOfs) {
2259 std::ofstream& ofsvar = *passedOfs;
2260 ofsvar << m_name <<
"_fftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2261 <<
"," << forwardResult.size()
2264 for (
unsigned int j = 0; j < forwardResult.size(); ++j) {
2265 ofsvar << m_name <<
"_fftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2267 <<
") = " << forwardResult[j].real()
2268 <<
" + i*" << forwardResult[j].imag()
2274 if (statisticalOptions.fftTestInversion()) {
2275 fftObj.inverse(forwardResult,
2276 statisticalOptions.fftSize(),
2278 if (statisticalOptions.fftWrite() && passedOfs) {
2279 std::ofstream& ofsvar = *passedOfs;
2280 ofsvar << m_name <<
"_iftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2281 <<
"," << inverseResult.size()
2284 for (
unsigned int j = 0; j < inverseResult.size(); ++j) {
2285 ofsvar << m_name <<
"_iftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2287 <<
") = " << inverseResult[j].real()
2288 <<
" + i*" << inverseResult[j].imag()
2297 if (m_env.subDisplayFile()) {
2298 *m_env.subDisplayFile() <<
"Chain FFT took " << tmpRunTime
2306 template<
class V,
class M>
2308 BaseVectorSequence<V,M>::computePSD(
2309 const SequenceStatisticalOptions& statisticalOptions,
2310 const std::vector<unsigned int>& initialPosForStatistics,
2311 std::ofstream* passedOfs)
2314 struct timeval timevalTmp;
2315 iRC = gettimeofday(&timevalTmp, NULL);
2316 double tmpRunTime = 0.;
2318 if (m_env.subDisplayFile()) {
2319 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2320 <<
"\nComputing PSD of chain on parameter of id = " << statisticalOptions.psdParamId()
2324 std::vector<double> psdResult(0,0.);
2325 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2326 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2327 this->psd(initialPosition,
2328 statisticalOptions.psdNumBlocks(),
2329 statisticalOptions.psdHopSizeRatio(),
2330 statisticalOptions.psdParamId(),
2333 if (statisticalOptions.psdWrite() && passedOfs) {
2334 std::ofstream& ofsvar = *passedOfs;
2335 ofsvar << m_name <<
"_psdInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2336 <<
"," << psdResult.size()
2339 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
2340 ofsvar << m_name <<
"_psdInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2342 <<
") = " << psdResult[j]
2350 if (m_env.subDisplayFile()) {
2351 *m_env.subDisplayFile() <<
"Chain PSD took " << tmpRunTime
2359 template<
class V,
class M>
2361 BaseVectorSequence<V,M>::computePSDAtZero(
2362 const SequenceStatisticalOptions& statisticalOptions,
2363 const std::vector<unsigned int>& initialPosForStatistics,
2364 std::ofstream* passedOfs)
2367 struct timeval timevalTmp;
2368 iRC = gettimeofday(&timevalTmp, NULL);
2369 double tmpRunTime = 0.;
2371 if (m_env.subDisplayFile()) {
2372 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2373 <<
"\nComputing PSD at frequency zero for all parameters"
2377 TwoDArray<V> _2dArrayOfPSDAtZero(initialPosForStatistics.size(),statisticalOptions.psdAtZeroNumBlocks().size());
2378 for (
unsigned int i = 0; i < _2dArrayOfPSDAtZero.numRows(); ++i) {
2379 for (
unsigned int j = 0; j < _2dArrayOfPSDAtZero.numCols(); ++j) {
2380 _2dArrayOfPSDAtZero.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
2383 V psdVec(m_vectorSpace.zeroVector());
2384 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2385 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2386 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2387 unsigned int numBlocks = statisticalOptions.psdAtZeroNumBlocks()[numBlocksId];
2388 this->psdAtZero(initialPosition,
2390 statisticalOptions.psdAtZeroHopSizeRatio(),
2392 _2dArrayOfPSDAtZero(initialPosId,numBlocksId) = psdVec;
2397 if ((statisticalOptions.psdAtZeroDisplay()) && (m_env.subDisplayFile())) {
2398 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2399 unsigned int initialPos = initialPosForStatistics[initialPosId];
2400 *m_env.subDisplayFile() <<
"\nComputed PSD at frequency zero for subchain beginning at position " << initialPos
2401 <<
", so effective data size = " << this->subSequenceSize() - initialPos
2402 <<
" (each column corresponds to a number of blocks)"
2408 *m_env.subDisplayFile() << line;
2409 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2410 sprintf(line,
"%10s%3d",
2412 statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]);
2413 *m_env.subDisplayFile() << line;
2416 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2417 sprintf(line,
"\n%9.9s",
2418 m_vectorSpace.localComponentName(i).c_str() );
2419 *m_env.subDisplayFile() << line;
2420 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2421 sprintf(line,
"%2s%11.4e",
2423 _2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]);
2424 *m_env.subDisplayFile() << line;
2427 *m_env.subDisplayFile() << std::endl;
2432 if ( (m_env.subDisplayFile())) {
2433 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2434 unsigned int initialPos = initialPosForStatistics[initialPosId];
2435 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through psd, for subchain beginning at position " << initialPos
2436 <<
", so effective data size = " << this->subSequenceSize() - initialPos
2437 <<
" (each column corresponds to a number of blocks)"
2443 *m_env.subDisplayFile() << line;
2444 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2445 sprintf(line,
"%10s%3d",
2447 statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]);
2448 *m_env.subDisplayFile() << line;
2451 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2452 sprintf(line,
"\n%9.9s",
2453 m_vectorSpace.localComponentName(i).c_str() );
2454 *m_env.subDisplayFile() << line;
2455 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2456 sprintf(line,
"%2s%11.4e",
2458 2.*M_PI*_2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]/(
double) (this->subSequenceSize() - initialPos));
2459 *m_env.subDisplayFile() << line;
2462 *m_env.subDisplayFile() << std::endl;
2467 if (m_env.subDisplayFile()) {
2468 *m_env.subDisplayFile() <<
"Chain PSD at frequency zero took " << tmpRunTime
2474 if (statisticalOptions.psdAtZeroWrite() && passedOfs) {
2475 std::ofstream& ofsvar = *passedOfs;
2476 ofsvar << m_name <<
"_psdAtZeroNumBlocks_sub" << m_env.subIdString() <<
" = zeros(" << 1
2477 <<
"," << statisticalOptions.psdAtZeroNumBlocks().size()
2480 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2481 ofsvar << m_name <<
"_psdAtZeroNumBlocks_sub" << m_env.subIdString() <<
"(" << 1
2482 <<
"," << numBlocksId+1
2483 <<
") = " << statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]
2488 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2489 ofsvar << m_name <<
"_psdAtZeroInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
2490 <<
"," << statisticalOptions.psdAtZeroNumBlocks().size()
2493 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2494 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2495 ofsvar << m_name <<
"_psdAtZeroInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
2496 <<
"," << numBlocksId+1
2497 <<
") = " << _2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]
2508 template<
class V,
class M>
2510 BaseVectorSequence<V,M>::computeGeweke(
2511 const SequenceStatisticalOptions& statisticalOptions,
2512 const std::vector<unsigned int>& initialPosForStatistics,
2513 std::ofstream* passedOfs)
2516 struct timeval timevalTmp;
2517 iRC = gettimeofday(&timevalTmp, NULL);
2518 double tmpRunTime = 0.;
2520 if (m_env.subDisplayFile()) {
2521 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2522 <<
"\nComputing Geweke coefficients"
2526 std::vector<V*> vectorOfGeweke(initialPosForStatistics.size(),NULL);
2527 V gewVec(m_vectorSpace.zeroVector());
2528 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2529 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2530 this->geweke(initialPosition,
2531 statisticalOptions.gewekeNaRatio(),
2532 statisticalOptions.gewekeNbRatio(),
2534 vectorOfGeweke[initialPosId] =
new V(gewVec);
2537 if (m_env.subDisplayFile()) {
2538 *m_env.subDisplayFile() <<
"\nComputed Geweke coefficients with 10% and 50% percentages"
2539 <<
" (each column corresponds to a different initial position on the full chain)"
2545 *m_env.subDisplayFile() << line;
2546 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2547 sprintf(line,
"%10s%3d",
2549 initialPosForStatistics[initialPosId]);
2550 *m_env.subDisplayFile() << line;
2553 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2554 sprintf(line,
"\n%9.9s",
2555 m_vectorSpace.localComponentName(i).c_str() );
2556 *m_env.subDisplayFile() << line;
2557 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2558 sprintf(line,
"%2s%11.4e",
2560 (*(vectorOfGeweke[initialPosId]))[i]);
2561 *m_env.subDisplayFile() << line;
2564 *m_env.subDisplayFile() << std::endl;
2568 if (m_env.subDisplayFile()) {
2569 *m_env.subDisplayFile() <<
"Chain Geweke took " << tmpRunTime
2577 template<
class V,
class M>
2579 BaseVectorSequence<V,M>::computeMeanStacc(
2580 const SequenceStatisticalOptions& statisticalOptions,
2581 const std::vector<unsigned int>& initialPosForStatistics,
2582 std::ofstream* passedOfs)
2585 struct timeval timevalTmp;
2586 iRC = gettimeofday(&timevalTmp, NULL);
2587 double tmpRunTime = 0.;
2589 if (m_env.subDisplayFile()) {
2590 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2591 <<
"\nComputing mean statistical accuracy"
2595 std::vector<V*> vectorOfMeanStacc(initialPosForStatistics.size(),NULL);
2596 V meanStaccVec(m_vectorSpace.zeroVector());
2597 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2598 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2599 this->meanStacc(initialPosition,
2601 vectorOfMeanStacc[initialPosId] =
new V(meanStaccVec);
2604 if (m_env.subDisplayFile()) {
2605 *m_env.subDisplayFile() <<
"\nComputed mean statistical accuracy"
2606 <<
" (each column corresponds to a different initial position on the full chain)"
2612 *m_env.subDisplayFile() << line;
2613 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2614 sprintf(line,
"%10s%3d",
2616 initialPosForStatistics[initialPosId]);
2617 *m_env.subDisplayFile() << line;
2620 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2621 sprintf(line,
"\n%9.9s",
2622 m_vectorSpace.localComponentName(i).c_str() );
2623 *m_env.subDisplayFile() << line;
2624 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2625 sprintf(line,
"%2s%11.4e",
2627 (*(vectorOfMeanStacc[initialPosId]))[i]);
2628 *m_env.subDisplayFile() << line;
2631 *m_env.subDisplayFile() << std::endl;
2635 if (m_env.subDisplayFile()) {
2636 *m_env.subDisplayFile() <<
"Chain mean statistical accuracy took " << tmpRunTime
2643 #endif // #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
2649 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
2654 unsigned int subNumSamples,
2666 "ComputeCovCorrMatricesBetweenVectorSequences()",
2667 "parallel vectors not supported yet");
2672 UQ_FATAL_TEST_MACRO((numRowsLocal != pqCovMatrix.numRowsLocal()) || (numCols != pqCovMatrix.numCols()),
2674 "ComputeCovCorrMatricesBetweenVectorSequences()",
2675 "inconsistent dimensions for covariance matrix");
2677 UQ_FATAL_TEST_MACRO((numRowsLocal != pqCorrMatrix.numRowsLocal()) || (numCols != pqCorrMatrix.numCols()),
2679 "ComputeCorrelationBetweenVectorSequences()",
2680 "inconsistent dimensions for correlation matrix");
2684 "ComputeCovCorrMatricesBetweenVectorSequences()",
2685 "subNumSamples is too large");
2699 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2700 for (
unsigned j = 0; j < numCols; ++j) {
2701 pqCovMatrix(i,j) = 0.;
2704 for (
unsigned k = 0; k < subNumSamples; ++k) {
2707 tmpP -= unifiedMeanP;
2710 tmpQ -= unifiedMeanQ;
2712 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2713 for (
unsigned j = 0; j < numCols; ++j) {
2714 pqCovMatrix(i,j) += tmpP[i]*tmpQ[j];
2724 unifiedSampleVarianceP);
2730 unifiedSampleVarianceQ);
2733 if (useOnlyInter0Comm) {
2735 unsigned int unifiedNumSamples = 0;
2737 "ComputeCovCorrMatricesBetweenVectorSequences()",
2738 "failed MPI.Allreduce() for subNumSamples");
2740 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2741 for (
unsigned j = 0; j < numCols; ++j) {
2744 "ComputeCovCorrMatricesBetweenVectorSequences()",
2745 "failed MPI.Allreduce() for a matrix position");
2746 pqCovMatrix(i,j) = aux/((double) (unifiedNumSamples-1));
2750 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2751 for (
unsigned j = 0; j < numCols; ++j) {
2752 pqCorrMatrix(i,j) = pqCovMatrix(i,j)/std::sqrt(unifiedSampleVarianceP[i])/std::sqrt(unifiedSampleVarianceQ[j]);
2753 if (((pqCorrMatrix(i,j) + 1.) < -1.e-8) ||
2754 ((pqCorrMatrix(i,j) - 1.) > 1.e-8)) {
2756 std::cerr <<
"In ComputeCovCorrMatricesBetweenVectorSequences()"
2760 <<
", pqCorrMatrix(i,j)+1 = " << pqCorrMatrix(i,j)+1.
2761 <<
", pqCorrMatrix(i,j)-1 = " << pqCorrMatrix(i,j)-1.
2767 ((pqCorrMatrix(i,j) - 1.) > 1.e-8),
2769 "ComputeCovCorrMatricesBetweenVectorSequences()",
2770 "computed correlation is out of range");
2781 "ComputeCovCorrMatricesBetweenVectorSequences()",
2782 "parallel vectors not supported yet (2)");
const V & subMedianPlain() const
Finds the median value of the sub-sequence.
const std::string & name() const
Access to protected attribute m_name: name of the sequence of vectors.
Class representing a subset of a vector space shaped like a hypercube.
unsigned int dimGlobal() const
#define RawValue_MPI_DOUBLE
#define RawValue_MPI_UNSIGNED
int inter0Rank() const
Returns the process inter0 rank.
virtual void setPositionValues(unsigned int posId, const V &vec)=0
Set the values in vec at position posId of the sequence. See template specialization.
virtual void unifiedSampleVarianceExtra(unsigned int initialPos, unsigned int numPos, const V &unifiedMeanVec, V &unifiedSamVec) const =0
Finds the sample variance of the unified sequence, considering numPos positions starting at position ...
const T & subMaxPlain() const
Finds the maximum value of the sub-sequence of scalars.
int worldRank() const
Returns the process world rank.
const BoxSubset< V, M > & subBoxPlain() const
Finds a box subset of the sub-sequence (given by its min and max values calculated via subMinPlain an...
A class representing a vector space.
void setName(const std::string &newName)
Changes the name of the sequence of vectors.
virtual void resizeSequence(unsigned int newSubSequenceSize)=0
Resize the sequence. See template specialization.
const V & subMinPlain() const
Finds the minimum value of the sub-sequence.
const V & zeroVector() const
Returns a vector filled with zeros.
void Allreduce(void *sendbuf, void *recvbuf, int count, RawType_MPI_Datatype datatype, RawType_MPI_Op op, const char *whereMsg, const char *whatMsg) const
Combines values from all processes and distributes the result back to all processes.
const V & subMeanPlain() const
Finds the mean value of the sub-sequence.
const BoxSubset< V, M > & unifiedBoxPlain() const
Finds a box subset of the unified-sequence (given by the min and max values of the unified sequence c...
void append(const BaseVectorSequence< V, M > &src, unsigned int initialPos, unsigned int numPos)
Appends the vector src to this vector.
Class for matrix operations using GSL library.
Class for a Fast Fourier Transform (FFT) algorithm.
const V & unifiedSampleVariancePlain() const
Finds the variance of a sample of the unified sequence.
This (virtual) class sets up the environment underlying the use of the QUESO library by an executable...
unsigned int unifiedSequenceSize() const
Calculates the size of the unified sequence of vectors.
unsigned int vectorSizeLocal() const
Local dimension (size) of the vector space.
double MiscGetEllapsedSeconds(struct timeval *timeval0)
const V & subSampleVariancePlain() const
Finds the variance of a sample of the sub-sequence.
unsigned int dimLocal() const
void deleteStoredVectors()
Deletes all the stored vectors.
unsigned int numOfProcsForStorage() const
Returns total number of processes.
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
void MiscComputePositionsBetweenMinMax(V minValues, V maxValues, std::vector< V * > &positions)
const V & unifiedMinPlain() const
Finds the minimum value of the unified sequence.
const V & subMaxPlain() const
Finds the maximum value of the sub-sequence.
const VectorSpace< V, M > & m_vectorSpace
virtual void unifiedMeanExtra(unsigned int initialPos, unsigned int numPos, V &unifiedMeanVec) const =0
Finds the mean value of the unified sequence of numPos positions starting at position initialPos...
const V & unifiedMeanPlain() const
Finds the mean value of the unified sequence.
virtual void getPositionValues(unsigned int posId, V &vec) const =0
Gets the values of the sequence at position posId and stores them at vec. See template specialization...
const V & unifiedMedianPlain() const
Finds the median value of the unified sequence.
void Barrier() const
Pause every process in *this communicator until all the processes reach this point.
void setUniform(const V &aVec, const V &bVec)
Sets the values of the sequence as a uniform distribution between the values given by vectors aVec an...
void computeFilterParams(std::ofstream *passedOfs, unsigned int &initialPos, unsigned int &spacing)
Computes the filtering parameters spacing for the sequence of vectors.
Base class for handling vector and array samples (sequence of vectors or arrays). ...
void clear()
Reset the values and the size of the sequence of vectors.
double subPositionsOfMaximum(const ScalarSequence< double > &subCorrespondingScalarValues, BaseVectorSequence< V, M > &subPositionsOfMaximum)
Finds the positions where the maximum element occurs in the sub-sequence.
unsigned int subSequenceSize() const
Size of the sub-sequence of scalars.
void setGaussian(const V &meanVec, const V &stdDevVec)
Sets the values of the sequence as a Gaussian distribution of mean given by meanVec and standard devi...
const MpiComm & inter0Comm() const
Access function for MpiComm inter0-communicator.
void ComputeCovCorrMatricesBetweenVectorSequences(const BaseVectorSequence< P_V, P_M > &subPSeq, const BaseVectorSequence< Q_V, Q_M > &subQSeq, unsigned int subNumSamples, P_M &pqCovMatrix, P_M &pqCorrMatrix)
unsigned int vectorSizeGlobal() const
Global dimension (size) of the vector space.
const VectorSpace< V, M > & vectorSpace() const
Vector space; access to protected attribute VectorSpace<V,M>& m_vectorSpace.
virtual ~BaseVectorSequence()
Destructor.
void copy(const BaseVectorSequence< V, M > &src)
Copies vector sequence src to this.
BaseVectorSequence(const VectorSpace< V, M > &vectorSpace, unsigned int subSequenceSize, const std::string &name)
Default constructor.
const V & unifiedMaxPlain() const
Finds the maximum value of the unified sequence.
double unifiedPositionsOfMaximum(const ScalarSequence< double > &subCorrespondingScalarValues, BaseVectorSequence< V, M > &unifiedPositionsOfMaximum)
Finds the positions where the maximum element occurs in the unified sequence.
virtual unsigned int subSequenceSize() const =0
Size of the sub-sequence of vectors. See template specialization.