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()",
450 double subMaxValue = subCorrespondingScalarValues.
subMaxPlain();
455 double unifiedMaxValue;
456 std::vector<double> sendbufPos(1,0.);
457 for (
unsigned int i = 0; i < sendbufPos.size(); ++i) {
458 sendbufPos[i] = subMaxValue;
461 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
462 "failed MPI.Allreduce() for max");
468 for (
unsigned int i = 0; i < iMax; ++i) {
469 if (subCorrespondingScalarValues[i] == unifiedMaxValue) {
476 V tmpVec(this->vectorSpace().zeroVector());
479 for (
unsigned int i = 0; i < iMax; ++i) {
481 if (subCorrespondingScalarValues[i] == unifiedMaxValue) {
482 this->getPositionValues (i,tmpVec);
489 std::vector<int> auxBuf(1,0);
490 int unifiedNumPos = 0;
491 auxBuf[0] = subNumPos;
493 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
494 "failed MPI.Allreduce() for sum");
503 unsigned int Np = (
unsigned int) m_env.inter0Comm().NumProc();
505 std::vector<int> recvcntsPos(Np,0);
507 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
508 "failed MPI.Gatherv()");
509 if (m_env.inter0Rank() == 0) {
512 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
513 "failed MPI.Gather() result at proc 0 (recvcntsPos[0])");
517 std::vector<int> displsPos(Np,0);
518 for (
unsigned int nodeId = 1; nodeId < Np; ++nodeId) {
519 displsPos[nodeId] = displsPos[nodeId-1] + recvcntsPos[nodeId-1];
521 if (m_env.inter0Rank() == 0) {
524 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
525 "failed MPI.Gather() result at proc 0 (unifiedNumPos)");
536 unsigned int dimSize = m_vectorSpace.dimLocal();
537 int subNumDbs = subNumPos * dimSize;
538 std::vector<int> recvcntsDbs(Np,0);
540 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
541 "failed MPI.Gatherv()");
542 if (m_env.inter0Rank() == 0) {
545 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
546 "failed MPI.Gather() result at proc 0 (recvcntsDbs[0])");
551 std::vector<int> displsDbs(Np,0);
552 for (
unsigned int nodeId = 1; nodeId < Np; ++nodeId) {
553 displsDbs[nodeId] = displsDbs[nodeId-1] + recvcntsDbs[nodeId-1];
555 if (m_env.inter0Rank() == 0) {
556 UQ_FATAL_TEST_MACRO(((
int) (unifiedNumPos*dimSize)) != (displsDbs[Np - 1] + recvcntsDbs[Np - 1]),
558 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
559 "failed MPI.Gather() result at proc 0 (unifiedNumPos*dimSize)");
567 std::vector<double> sendbufDbs(subNumDbs,0.);
568 for (
unsigned int i = 0; i < (
unsigned int) subNumPos; ++i) {
570 for (
unsigned int j = 0; j < dimSize; ++j) {
571 sendbufDbs[i*dimSize + j] = tmpVec[j];
575 std::vector<double> recvbufDbs(unifiedNumPos * dimSize);
578 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,
579 "BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()",
580 "failed MPI.Gatherv()");
587 if (m_env.inter0Rank() == (int) 0) {
588 for (
unsigned int i = 0; i < (
unsigned int) unifiedNumPos; ++i) {
589 for (
unsigned int j = 0; j < dimSize; ++j) {
590 tmpVec[j] = recvbufDbs[i*dimSize + j];
601 if (m_env.subDisplayFile()) {
602 *m_env.subDisplayFile() <<
"Leaving BaseVectorSequence<V,M>::unifiedPositionsOfMaximum()"
606 return unifiedMaxValue;
609 template <
class V,
class M>
613 V gaussianVector(m_vectorSpace.zeroVector());
614 for (
unsigned int j = 0; j < this->subSequenceSize(); ++j) {
615 gaussianVector.cwSetGaussian(meanVec,stdDevVec);
616 this->setPositionValues(j,gaussianVector);
619 this->deleteStoredVectors();
624 template <
class V,
class M>
628 V uniformVector(m_vectorSpace.zeroVector());
629 for (
unsigned int j = 0; j < this->subSequenceSize(); ++j) {
630 uniformVector.cwSetUniform(aVec,bVec);
631 this->setPositionValues(j,uniformVector);
634 this->deleteStoredVectors();
639 template<
class V,
class M>
642 std::ofstream* passedOfs,
643 unsigned int& initialPos,
644 unsigned int& spacing)
646 if (m_env.subDisplayFile()) {
647 *m_env.subDisplayFile() <<
"\n"
648 <<
"\n-----------------------------------------------------"
649 <<
"\n Computing filter parameters for chain '" << m_name <<
"' ..."
650 <<
"\n-----------------------------------------------------"
655 bool okSituation = ((passedOfs == NULL ) ||
656 ((passedOfs != NULL) && (m_env.subRank() >= 0)));
659 "BaseVectorSequence<V,M>::computeFilterParams()",
660 "unexpected combination of file pointer and subRank");
665 if (m_env.subDisplayFile()) {
666 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
667 <<
"\n Finished computing filter parameters for chain '" << m_name <<
"'"
668 <<
": initialPos = " << initialPos
669 <<
", spacing = " << spacing
670 <<
"\n-----------------------------------------------------"
679 template <
class V,
class M>
687 "SequenceOfVectors<V,M>::copy()",
688 "incompatible vector space dimensions");
691 this->deleteStoredVectors();
701 #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS
702 template<
class V,
class M>
705 const SequenceStatisticalOptions& statisticalOptions,
706 std::ofstream* passedOfs)
708 if (m_env.subDisplayFile()) {
709 *m_env.subDisplayFile() <<
"\n"
710 <<
"\n-----------------------------------------------------"
711 <<
"\n Computing statistics for chain '" << m_name <<
"' ..."
712 <<
"\n-----------------------------------------------------"
717 bool okSituation = ((passedOfs == NULL ) ||
718 ((passedOfs != NULL) && (m_env.subRank() >= 0)));
721 "BaseVectorSequence<V,M>::computeStatistics()",
722 "unexpected combination of file pointer and subRank");
725 struct timeval timevalTmp;
726 iRC = gettimeofday(&timevalTmp, NULL);
727 double tmpRunTime = 0.;
730 std::vector<unsigned int> initialPosForStatistics(statisticalOptions.initialDiscardedPortions().size(),0);
731 for (
unsigned int i = 0; i < initialPosForStatistics.size(); ++i) {
732 initialPosForStatistics[i] = (
unsigned int) (statisticalOptions.initialDiscardedPortions()[i] * (double) (this->subSequenceSize()-1));
733 if (m_env.subDisplayFile()) {
734 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeStatistics()"
735 <<
": statisticalOptions.initialDiscardedPortions()[" << i <<
"] = " << statisticalOptions.initialDiscardedPortions()[i]
736 <<
", initialPosForStatistics[" << i <<
"] = " << initialPosForStatistics[i]
740 if (m_env.subDisplayFile()) {
741 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeStatistics(): initial positions for statistics =";
742 for (
unsigned int i = 0; i < initialPosForStatistics.size(); ++i) {
743 *m_env.subDisplayFile() <<
" " << initialPosForStatistics[i];
745 *m_env.subDisplayFile() << std::endl;
751 this->computeMeanVars(statisticalOptions,
758 #ifdef UQ_CODE_HAS_MONITORS
759 if (statisticalOptions.meanMonitorPeriod() != 0) {
760 this->computeMeanEvolution(statisticalOptions,
768 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
769 if ((statisticalOptions.bmmRun() ) &&
770 (initialPosForStatistics.size() > 0) &&
771 (statisticalOptions.bmmLengths().size() > 0)) {
772 this->computeBMM(statisticalOptions,
773 initialPosForStatistics,
780 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
781 if ((statisticalOptions.fftCompute() ) &&
782 (initialPosForStatistics.size() > 0)) {
783 this->computeFFT(statisticalOptions,
784 initialPosForStatistics,
791 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
792 if ((statisticalOptions.psdCompute() ) &&
793 (initialPosForStatistics.size() > 0)) {
794 this->computePSD(statisticalOptions,
795 initialPosForStatistics,
802 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
803 if ((statisticalOptions.psdAtZeroCompute() ) &&
804 (initialPosForStatistics.size() > 0) &&
805 (statisticalOptions.psdAtZeroNumBlocks().size() > 0)) {
806 this->computePSDAtZero(statisticalOptions,
807 initialPosForStatistics,
814 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
815 if ((statisticalOptions.gewekeCompute()) &&
816 (initialPosForStatistics.size() > 0)) {
817 this->computeGeweke(statisticalOptions,
818 initialPosForStatistics,
825 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
826 if ((statisticalOptions.meanStaccCompute()) &&
827 (initialPosForStatistics.size() > 0 )) {
828 this->computeMeanStacc(statisticalOptions,
829 initialPosForStatistics,
834 std::vector<unsigned int> lagsForCorrs(statisticalOptions.autoCorrNumLags(),1);
835 for (
unsigned int i = 1; i < lagsForCorrs.size(); ++i) {
836 lagsForCorrs[i] = statisticalOptions.autoCorrSecondLag() + (i-1)*statisticalOptions.autoCorrLagSpacing();
842 if ((statisticalOptions.autoCorrComputeViaDef()) &&
843 (initialPosForStatistics.size() > 0 ) &&
844 (lagsForCorrs.size() > 0 )) {
845 this->computeAutoCorrViaDef(statisticalOptions,
846 initialPosForStatistics,
854 if ((statisticalOptions.autoCorrComputeViaFft()) &&
855 (initialPosForStatistics.size() > 0 ) &&
856 (lagsForCorrs.size() > 0 )) {
857 this->computeAutoCorrViaFFT(statisticalOptions,
858 initialPosForStatistics,
866 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
867 if ((statisticalOptions.histCompute ()) ||
868 (statisticalOptions.cdfStaccCompute()) ||
869 (statisticalOptions.kdeCompute ())) {
871 if (statisticalOptions.kdeCompute())
873 this->computeHistCdfstaccKde(statisticalOptions,
880 if ((statisticalOptions.covMatrixCompute ()) ||
881 (statisticalOptions.corrMatrixCompute())) {
882 this->computeCovCorrMatrices(statisticalOptions,
887 if (m_env.subDisplayFile()) {
888 *m_env.subDisplayFile() <<
"All statistics of chain '" << m_name <<
"'"
889 <<
" took " << tmpRunTime
894 if (m_env.subDisplayFile()) {
895 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
896 <<
"\n Finished computing statistics for chain '" << m_name <<
"'"
897 <<
"\n-----------------------------------------------------"
905 template<
class V,
class M>
907 BaseVectorSequence<V,M>::computeMeanVars(
908 const SequenceStatisticalOptions& statisticalOptions,
909 std::ofstream* passedOfs,
916 struct timeval timevalTmp;
917 iRC = gettimeofday(&timevalTmp, NULL);
918 double tmpRunTime = 0.;
920 if (m_env.subDisplayFile()) {
921 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
922 <<
"\nComputing mean, sample variance and population variance"
926 V subChainMean(m_vectorSpace.zeroVector());
927 this->subMeanExtra(0,
928 this->subSequenceSize(),
931 V subChainMedian(m_vectorSpace.zeroVector());
932 this->subMedianExtra(0,
933 this->subSequenceSize(),
936 V subChainSampleVariance(m_vectorSpace.zeroVector());
937 this->subSampleVarianceExtra(0,
938 this->subSequenceSize(),
940 subChainSampleVariance);
942 if ((m_env.displayVerbosity() >= 5) && (m_env.subDisplayFile())) {
943 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeMeanVars()"
944 <<
": subChainMean.sizeLocal() = " << subChainMean.sizeLocal()
945 <<
", subChainMean = " << subChainMean
946 <<
", subChainMedian = " << subChainMedian
947 <<
", subChainSampleVariance.sizeLocal() = " << subChainSampleVariance.sizeLocal()
948 <<
", subChainSampleVariance = " << subChainSampleVariance
952 V estimatedVarianceOfSampleMean(subChainSampleVariance);
953 estimatedVarianceOfSampleMean /= (double) this->subSequenceSize();
954 bool savedVectorPrintState = estimatedVarianceOfSampleMean.getPrintHorizontally();
955 estimatedVarianceOfSampleMean.setPrintHorizontally(
false);
956 if (m_env.subDisplayFile()) {
957 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean for the whole chain '" << m_name <<
"'"
958 <<
", under independence assumption:"
960 << estimatedVarianceOfSampleMean
963 estimatedVarianceOfSampleMean.setPrintHorizontally(savedVectorPrintState);
965 V estimatedStdOfSampleMean(estimatedVarianceOfSampleMean);
966 estimatedStdOfSampleMean.cwSqrt();
967 savedVectorPrintState = estimatedStdOfSampleMean.getPrintHorizontally();
968 estimatedStdOfSampleMean.setPrintHorizontally(
false);
969 if (m_env.subDisplayFile()) {
970 *m_env.subDisplayFile() <<
"\nEstimated standard deviation of sample mean for the whole chain '" << m_name <<
"'"
971 <<
", under independence assumption:"
973 << estimatedStdOfSampleMean
976 estimatedStdOfSampleMean.setPrintHorizontally(savedVectorPrintState);
978 V subChainPopulationVariance(m_vectorSpace.zeroVector());
979 this->subPopulationVariance(0,
980 this->subSequenceSize(),
982 subChainPopulationVariance);
985 if (m_env.subDisplayFile()) {
986 *m_env.subDisplayFile() <<
"Sub Mean, median, and variances took " << tmpRunTime
991 if (m_env.subDisplayFile()) {
992 *m_env.subDisplayFile() <<
"\nSub mean, median, sample std, population std"
995 sprintf(line,
"%s%4s%s%6s%s%9s%s%9s%s",
1005 *m_env.subDisplayFile() << line;
1007 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1008 sprintf(line,
"\n%8.8s%2s%11.4e%2s%11.4e%2s%11.4e%2s%11.4e",
1009 m_vectorSpace.localComponentName(i).c_str(),
1015 std::sqrt(subChainSampleVariance[i]),
1017 std::sqrt(subChainPopulationVariance[i]));
1018 *m_env.subDisplayFile() << line;
1020 *m_env.subDisplayFile() << std::endl;
1023 if (subMeanPtr ) *subMeanPtr = subChainMean;
1024 if (subMedianPtr ) *subMedianPtr = subChainMedian;
1025 if (subSampleVarPtr) *subSampleVarPtr = subChainSampleVariance;
1026 if (subPopulVarPtr ) *subPopulVarPtr = subChainPopulationVariance;
1028 if (m_env.numSubEnvironments() > 1) {
1030 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1031 V unifiedChainMean(m_vectorSpace.zeroVector());
1032 this->unifiedMeanExtra(0,
1033 this->subSequenceSize(),
1036 V unifiedChainMedian(m_vectorSpace.zeroVector());
1037 this->unifiedMedianExtra(0,
1038 this->subSequenceSize(),
1039 unifiedChainMedian);
1041 V unifiedChainSampleVariance(m_vectorSpace.zeroVector());
1042 this->unifiedSampleVarianceExtra(0,
1043 this->subSequenceSize(),
1045 unifiedChainSampleVariance);
1047 V unifiedChainPopulationVariance(m_vectorSpace.zeroVector());
1048 this->unifiedPopulationVariance(0,
1049 this->subSequenceSize(),
1051 unifiedChainPopulationVariance);
1053 if (m_env.inter0Rank() == 0) {
1054 if (m_env.subDisplayFile()) {
1055 *m_env.subDisplayFile() <<
"\nUnif mean, median, sample std, population std"
1058 sprintf(line,
"%s%4s%s%6s%s%9s%s%9s%s",
1068 *m_env.subDisplayFile() << line;
1070 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1071 sprintf(line,
"\n%8.8s%2s%11.4e%2s%11.4e%2s%11.4e%2s%11.4e",
1072 m_vectorSpace.localComponentName(i).c_str(),
1074 unifiedChainMean[i],
1076 unifiedChainMedian[i],
1078 std::sqrt(unifiedChainSampleVariance[i]),
1080 std::sqrt(unifiedChainPopulationVariance[i]));
1081 *m_env.subDisplayFile() << line;
1083 *m_env.subDisplayFile() << std::endl;
1090 "BaseVectorSequence<V,M>::computeMeanVars()",
1091 "unified min-max writing, parallel vectors not supported yet");
1095 if (m_env.subDisplayFile()) {
1096 *m_env.subDisplayFile() <<
"\nEnded computing mean, sample variance and population variance"
1097 <<
"\n-----------------------------------------------------"
1104 template<
class V,
class M>
1106 BaseVectorSequence<V,M>::computeAutoCorrViaDef(
1107 const SequenceStatisticalOptions& statisticalOptions,
1108 const std::vector<unsigned int>& initialPosForStatistics,
1109 const std::vector<unsigned int>& lagsForCorrs,
1110 std::ofstream* passedOfs)
1113 struct timeval timevalTmp;
1114 iRC = gettimeofday(&timevalTmp, NULL);
1115 double tmpRunTime = 0.;
1117 if (m_env.subDisplayFile()) {
1118 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1119 <<
"\nComputing autocorrelation coefficients (via def)"
1123 if (statisticalOptions.autoCorrDisplay() && (m_env.subDisplayFile())) {
1124 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaDef(): lags for autocorrelation (via def) = ";
1125 for (
unsigned int i = 0; i < lagsForCorrs.size(); ++i) {
1126 *m_env.subDisplayFile() <<
" " << lagsForCorrs[i];
1128 *m_env.subDisplayFile() << std::endl;
1131 TwoDArray<V> _2dArrayOfAutoCorrs(initialPosForStatistics.size(),lagsForCorrs.size());
1132 for (
unsigned int i = 0; i < _2dArrayOfAutoCorrs.numRows(); ++i) {
1133 for (
unsigned int j = 0; j < _2dArrayOfAutoCorrs.numCols(); ++j) {
1134 _2dArrayOfAutoCorrs.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
1138 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1139 unsigned int initialPos = initialPosForStatistics[initialPosId];
1140 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1141 unsigned int lag = lagsForCorrs[lagId];
1142 this->autoCorrViaDef(initialPos,
1143 this->subSequenceSize()-initialPos,
1145 _2dArrayOfAutoCorrs(initialPosId,lagId));
1153 if ((statisticalOptions.autoCorrDisplay()) && (m_env.subDisplayFile())) {
1154 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1155 *m_env.subDisplayFile() <<
"\nComputed autocorrelation coefficients (via def), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1156 <<
" (each column corresponds to a different lag)"
1161 *m_env.subDisplayFile() << line;
1162 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1163 sprintf(line,
"%10s%3d",
1165 lagsForCorrs[lagId]);
1166 *m_env.subDisplayFile() << line;
1169 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1170 sprintf(line,
"\n%9.9s",
1171 m_vectorSpace.localComponentName(i).c_str() );
1172 *m_env.subDisplayFile() << line;
1173 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1174 sprintf(line,
"%2s%11.4e",
1176 _2dArrayOfAutoCorrs(initialPosId,lagId)[i]);
1177 *m_env.subDisplayFile() << line;
1180 *m_env.subDisplayFile() << std::endl;
1185 if (m_env.subDisplayFile()) {
1186 *m_env.subDisplayFile() <<
"Chain autocorrelation (via def) took " << tmpRunTime
1192 if (statisticalOptions.autoCorrWrite() && passedOfs) {
1193 std::ofstream& ofsvar = *passedOfs;
1194 ofsvar << m_name <<
"_corrViaDefLags_sub" << m_env.subIdString() <<
" = zeros(" << 1
1195 <<
"," << lagsForCorrs.size()
1198 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1199 ofsvar << m_name <<
"_corrViaDefLags_sub" << m_env.subIdString() <<
"(" << 1
1201 <<
") = " << lagsForCorrs[lagId]
1206 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1207 ofsvar << m_name <<
"_corrViaDefInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
1208 <<
"," << lagsForCorrs.size()
1211 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1212 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1213 ofsvar << m_name <<
"_corrViaDefInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
1215 <<
") = " << _2dArrayOfAutoCorrs(initialPosId,lagId)[i]
1226 template<
class V,
class M>
1228 BaseVectorSequence<V,M>::computeAutoCorrViaFFT(
1229 const SequenceStatisticalOptions& statisticalOptions,
1230 const std::vector<unsigned int>& initialPosForStatistics,
1231 const std::vector<unsigned int>& lagsForCorrs,
1232 std::ofstream* passedOfs)
1235 struct timeval timevalTmp;
1236 iRC = gettimeofday(&timevalTmp, NULL);
1237 double tmpRunTime = 0.;
1239 if (m_env.subDisplayFile()) {
1240 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1241 <<
"\nComputing autocorrelation coefficients (via fft)"
1245 if (statisticalOptions.autoCorrDisplay() && (m_env.subDisplayFile())) {
1246 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaFFT(): lags for autocorrelation (via fft) = ";
1247 for (
unsigned int i = 0; i < lagsForCorrs.size(); ++i) {
1248 *m_env.subDisplayFile() <<
" " << lagsForCorrs[i];
1250 *m_env.subDisplayFile() << std::endl;
1253 TwoDArray<V> _2dArrayOfAutoCorrs(initialPosForStatistics.size(),lagsForCorrs.size());
1254 for (
unsigned int i = 0; i < _2dArrayOfAutoCorrs.numRows(); ++i) {
1255 for (
unsigned int j = 0; j < _2dArrayOfAutoCorrs.numCols(); ++j) {
1256 _2dArrayOfAutoCorrs.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
1259 std::vector<V*> corrVecs(lagsForCorrs.size(),NULL);
1260 std::vector<V*> corrSumVecs(initialPosForStatistics.size(),NULL);
1261 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1262 corrSumVecs[initialPosId] =
new V(m_vectorSpace.zeroVector()) ;
1263 unsigned int initialPos = initialPosForStatistics[initialPosId];
1264 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1265 corrVecs[lagId] =
new V(m_vectorSpace.zeroVector()) ;
1267 if (m_env.subDisplayFile()) {
1268 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeAutoCorrViaFFT()"
1269 <<
": about to call chain.autoCorrViaFft()"
1270 <<
" with initialPos = " << initialPos
1271 <<
", numPos = " << this->subSequenceSize()-initialPos
1272 <<
", lagsForCorrs.size() = " << lagsForCorrs.size()
1273 <<
", corrVecs.size() = " << corrVecs.size()
1276 this->autoCorrViaFft(initialPos,
1277 this->subSequenceSize()-initialPos,
1280 this->autoCorrViaFft(initialPos,
1281 this->subSequenceSize()-initialPos,
1282 (
unsigned int) (1.0 * (
double) (this->subSequenceSize()-initialPos)),
1283 *corrSumVecs[initialPosId]);
1284 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1285 _2dArrayOfAutoCorrs(initialPosId,lagId) = *(corrVecs[lagId]);
1288 for (
unsigned int j = 0; j < corrVecs.size(); ++j) {
1289 if (corrVecs[j] != NULL)
delete corrVecs[j];
1292 if (statisticalOptions.autoCorrDisplay()) {
1293 V subChainMean (m_vectorSpace.zeroVector());
1294 V subChainSampleVariance (m_vectorSpace.zeroVector());
1295 V estimatedVarianceOfSampleMean(m_vectorSpace.zeroVector());
1296 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1297 unsigned int initialPos = initialPosForStatistics[initialPosId];
1299 this->subMeanExtra(initialPos,
1300 this->subSequenceSize()-initialPos,
1303 this->subSampleVarianceExtra(initialPos,
1304 this->subSequenceSize()-initialPos,
1306 subChainSampleVariance);
1308 if (m_env.subDisplayFile()) {
1309 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through autocorrelation (via fft), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1312 estimatedVarianceOfSampleMean.cwSet(-1.);
1313 estimatedVarianceOfSampleMean += 2.* (*corrSumVecs[initialPosId]);
1314 estimatedVarianceOfSampleMean *= subChainSampleVariance;
1315 estimatedVarianceOfSampleMean /= (double) (this->subSequenceSize() - initialPos);
1316 bool savedVectorPrintState = estimatedVarianceOfSampleMean.getPrintHorizontally();
1317 estimatedVarianceOfSampleMean.setPrintHorizontally(
false);
1318 if (m_env.subDisplayFile()) {
1319 *m_env.subDisplayFile() << estimatedVarianceOfSampleMean
1322 estimatedVarianceOfSampleMean.setPrintHorizontally(savedVectorPrintState);
1324 if (m_env.subDisplayFile()) {
1325 *m_env.subDisplayFile() <<
"\nComputed autocorrelation coefficients (via fft), for subchain beginning at position " << initialPosForStatistics[initialPosId]
1326 <<
" (each column corresponds to a different lag)"
1332 *m_env.subDisplayFile() << line;
1333 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1334 sprintf(line,
"%10s%3d",
1336 lagsForCorrs[lagId]);
1337 *m_env.subDisplayFile() << line;
1340 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1341 sprintf(line,
"\n%9.9s",
1342 m_vectorSpace.localComponentName(i).c_str() );
1343 *m_env.subDisplayFile() << line;
1344 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1345 sprintf(line,
"%2s%11.4e",
1347 _2dArrayOfAutoCorrs(initialPosId,lagId)[i]);
1348 *m_env.subDisplayFile() << line;
1351 *m_env.subDisplayFile() << std::endl;
1357 if (m_env.subDisplayFile()) {
1358 *m_env.subDisplayFile() <<
"Chain autocorrelation (via fft) took " << tmpRunTime
1364 if (statisticalOptions.autoCorrWrite() && passedOfs) {
1365 std::ofstream& ofsvar = *passedOfs;
1366 ofsvar << m_name <<
"_corrViaFftLags_sub" << m_env.subIdString() <<
" = zeros(" << 1
1367 <<
"," << lagsForCorrs.size()
1370 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1371 ofsvar << m_name <<
"_corrViaFftLags_sub" << m_env.subIdString() <<
"(" << 1
1373 <<
") = " << lagsForCorrs[lagId]
1378 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
1379 ofsvar << m_name <<
"_corrViaFftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
1380 <<
"," << lagsForCorrs.size()
1383 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1384 for (
unsigned int lagId = 0; lagId < lagsForCorrs.size(); lagId++) {
1385 ofsvar << m_name <<
"_corrViaFftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
1387 <<
") = " << _2dArrayOfAutoCorrs(initialPosId,lagId)[i]
1398 template<
class V,
class M>
1400 BaseVectorSequence<V,M>::computeHistCdfstaccKde(
1401 const SequenceStatisticalOptions& statisticalOptions,
1402 std::ofstream* passedOfs)
1404 if (m_env.subDisplayFile()) {
1405 *m_env.subDisplayFile() <<
"\n"
1406 <<
"\n-----------------------------------------------------"
1407 <<
"\n Computing histogram and/or cdf stacc and/or Kde for chain '" << m_name <<
"' ..."
1408 <<
"\n-----------------------------------------------------"
1414 struct timeval timevalTmp;
1419 double tmpRunTime = 0.;
1420 iRC = gettimeofday(&timevalTmp, NULL);
1421 if (m_env.subDisplayFile()) {
1422 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1423 <<
"\nComputing min and max for histograms and Kde"
1427 V statsMinPositions(m_vectorSpace.zeroVector());
1428 V statsMaxPositions(m_vectorSpace.zeroVector());
1429 this->subMinMaxExtra(0,
1430 this->subSequenceSize(),
1434 if (m_env.subDisplayFile()) {
1435 *m_env.subDisplayFile() <<
"\nComputed min values and max values for chain '" << m_name <<
"'"
1441 *m_env.subDisplayFile() << line;
1443 sprintf(line,
"%9s%s%9s%s",
1448 *m_env.subDisplayFile() << line;
1450 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1451 sprintf(line,
"\n%8.8s",
1452 m_vectorSpace.localComponentName(i).c_str() );
1453 *m_env.subDisplayFile() << line;
1455 sprintf(line,
"%2s%11.4e%2s%11.4e",
1457 statsMinPositions[i],
1459 statsMaxPositions[i]);
1460 *m_env.subDisplayFile() << line;
1462 *m_env.subDisplayFile() << std::endl;
1465 V unifiedStatsMinPositions(statsMinPositions);
1466 V unifiedStatsMaxPositions(statsMaxPositions);
1467 if (m_env.numSubEnvironments() > 1) {
1469 this->unifiedMinMaxExtra(0,
1470 this->subSequenceSize(),
1471 unifiedStatsMinPositions,
1472 unifiedStatsMaxPositions);
1475 if (m_env.subDisplayFile()) {
1476 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1477 if (m_env.inter0Rank() == 0) {
1478 *m_env.subDisplayFile() <<
"\nComputed unified min values and max values for chain '" << m_name <<
"'"
1484 *m_env.subDisplayFile() << line;
1486 sprintf(line,
"%9s%s%9s%s",
1491 *m_env.subDisplayFile() << line;
1493 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1494 sprintf(line,
"\n%8.8s",
1495 m_vectorSpace.localComponentName(i).c_str() );
1496 *m_env.subDisplayFile() << line;
1498 sprintf(line,
"%2s%11.4e%2s%11.4e",
1500 unifiedStatsMinPositions[i],
1502 unifiedStatsMaxPositions[i]);
1503 *m_env.subDisplayFile() << line;
1505 *m_env.subDisplayFile() << std::endl;
1511 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1512 "unified min-max writing, parallel vectors not supported yet");
1519 if (m_env.subDisplayFile()) {
1520 *m_env.subDisplayFile() <<
"Chain min and max took " << tmpRunTime
1528 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
1529 if ((statisticalOptions.histCompute() ) &&
1530 (statisticalOptions.histNumInternalBins() > 0)) {
1532 iRC = gettimeofday(&timevalTmp, NULL);
1533 if (m_env.subDisplayFile()) {
1534 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1535 <<
"\nComputing histograms"
1539 std::string subCoreName_HistCenters((std::string)(
"_HistCenters_sub")+m_env.subIdString());
1540 std::string uniCoreName_HistCenters((std::string)(
"_unifHistCenters_sub")+m_env.subIdString());
1541 if (m_env.numSubEnvironments() == 1) subCoreName_HistCenters = uniCoreName_HistCenters;
1543 std::string subCoreName_HistQuantts((std::string)(
"_HistQuantts_sub")+m_env.subIdString());
1544 std::string uniCoreName_HistQuantts((std::string)(
"_unifHistQuantts_sub")+m_env.subIdString());
1545 if (m_env.numSubEnvironments() == 1) subCoreName_HistQuantts = uniCoreName_HistQuantts;
1547 for (
unsigned int i = 0; i < statsMaxPositions.sizeLocal(); ++i) {
1548 statsMaxPositions[i] *= (1. + 1.e-15);
1552 std::vector<V*> histCentersForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1553 std::vector<V*> histQuanttsForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1554 this->subHistogram(0,
1557 histCentersForAllBins,
1558 histQuanttsForAllBins);
1562 std::ofstream& ofsvar = *passedOfs;
1563 ofsvar << m_name << subCoreName_HistCenters <<
" = zeros(" << this->vectorSizeLocal()
1564 <<
"," << histCentersForAllBins.size()
1567 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1568 for (
unsigned int j = 0; j < histCentersForAllBins.size(); ++j) {
1569 ofsvar << m_name << subCoreName_HistCenters <<
"(" << i+1
1571 <<
") = " << (*(histCentersForAllBins[j]))[i]
1577 ofsvar << m_name << subCoreName_HistQuantts <<
" = zeros(" << this->vectorSizeLocal()
1578 <<
"," << histQuanttsForAllBins.size()
1581 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1582 for (
unsigned int j = 0; j < histQuanttsForAllBins.size(); ++j) {
1583 ofsvar << m_name << subCoreName_HistQuantts <<
"(" << i+1
1585 <<
") = " << (*(histQuanttsForAllBins[j]))[i]
1592 for (
unsigned int i = 0; i < histQuanttsForAllBins.size(); ++i) {
1593 if (histQuanttsForAllBins[i] != NULL)
delete histQuanttsForAllBins[i];
1595 for (
unsigned int i = 0; i < histCentersForAllBins.size(); ++i) {
1596 if (histCentersForAllBins[i] != NULL)
delete histCentersForAllBins[i];
1599 std::vector<V*> unifiedHistCentersForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1600 std::vector<V*> unifiedHistQuanttsForAllBins(statisticalOptions.histNumInternalBins()+2,NULL);
1601 if (m_env.numSubEnvironments() > 1) {
1603 this->unifiedHistogram(0,
1604 unifiedStatsMinPositions,
1605 unifiedStatsMaxPositions,
1606 unifiedHistCentersForAllBins,
1607 unifiedHistQuanttsForAllBins);
1611 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1612 if (m_env.inter0Rank() == 0) {
1613 std::ofstream& ofsvar = *passedOfs;
1614 ofsvar << m_name << uniCoreName_HistCenters <<
" = zeros(" << this->vectorSizeLocal()
1615 <<
"," << unifiedHistCentersForAllBins.size()
1618 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1619 for (
unsigned int j = 0; j < unifiedHistCentersForAllBins.size(); ++j) {
1620 ofsvar << m_name << uniCoreName_HistCenters <<
"(" << i+1
1622 <<
") = " << (*(unifiedHistCentersForAllBins[j]))[i]
1628 ofsvar << m_name << uniCoreName_HistQuantts <<
" = zeros(" << this->vectorSizeLocal()
1629 <<
"," << unifiedHistQuanttsForAllBins.size()
1632 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1633 for (
unsigned int j = 0; j < unifiedHistQuanttsForAllBins.size(); ++j) {
1634 ofsvar << m_name << uniCoreName_HistQuantts <<
"(" << i+1
1636 <<
") = " << (*(unifiedHistQuanttsForAllBins[j]))[i]
1646 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1647 "unified histogram writing, parallel vectors not supported yet");
1651 for (
unsigned int i = 0; i < unifiedHistQuanttsForAllBins.size(); ++i) {
1652 if (unifiedHistQuanttsForAllBins[i] != NULL)
delete unifiedHistQuanttsForAllBins[i];
1654 for (
unsigned int i = 0; i < unifiedHistCentersForAllBins.size(); ++i) {
1655 if (unifiedHistCentersForAllBins[i] != NULL)
delete unifiedHistCentersForAllBins[i];
1661 if (m_env.subDisplayFile()) {
1662 *m_env.subDisplayFile() <<
"Chain histograms took " << tmpRunTime
1668 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
1672 if ((statisticalOptions.cdfStaccCompute() ) &&
1673 (statisticalOptions.cdfStaccNumEvalPositions() > 0)) {
1675 iRC = gettimeofday(&timevalTmp, NULL);
1676 if (m_env.subDisplayFile()) {
1677 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1678 <<
"\nComputing cdf statistical accuracy"
1682 std::vector<V*> cdfStaccEvalPositions(statisticalOptions.cdfStaccNumEvalPositions(),NULL);
1685 cdfStaccEvalPositions);
1687 std::vector<V*> cdfStaccValues(statisticalOptions.cdfStaccNumEvalPositions(),NULL);
1688 this->subCdfStacc(0,
1689 cdfStaccEvalPositions,
1694 if (m_env.subDisplayFile()) {
1695 *m_env.subDisplayFile() <<
"Chain cdf statistical accuracy took " << tmpRunTime
1704 if ((statisticalOptions.kdeCompute() ) &&
1705 (statisticalOptions.kdeNumEvalPositions() > 0)) {
1707 iRC = gettimeofday(&timevalTmp, NULL);
1708 if (m_env.subDisplayFile()) {
1709 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1710 <<
"\nComputing Kde"
1714 std::string subCoreName_GaussianKdePositions((std::string)(
"_GkdePosits_sub")+m_env.subIdString());
1715 std::string uniCoreName_GaussianKdePositions((std::string)(
"_unifGkdePosits_sub")+m_env.subIdString());
1716 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdePositions = uniCoreName_GaussianKdePositions;
1718 std::string subCoreName_GaussianKdeScaleVec ((std::string)(
"_GkdeScalev_sub")+m_env.subIdString());
1719 std::string uniCoreName_GaussianKdeScaleVec ((std::string)(
"_unifGkdeScalev_sub")+m_env.subIdString());
1720 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdeScaleVec = uniCoreName_GaussianKdeScaleVec;
1722 std::string subCoreName_GaussianKdeValues ((std::string)(
"_GkdeValues_sub")+m_env.subIdString());
1723 std::string uniCoreName_GaussianKdeValues ((std::string)(
"_unifGkdeValues_sub")+m_env.subIdString());
1724 if (m_env.numSubEnvironments() == 1) subCoreName_GaussianKdeValues = uniCoreName_GaussianKdeValues;
1726 V iqrVec(m_vectorSpace.zeroVector());
1727 this->subInterQuantileRange(0,
1730 V gaussianKdeScaleVec(m_vectorSpace.zeroVector());
1731 this->subScalesForKde(0,
1734 gaussianKdeScaleVec);
1736 std::vector<V*> kdeEvalPositions(statisticalOptions.kdeNumEvalPositions(),NULL);
1741 std::vector<V*> gaussianKdeDensities(statisticalOptions.kdeNumEvalPositions(),NULL);
1742 this->subGaussian1dKde(0,
1743 gaussianKdeScaleVec,
1745 gaussianKdeDensities);
1748 if (m_env.subDisplayFile()) {
1749 *m_env.subDisplayFile() <<
"\nComputed inter quantile ranges for chain '" << m_name <<
"'"
1755 *m_env.subDisplayFile() << line;
1757 sprintf(line,
"%9s%s",
1760 *m_env.subDisplayFile() << line;
1762 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1763 sprintf(line,
"\n%8.8s",
1764 m_vectorSpace.localComponentName(i).c_str() );
1765 *m_env.subDisplayFile() << line;
1767 sprintf(line,
"%2s%11.4e",
1770 *m_env.subDisplayFile() << line;
1772 *m_env.subDisplayFile() << std::endl;
1776 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1777 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1778 <<
", for chain '" << m_name <<
"'"
1779 <<
", about to write sub kde to ofstream with pointer = " << passedOfs
1783 std::ofstream& ofsvar = *passedOfs;
1784 ofsvar << m_name << subCoreName_GaussianKdePositions <<
" = zeros(" << this->vectorSizeLocal()
1785 <<
"," << kdeEvalPositions.size()
1788 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1789 for (
unsigned int j = 0; j < kdeEvalPositions.size(); ++j) {
1790 ofsvar << m_name << subCoreName_GaussianKdePositions <<
"(" << i+1
1792 <<
") = " << (*(kdeEvalPositions[j]))[i]
1798 ofsvar << m_name << subCoreName_GaussianKdeScaleVec <<
" = zeros(" << this->vectorSizeLocal()
1801 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1802 ofsvar << m_name << subCoreName_GaussianKdeScaleVec <<
"(" << i+1
1803 <<
") = " << gaussianKdeScaleVec[i]
1808 ofsvar << m_name << subCoreName_GaussianKdeValues <<
" = zeros(" << this->vectorSizeLocal()
1809 <<
"," << gaussianKdeDensities.size()
1812 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1813 for (
unsigned int j = 0; j < gaussianKdeDensities.size(); ++j) {
1814 ofsvar << m_name << subCoreName_GaussianKdeValues <<
"(" << i+1
1816 <<
") = " << (*(gaussianKdeDensities[j]))[i]
1823 for (
unsigned int i = 0; i < gaussianKdeDensities.size(); ++i) {
1824 if (gaussianKdeDensities[i] != NULL)
delete gaussianKdeDensities[i];
1826 for (
unsigned int i = 0; i < kdeEvalPositions.size(); ++i) {
1827 if (kdeEvalPositions[i] != NULL)
delete kdeEvalPositions[i];
1830 if ((
int) m_env.numSubEnvironments() > 1) {
1832 V unifiedIqrVec(m_vectorSpace.zeroVector());
1833 this->unifiedInterQuantileRange(0,
1837 V unifiedGaussianKdeScaleVec(m_vectorSpace.zeroVector());
1838 this->unifiedScalesForKde(0,
1841 unifiedGaussianKdeScaleVec);
1844 std::vector<V*> unifiedKdeEvalPositions(statisticalOptions.kdeNumEvalPositions(),NULL);
1846 unifiedStatsMaxPositions,
1847 unifiedKdeEvalPositions);
1849 std::vector<V*> unifiedGaussianKdeDensities(statisticalOptions.kdeNumEvalPositions(),NULL);
1850 this->unifiedGaussian1dKde(0,
1851 unifiedGaussianKdeScaleVec,
1852 unifiedKdeEvalPositions,
1853 unifiedGaussianKdeDensities);
1857 if (m_env.subDisplayFile()) {
1858 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1859 if (m_env.inter0Rank() == 0) {
1860 *m_env.subDisplayFile() <<
"\nComputed unified inter quantile ranges for chain '" << m_name <<
"'"
1866 *m_env.subDisplayFile() << line;
1868 sprintf(line,
"%9s%s",
1871 *m_env.subDisplayFile() << line;
1873 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1874 sprintf(line,
"\n%8.8s",
1875 m_vectorSpace.localComponentName(i).c_str() );
1876 *m_env.subDisplayFile() << line;
1878 sprintf(line,
"%2s%11.4e",
1881 *m_env.subDisplayFile() << line;
1883 *m_env.subDisplayFile() << std::endl;
1889 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1890 "unified iqr writing, parallel vectors not supported yet");
1895 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1896 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1897 <<
", for chain '" << m_name <<
"'"
1898 <<
", about to write unified kde to ofstream with pointer = " << passedOfs
1902 if (m_vectorSpace.numOfProcsForStorage() == 1) {
1903 if (m_env.inter0Rank() == 0) {
1904 std::ofstream& ofsvar = *passedOfs;
1905 ofsvar << m_name << uniCoreName_GaussianKdePositions <<
" = zeros(" << this->vectorSizeLocal()
1906 <<
"," << unifiedKdeEvalPositions.size()
1909 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() > 10)) {
1910 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeHistCdfstaccKde()"
1911 <<
", for chain '" << m_name <<
"'"
1912 <<
": just wrote '... = zeros(.,.);' line to output file, which has pointer = " << passedOfs
1915 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1916 for (
unsigned int j = 0; j < unifiedKdeEvalPositions.size(); ++j) {
1917 ofsvar << m_name << uniCoreName_GaussianKdePositions <<
"(" << i+1
1919 <<
") = " << (*(unifiedKdeEvalPositions[j]))[i]
1925 ofsvar << m_name << uniCoreName_GaussianKdeScaleVec <<
" = zeros(" << this->vectorSizeLocal()
1928 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1929 ofsvar << m_name << uniCoreName_GaussianKdeScaleVec <<
"(" << i+1
1930 <<
") = " << unifiedGaussianKdeScaleVec[i]
1935 ofsvar << m_name << uniCoreName_GaussianKdeValues <<
" = zeros(" << this->vectorSizeLocal()
1936 <<
"," << unifiedGaussianKdeDensities.size()
1939 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
1940 for (
unsigned int j = 0; j < unifiedGaussianKdeDensities.size(); ++j) {
1941 ofsvar << m_name << uniCoreName_GaussianKdeValues <<
"(" << i+1
1943 <<
") = " << (*(unifiedGaussianKdeDensities[j]))[i]
1953 "BaseVectorSequence<V,M>::computeHistCdfstaccKde()",
1954 "unified Kde writing, parallel vectors not supported yet");
1958 for (
unsigned int i = 0; i < unifiedGaussianKdeDensities.size(); ++i) {
1959 if (unifiedGaussianKdeDensities[i] != NULL)
delete unifiedGaussianKdeDensities[i];
1961 for (
unsigned int i = 0; i < unifiedKdeEvalPositions.size(); ++i) {
1962 if (unifiedKdeEvalPositions[i] != NULL)
delete unifiedKdeEvalPositions[i];
1968 if (m_env.subDisplayFile()) {
1969 *m_env.subDisplayFile() <<
"Chain Kde took " << tmpRunTime
1975 if (m_env.subDisplayFile()) {
1976 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
1977 <<
"\n Finished computing histogram and/or cdf stacc and/or Kde for chain '" << m_name <<
"'"
1978 <<
"\n-----------------------------------------------------"
1986 template<
class V,
class M>
1988 BaseVectorSequence<V,M>::computeCovCorrMatrices(
1989 const SequenceStatisticalOptions& statisticalOptions,
1990 std::ofstream* passedOfs)
1992 if (m_env.subDisplayFile()) {
1993 *m_env.subDisplayFile() <<
"\n"
1994 <<
"\n-----------------------------------------------------"
1995 <<
"\n Computing covariance and correlation matrices for chain '" << m_name <<
"' ..."
1996 <<
"\n-----------------------------------------------------"
2003 M* covarianceMatrix =
new M(m_env,
2004 m_vectorSpace.map(),
2005 m_vectorSpace.dimGlobal());
2006 M* correlationMatrix =
new M(m_env,
2007 m_vectorSpace.map(),
2008 m_vectorSpace.dimGlobal());
2012 this->subSequenceSize(),
2014 *correlationMatrix);
2016 if (m_env.subDisplayFile()) {
2017 if (m_vectorSpace.numOfProcsForStorage() == 1) {
2019 if (m_env.inter0Rank() == 0) {
2020 *m_env.subDisplayFile() <<
"\nBaseVectorSequence<V,M>::computeCovCorrMatrices"
2021 <<
", chain " << m_name
2022 <<
": contents of covariance matrix are\n" << *covarianceMatrix
2025 *m_env.subDisplayFile() <<
"\nBaseVectorSequence<V,M>::computeCovCorrMatrices"
2026 <<
", chain " << m_name
2027 <<
": contents of correlation matrix are\n" << *correlationMatrix
2034 "BaseVectorSequence<V,M>::computeCovCorrMatrices()",
2035 "parallel vectors not supported yet");
2039 delete correlationMatrix;
2040 delete covarianceMatrix;
2042 if (m_env.subDisplayFile()) {
2043 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2044 <<
"\n Finished computing covariance and correlation matrices for chain '" << m_name <<
"'"
2045 <<
"\n-----------------------------------------------------"
2052 #endif // #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS
2058 #ifdef UQ_CODE_HAS_MONITORS
2059 template<
class V,
class M>
2061 BaseVectorSequence<V,M>::computeMeanEvolution(
2062 const SequenceStatisticalOptions& statisticalOptions,
2063 std::ofstream* passedOfs)
2066 struct timeval timevalTmp;
2067 iRC = gettimeofday(&timevalTmp, NULL);
2068 double tmpRunTime = 0.;
2070 if (m_env.subDisplayFile()) {
2071 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2072 <<
"\nComputing mean evolution"
2076 unsigned int monitorPeriod = statisticalOptions.meanMonitorPeriod();
2077 unsigned int iMin = 0;
2078 unsigned int iMax = (
unsigned int) ( ((
double) this->subSequenceSize())/((double) monitorPeriod) );
2080 if (monitorPeriod == 1) {
2084 if (m_env.subDisplayFile()) {
2085 *m_env.subDisplayFile() <<
" Sub sequence size = " << this->subSequenceSize()
2086 <<
"\n Monitor period = " << monitorPeriod
2087 <<
"\n Number of monitoring positions = " << iMax
2091 this->subMeanMonitorAlloc(iMax);
2092 if (m_env.numSubEnvironments() > 1) {
2093 this->subMeanInter0MonitorAlloc(iMax);
2094 this->unifiedMeanMonitorAlloc(iMax);
2097 for (
unsigned int i = iMin; i < iMax; ++i) {
2098 unsigned int currentMonitoredFinalPosition = (i+1)*monitorPeriod - 1;
2099 V subMeanVec (m_vectorSpace.zeroVector());
2100 V subMeanCltStd(m_vectorSpace.zeroVector());
2101 this->subMeanMonitorRun(currentMonitoredFinalPosition,
2104 this->subMeanMonitorStore(i,
2105 currentMonitoredFinalPosition,
2109 if (m_env.numSubEnvironments() > 1) {
2110 V subMeanInter0Mean (m_vectorSpace.zeroVector());
2111 V subMeanInter0Clt95 (m_vectorSpace.zeroVector());
2112 V subMeanInter0Empirical90(m_vectorSpace.zeroVector());
2113 V subMeanInter0Min (m_vectorSpace.zeroVector());
2114 V subMeanInter0Max (m_vectorSpace.zeroVector());
2115 this->subMeanInter0MonitorRun(currentMonitoredFinalPosition,
2118 subMeanInter0Empirical90,
2121 this->subMeanInter0MonitorStore(i,
2122 currentMonitoredFinalPosition,
2125 subMeanInter0Empirical90,
2129 V unifiedMeanVec (m_vectorSpace.zeroVector());
2130 V unifiedMeanCltStd(m_vectorSpace.zeroVector());
2131 this->unifiedMeanMonitorRun(currentMonitoredFinalPosition,
2134 this->unifiedMeanMonitorStore(i,
2135 currentMonitoredFinalPosition,
2142 this->subMeanMonitorWrite(*passedOfs);
2143 if (m_env.numSubEnvironments() > 1) {
2144 this->subMeanInter0MonitorWrite(*passedOfs);
2145 this->unifiedMeanMonitorWrite(*passedOfs);
2149 this->subMeanMonitorFree();
2150 if (m_env.numSubEnvironments() > 1) {
2151 this->subMeanInter0MonitorFree();
2152 this->unifiedMeanMonitorFree();
2156 if (m_env.subDisplayFile()) {
2157 *m_env.subDisplayFile() <<
"Mean evolution took " << tmpRunTime
2164 #endif //#ifdef UQ_CODE_HAS_MONITORS
2171 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
2172 template<
class V,
class M>
2174 BaseVectorSequence<V,M>::computeBMM(
2175 const SequenceStatisticalOptions& statisticalOptions,
2176 const std::vector<unsigned int>& initialPosForStatistics,
2177 std::ofstream* passedOfs)
2180 struct timeval timevalTmp;
2181 iRC = gettimeofday(&timevalTmp, NULL);
2182 double tmpRunTime = 0.;
2184 if (m_env.subDisplayFile()) {
2185 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2186 <<
"\nComputing variance of sample mean through BMM"
2190 if (m_env.subDisplayFile()) {
2191 *m_env.subDisplayFile() <<
"In BaseVectorSequence<V,M>::computeBMM(): lengths for batchs in BMM =";
2192 for (
unsigned int i = 0; i < statisticalOptions.bmmLengths().size(); ++i) {
2193 *m_env.subDisplayFile() <<
" " << statisticalOptions.bmmLengths()[i];
2195 *m_env.subDisplayFile() << std::endl;
2198 TwoDArray<V> _2dArrayOfBMM(initialPosForStatistics.size(),statisticalOptions.bmmLengths().size());
2199 for (
unsigned int i = 0; i < _2dArrayOfBMM.numRows(); ++i) {
2200 for (
unsigned int j = 0; j < _2dArrayOfBMM.numCols(); ++j) {
2201 _2dArrayOfBMM.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
2204 V bmmVec(m_vectorSpace.zeroVector());
2205 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2206 unsigned int initialPos = initialPosForStatistics[initialPosId];
2207 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2208 unsigned int batchLength = statisticalOptions.bmmLengths()[batchLengthId];
2209 this->bmm(initialPos,
2212 _2dArrayOfBMM(initialPosId,batchLengthId) = bmmVec;
2216 if (m_env.subDisplayFile()) {
2217 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2218 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through batch means method, for subchain beginning at position " << initialPosForStatistics[initialPosId]
2219 <<
" (each column corresponds to a batch length)"
2225 *m_env.subDisplayFile() << line;
2226 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2227 sprintf(line,
"%10s%3d",
2229 statisticalOptions.bmmLengths()[batchLengthId]);
2230 *m_env.subDisplayFile() << line;
2233 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2234 sprintf(line,
"\n%9.9s",
2235 m_vectorSpace.localComponentName(i).c_str() );
2236 *m_env.subDisplayFile() << line;
2237 for (
unsigned int batchLengthId = 0; batchLengthId < statisticalOptions.bmmLengths().size(); batchLengthId++) {
2238 sprintf(line,
"%2s%11.4e",
2240 _2dArrayOfBMM(initialPosId,batchLengthId)[i]);
2241 *m_env.subDisplayFile() << line;
2244 *m_env.subDisplayFile() << std::endl;
2249 if (m_env.subDisplayFile()) {
2250 *m_env.subDisplayFile() <<
"Chain BMM took " << tmpRunTime
2258 template<
class V,
class M>
2260 BaseVectorSequence<V,M>::computeFFT(
2261 const SequenceStatisticalOptions& statisticalOptions,
2262 const std::vector<unsigned int>& initialPosForStatistics,
2263 std::ofstream* passedOfs)
2266 struct timeval timevalTmp;
2267 iRC = gettimeofday(&timevalTmp, NULL);
2268 double tmpRunTime = 0.;
2270 if (m_env.subDisplayFile()) {
2271 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2272 <<
"\nComputing FFT of chain on parameter of id = " << statisticalOptions.fftParamId()
2276 std::vector<std::complex<double> > forwardResult(0,std::complex<double>(0.,0.));
2277 std::vector<std::complex<double> > inverseResult(0,std::complex<double>(0.,0.));
2278 Fft<std::complex<double> > fftObj(m_env);
2279 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2280 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2281 this->fftForward(initialPosition,
2282 statisticalOptions.fftSize(),
2283 statisticalOptions.fftParamId(),
2286 if (statisticalOptions.fftWrite() && passedOfs) {
2287 std::ofstream& ofsvar = *passedOfs;
2288 ofsvar << m_name <<
"_fftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2289 <<
"," << forwardResult.size()
2292 for (
unsigned int j = 0; j < forwardResult.size(); ++j) {
2293 ofsvar << m_name <<
"_fftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2295 <<
") = " << forwardResult[j].real()
2296 <<
" + i*" << forwardResult[j].imag()
2302 if (statisticalOptions.fftTestInversion()) {
2303 fftObj.inverse(forwardResult,
2304 statisticalOptions.fftSize(),
2306 if (statisticalOptions.fftWrite() && passedOfs) {
2307 std::ofstream& ofsvar = *passedOfs;
2308 ofsvar << m_name <<
"_iftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2309 <<
"," << inverseResult.size()
2312 for (
unsigned int j = 0; j < inverseResult.size(); ++j) {
2313 ofsvar << m_name <<
"_iftInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2315 <<
") = " << inverseResult[j].real()
2316 <<
" + i*" << inverseResult[j].imag()
2325 if (m_env.subDisplayFile()) {
2326 *m_env.subDisplayFile() <<
"Chain FFT took " << tmpRunTime
2334 template<
class V,
class M>
2336 BaseVectorSequence<V,M>::computePSD(
2337 const SequenceStatisticalOptions& statisticalOptions,
2338 const std::vector<unsigned int>& initialPosForStatistics,
2339 std::ofstream* passedOfs)
2342 struct timeval timevalTmp;
2343 iRC = gettimeofday(&timevalTmp, NULL);
2344 double tmpRunTime = 0.;
2346 if (m_env.subDisplayFile()) {
2347 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2348 <<
"\nComputing PSD of chain on parameter of id = " << statisticalOptions.psdParamId()
2352 std::vector<double> psdResult(0,0.);
2353 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2354 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2355 this->psd(initialPosition,
2356 statisticalOptions.psdNumBlocks(),
2357 statisticalOptions.psdHopSizeRatio(),
2358 statisticalOptions.psdParamId(),
2361 if (statisticalOptions.psdWrite() && passedOfs) {
2362 std::ofstream& ofsvar = *passedOfs;
2363 ofsvar << m_name <<
"_psdInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << 1
2364 <<
"," << psdResult.size()
2367 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
2368 ofsvar << m_name <<
"_psdInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << 1
2370 <<
") = " << psdResult[j]
2378 if (m_env.subDisplayFile()) {
2379 *m_env.subDisplayFile() <<
"Chain PSD took " << tmpRunTime
2387 template<
class V,
class M>
2389 BaseVectorSequence<V,M>::computePSDAtZero(
2390 const SequenceStatisticalOptions& statisticalOptions,
2391 const std::vector<unsigned int>& initialPosForStatistics,
2392 std::ofstream* passedOfs)
2395 struct timeval timevalTmp;
2396 iRC = gettimeofday(&timevalTmp, NULL);
2397 double tmpRunTime = 0.;
2399 if (m_env.subDisplayFile()) {
2400 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2401 <<
"\nComputing PSD at frequency zero for all parameters"
2405 TwoDArray<V> _2dArrayOfPSDAtZero(initialPosForStatistics.size(),statisticalOptions.psdAtZeroNumBlocks().size());
2406 for (
unsigned int i = 0; i < _2dArrayOfPSDAtZero.numRows(); ++i) {
2407 for (
unsigned int j = 0; j < _2dArrayOfPSDAtZero.numCols(); ++j) {
2408 _2dArrayOfPSDAtZero.setLocation(i,j,
new V(m_vectorSpace.zeroVector()) );
2411 V psdVec(m_vectorSpace.zeroVector());
2412 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2413 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2414 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2415 unsigned int numBlocks = statisticalOptions.psdAtZeroNumBlocks()[numBlocksId];
2416 this->psdAtZero(initialPosition,
2418 statisticalOptions.psdAtZeroHopSizeRatio(),
2420 _2dArrayOfPSDAtZero(initialPosId,numBlocksId) = psdVec;
2425 if ((statisticalOptions.psdAtZeroDisplay()) && (m_env.subDisplayFile())) {
2426 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2427 unsigned int initialPos = initialPosForStatistics[initialPosId];
2428 *m_env.subDisplayFile() <<
"\nComputed PSD at frequency zero for subchain beginning at position " << initialPos
2429 <<
", so effective data size = " << this->subSequenceSize() - initialPos
2430 <<
" (each column corresponds to a number of blocks)"
2436 *m_env.subDisplayFile() << line;
2437 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2438 sprintf(line,
"%10s%3d",
2440 statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]);
2441 *m_env.subDisplayFile() << line;
2444 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2445 sprintf(line,
"\n%9.9s",
2446 m_vectorSpace.localComponentName(i).c_str() );
2447 *m_env.subDisplayFile() << line;
2448 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2449 sprintf(line,
"%2s%11.4e",
2451 _2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]);
2452 *m_env.subDisplayFile() << line;
2455 *m_env.subDisplayFile() << std::endl;
2460 if ( (m_env.subDisplayFile())) {
2461 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2462 unsigned int initialPos = initialPosForStatistics[initialPosId];
2463 *m_env.subDisplayFile() <<
"\nEstimated variance of sample mean, through psd, for subchain beginning at position " << initialPos
2464 <<
", so effective data size = " << this->subSequenceSize() - initialPos
2465 <<
" (each column corresponds to a number of blocks)"
2471 *m_env.subDisplayFile() << line;
2472 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2473 sprintf(line,
"%10s%3d",
2475 statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]);
2476 *m_env.subDisplayFile() << line;
2479 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2480 sprintf(line,
"\n%9.9s",
2481 m_vectorSpace.localComponentName(i).c_str() );
2482 *m_env.subDisplayFile() << line;
2483 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2484 sprintf(line,
"%2s%11.4e",
2486 2.*M_PI*_2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]/(
double) (this->subSequenceSize() - initialPos));
2487 *m_env.subDisplayFile() << line;
2490 *m_env.subDisplayFile() << std::endl;
2495 if (m_env.subDisplayFile()) {
2496 *m_env.subDisplayFile() <<
"Chain PSD at frequency zero took " << tmpRunTime
2502 if (statisticalOptions.psdAtZeroWrite() && passedOfs) {
2503 std::ofstream& ofsvar = *passedOfs;
2504 ofsvar << m_name <<
"_psdAtZeroNumBlocks_sub" << m_env.subIdString() <<
" = zeros(" << 1
2505 <<
"," << statisticalOptions.psdAtZeroNumBlocks().size()
2508 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2509 ofsvar << m_name <<
"_psdAtZeroNumBlocks_sub" << m_env.subIdString() <<
"(" << 1
2510 <<
"," << numBlocksId+1
2511 <<
") = " << statisticalOptions.psdAtZeroNumBlocks()[numBlocksId]
2516 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2517 ofsvar << m_name <<
"_psdAtZeroInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
" = zeros(" << this->vectorSizeLocal()
2518 <<
"," << statisticalOptions.psdAtZeroNumBlocks().size()
2521 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2522 for (
unsigned int numBlocksId = 0; numBlocksId < statisticalOptions.psdAtZeroNumBlocks().size(); numBlocksId++) {
2523 ofsvar << m_name <<
"_psdAtZeroInitPos" << initialPosForStatistics[initialPosId] <<
"_sub" << m_env.subIdString() <<
"(" << i+1
2524 <<
"," << numBlocksId+1
2525 <<
") = " << _2dArrayOfPSDAtZero(initialPosId,numBlocksId)[i]
2536 template<
class V,
class M>
2538 BaseVectorSequence<V,M>::computeGeweke(
2539 const SequenceStatisticalOptions& statisticalOptions,
2540 const std::vector<unsigned int>& initialPosForStatistics,
2541 std::ofstream* passedOfs)
2544 struct timeval timevalTmp;
2545 iRC = gettimeofday(&timevalTmp, NULL);
2546 double tmpRunTime = 0.;
2548 if (m_env.subDisplayFile()) {
2549 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2550 <<
"\nComputing Geweke coefficients"
2554 std::vector<V*> vectorOfGeweke(initialPosForStatistics.size(),NULL);
2555 V gewVec(m_vectorSpace.zeroVector());
2556 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2557 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2558 this->geweke(initialPosition,
2559 statisticalOptions.gewekeNaRatio(),
2560 statisticalOptions.gewekeNbRatio(),
2562 vectorOfGeweke[initialPosId] =
new V(gewVec);
2565 if (m_env.subDisplayFile()) {
2566 *m_env.subDisplayFile() <<
"\nComputed Geweke coefficients with 10% and 50% percentages"
2567 <<
" (each column corresponds to a different initial position on the full chain)"
2573 *m_env.subDisplayFile() << line;
2574 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2575 sprintf(line,
"%10s%3d",
2577 initialPosForStatistics[initialPosId]);
2578 *m_env.subDisplayFile() << line;
2581 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2582 sprintf(line,
"\n%9.9s",
2583 m_vectorSpace.localComponentName(i).c_str() );
2584 *m_env.subDisplayFile() << line;
2585 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2586 sprintf(line,
"%2s%11.4e",
2588 (*(vectorOfGeweke[initialPosId]))[i]);
2589 *m_env.subDisplayFile() << line;
2592 *m_env.subDisplayFile() << std::endl;
2596 if (m_env.subDisplayFile()) {
2597 *m_env.subDisplayFile() <<
"Chain Geweke took " << tmpRunTime
2605 template<
class V,
class M>
2607 BaseVectorSequence<V,M>::computeMeanStacc(
2608 const SequenceStatisticalOptions& statisticalOptions,
2609 const std::vector<unsigned int>& initialPosForStatistics,
2610 std::ofstream* passedOfs)
2613 struct timeval timevalTmp;
2614 iRC = gettimeofday(&timevalTmp, NULL);
2615 double tmpRunTime = 0.;
2617 if (m_env.subDisplayFile()) {
2618 *m_env.subDisplayFile() <<
"\n-----------------------------------------------------"
2619 <<
"\nComputing mean statistical accuracy"
2623 std::vector<V*> vectorOfMeanStacc(initialPosForStatistics.size(),NULL);
2624 V meanStaccVec(m_vectorSpace.zeroVector());
2625 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2626 unsigned int initialPosition = initialPosForStatistics[initialPosId];
2627 this->meanStacc(initialPosition,
2629 vectorOfMeanStacc[initialPosId] =
new V(meanStaccVec);
2632 if (m_env.subDisplayFile()) {
2633 *m_env.subDisplayFile() <<
"\nComputed mean statistical accuracy"
2634 <<
" (each column corresponds to a different initial position on the full chain)"
2640 *m_env.subDisplayFile() << line;
2641 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2642 sprintf(line,
"%10s%3d",
2644 initialPosForStatistics[initialPosId]);
2645 *m_env.subDisplayFile() << line;
2648 for (
unsigned int i = 0; i < this->vectorSizeLocal() ; ++i) {
2649 sprintf(line,
"\n%9.9s",
2650 m_vectorSpace.localComponentName(i).c_str() );
2651 *m_env.subDisplayFile() << line;
2652 for (
unsigned int initialPosId = 0; initialPosId < initialPosForStatistics.size(); initialPosId++) {
2653 sprintf(line,
"%2s%11.4e",
2655 (*(vectorOfMeanStacc[initialPosId]))[i]);
2656 *m_env.subDisplayFile() << line;
2659 *m_env.subDisplayFile() << std::endl;
2663 if (m_env.subDisplayFile()) {
2664 *m_env.subDisplayFile() <<
"Chain mean statistical accuracy took " << tmpRunTime
2671 #endif // #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
2677 template <
class P_V,
class P_M,
class Q_V,
class Q_M>
2682 unsigned int subNumSamples,
2694 "ComputeCovCorrMatricesBetweenVectorSequences()",
2695 "parallel vectors not supported yet");
2700 UQ_FATAL_TEST_MACRO((numRowsLocal != pqCovMatrix.numRowsLocal()) || (numCols != pqCovMatrix.numCols()),
2702 "ComputeCovCorrMatricesBetweenVectorSequences()",
2703 "inconsistent dimensions for covariance matrix");
2705 UQ_FATAL_TEST_MACRO((numRowsLocal != pqCorrMatrix.numRowsLocal()) || (numCols != pqCorrMatrix.numCols()),
2707 "ComputeCorrelationBetweenVectorSequences()",
2708 "inconsistent dimensions for correlation matrix");
2712 "ComputeCovCorrMatricesBetweenVectorSequences()",
2713 "subNumSamples is too large");
2727 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2728 for (
unsigned j = 0; j < numCols; ++j) {
2729 pqCovMatrix(i,j) = 0.;
2732 for (
unsigned k = 0; k < subNumSamples; ++k) {
2735 tmpP -= unifiedMeanP;
2738 tmpQ -= unifiedMeanQ;
2740 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2741 for (
unsigned j = 0; j < numCols; ++j) {
2742 pqCovMatrix(i,j) += tmpP[i]*tmpQ[j];
2752 unifiedSampleVarianceP);
2758 unifiedSampleVarianceQ);
2761 if (useOnlyInter0Comm) {
2763 unsigned int unifiedNumSamples = 0;
2765 "ComputeCovCorrMatricesBetweenVectorSequences()",
2766 "failed MPI.Allreduce() for subNumSamples");
2768 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2769 for (
unsigned j = 0; j < numCols; ++j) {
2772 "ComputeCovCorrMatricesBetweenVectorSequences()",
2773 "failed MPI.Allreduce() for a matrix position");
2774 pqCovMatrix(i,j) = aux/((double) (unifiedNumSamples-1));
2778 for (
unsigned i = 0; i < numRowsLocal; ++i) {
2779 for (
unsigned j = 0; j < numCols; ++j) {
2780 pqCorrMatrix(i,j) = pqCovMatrix(i,j)/std::sqrt(unifiedSampleVarianceP[i])/std::sqrt(unifiedSampleVarianceQ[j]);
2781 if (((pqCorrMatrix(i,j) + 1.) < -1.e-8) ||
2782 ((pqCorrMatrix(i,j) - 1.) > 1.e-8)) {
2784 std::cerr <<
"In ComputeCovCorrMatricesBetweenVectorSequences()"
2788 <<
", pqCorrMatrix(i,j)+1 = " << pqCorrMatrix(i,j)+1.
2789 <<
", pqCorrMatrix(i,j)-1 = " << pqCorrMatrix(i,j)-1.
2795 ((pqCorrMatrix(i,j) - 1.) > 1.e-8),
2797 "ComputeCovCorrMatricesBetweenVectorSequences()",
2798 "computed correlation is out of range");
2809 "ComputeCovCorrMatricesBetweenVectorSequences()",
2810 "parallel vectors not supported yet (2)");
unsigned int dimLocal() const
void clear()
Reset the values and the size of the sequence of vectors.
void append(const BaseVectorSequence< V, M > &src, unsigned int initialPos, unsigned int numPos)
Appends the vector src to this vector.
void deleteStoredVectors()
Deletes all the stored vectors.
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...
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...
Class for a Fast Fourier Transform (FFT) algorithm.
const V & unifiedSampleVariancePlain() const
Finds the variance of a sample of the unified sequence.
int inter0Rank() const
Returns the process inter0 rank.
virtual ~BaseVectorSequence()
Destructor.
const V & subMaxPlain() const
Finds the maximum value of the sub-sequence.
int worldRank() const
Returns the process world rank.
#define RawValue_MPI_DOUBLE
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.
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 VectorSpace< V, M > & m_vectorSpace
#define RawValue_MPI_UNSIGNED
This (virtual) class sets up the environment underlying the use of the QUESO library by an executable...
const V & unifiedMinPlain() const
Finds the minimum value of the unified sequence.
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.
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 ...
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)
virtual void resizeSequence(unsigned int newSubSequenceSize)=0
Resize the sequence. See template specialization.
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.
void Barrier() const
Pause every process in *this communicator until all the processes reach this point.
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...
const T & subMaxPlain() const
Finds the maximum value of the sub-sequence of scalars.
const V & unifiedMedianPlain() const
Finds the median value of the unified sequence.
unsigned int dimGlobal() const
Base class for handling vector and array samples (sequence of vectors or arrays). ...
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...
virtual unsigned int subSequenceSize() const =0
Size of the sub-sequence of vectors. See template specialization.
double subPositionsOfMaximum(const ScalarSequence< double > &subCorrespondingScalarValues, BaseVectorSequence< V, M > &subPositionsOfMaximum)
Finds the positions where the maximum element occurs in the sub-sequence.
unsigned int vectorSizeLocal() const
Local dimension (size) of the vector space.
const V & subSampleVariancePlain() const
Finds the variance of a sample of the sub-sequence.
unsigned int vectorSizeGlobal() const
Global dimension (size) of the vector space.
Class representing a subset of a vector space shaped like a hypercube.
const VectorSpace< V, M > & vectorSpace() const
Vector space; access to protected attribute VectorSpace<V,M>& m_vectorSpace.
A class representing a vector space.
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 & zeroVector() const
Returns a vector filled with zeros.
unsigned int subSequenceSize() const
Size of the sub-sequence of scalars.
const V & subMinPlain() const
Finds the minimum value of the sub-sequence.
const V & subMeanPlain() const
Finds the mean value of the sub-sequence.
unsigned int numOfProcsForStorage() const
Returns total number of processes.
const MpiComm & inter0Comm() const
Access function for MpiComm inter0-communicator.
#define UQ_FATAL_TEST_MACRO(test, givenRank, where, what)
double MiscGetEllapsedSeconds(struct timeval *timeval0)
const V & unifiedMeanPlain() const
Finds the mean value of the unified sequence.
unsigned int unifiedSequenceSize() const
Calculates the size of the unified sequence of vectors.
Class for matrix operations using GSL library.
void setName(const std::string &newName)
Changes the name of the sequence of vectors.
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...
void MiscComputePositionsBetweenMinMax(V minValues, V maxValues, std::vector< V * > &positions)