26 #include <queso/ScalarSequence.h>
34 unsigned int subSequenceSize,
35 const std::string& name)
39 m_seq (subSequenceSize,0.),
41 m_unifiedMinPlain (NULL),
43 m_unifiedMaxPlain (NULL),
44 m_subMeanPlain (NULL),
45 m_unifiedMeanPlain (NULL),
46 m_subMedianPlain (NULL),
47 m_unifiedMedianPlain (NULL),
48 m_subSampleVariancePlain (NULL),
49 m_unifiedSampleVariancePlain(NULL)
56 deleteStoredScalars();
71 if (posId >= this->subSequenceSize()) {
72 std::cerr <<
"In ScalarSequence<T>::operator[]() const"
73 <<
": posId = " << posId
74 <<
", this->subSequenceSize() = " << this->subSequenceSize()
86 if (posId >= this->subSequenceSize()) {
87 std::cerr <<
"In ScalarSequence<T>::operator[]()"
88 <<
": posId = " << posId
89 <<
", this->subSequenceSize() = " << this->subSequenceSize()
94 deleteStoredScalars();
125 unsigned int numPos = this->subSequenceSize();
127 this->resetValues(0,numPos);
128 this->resizeSequence(0);
145 if (m_env.numSubEnvironments() == 1) {
146 return this->subSequenceSize();
151 unsigned int unifiedNumSamples = 0;
152 if (useOnlyInter0Comm) {
153 if (m_env.inter0Rank() >= 0) {
154 unsigned int subNumSamples = this->subSequenceSize();
155 m_env.inter0Comm().template Allreduce<unsigned int>(&subNumSamples, &unifiedNumSamples, (int) 1,
RawValue_MPI_SUM,
156 "ScalarSequence<T>::unifiedSequenceSize()",
157 "failed MPI.Allreduce() for unifiedSequenceSize()");
161 unifiedNumSamples = this->subSequenceSize();
168 return unifiedNumSamples;
175 if (newSequenceSize != this->subSequenceSize()) {
176 m_seq.resize(newSequenceSize,0.);
177 std::vector<T>(m_seq).swap(m_seq);
178 deleteStoredScalars();
188 if (this->subSequenceSize() == 0)
return;
190 bool bRC = ((initialPos < this->subSequenceSize()) &&
192 ((initialPos+numPos) <= this->subSequenceSize()));
195 for (
unsigned int j = 0; j < numPos; ++j) {
196 m_seq[initialPos+j] = 0.;
199 deleteStoredScalars();
208 if (this->subSequenceSize() == 0)
return;
210 bool bRC = ((initialPos < this->subSequenceSize()) &&
212 ((initialPos+numPos) <= this->subSequenceSize()));
216 if (initialPos < this->subSequenceSize()) std::advance(posIteratorBegin,initialPos);
217 else posIteratorBegin = m_seq.end();
219 unsigned int posEnd = initialPos + numPos - 1;
221 if (posEnd < this->subSequenceSize()) std::advance(posIteratorEnd,posEnd);
222 else posIteratorEnd = m_seq.end();
224 unsigned int oldSequenceSize = this->subSequenceSize();
225 m_seq.erase(posIteratorBegin,posIteratorEnd);
226 queso_require_equal_to_msg((oldSequenceSize - numPos), this->subSequenceSize(),
"(oldSequenceSize - numPos) != this->subSequenceSize()");
228 deleteStoredScalars();
236 bool useOnlyInter0Comm,
237 std::vector<T>& outputVec)
const
245 if (useOnlyInter0Comm) {
246 if (m_env.inter0Rank() >= 0) {
247 int auxSubSize = (int) this->subSequenceSize();
248 unsigned int auxUnifiedSize = this->unifiedSequenceSize(useOnlyInter0Comm);
249 outputVec.resize(auxUnifiedSize,0.);
254 std::vector<int> recvcnts(m_env.inter0Comm().NumProc(),0);
255 m_env.inter0Comm().template Gather<int>(&auxSubSize, 1, &recvcnts[0], (int) 1, 0,
256 "ScalarSequence<T>::getUnifiedContentsAtProc0Only()",
257 "failed MPI.Gather()");
258 if (m_env.inter0Rank() == 0) {
263 std::vector<int> displs(m_env.inter0Comm().NumProc(),0);
264 for (
unsigned int r = 1; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
265 displs[r] = displs[r-1] + recvcnts[r-1];
268 #if 0 // for debug only
269 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
270 for (
unsigned int r = 0; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
271 *m_env.subDisplayFile() <<
" auxSubSize = " << auxSubSize
272 <<
", recvcnts[" << r <<
"] = " << recvcnts[r]
273 <<
", displs[" << r <<
"] = " << displs[r]
274 <<
", m_seq.size() = " << m_seq.size()
275 <<
", outputVec.size() = " << outputVec.size()
278 for (
unsigned int i = 0; i < m_seq.size(); ++i) {
279 *m_env.subDisplayFile() <<
" (before gatherv) m_seq[" << i <<
"]= " << m_seq[i]
285 m_env.inter0Comm().template Gatherv<double>(&m_seq[0], auxSubSize,
286 &outputVec[0], (
int *) &recvcnts[0], (
int *) &displs[0], 0,
287 "ScalarSequence<T>::getUnifiedContentsAtProc0Only()",
288 "failed MPI.Gatherv()");
290 #if 0 // for debug only
291 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
292 for (
unsigned int i = 0; i < m_seq.size(); ++i) {
293 *m_env.subDisplayFile() <<
" (after gatherv) m_seq[" << i <<
"]= " << m_seq[i]
296 for (
unsigned int i = 0; i < outputVec.size(); ++i) {
297 *m_env.subDisplayFile() <<
" (after gatherv) outputVec[" << i <<
"]= " << outputVec[i]
303 #if 0 // for debug only
304 if (m_env.inter0Rank() == 0) {
305 for (
unsigned int i = 0; i < auxSubSize; ++i) {
306 outputVec[i] = m_seq[i];
309 "ScalarSequence<T>::getUnifiedContentsAtProc0Only(1)",
310 "failed MPI.Gatherv()");
314 "ScalarSequence<T>::getUnifiedContentsAtProc0Only(2)",
315 "failed MPI.Gatherv()");
317 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
318 for (
unsigned int i = 0; i < m_seq.size(); ++i) {
319 *m_env.subDisplayFile() <<
" (after 2nd gatherv) m_seq[" << i <<
"]= " << m_seq[i]
322 for (
unsigned int i = 0; i < outputVec.size(); ++i) {
323 *m_env.subDisplayFile() <<
" (after 2nd gatherv) outputVec[" << i <<
"]= " << outputVec[i]
345 if (m_subMinPlain == NULL) {
346 m_subMinPlain =
new T(0.);
347 if (m_subMaxPlain == NULL) m_subMaxPlain =
new T(0.);
348 subMinMaxExtra(0,this->subSequenceSize(),*m_subMinPlain,*m_subMaxPlain);
351 return *m_subMinPlain;
358 if (m_unifiedMinPlain == NULL) {
359 m_unifiedMinPlain =
new T(0.);
360 if (m_unifiedMaxPlain == NULL) m_unifiedMaxPlain =
new T(0.);
361 unifiedMinMaxExtra(useOnlyInter0Comm,0,this->subSequenceSize(),*m_unifiedMinPlain,*m_unifiedMaxPlain);
364 return *m_unifiedMinPlain;
371 if (m_subMaxPlain == NULL) {
372 if (m_subMinPlain == NULL) m_subMinPlain =
new T(0.);
373 m_subMaxPlain =
new T(0.);
374 subMinMaxExtra(0,this->subSequenceSize(),*m_subMinPlain,*m_subMaxPlain);
377 return *m_subMaxPlain;
384 if (m_unifiedMaxPlain == NULL) {
385 if (m_unifiedMinPlain == NULL) m_unifiedMinPlain =
new T(0.);
386 m_unifiedMaxPlain =
new T(0.);
387 unifiedMinMaxExtra(useOnlyInter0Comm,0,this->subSequenceSize(),*m_unifiedMinPlain,*m_unifiedMaxPlain);
390 return *m_unifiedMaxPlain;
397 if (m_subMeanPlain == NULL) {
398 m_subMeanPlain =
new T(0.);
399 *m_subMeanPlain = subMeanExtra(0,subSequenceSize());
402 return *m_subMeanPlain;
409 if (m_unifiedMeanPlain == NULL) {
410 m_unifiedMeanPlain =
new T(0.);
411 *m_unifiedMeanPlain = unifiedMeanExtra(useOnlyInter0Comm,0,subSequenceSize());
414 return *m_unifiedMeanPlain;
421 if (m_subMedianPlain == NULL) {
422 m_subMedianPlain =
new T(0.);
423 *m_subMedianPlain = subMedianExtra(0,subSequenceSize());
426 return *m_subMedianPlain;
433 if (m_unifiedMedianPlain == NULL) {
434 m_unifiedMedianPlain =
new T(0.);
435 *m_unifiedMedianPlain = unifiedMedianExtra(useOnlyInter0Comm,0,subSequenceSize());
438 return *m_unifiedMedianPlain;
445 if (m_subSampleVariancePlain == NULL) {
446 m_subSampleVariancePlain =
new T(0.);
447 *m_subSampleVariancePlain = subSampleVarianceExtra(0,subSequenceSize(),subMeanPlain());
450 return *m_subSampleVariancePlain;
457 if (m_unifiedSampleVariancePlain == NULL) {
458 m_unifiedSampleVariancePlain =
new T(0.);
459 *m_unifiedSampleVariancePlain = unifiedSampleVarianceExtra(useOnlyInter0Comm,0,subSequenceSize(),unifiedMeanPlain(useOnlyInter0Comm));
462 return *m_unifiedSampleVariancePlain;
470 delete m_subMinPlain;
471 m_subMinPlain = NULL;
473 if (m_unifiedMinPlain) {
474 delete m_unifiedMinPlain;
475 m_unifiedMinPlain = NULL;
478 delete m_subMaxPlain;
479 m_subMaxPlain = NULL;
481 if (m_unifiedMaxPlain) {
482 delete m_unifiedMaxPlain;
483 m_unifiedMaxPlain = NULL;
485 if (m_subMeanPlain) {
486 delete m_subMeanPlain;
487 m_subMeanPlain = NULL;
489 if (m_unifiedMeanPlain) {
490 delete m_unifiedMeanPlain;
491 m_unifiedMeanPlain = NULL;
493 if (m_subMedianPlain) {
494 delete m_subMedianPlain;
495 m_subMedianPlain = NULL;
497 if (m_unifiedMedianPlain) {
498 delete m_unifiedMedianPlain;
499 m_unifiedMedianPlain = NULL;
501 if (m_subSampleVariancePlain) {
502 delete m_subSampleVariancePlain;
503 m_subSampleVariancePlain = NULL;
505 if (m_unifiedSampleVariancePlain) {
506 delete m_unifiedSampleVariancePlain;
507 m_unifiedSampleVariancePlain = NULL;
517 unsigned int maxJ = this->subSequenceSize();
518 if (meanValue == 0.) {
519 for (
unsigned int j = 0; j < maxJ; ++j) {
520 m_seq[j] = m_env.rngObject()->gaussianSample(stdDev);
524 for (
unsigned int j = 0; j < maxJ; ++j) {
525 m_seq[j] = meanValue + m_env.rngObject()->gaussianSample(stdDev);
529 deleteStoredScalars();
538 unsigned int maxJ = this->subSequenceSize();
541 for (
unsigned int j = 0; j < maxJ; ++j) {
542 m_seq[j] = m_env.rngObject()->uniformSample();
546 for (
unsigned int j = 0; j < maxJ; ++j) {
547 m_seq[j] = b*m_env.rngObject()->uniformSample();
553 for (
unsigned int j = 0; j < maxJ; ++j) {
554 m_seq[j] = a + m_env.rngObject()->uniformSample();
558 for (
unsigned int j = 0; j < maxJ; ++j) {
559 m_seq[j] = a + (b-a)*m_env.rngObject()->uniformSample();
564 deleteStoredScalars();
572 unsigned int numEvaluationPoints,
575 std::vector<T>& cdfValues)
const
579 std::vector<T> centers(numEvaluationPoints,0.);
580 std::vector<unsigned int> bins (numEvaluationPoints,0);
583 this->subSequenceSize(),
592 minDomainValue = centers[0];
593 maxDomainValue = centers[centers.size()-1];
595 unsigned int sumOfBins = 0;
596 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
597 sumOfBins += bins[i];
601 cdfValues.resize(numEvaluationPoints);
602 unsigned int partialSum = 0;
603 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
604 partialSum += bins[i];
605 cdfValues[i] = ((T) partialSum)/((T) sumOfBins);
614 bool useOnlyInter0Comm,
615 unsigned int numEvaluationPoints,
616 T& unifiedMinDomainValue,
617 T& unifiedMaxDomainValue,
618 std::vector<T>& unifiedCdfValues)
const
620 if (m_env.numSubEnvironments() == 1) {
621 return this->subUniformlySampledCdf(numEvaluationPoints,
622 unifiedMinDomainValue,
623 unifiedMaxDomainValue,
630 if (useOnlyInter0Comm) {
631 if (m_env.inter0Rank() >= 0) {
632 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
633 *m_env.subDisplayFile() <<
"Entering ScalarSequence<T>::unifiedUniformlySampledCdf()"
637 T unifiedTmpMinValue;
638 T unifiedTmpMaxValue;
639 std::vector<T> unifiedCenters(numEvaluationPoints,0.);
640 std::vector<unsigned int> unifiedBins (numEvaluationPoints,0);
642 this->unifiedMinMaxExtra(useOnlyInter0Comm,
644 this->subSequenceSize(),
647 this->unifiedHistogram(useOnlyInter0Comm,
654 unifiedMinDomainValue = unifiedCenters[0];
655 unifiedMaxDomainValue = unifiedCenters[unifiedCenters.size()-1];
657 unsigned int unifiedTotalSumOfBins = 0;
658 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
659 unifiedTotalSumOfBins += unifiedBins[i];
662 std::vector<unsigned int> unifiedPartialSumsOfBins(numEvaluationPoints,0);
663 unifiedPartialSumsOfBins[0] = unifiedBins[0];
664 for (
unsigned int i = 1; i < numEvaluationPoints; ++i) {
665 unifiedPartialSumsOfBins[i] = unifiedPartialSumsOfBins[i-1] + unifiedBins[i];
668 unifiedCdfValues.clear();
669 unifiedCdfValues.resize(numEvaluationPoints);
670 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
671 unifiedCdfValues[i] = ((T) unifiedPartialSumsOfBins[i])/((T) unifiedTotalSumOfBins);
674 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
675 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
676 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedUniformlySampledCdf()"
678 <<
", unifiedTmpMinValue = " << unifiedTmpMinValue
679 <<
", unifiedTmpMaxValue = " << unifiedTmpMaxValue
680 <<
", unifiedBins = " << unifiedBins[i]
681 <<
", unifiedCdfValue = " << unifiedCdfValues[i]
682 <<
", unifiedPartialSumsOfBins = " << unifiedPartialSumsOfBins[i]
683 <<
", unifiedTotalSumOfBins = " << unifiedTotalSumOfBins
688 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
689 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<T>::unifiedUniformlySampledCdf()"
695 this->subUniformlySampledCdf(numEvaluationPoints,
696 unifiedMinDomainValue,
697 unifiedMaxDomainValue,
713 unsigned int numEvaluationPoints,
715 std::vector<T>& cdfValues)
const
719 std::vector<unsigned int> bins(numEvaluationPoints,0);
722 this->subSequenceSize(),
731 unsigned int sumOfBins = 0;
732 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
733 sumOfBins += bins[i];
737 cdfValues.resize(numEvaluationPoints);
738 unsigned int partialSum = 0;
739 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
740 partialSum += bins[i];
741 cdfValues[i] = ((T) partialSum)/((T) sumOfBins);
750 unsigned int numEvaluationPoints,
751 std::vector<T>& gridValues,
752 std::vector<T>& cdfValues)
const
756 std::vector<unsigned int> bins(numEvaluationPoints,0);
757 gridValues.resize (numEvaluationPoints,0.);
758 cdfValues.resize (numEvaluationPoints,0.);
761 this->subSequenceSize(),
765 if (tmpMinValue == tmpMaxValue) {
766 if (tmpMinValue < -1.e-12) {
767 tmpMinValue += tmpMinValue*(1.e-8);
769 else if (tmpMinValue > 1.e-12) {
770 tmpMinValue -= tmpMinValue*(1.e-8);
773 tmpMinValue = 1.e-12;
777 subWeightHistogram(0,
783 unsigned int sumOfBins = 0;
784 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
785 sumOfBins += bins[i];
789 cdfValues.resize(numEvaluationPoints);
790 unsigned int partialSum = 0;
791 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
792 partialSum += bins[i];
793 cdfValues[i] = ((T) partialSum)/((T) sumOfBins);
802 unsigned int numEvaluationPoints,
804 std::vector<T>& cdfValues)
const
808 std::vector<unsigned int> bins(numEvaluationPoints,0);
811 this->subSequenceSize(),
814 subWeightHistogram(0,
820 unsigned int sumOfBins = 0;
821 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
822 sumOfBins += bins[i];
826 cdfValues.resize(numEvaluationPoints);
827 unsigned int partialSum = 0;
828 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
829 partialSum += bins[i];
830 cdfValues[i] = ((T) partialSum)/((T) sumOfBins);
839 unsigned int initialPos,
840 unsigned int numPos)
const
842 if (this->subSequenceSize() == 0)
return 0.;
844 bool bRC = ((initialPos < this->subSequenceSize()) &&
846 ((initialPos+numPos) <= this->subSequenceSize()));
848 std::cerr <<
"In ScalarSequence<T>::subMeanExtra()"
849 <<
": ERROR at fullRank " << m_env.fullRank()
850 <<
", initialPos = " << initialPos
851 <<
", numPos = " << numPos
852 <<
", this->subSequenceSize() = " << this->subSequenceSize()
854 if (m_env.subDisplayFile()) {
855 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::subMeanExtra()"
856 <<
": ERROR at fullRank " << m_env.fullRank()
857 <<
", initialPos = " << initialPos
858 <<
", numPos = " << numPos
859 <<
", this->subSequenceSize() = " << this->subSequenceSize()
865 unsigned int finalPosPlus1 = initialPos + numPos;
867 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
871 return tmpSum/(T) numPos;
877 bool useOnlyInter0Comm,
878 unsigned int initialPos,
879 unsigned int numPos)
const
881 if (m_env.numSubEnvironments() == 1) {
882 return this->subMeanExtra(initialPos,
888 T unifiedMeanValue = 0.;
889 if (useOnlyInter0Comm) {
890 if (m_env.inter0Rank() >= 0) {
891 bool bRC = ((initialPos < this->subSequenceSize()) &&
893 ((initialPos+numPos) <= this->subSequenceSize()));
896 unsigned int finalPosPlus1 = initialPos + numPos;
898 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
899 localSum += m_seq[j];
902 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
903 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedMeanExtra()"
904 <<
": initialPos = " << initialPos
905 <<
", numPos = " << numPos
906 <<
", before MPI.Allreduce"
912 unsigned int unifiedNumPos = 0;
913 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
914 "ScalarSequence<T>::unifiedMeanExtra()",
915 "failed MPI.Allreduce() for numPos");
917 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
918 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedMeanExtra()"
919 <<
": numPos = " << numPos
920 <<
", unifiedNumPos = " << unifiedNumPos
924 m_env.inter0Comm().template Allreduce<double>(&localSum, &unifiedMeanValue, (int) 1,
RawValue_MPI_SUM,
925 "ScalarSequence<T>::unifiedMeanExtra()",
926 "failed MPI.Allreduce() for sum");
928 unifiedMeanValue /= ((T) unifiedNumPos);
930 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
931 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedMeanExtra()"
932 <<
": localSum = " << localSum
933 <<
", unifiedMeanValue = " << unifiedMeanValue
939 this->subMeanExtra(initialPos,
949 return unifiedMeanValue;
955 unsigned int initialPos,
956 unsigned int numPos)
const
958 if (this->subSequenceSize() == 0)
return 0.;
960 bool bRC = ((initialPos < this->subSequenceSize()) &&
962 ((initialPos+numPos) <= this->subSequenceSize()));
964 std::cerr <<
"In ScalarSequence<T>::subMedianExtra()"
965 <<
": ERROR at fullRank " << m_env.fullRank()
966 <<
", initialPos = " << initialPos
967 <<
", numPos = " << numPos
968 <<
", this->subSequenceSize() = " << this->subSequenceSize()
970 if (m_env.subDisplayFile()) {
971 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::subMedianExtra()"
972 <<
": ERROR at fullRank " << m_env.fullRank()
973 <<
", initialPos = " << initialPos
974 <<
", numPos = " << numPos
975 <<
", this->subSequenceSize() = " << this->subSequenceSize()
983 this->extractScalarSeq(initialPos,
989 unsigned int tmpPos = (
unsigned int) (0.5 * (
double) numPos);
990 T resultValue = sortedSequence[tmpPos];
998 bool useOnlyInter0Comm,
999 unsigned int initialPos,
1000 unsigned int numPos)
const
1002 if (m_env.numSubEnvironments() == 1) {
1003 return this->subMedianExtra(initialPos,
1009 T unifiedMedianValue = 0.;
1010 if (useOnlyInter0Comm) {
1011 if (m_env.inter0Rank() >= 0) {
1012 bool bRC = ((initialPos < this->subSequenceSize()) &&
1014 ((initialPos+numPos) <= this->subSequenceSize()));
1018 this->unifiedSort(useOnlyInter0Comm,
1020 unifiedSortedSequence);
1021 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
1022 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedMedianExtra()"
1023 <<
", unifiedMedianValue = " << unifiedMedianValue
1029 this->subMedianExtra(initialPos,
1039 return unifiedMedianValue;
1045 unsigned int initialPos,
1046 unsigned int numPos,
1047 const T& meanValue)
const
1049 if (this->subSequenceSize() == 0)
return 0.;
1051 bool bRC = ((initialPos < this->subSequenceSize()) &&
1053 ((initialPos+numPos) <= this->subSequenceSize()));
1056 unsigned int finalPosPlus1 = initialPos + numPos;
1059 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1060 diff = m_seq[j] - meanValue;
1061 samValue += diff*diff;
1064 samValue /= (((T) numPos) - 1.);
1072 bool useOnlyInter0Comm,
1073 unsigned int initialPos,
1074 unsigned int numPos,
1075 const T& unifiedMeanValue)
const
1077 if (m_env.numSubEnvironments() == 1) {
1078 return this->subSampleVarianceExtra(initialPos,
1085 T unifiedSamValue = 0.;
1086 if (useOnlyInter0Comm) {
1087 if (m_env.inter0Rank() >= 0) {
1088 bool bRC = ((initialPos < this->subSequenceSize()) &&
1090 ((initialPos+numPos) <= this->subSequenceSize()));
1093 unsigned int finalPosPlus1 = initialPos + numPos;
1095 T localSamValue = 0.;
1096 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1097 diff = m_seq[j] - unifiedMeanValue;
1098 localSamValue += diff*diff;
1101 unsigned int unifiedNumPos = 0;
1102 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
1103 "ScalarSequence<T>::unifiedSampleVarianceExtra()",
1104 "failed MPI.Allreduce() for numPos");
1106 m_env.inter0Comm().template Allreduce<double>(&localSamValue, &unifiedSamValue, (int) 1,
RawValue_MPI_SUM,
1107 "ScalarSequence<T>::unifiedSampleVarianceExtra()",
1108 "failed MPI.Allreduce() for samValue");
1110 unifiedSamValue /= (((T) unifiedNumPos) - 1.);
1114 this->subSampleVarianceExtra(initialPos,
1125 return unifiedSamValue;
1131 unsigned int initialPos,
1132 unsigned int numPos,
1133 const T& meanValue)
const
1135 if (this->subSequenceSize() == 0)
return 0.;
1137 bool bRC = ((initialPos < this->subSequenceSize()) &&
1139 ((initialPos+numPos) <= this->subSequenceSize()));
1142 unsigned int finalPosPlus1 = initialPos + numPos;
1145 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1146 diff = m_seq[j] - meanValue;
1147 stdValue += diff*diff;
1150 stdValue /= (((T) numPos) - 1.);
1151 stdValue = sqrt(stdValue);
1159 bool useOnlyInter0Comm,
1160 unsigned int initialPos,
1161 unsigned int numPos,
1162 const T& unifiedMeanValue)
const
1164 if (m_env.numSubEnvironments() == 1) {
1165 return this->subSampleStd(initialPos,
1172 T unifiedStdValue = 0.;
1173 if (useOnlyInter0Comm) {
1174 if (m_env.inter0Rank() >= 0) {
1175 bool bRC = ((initialPos < this->subSequenceSize()) &&
1177 ((initialPos+numPos) <= this->subSequenceSize()));
1180 unsigned int finalPosPlus1 = initialPos + numPos;
1182 T localStdValue = 0.;
1183 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1184 diff = m_seq[j] - unifiedMeanValue;
1185 localStdValue += diff*diff;
1188 unsigned int unifiedNumPos = 0;
1189 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
1190 "ScalarSequence<T>::unifiedSampleStd()",
1191 "failed MPI.Allreduce() for numPos");
1193 m_env.inter0Comm().template Allreduce<double>(&localStdValue, &unifiedStdValue, (int) 1,
RawValue_MPI_SUM,
1194 "ScalarSequence<T>::unifiedSampleStd()",
1195 "failed MPI.Allreduce() for stdValue");
1197 unifiedStdValue /= (((T) unifiedNumPos) - 1.);
1198 unifiedStdValue = sqrt(unifiedStdValue);
1202 this->subSampleStd(initialPos,
1213 return unifiedStdValue;
1219 unsigned int initialPos,
1220 unsigned int numPos,
1221 const T& meanValue)
const
1223 if (this->subSequenceSize() == 0)
return 0.;
1225 bool bRC = ((initialPos < this->subSequenceSize()) &&
1227 ((initialPos+numPos) <= this->subSequenceSize()));
1230 unsigned int finalPosPlus1 = initialPos + numPos;
1233 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1234 diff = m_seq[j] - meanValue;
1235 popValue += diff*diff;
1238 popValue /= (T) numPos;
1246 bool useOnlyInter0Comm,
1247 unsigned int initialPos,
1248 unsigned int numPos,
1249 const T& unifiedMeanValue)
const
1251 if (m_env.numSubEnvironments() == 1) {
1252 return this->subPopulationVariance(initialPos,
1259 T unifiedPopValue = 0.;
1260 if (useOnlyInter0Comm) {
1261 if (m_env.inter0Rank() >= 0) {
1262 bool bRC = ((initialPos < this->subSequenceSize()) &&
1264 ((initialPos+numPos) <= this->subSequenceSize()));
1267 unsigned int finalPosPlus1 = initialPos + numPos;
1269 T localPopValue = 0.;
1270 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1271 diff = m_seq[j] - unifiedMeanValue;
1272 localPopValue += diff*diff;
1275 unsigned int unifiedNumPos = 0;
1276 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
1277 "ScalarSequence<T>::unifiedPopulationVariance()",
1278 "failed MPI.Allreduce() for numPos");
1280 m_env.inter0Comm().template Allreduce<double>(&localPopValue, &unifiedPopValue, (int) 1,
RawValue_MPI_SUM,
1281 "ScalarSequence<T>::unifiedPopulationVariance()",
1282 "failed MPI.Allreduce() for popValue");
1284 unifiedPopValue /= ((T) unifiedNumPos);
1288 this->subPopulationVariance(initialPos,
1299 return unifiedPopValue;
1305 unsigned int initialPos,
1306 unsigned int numPos,
1308 unsigned int lag)
const
1310 bool bRC = ((initialPos < this->subSequenceSize()) &&
1312 ((initialPos+numPos) <= this->subSequenceSize()) &&
1316 unsigned int loopSize = numPos - lag;
1317 unsigned int finalPosPlus1 = initialPos + loopSize;
1321 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
1322 diff1 = m_seq[j ] - meanValue;
1323 diff2 = m_seq[j+lag] - meanValue;
1324 covValue += diff1*diff2;
1327 covValue /= (T) loopSize;
1335 unsigned int initialPos,
1336 unsigned int numPos,
1337 unsigned int lag)
const
1339 bool bRC = ((initialPos < this->subSequenceSize()) &&
1341 ((initialPos+numPos) <= this->subSequenceSize()) &&
1345 T meanValue = this->subMeanExtra(initialPos,
1348 T covValueZero = this->autoCovariance(initialPos,
1353 T corrValue = this->autoCovariance(initialPos,
1358 return corrValue/covValueZero;
1364 unsigned int initialPos,
1365 unsigned int numPos,
1366 unsigned int maxLag,
1367 std::vector<T>& autoCorrs)
const
1369 unsigned int fftSize = 0;
1371 #warning WTF are 4 lines of unused code doing here? - RHS
1372 double tmp = log((
double) maxLag)/log(2.);
1373 double fractionalPart = tmp - ((double) ((
unsigned int) tmp));
1374 if (fractionalPart > 0.) tmp += (1. - fractionalPart);
1375 unsigned int fftSize1 = (
unsigned int) std::pow(2.,tmp+1.);
1377 tmp = log((
double) numPos)/log(2.);
1378 fractionalPart = tmp - ((double) ((
unsigned int) tmp));
1379 if (fractionalPart > 0.) tmp += (1. - fractionalPart);
1380 unsigned int fftSize2 = (
unsigned int) std::pow(2.,tmp+1);
1385 std::vector<double> rawDataVec(numPos,0.);
1386 std::vector<std::complex<double> > resultData(0,std::complex<double>(0.,0.));
1390 this->extractRawData(initialPos,
1394 T meanValue = this->subMeanExtra(initialPos,
1396 for (
unsigned int j = 0; j < numPos; ++j) {
1397 rawDataVec[j] -= meanValue;
1400 rawDataVec.resize(fftSize,0.);
1410 fftObj.
forward(rawDataVec,fftSize,resultData);
1413 for (
unsigned int j = 0; j < fftSize; ++j) {
1414 rawDataVec[j] = std::norm(resultData[j]);
1424 fftObj.
inverse(rawDataVec,fftSize,resultData);
1432 autoCorrs.resize(maxLag+1,0.);
1433 for (
unsigned int j = 0; j < autoCorrs.size(); ++j) {
1434 double ratio = ((double) j)/((double) (numPos-1));
1435 autoCorrs[j] = ( resultData[j].real()/resultData[0].real() )*(1.-ratio);
1444 unsigned int initialPos,
1445 unsigned int numPos,
1446 unsigned int numSum,
1447 T& autoCorrsSum)
const
1456 double tmp = log((
double) numPos)/log(2.);
1457 double fractionalPart = tmp - ((double) ((
unsigned int) tmp));
1458 if (fractionalPart > 0.) tmp += (1. - fractionalPart);
1459 unsigned int fftSize = (
unsigned int) std::pow(2.,tmp+1);
1461 std::vector<double> rawDataVec(numPos,0.);
1462 std::vector<std::complex<double> > resultData(0,std::complex<double>(0.,0.));
1466 this->extractRawData(initialPos,
1470 T meanValue = this->subMeanExtra(initialPos,
1472 for (
unsigned int j = 0; j < numPos; ++j) {
1473 rawDataVec[j] -= meanValue;
1475 rawDataVec.resize(fftSize,0.);
1485 fftObj.
forward(rawDataVec,fftSize,resultData);
1488 for (
unsigned int j = 0; j < fftSize; ++j) {
1489 rawDataVec[j] = std::norm(resultData[j]);
1491 fftObj.
inverse(rawDataVec,fftSize,resultData);
1502 for (
unsigned int j = 0; j < numSum; ++j) {
1503 double ratio = ((double) j)/((double) (numPos-1));
1504 autoCorrsSum += ( resultData[j].real()/resultData[0].real() )*(1.-ratio);
1513 unsigned int initialPos,
1514 unsigned int numPos,
1521 std::advance(pos1,initialPos);
1524 std::advance(pos2,initialPos+numPos);
1526 if ((initialPos+numPos) == this->subSequenceSize()) {
1531 pos = std::min_element(pos1, pos2);
1533 pos = std::max_element(pos1, pos2);
1542 bool useOnlyInter0Comm,
1543 unsigned int initialPos,
1544 unsigned int numPos,
1546 T& unifiedMaxValue)
const
1548 if (m_env.numSubEnvironments() == 1) {
1549 return this->subMinMaxExtra(initialPos,
1557 if (useOnlyInter0Comm) {
1558 if (m_env.inter0Rank() >= 0) {
1562 this->subMinMaxExtra(initialPos,
1568 std::vector<double> sendBuf(1,0.);
1569 for (
unsigned int i = 0; i < sendBuf.size(); ++i) {
1570 sendBuf[i] = minValue;
1572 m_env.inter0Comm().template Allreduce<double>(&sendBuf[0], &unifiedMinValue, (int) sendBuf.size(),
RawValue_MPI_MIN,
1573 "ScalarSequence<T>::unifiedMinMaxExtra()",
1574 "failed MPI.Allreduce() for min");
1577 for (
unsigned int i = 0; i < sendBuf.size(); ++i) {
1578 sendBuf[i] = maxValue;
1580 m_env.inter0Comm().template Allreduce<double>(&sendBuf[0], &unifiedMaxValue, (int) sendBuf.size(),
RawValue_MPI_MAX,
1581 "ScalarSequence<T>::unifiedMinMaxExtra()",
1582 "failed MPI.Allreduce() for max");
1584 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
1585 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedMinMaxExtra()"
1586 <<
": localMinValue = " << minValue
1587 <<
", localMaxValue = " << maxValue
1588 <<
", unifiedMinValue = " << unifiedMinValue
1589 <<
", unifiedMaxValue = " << unifiedMaxValue
1595 this->subMinMaxExtra(initialPos,
1613 unsigned int initialPos,
1614 const T& minHorizontalValue,
1615 const T& maxHorizontalValue,
1616 std::vector<T>& centers,
1617 std::vector<unsigned int>& bins)
const
1625 for (
unsigned int j = 0; j < bins.size(); ++j) {
1630 double horizontalDelta = (maxHorizontalValue - minHorizontalValue)/(((
double) bins.size()) - 2.);
1632 double minCenter = minHorizontalValue - horizontalDelta/2.;
1633 double maxCenter = maxHorizontalValue + horizontalDelta/2.;
1634 for (
unsigned int j = 0; j < centers.size(); ++j) {
1635 double factor = ((double) j)/(((double) centers.size()) - 1.);
1636 centers[j] = (1. - factor) * minCenter + factor * maxCenter;
1639 unsigned int dataSize = this->subSequenceSize();
1640 for (
unsigned int j = 0; j < dataSize; ++j) {
1641 double value = m_seq[j];
1642 if (value < minHorizontalValue) {
1645 else if (value >= maxHorizontalValue) {
1646 bins[bins.size()-1]++;
1649 unsigned int index = 1 + (
unsigned int) ((value - minHorizontalValue)/horizontalDelta);
1660 bool useOnlyInter0Comm,
1661 unsigned int initialPos,
1662 const T& unifiedMinHorizontalValue,
1663 const T& unifiedMaxHorizontalValue,
1664 std::vector<T>& unifiedCenters,
1665 std::vector<unsigned int>& unifiedBins)
const
1667 if (m_env.numSubEnvironments() == 1) {
1668 return this->subHistogram(initialPos,
1669 unifiedMinHorizontalValue,
1670 unifiedMaxHorizontalValue,
1677 if (useOnlyInter0Comm) {
1678 if (m_env.inter0Rank() >= 0) {
1679 queso_require_equal_to_msg(unifiedCenters.size(), unifiedBins.size(),
"vectors 'unifiedCenters' and 'unifiedBins' have different sizes");
1683 for (
unsigned int j = 0; j < unifiedBins.size(); ++j) {
1684 unifiedCenters[j] = 0.;
1688 double unifiedHorizontalDelta = (unifiedMaxHorizontalValue - unifiedMinHorizontalValue)/(((
double) unifiedBins.size()) - 2.);
1690 double unifiedMinCenter = unifiedMinHorizontalValue - unifiedHorizontalDelta/2.;
1691 double unifiedMaxCenter = unifiedMaxHorizontalValue + unifiedHorizontalDelta/2.;
1692 for (
unsigned int j = 0; j < unifiedCenters.size(); ++j) {
1693 double factor = ((double) j)/(((double) unifiedCenters.size()) - 1.);
1694 unifiedCenters[j] = (1. - factor) * unifiedMinCenter + factor * unifiedMaxCenter;
1697 std::vector<unsigned int> localBins(unifiedBins.size(),0);
1698 unsigned int dataSize = this->subSequenceSize();
1699 for (
unsigned int j = 0; j < dataSize; ++j) {
1700 double value = m_seq[j];
1701 if (value < unifiedMinHorizontalValue) {
1704 else if (value >= unifiedMaxHorizontalValue) {
1705 localBins[localBins.size()-1]++;
1708 unsigned int index = 1 + (
unsigned int) ((value - unifiedMinHorizontalValue)/unifiedHorizontalDelta);
1713 m_env.inter0Comm().template Allreduce<unsigned int>(&localBins[0], &unifiedBins[0], (int) localBins.size(),
RawValue_MPI_SUM,
1714 "ScalarSequence<T>::unifiedHistogram()",
1715 "failed MPI.Allreduce() for bins");
1717 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
1718 for (
unsigned int i = 0; i < unifiedCenters.size(); ++i) {
1719 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedHistogram()"
1721 <<
", unifiedMinHorizontalValue = " << unifiedMinHorizontalValue
1722 <<
", unifiedMaxHorizontalValue = " << unifiedMaxHorizontalValue
1723 <<
", unifiedCenters = " << unifiedCenters[i]
1724 <<
", unifiedBins = " << unifiedBins[i]
1731 this->subHistogram(initialPos,
1732 unifiedMinHorizontalValue,
1733 unifiedMaxHorizontalValue,
1750 unsigned int initialPos,
1751 const T& minHorizontalValue,
1752 const T& maxHorizontalValue,
1754 std::vector<unsigned int>& bins)
const
1758 for (
unsigned int j = 0; j < bins.size(); ++j) {
1762 double horizontalDelta = (maxHorizontalValue - minHorizontalValue)/(((
double) bins.size()) - 2.);
1763 double minCenter = minHorizontalValue - horizontalDelta/2.;
1764 double maxCenter = maxHorizontalValue + horizontalDelta/2.;
1771 unsigned int dataSize = this->subSequenceSize();
1772 for (
unsigned int j = 0; j < dataSize; ++j) {
1773 double value = m_seq[j];
1774 if (value < minHorizontalValue) {
1777 else if (value >= maxHorizontalValue) {
1778 bins[bins.size()-1] += value;
1781 unsigned int index = 1 + (
unsigned int) ((value - minHorizontalValue)/horizontalDelta);
1782 bins[index] += value;
1792 unsigned int initialPos,
1793 const T& minHorizontalValue,
1794 const T& maxHorizontalValue,
1796 std::vector<unsigned int>& bins)
const
1800 for (
unsigned int j = 0; j < bins.size(); ++j) {
1804 double horizontalDelta = (maxHorizontalValue - minHorizontalValue)/(((
double) bins.size()) - 2.);
1805 double minCenter = minHorizontalValue - horizontalDelta/2.;
1806 double maxCenter = maxHorizontalValue + horizontalDelta/2.;
1813 unsigned int dataSize = this->subSequenceSize();
1814 for (
unsigned int j = 0; j < dataSize; ++j) {
1815 double value = m_seq[j];
1816 if (value < minHorizontalValue) {
1819 else if (value >= maxHorizontalValue) {
1820 bins[bins.size()-1] += value;
1823 unsigned int index = 1 + (
unsigned int) ((value - minHorizontalValue)/horizontalDelta);
1824 bins[index] += value;
1834 unsigned int initialPos,
1835 const T& minHorizontalValue,
1836 const T& maxHorizontalValue,
1837 std::vector<T>& gridValues,
1838 std::vector<unsigned int>& bins)
const
1842 for (
unsigned int j = 0; j < bins.size(); ++j) {
1846 double horizontalDelta = (maxHorizontalValue - minHorizontalValue)/(((
double) bins.size()) - 2.);
1847 double minCenter = minHorizontalValue - horizontalDelta/2.;
1848 double maxCenter = maxHorizontalValue + horizontalDelta/2.;
1855 gridValues.resize(tmpGrid.size(),0.);
1856 for (
unsigned int i = 0; i < tmpGrid.size(); ++i) {
1857 gridValues[i] = tmpGrid[i];
1860 unsigned int dataSize = this->subSequenceSize();
1861 for (
unsigned int j = 0; j < dataSize; ++j) {
1862 double value = m_seq[j];
1863 if (value < minHorizontalValue) {
1866 else if (value >= maxHorizontalValue) {
1867 bins[bins.size()-1] += value;
1870 unsigned int index = 1 + (
unsigned int) ((value - minHorizontalValue)/horizontalDelta);
1871 bins[index] += value;
1886 unsigned int initialPos,
1889 unsigned int numPos = this->subSequenceSize() - initialPos;
1891 this->extractScalarSeq(initialPos,
1903 bool useOnlyInter0Comm,
1904 unsigned int initialPos,
1907 if (m_env.numSubEnvironments() == 1) {
1908 return this->subSort(initialPos,unifiedSortedSequence);
1913 if (useOnlyInter0Comm) {
1914 if (m_env.inter0Rank() >= 0) {
1917 unsigned int localNumPos = this->subSequenceSize() - initialPos;
1919 std::vector<T> leafData(localNumPos,0.);
1920 this->extractRawData(0,
1925 if (m_env.inter0Rank() == 0) {
1926 int minus1NumTreeLevels = 0;
1927 int power2NumTreeNodes = 1;
1929 while (power2NumTreeNodes < m_env.inter0Comm().NumProc()) {
1930 power2NumTreeNodes += power2NumTreeNodes;
1931 minus1NumTreeLevels++;
1934 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
1935 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedSort()"
1936 <<
": sorting tree has " << m_env.inter0Comm().NumProc()
1937 <<
" nodes and " << minus1NumTreeLevels+1
1942 this->parallelMerge(unifiedSortedSequence.
rawData(),
1944 minus1NumTreeLevels);
1946 else if (m_env.inter0Rank() > 0) {
1947 unsigned int uintBuffer[1];
1950 "ScalarSequence<T>::unifiedSort()",
1951 "failed MPI.Recv() for init");
1954 unsigned int treeLevel = uintBuffer[0];
1955 this->parallelMerge(unifiedSortedSequence.
rawData(),
1963 unsigned int unifiedDataSize = unifiedSortedSequence.
subSequenceSize();
1965 "ScalarSequence<T>::unifiedSort()",
1966 "failed MPI.Bcast() for unified data size");
1968 unsigned int sumOfNumPos = 0;
1969 m_env.inter0Comm().template Allreduce<unsigned int>(&localNumPos, &sumOfNumPos, (int) 1,
RawValue_MPI_SUM,
1970 "ScalarSequence<T>::unifiedSort()",
1971 "failed MPI.Allreduce() for data size");
1977 "ScalarSequence<T>::unifiedSort()",
1978 "failed MPI.Bcast() for unified data");
1980 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
1981 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
1982 <<
": tree node " << m_env.inter0Rank()
1983 <<
", unifiedSortedSequence[0] = " << unifiedSortedSequence[0]
1984 <<
", unifiedSortedSequence[" << unifiedSortedSequence.
subSequenceSize()-1 <<
"] = " << unifiedSortedSequence[unifiedSortedSequence.
subSequenceSize()-1]
1992 this->subSort(initialPos,unifiedSortedSequence);
2011 this->subSort(initialPos,
2015 unsigned int dataSize = this->subSequenceSize() - initialPos;
2019 bool everythingOk =
true;
2024 unsigned int pos1 = (
unsigned int) ( (((
double) dataSize) + 1.)*1./4. - 1. );
2025 if (pos1 > (dataSize-1)) {
2027 everythingOk =
false;
2029 unsigned int pos1inc = pos1+1;
2030 if (pos1inc > (dataSize-1)) {
2031 pos1inc = dataSize-1;
2032 everythingOk =
false;
2038 unsigned int pos3 = (
unsigned int) ( (((
double) dataSize) + 1.)*3./4. - 1. );
2039 if (pos3 > (dataSize-1)) {
2041 everythingOk =
false;
2043 unsigned int pos3inc = pos3+1;
2044 if (pos3inc > (dataSize-1)) {
2045 pos3inc = dataSize-1;
2046 everythingOk =
false;
2049 double fraction1 = (((double) dataSize) + 1.)*1./4. - 1. - ((double) pos1);
2050 if (fraction1 < 0.) {
2052 everythingOk =
false;
2054 double fraction3 = (((double) dataSize) + 1.)*3./4. - 1. - ((double) pos3);
2055 if (fraction3 < 0.) {
2057 everythingOk =
false;
2060 if (everythingOk ==
false) {
2061 std::cerr <<
"In ScalarSequence<T>::subInterQuantileRange()"
2062 <<
", worldRank = " << m_env.worldRank()
2063 <<
": at least one adjustment was necessary"
2078 T value1 = (1.-fraction1) * sortedSequence[pos1] + fraction1 * sortedSequence[pos1inc];
2079 T value3 = (1.-fraction3) * sortedSequence[pos3] + fraction3 * sortedSequence[pos3inc];
2080 T iqrValue = value3 - value1;
2082 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
2083 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::subInterQuantileRange()"
2084 <<
": iqrValue = " << iqrValue
2085 <<
", dataSize = " << dataSize
2086 <<
", pos1 = " << pos1
2087 <<
", pos3 = " << pos3
2088 <<
", value1 = " << value1
2089 <<
", value3 = " << value3
2120 bool useOnlyInter0Comm,
2121 unsigned int initialPos)
const
2123 T unifiedIqrValue = 0.;
2125 if (m_env.numSubEnvironments() == 1) {
2126 return this->subInterQuantileRange(initialPos);
2131 if (useOnlyInter0Comm) {
2132 if (m_env.inter0Rank() >= 0) {
2136 this->unifiedSort(useOnlyInter0Comm,
2138 unifiedSortedSequence);
2139 unsigned int unifiedDataSize = unifiedSortedSequence.
subSequenceSize();
2141 unsigned int localDataSize = this->subSequenceSize() - initialPos;
2142 unsigned int sumOfLocalSizes = 0;
2143 m_env.inter0Comm().template Allreduce<unsigned int>(&localDataSize, &sumOfLocalSizes, (int) 1,
RawValue_MPI_SUM,
2144 "ScalarSequence<T>::unifiedInterQuantileRange()",
2145 "failed MPI.Allreduce() for data size");
2149 unsigned int pos1 = (
unsigned int) ( (((
double) unifiedDataSize) + 1.)*1./4. - 1. );
2150 unsigned int pos3 = (
unsigned int) ( (((
double) unifiedDataSize) + 1.)*3./4. - 1. );
2152 double fraction1 = (((double) unifiedDataSize) + 1.)*1./4. - 1. - ((double) pos1);
2153 double fraction3 = (((double) unifiedDataSize) + 1.)*3./4. - 1. - ((double) pos3);
2155 T value1 = (1.-fraction1) * unifiedSortedSequence[pos1] + fraction1 * unifiedSortedSequence[pos1+1];
2156 T value3 = (1.-fraction3) * unifiedSortedSequence[pos3] + fraction3 * unifiedSortedSequence[pos3+1];
2157 unifiedIqrValue = value3 - value1;
2159 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
2160 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedInterQuantileRange()"
2161 <<
": unifiedIqrValue = " << unifiedIqrValue
2162 <<
", localDataSize = " << localDataSize
2163 <<
", unifiedDataSize = " << unifiedDataSize
2164 <<
", pos1 = " << pos1
2165 <<
", pos3 = " << pos3
2166 <<
", value1 = " << value1
2167 <<
", value3 = " << value3
2196 unifiedIqrValue = this->subInterQuantileRange(initialPos);
2205 return unifiedIqrValue;
2211 unsigned int initialPos,
2213 unsigned int kdeDimension)
const
2215 bool bRC = (initialPos < this->subSequenceSize());
2218 unsigned int dataSize = this->subSequenceSize() - initialPos;
2220 T meanValue = this->subMeanExtra(initialPos,
2223 T samValue = this->subSampleVarianceExtra(initialPos,
2228 if (iqrValue <= 0.) {
2229 scaleValue = 1.06*std::sqrt(samValue)/std::pow(dataSize,1./(4. + ((
double) kdeDimension)));
2232 scaleValue = 1.06*std::min(std::sqrt(samValue),iqrValue/1.34)/std::pow(dataSize,1./(4. + ((
double) kdeDimension)));
2235 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
2236 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::subScaleForKde()"
2237 <<
": iqrValue = " << iqrValue
2238 <<
", meanValue = " << meanValue
2239 <<
", samValue = " << samValue
2240 <<
", dataSize = " << dataSize
2241 <<
", scaleValue = " << scaleValue
2251 bool useOnlyInter0Comm,
2252 unsigned int initialPos,
2253 const T& unifiedIqrValue,
2254 unsigned int kdeDimension)
const
2256 if (m_env.numSubEnvironments() == 1) {
2257 return this->subScaleForKde(initialPos,
2264 T unifiedScaleValue = 0.;
2265 if (useOnlyInter0Comm) {
2266 if (m_env.inter0Rank() >= 0) {
2267 bool bRC = (initialPos < this->subSequenceSize());
2270 unsigned int localDataSize = this->subSequenceSize() - initialPos;
2272 T unifiedMeanValue = this->unifiedMeanExtra(useOnlyInter0Comm,
2276 T unifiedSamValue = this->unifiedSampleVarianceExtra(useOnlyInter0Comm,
2281 unsigned int unifiedDataSize = 0;
2282 m_env.inter0Comm().template Allreduce<unsigned int>(&localDataSize, &unifiedDataSize, (int) 1,
RawValue_MPI_SUM,
2283 "ScalarSequence<T>::unifiedScaleForKde()",
2284 "failed MPI.Allreduce() for data size");
2286 if (unifiedIqrValue <= 0.) {
2287 unifiedScaleValue = 1.06*std::sqrt(unifiedSamValue)/std::pow(unifiedDataSize,1./(4. + ((
double) kdeDimension)));
2290 unifiedScaleValue = 1.06*std::min(std::sqrt(unifiedSamValue),unifiedIqrValue/1.34)/std::pow(unifiedDataSize,1./(4. + ((
double) kdeDimension)));
2293 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
2294 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedScaleForKde()"
2295 <<
": unifiedIqrValue = " << unifiedIqrValue
2296 <<
", unifiedMeanValue = " << unifiedMeanValue
2297 <<
", unifiedSamValue = " << unifiedSamValue
2298 <<
", unifiedDataSize = " << unifiedDataSize
2299 <<
", unifiedScaleValue = " << unifiedScaleValue
2305 unifiedScaleValue = this->subScaleForKde(initialPos,
2316 return unifiedScaleValue;
2322 unsigned int initialPos,
2324 const std::vector<T>& evaluationPositions,
2325 std::vector<double>& densityValues)
const
2327 bool bRC = ((initialPos < this->subSequenceSize() ) &&
2328 (0 < evaluationPositions.size()) &&
2329 (evaluationPositions.size() == densityValues.size() ));
2332 unsigned int dataSize = this->subSequenceSize() - initialPos;
2333 unsigned int numEvals = evaluationPositions.size();
2335 double scaleInv = 1./scaleValue;
2336 for (
unsigned int j = 0; j < numEvals; ++j) {
2337 double x = evaluationPositions[j];
2339 for (
unsigned int k = 0;
k < dataSize; ++
k) {
2340 double xk = m_seq[initialPos+
k];
2343 densityValues[j] = scaleInv * (value/(double) dataSize);
2352 bool useOnlyInter0Comm,
2353 unsigned int initialPos,
2354 double unifiedScaleValue,
2355 const std::vector<T>& unifiedEvaluationPositions,
2356 std::vector<double>& unifiedDensityValues)
const
2358 if (m_env.numSubEnvironments() == 1) {
2359 return this->subGaussian1dKde(initialPos,
2361 unifiedEvaluationPositions,
2362 unifiedDensityValues);
2367 if (useOnlyInter0Comm) {
2368 if (m_env.inter0Rank() >= 0) {
2369 bool bRC = ((initialPos < this->subSequenceSize() ) &&
2370 (0 < unifiedEvaluationPositions.size()) &&
2371 (unifiedEvaluationPositions.size() == unifiedDensityValues.size() ));
2374 unsigned int localDataSize = this->subSequenceSize() - initialPos;
2375 unsigned int unifiedDataSize = 0;
2376 m_env.inter0Comm().template Allreduce<unsigned int>(&localDataSize, &unifiedDataSize, (int) 1,
RawValue_MPI_SUM,
2377 "ScalarSequence<T>::unifiedGaussian1dKde()",
2378 "failed MPI.Allreduce() for data size");
2380 unsigned int numEvals = unifiedEvaluationPositions.size();
2382 std::vector<double> densityValues(numEvals,0.);
2383 double unifiedScaleInv = 1./unifiedScaleValue;
2384 for (
unsigned int j = 0; j < numEvals; ++j) {
2385 double x = unifiedEvaluationPositions[j];
2387 for (
unsigned int k = 0;
k < localDataSize; ++
k) {
2388 double xk = m_seq[initialPos+
k];
2391 densityValues[j] = value;
2394 for (
unsigned int j = 0; j < numEvals; ++j) {
2395 unifiedDensityValues[j] = 0.;
2397 m_env.inter0Comm().template Allreduce<double>(&densityValues[0], &unifiedDensityValues[0], (int) numEvals,
RawValue_MPI_SUM,
2398 "ScalarSequence<T>::unifiedGaussian1dKde()",
2399 "failed MPI.Allreduce() for density values");
2401 for (
unsigned int j = 0; j < numEvals; ++j) {
2402 unifiedDensityValues[j] *= unifiedScaleInv/((double) unifiedDataSize);
2405 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
2406 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedGaussian1dKde()"
2407 <<
": unifiedDensityValues[0] = " << unifiedDensityValues[0]
2408 <<
", unifiedDensityValues[" << unifiedDensityValues.size()-1 <<
"] = " << unifiedDensityValues[unifiedDensityValues.size()-1]
2414 this->subGaussian1dKde(initialPos,
2416 unifiedEvaluationPositions,
2417 unifiedDensityValues);
2432 unsigned int initialPos,
2433 unsigned int spacing)
2435 if (m_env.subDisplayFile()) {
2436 *m_env.subDisplayFile() <<
"Entering ScalarSequence<V,M>::filter()"
2437 <<
": initialPos = " << initialPos
2438 <<
", spacing = " << spacing
2439 <<
", subSequenceSize = " << this->subSequenceSize()
2444 unsigned int j = initialPos;
2445 unsigned int originalSubSequenceSize = this->subSequenceSize();
2446 while (j < originalSubSequenceSize) {
2449 m_seq[i] = m_seq[j];
2455 this->resizeSequence(i);
2457 if (m_env.subDisplayFile()) {
2458 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<V,M>::filter()"
2459 <<
": initialPos = " << initialPos
2460 <<
", spacing = " << spacing
2461 <<
", subSequenceSize = " << this->subSequenceSize()
2471 bool useOnlyInter0Comm,
2472 unsigned int initialPos,
2473 unsigned int spacing)
const
2475 double resultValue = 0.;
2479 if (useOnlyInter0Comm) {
2480 if (m_env.inter0Rank() >= 0) {
2501 unsigned int srcInitialPos,
2502 unsigned int srcNumPos)
2508 deleteStoredScalars();
2509 unsigned int currentSize = this->subSequenceSize();
2510 m_seq.resize(currentSize+srcNumPos,0.);
2511 for (
unsigned int i = 0; i < srcNumPos; ++i) {
2512 m_seq[currentSize+i] = src.
m_seq[srcInitialPos+i];
2526 T subMaxValue = subCorrespondingScalarValues.
subMaxPlain();
2529 unsigned int subNumPos = 0;
2530 for (
unsigned int i = 0; i < iMax; ++i) {
2531 if (subCorrespondingScalarValues[i] == subMaxValue) {
2538 for (
unsigned int i = 0; i < iMax; ++i) {
2539 if (subCorrespondingScalarValues[i] == subMaxValue) {
2540 subPositionsOfMaximum[j] = (*this)[i];
2556 T maxValue = subCorrespondingScalarValues.
subMaxPlain();
2559 unsigned int numPos = 0;
2560 for (
unsigned int i = 0; i < iMax; ++i) {
2561 if (subCorrespondingScalarValues[i] == maxValue) {
2568 for (
unsigned int i = 0; i < iMax; ++i) {
2569 if (subCorrespondingScalarValues[i] == maxValue) {
2570 unifiedPositionsOfMaximum[j] = (*this)[i];
2581 unsigned int initialPos,
2582 unsigned int numPos,
2583 const std::string& fileName,
2584 const std::string& fileType,
2585 const std::set<unsigned int>& allowedSubEnvIds)
const
2590 if (m_env.openOutputFile(fileName,
2599 this->subWriteContents(initialPos,
2604 #ifdef QUESO_HAS_HDF5
2608 hsize_t dims[1] = { this->subSequenceSize() };
2609 hid_t dataspace_id = H5Screate_simple(1, dims, dims);
2613 "error create dataspace with id: " << dataspace_id);
2616 hid_t dataset_id = H5Dcreate(filePtrSet.h5Var,
2627 "error creating dataset with id: " << dataset_id);
2630 herr_t status = H5Dwrite(
2641 "error writing dataset to file with id: " << filePtrSet.h5Var);
2644 H5Dclose(dataset_id);
2645 H5Sclose(dataspace_id);
2649 m_env.closeFile(filePtrSet,fileType);
2659 const std::string& fileType)
const
2662 this->writeSubMatlabHeader(ofs, this->subSequenceSize());
2665 this->writeTxtHeader(ofs, this->subSequenceSize());
2668 unsigned int chainSize = this->subSequenceSize();
2669 for (
unsigned int j = 0; j < chainSize; ++j) {
2684 const std::string& fileName,
2685 const std::string& inputFileType)
const
2687 std::string fileType(inputFileType);
2688 #ifdef QUESO_HAS_HDF5
2692 if (m_env.subDisplayFile()) {
2693 *m_env.subDisplayFile() <<
"WARNING in ScalarSequence<T>::unifiedWriteContents()"
2695 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2700 if (m_env.subRank() == 0) {
2701 std::cerr <<
"WARNING in ScalarSequence<T>::unifiedWriteContents()"
2703 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2715 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
2716 *m_env.subDisplayFile() <<
"Entering ScalarSequence<T>::unifiedWriteContents()"
2717 <<
": worldRank " << m_env.worldRank()
2718 <<
", subEnvironment " << m_env.subId()
2719 <<
", subRank " << m_env.subRank()
2720 <<
", inter0Rank " << m_env.inter0Rank()
2722 <<
", fileName = " << fileName
2723 <<
", fileType = " << fileType
2729 if (m_env.inter0Rank() >= 0) {
2730 for (
unsigned int r = 0; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
2731 if (m_env.inter0Rank() == (int) r) {
2735 bool writeOver =
false;
2738 if (m_env.openUnifiedOutputFile(fileName,
2741 unifiedFilePtrSet)) {
2744 unsigned int chainSize = this->subSequenceSize();
2751 this->writeUnifiedMatlabHeader(*unifiedFilePtrSet.
ofsVar,
2752 this->subSequenceSize()*m_env.inter0Comm().NumProc());
2755 this->writeTxtHeader(*unifiedFilePtrSet.
ofsVar,
2756 this->subSequenceSize()*m_env.inter0Comm().NumProc());
2760 for (
unsigned int j = 0; j < chainSize; ++j) {
2761 *unifiedFilePtrSet.
ofsVar << m_seq[j]
2765 m_env.closeFile(unifiedFilePtrSet,fileType);
2767 #ifdef QUESO_HAS_HDF5
2769 unsigned int numParams = 1;
2771 hid_t datatype = H5Tcopy(H5T_NATIVE_DOUBLE);
2774 dimsf[0] = chainSize;
2775 hid_t dataspace = H5Screate_simple(1, dimsf, NULL);
2777 hid_t dataset = H5Dcreate2(unifiedFilePtrSet.h5Var,
2786 struct timeval timevalBegin;
2788 iRC = gettimeofday(&timevalBegin,NULL);
2793 status = H5Dwrite(dataset,
2805 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
2806 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedWriteContents()"
2807 <<
": worldRank " << m_env.worldRank()
2808 <<
", fullRank " << m_env.fullRank()
2809 <<
", subEnvironment " << m_env.subId()
2810 <<
", subRank " << m_env.subRank()
2811 <<
", inter0Rank " << m_env.inter0Rank()
2812 <<
", fileName = " << fileName
2813 <<
", numParams = " << numParams
2814 <<
", chainSize = " << chainSize
2815 <<
", writeTime = " << writeTime <<
" seconds"
2821 H5Sclose(dataspace);
2827 queso_error_msg(
"hdf file type not supported for multiple sub-environments yet");
2834 m_env.inter0Comm().Barrier();
2837 if (m_env.inter0Rank() == 0) {
2841 if (m_env.openUnifiedOutputFile(fileName,
2844 unifiedFilePtrSet)) {
2847 *unifiedFilePtrSet.
ofsVar <<
"];\n";
2850 m_env.closeFile(unifiedFilePtrSet,fileType);
2862 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
2863 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<T>::unifiedWriteContents()"
2864 <<
", fileName = " << fileName
2865 <<
", fileType = " << fileType
2876 double sequenceSize)
const
2878 ofs << m_name <<
"_unified" <<
" = zeros(" << sequenceSize
2882 ofs << m_name <<
"_unified" <<
" = [";
2888 double sequenceSize)
const
2890 ofs << m_name <<
"_sub" << m_env.subIdString() <<
" = zeros(" << sequenceSize
2894 ofs << m_name <<
"_sub" << m_env.subIdString() <<
" = [";
2900 double sequenceSize)
const
2902 ofs << sequenceSize <<
" " << 1 << std::endl;
2909 const std::string& fileName,
2910 const std::string& inputFileType,
2911 const unsigned int subReadSize)
2914 std::string fileType(inputFileType);
2915 #ifdef QUESO_HAS_HDF5
2919 if (m_env.subDisplayFile()) {
2920 *m_env.subDisplayFile() <<
"WARNING in ScalarSequence<T>::unifiedReadContents()"
2922 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2927 if (m_env.subRank() == 0) {
2928 std::cerr <<
"WARNING in ScalarSequence<T>::unifiedReadContents()"
2930 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2940 if (m_env.subDisplayFile()) {
2941 *m_env.subDisplayFile() <<
"Entering ScalarSequence<T>::unifiedReadContents()"
2942 <<
": worldRank " << m_env.worldRank()
2943 <<
", fullRank " << m_env.fullRank()
2944 <<
", subEnvironment " << m_env.subId()
2945 <<
", subRank " << m_env.subRank()
2946 <<
", inter0Rank " << m_env.inter0Rank()
2948 <<
", fileName = " << fileName
2949 <<
", subReadSize = " << subReadSize
2954 this->resizeSequence(subReadSize);
2956 if (m_env.inter0Rank() >= 0) {
2957 double unifiedReadSize = subReadSize*m_env.inter0Comm().NumProc();
2960 unsigned int idOfMyFirstLine = 1 + m_env.inter0Rank()*subReadSize;
2961 unsigned int idOfMyLastLine = (1 + m_env.inter0Rank())*subReadSize;
2962 unsigned int numParams = 1;
2964 for (
unsigned int r = 0; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
2965 if (m_env.inter0Rank() == (int) r) {
2968 if (m_env.openUnifiedInputFile(fileName,
2970 unifiedFilePtrSet)) {
2976 std::string tmpString;
2979 *unifiedFilePtrSet.
ifsVar >> tmpString;
2983 *unifiedFilePtrSet.
ifsVar >> tmpString;
2988 *unifiedFilePtrSet.
ifsVar >> tmpString;
2990 unsigned int posInTmpString = 6;
2994 std::string nPositionsString((
size_t) (tmpString.size()-posInTmpString+1),
' ');
2995 unsigned int posInPositionsString = 0;
2998 nPositionsString[posInPositionsString++] = tmpString[posInTmpString++];
2999 }
while (tmpString[posInTmpString] !=
',');
3000 nPositionsString[posInPositionsString] =
'\0';
3005 std::string nParamsString((
size_t) (tmpString.size()-posInTmpString+1),
' ');
3006 unsigned int posInParamsString = 0;
3009 nParamsString[posInParamsString++] = tmpString[posInTmpString++];
3010 }
while (tmpString[posInTmpString] !=
')');
3011 nParamsString[posInParamsString] =
'\0';
3014 unsigned int sizeOfChainInFile = (
unsigned int) strtod(nPositionsString.c_str(),NULL);
3015 unsigned int numParamsInFile = (
unsigned int) strtod(nParamsString.c_str(), NULL);
3016 if (m_env.subDisplayFile()) {
3017 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedReadContents()"
3018 <<
": worldRank " << m_env.worldRank()
3019 <<
", fullRank " << m_env.fullRank()
3020 <<
", sizeOfChainInFile = " << sizeOfChainInFile
3021 <<
", numParamsInFile = " << numParamsInFile
3029 queso_require_equal_to_msg(numParamsInFile, numParams,
"number of parameters of chain in file is different than number of parameters in this chain object");
3033 unsigned int maxCharsPerLine = 64*numParams;
3035 unsigned int lineId = 0;
3036 while (lineId < idOfMyFirstLine) {
3037 unifiedFilePtrSet.
ifsVar->ignore(maxCharsPerLine,
'\n');
3044 std::string tmpString;
3047 *unifiedFilePtrSet.
ifsVar >> tmpString;
3051 *unifiedFilePtrSet.
ifsVar >> tmpString;
3056 std::streampos tmpPos = unifiedFilePtrSet.
ifsVar->tellg();
3057 unifiedFilePtrSet.
ifsVar->seekg(tmpPos+(std::streampos)2);
3061 while (lineId <= idOfMyLastLine) {
3062 for (
unsigned int i = 0; i < numParams; ++i) {
3063 *unifiedFilePtrSet.
ifsVar >> tmpScalar;
3065 m_seq[lineId - idOfMyFirstLine] = tmpScalar;
3069 #ifdef QUESO_HAS_HDF5
3072 hid_t dataset = H5Dopen2(unifiedFilePtrSet.h5Var,
3075 hid_t datatype = H5Dget_type(dataset);
3076 H5T_class_t t_class = H5Tget_class(datatype);
3078 hid_t dataspace = H5Dget_space(dataset);
3079 int rank = H5Sget_simple_extent_ndims(dataspace);
3083 status_n = H5Sget_simple_extent_dims(dataspace, dims_in, NULL);
3092 struct timeval timevalBegin;
3094 iRC = gettimeofday(&timevalBegin,NULL);
3097 unsigned int chainSizeIn = (
unsigned int) dims_in[1];
3099 std::vector<double*>
dataIn((
size_t) numParams,NULL);
3100 dataIn[0] = (
double*) malloc(numParams*chainSizeIn*
sizeof(
double));
3101 for (
unsigned int i = 1; i < numParams; ++i) {
3102 dataIn[i] = dataIn[i-1] + chainSizeIn;
3106 status = H5Dread(dataset,
3115 for (
unsigned int j = 0; j < subReadSize; ++j) {
3116 for (
unsigned int i = 0; i < numParams; ++i) {
3117 tmpScalar = dataIn[i][j];
3119 m_seq[j] = tmpScalar;
3123 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
3124 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedReadContents()"
3125 <<
": worldRank " << m_env.worldRank()
3126 <<
", fullRank " << m_env.fullRank()
3127 <<
", subEnvironment " << m_env.subId()
3128 <<
", subRank " << m_env.subRank()
3129 <<
", inter0Rank " << m_env.inter0Rank()
3130 <<
", fileName = " << fileName
3131 <<
", numParams = " << numParams
3132 <<
", chainSizeIn = " << chainSizeIn
3133 <<
", subReadSize = " << subReadSize
3134 <<
", readTime = " << readTime <<
" seconds"
3138 H5Sclose(dataspace);
3142 for (
unsigned int tmpIndex = 0; tmpIndex < dataIn.size(); tmpIndex++) {
3143 free (dataIn[tmpIndex]);
3147 queso_error_msg(
"hdf file type not supported for multiple sub-environments yet");
3154 m_env.closeFile(unifiedFilePtrSet,fileType);
3157 m_env.inter0Comm().Barrier();
3162 for (
unsigned int i = 1; i < subReadSize; ++i) {
3163 m_seq[i] = tmpScalar;
3167 if (m_env.subDisplayFile()) {
3168 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<T>::unifiedReadContents()"
3169 <<
", fileName = " << fileName
3184 for (
unsigned int i = 0; i < m_seq.size(); ++i) {
3185 m_seq[i] = src.
m_seq[i];
3187 deleteStoredScalars();
3195 unsigned int initialPos,
3196 unsigned int spacing,
3197 unsigned int numPos,
3202 for (
unsigned int j = 0; j < numPos; ++j) {
3212 scalarSeq[j] = m_seq[initialPos+j ];
3216 for (
unsigned int j = 0; j < numPos; ++j) {
3226 scalarSeq[j] = m_seq[initialPos+j*spacing];
3236 unsigned int initialPos,
3237 unsigned int spacing,
3238 unsigned int numPos,
3239 std::vector<double>& rawDataVec)
const
3241 rawDataVec.resize(numPos);
3243 for (
unsigned int j = 0; j < numPos; ++j) {
3244 rawDataVec[j] = m_seq[initialPos+j ];
3248 for (
unsigned int j = 0; j < numPos; ++j) {
3249 rawDataVec[j] = m_seq[initialPos+j*spacing];
3268 std::sort(m_seq.begin(), m_seq.end());
3277 std::vector<T>& sortedBuffer,
3278 const std::vector<T>& leafData,
3279 unsigned int currentTreeLevel)
const
3281 int parentNode = m_env.inter0Rank() & ~(1 << currentTreeLevel);
3283 if (m_env.inter0Rank() >= 0) {
3284 if (currentTreeLevel == 0) {
3286 unsigned int leafDataSize = leafData.size();
3287 sortedBuffer.resize(leafDataSize,0.);
3288 for (
unsigned int i = 0; i < leafDataSize; ++i) {
3289 sortedBuffer[i] = leafData[i];
3291 std::sort(sortedBuffer.begin(), sortedBuffer.end());
3292 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3293 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3294 <<
": tree node " << m_env.inter0Rank()
3295 <<
", leaf sortedBuffer[0] = " << sortedBuffer[0]
3296 <<
", leaf sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3301 int nextTreeLevel = currentTreeLevel - 1;
3302 int rightChildNode = m_env.inter0Rank() | (1 << nextTreeLevel);
3304 if (rightChildNode >= m_env.inter0Comm().NumProc()) {
3305 this->parallelMerge(sortedBuffer,
3310 unsigned int uintBuffer[1];
3311 uintBuffer[0] = nextTreeLevel;
3313 "ScalarSequence<T>::parallelMerge()",
3314 "failed MPI.Send() for init");
3316 this->parallelMerge(sortedBuffer,
3321 unsigned int leftSize = sortedBuffer.size();
3322 std::vector<T> leftSortedBuffer(leftSize,0.);
3323 for (
unsigned int i = 0; i < leftSize; ++i) {
3324 leftSortedBuffer[i] = sortedBuffer[i];
3330 "ScalarSequence<T>::parallelMerge()",
3331 "failed MPI.Recv() for size");
3334 unsigned int rightSize = uintBuffer[0];
3335 std::vector<T> rightSortedBuffer(rightSize,0.);
3337 "ScalarSequence<T>::parallelMerge()",
3338 "failed MPI.Recv() for data");
3341 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3342 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3343 <<
": tree node " << m_env.inter0Rank()
3344 <<
" is combining " << leftSortedBuffer.size()
3345 <<
" left doubles with " << rightSortedBuffer.size()
3350 sortedBuffer.clear();
3351 sortedBuffer.resize(leftSortedBuffer.size()+rightSortedBuffer.size(),0.);
3355 while ((i < leftSize ) &&
3357 if (leftSortedBuffer[i] > rightSortedBuffer[j]) sortedBuffer[k++] = rightSortedBuffer[j++];
3358 else sortedBuffer[k++] = leftSortedBuffer [i++];
3360 while (i < leftSize ) sortedBuffer[k++] = leftSortedBuffer [i++];
3361 while (j < rightSize) sortedBuffer[k++] = rightSortedBuffer[j++];
3362 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3363 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3364 <<
": tree node " << m_env.inter0Rank()
3365 <<
", merged sortedBuffer[0] = " << sortedBuffer[0]
3366 <<
", merged sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3372 if (parentNode != m_env.inter0Rank()) {
3374 unsigned int uintBuffer[1];
3375 uintBuffer[0] = sortedBuffer.size();
3377 "ScalarSequence<T>::parallelMerge()",
3378 "failed MPI.Send() for size");
3380 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
3381 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3382 <<
": tree node " << m_env.inter0Rank()
3383 <<
" is sending " << sortedBuffer.size()
3384 <<
" doubles to tree node " << parentNode
3385 <<
", with sortedBuffer[0] = " << sortedBuffer[0]
3386 <<
" and sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3391 "ScalarSequence<T>::parallelMerge()",
3392 "failed MPI.Send() for data");
3404 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
3408 unsigned int numEvaluationPoints,
3411 std::vector<T>& mdfValues)
const
3415 std::vector<T> centers(numEvaluationPoints,0.);
3416 std::vector<unsigned int> bins (numEvaluationPoints,0);
3419 this->subSequenceSize(),
3428 minDomainValue = centers[0];
3429 maxDomainValue = centers[centers.size()-1];
3430 T binSize = (maxDomainValue - minDomainValue)/((
double)(centers.size() - 1));
3432 unsigned int totalCount = 0;
3433 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
3434 totalCount += bins[i];
3438 mdfValues.resize(numEvaluationPoints);
3439 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
3440 mdfValues[i] = ((T) bins[i])/((T) totalCount)/binSize;
3448 ScalarSequence<T>::subMeanCltStd(
3449 unsigned int initialPos,
3450 unsigned int numPos,
3451 const T& meanValue)
const
3453 if (this->subSequenceSize() == 0)
return 0.;
3455 bool bRC = ((initialPos < this->subSequenceSize()) &&
3457 ((initialPos+numPos) <= this->subSequenceSize()));
3460 unsigned int finalPosPlus1 = initialPos + numPos;
3463 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
3464 diff = m_seq[j] - meanValue;
3465 stdValue += diff*diff;
3468 stdValue /= (((T) numPos) - 1.);
3469 stdValue /= (((T) numPos) - 1.);
3470 stdValue = sqrt(stdValue);
3477 ScalarSequence<T>::unifiedMeanCltStd(
3478 bool useOnlyInter0Comm,
3479 unsigned int initialPos,
3480 unsigned int numPos,
3481 const T& unifiedMeanValue)
const
3483 if (m_env.numSubEnvironments() == 1) {
3484 return this->subMeanCltStd(initialPos,
3491 T unifiedStdValue = 0.;
3492 if (useOnlyInter0Comm) {
3493 if (m_env.inter0Rank() >= 0) {
3494 bool bRC = ((initialPos < this->subSequenceSize()) &&
3496 ((initialPos+numPos) <= this->subSequenceSize()));
3499 unsigned int finalPosPlus1 = initialPos + numPos;
3501 T localStdValue = 0.;
3502 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
3503 diff = m_seq[j] - unifiedMeanValue;
3504 localStdValue += diff*diff;
3507 unsigned int unifiedNumPos = 0;
3508 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
3509 "ScalarSequence<T>::unifiedMeanCltStd()",
3510 "failed MPI.Allreduce() for numPos");
3512 m_env.inter0Comm().template Allreduce<double>(&localStdValue, &unifiedStdValue, (int) 1,
RawValue_MPI_SUM,
3513 "ScalarSequence<T>::unifiedMeanCltStd()",
3514 "failed MPI.Allreduce() for stdValue");
3516 unifiedStdValue /= (((T) unifiedNumPos) - 1.);
3517 unifiedStdValue /= (((T) unifiedNumPos) - 1.);
3518 unifiedStdValue /= sqrt(unifiedStdValue);
3522 this->subMeanCltStd(initialPos,
3532 return unifiedStdValue;
3537 ScalarSequence<T>::bmm(
3538 unsigned int initialPos,
3539 unsigned int batchLength)
const
3541 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3542 (batchLength < (this->subSequenceSize()-initialPos)));
3545 unsigned int numberOfBatches = (this->subSequenceSize() - initialPos)/batchLength;
3546 ScalarSequence<T> batchMeans(m_env,numberOfBatches,
"");
3548 for (
unsigned int batchId = 0; batchId < numberOfBatches; batchId++) {
3549 batchMeans[batchId] = this->subMeanExtra(initialPos + batchId*batchLength,
3553 T meanOfBatchMeans = batchMeans.subMeanExtra(0,
3554 batchMeans.subSequenceSize());
3561 T bmmValue = batchMeans.subSampleVarianceExtra(0,
3562 batchMeans.subSequenceSize(),
3565 bmmValue /= (T) batchMeans.subSequenceSize();
3573 ScalarSequence<T>::psd(
3574 unsigned int initialPos,
3575 unsigned int numBlocks,
3576 double hopSizeRatio,
3577 std::vector<double>& psdResult)
const
3579 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3580 (hopSizeRatio != 0. ) &&
3581 (numBlocks < (this->subSequenceSize() - initialPos)) &&
3582 (fabs(hopSizeRatio) < (double) (this->subSequenceSize() - initialPos)));
3585 unsigned int dataSize = this->subSequenceSize() - initialPos;
3587 T meanValue = this->subMeanExtra(initialPos,
3591 unsigned int hopSize = 0;
3592 unsigned int blockSize = 0;
3593 if (hopSizeRatio <= -1.) {
3594 double overlapSize = -hopSizeRatio;
3595 double tmp = ((double) (dataSize + (numBlocks - 1)*overlapSize))/((double) numBlocks);
3596 blockSize = (
unsigned int) tmp;
3598 else if (hopSizeRatio < 0.) {
3599 double tmp = ((double) dataSize)/(( ((double) numBlocks) - 1. )*(-hopSizeRatio) + 1.);
3600 blockSize = (
unsigned int) tmp;
3601 hopSize = (
unsigned int) ( ((
double) blockSize) * (-hopSizeRatio) );
3603 else if (hopSizeRatio == 0.) {
3606 else if (hopSizeRatio < 1.) {
3607 double tmp = ((double) dataSize)/(( ((double) numBlocks) - 1. )*hopSizeRatio + 1.);
3608 blockSize = (
unsigned int) tmp;
3609 hopSize = (
unsigned int) ( ((
double) blockSize) * hopSizeRatio );
3612 hopSize = (
unsigned int) hopSizeRatio;
3613 blockSize = dataSize - (numBlocks - 1)*hopSize;
3616 int numberOfDiscardedDataElements = dataSize - (numBlocks-1)*hopSize - blockSize;
3630 double tmp = log((
double) blockSize)/log(2.);
3631 double fractionalPart = tmp - ((double) ((
unsigned int) tmp));
3632 if (fractionalPart > 0.) tmp += (1. - fractionalPart);
3633 unsigned int fftSize = (
unsigned int) std::pow(2.,tmp);
3641 double modificationScale = 0.;
3642 for (
unsigned int j = 0; j < blockSize; ++j) {
3644 modificationScale += tmpValue*tmpValue;
3646 modificationScale = 1./modificationScale;
3648 std::vector<double> blockData(blockSize,0.);
3649 Fft<T> fftObj(m_env);
3650 std::vector<std::complex<double> > fftResult(0,std::complex<double>(0.,0.));
3653 unsigned int halfFFTSize = fftSize/2;
3655 psdResult.resize(1+halfFFTSize,0.);
3656 double factor = 1./M_PI/((double) numBlocks);
3659 psdResult.resize(fftSize,0.);
3660 double factor = 1./2./M_PI/((double) numBlocks);
3663 for (
unsigned int blockId = 0; blockId < numBlocks; blockId++) {
3665 unsigned int initialDataPos = initialPos + blockId*hopSize;
3666 for (
unsigned int j = 0; j < blockSize; ++j) {
3667 unsigned int dataPos = initialDataPos + j;
3669 blockData[j] =
MiscHammingWindow(blockSize-1,j) * ( m_seq[dataPos] - meanValue );
3672 fftObj.forward(blockData,fftSize,fftResult);
3682 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
3683 psdResult[j] += norm(fftResult[j])*modificationScale;
3687 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
3688 psdResult[j] *= factor;
3696 ScalarSequence<T>::geweke(
3697 unsigned int initialPos,
3699 double ratioNb)
const
3701 double doubleFullDataSize = (double) (this->subSequenceSize() - initialPos);
3702 ScalarSequence<T> tmpSeq(m_env,0,
"");
3703 std::vector<double> psdResult(0,0.);
3705 unsigned int dataSizeA = (
unsigned int) (doubleFullDataSize * ratioNa);
3706 double doubleDataSizeA = (double) dataSizeA;
3707 unsigned int initialPosA = initialPos;
3708 this->extractScalarSeq(initialPosA,
3712 double meanA = tmpSeq.subMeanExtra(0,
3715 (
unsigned int) std::sqrt((
double) dataSizeA),
3718 double psdA = psdResult[0];
3719 double varOfMeanA = 2.*M_PI*psdA/doubleDataSizeA;
3721 unsigned int dataSizeB = (
unsigned int) (doubleFullDataSize * ratioNb);
3722 double doubleDataSizeB = (double) dataSizeB;
3723 unsigned int initialPosB = this->subSequenceSize() - dataSizeB;
3724 this->extractScalarSeq(initialPosB,
3728 double meanB = tmpSeq.subMeanExtra(0,
3731 (
unsigned int) std::sqrt((
double) dataSizeB),
3734 double psdB = psdResult[0];
3735 double varOfMeanB = 2.*M_PI*psdB/doubleDataSizeB;
3737 if (m_env.subDisplayFile()) {
3738 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::geweke()"
3739 <<
", before computation of gewCoef"
3741 <<
", dataSizeA = " << dataSizeA
3742 <<
", numBlocksA = " << (
unsigned int) std::sqrt((
double) dataSizeA)
3743 << ", meanA = " << meanA
3744 << ", psdA = " << psdA
3745 << ", varOfMeanA = " << varOfMeanA
3747 << ", dataSizeB = " << dataSizeB
3748 << ", numBlocksB = " << (
unsigned int) std::sqrt((
double) dataSizeB)
3749 << ", meanB = " << meanB
3750 << ", psdB = " << psdB
3751 << ", varOfMeanB = " << varOfMeanB
3754 double gewCoef = (meanA - meanB)/std::sqrt(varOfMeanA + varOfMeanB);
3761 ScalarSequence<T>::meanStacc(
3762 unsigned int initialPos)
const
3773 ScalarSequence<T>::subCdfPercentageRange(
3774 unsigned int initialPos,
3775 unsigned int numPos,
3778 T& upperValue)
const
3784 ScalarSequence<T> sortedSequence(m_env,0,
"");;
3785 sortedSequence.resizeSequence(numPos);
3786 this->extractScalarSeq(initialPos,
3790 sortedSequence.subSort();
3792 unsigned int lowerId = (
unsigned int) round( 0.5*(1.-range)*((double) numPos) );
3793 lowerValue = sortedSequence[lowerId];
3795 unsigned int upperId = (
unsigned int) round( 0.5*(1.+range)*((double) numPos) );
3796 if (upperId == numPos) {
3797 upperId = upperId-1;
3800 upperValue = sortedSequence[upperId];
3807 ScalarSequence<T>::unifiedCdfPercentageRange(
3808 bool useOnlyInter0Comm,
3809 unsigned int initialPos,
3810 unsigned int numPos,
3812 T& unifiedLowerValue,
3813 T& unifiedUpperValue)
const
3815 if (m_env.numSubEnvironments() == 1) {
3816 return this->subCdfPercentageRange(initialPos,
3829 if (useOnlyInter0Comm) {
3830 if (m_env.inter0Rank() >= 0) {
3835 this->subCdfPercentageRange(initialPos,
3851 ScalarSequence<T>::subCdfStacc(
3852 unsigned int initialPos,
3853 std::vector<double>& cdfStaccValues,
3854 std::vector<double>& cdfStaccValuesUp,
3855 std::vector<double>& cdfStaccValuesLow,
3856 const ScalarSequence<T>& sortedDataValues)
const
3859 bool bRC = (initialPos < this->subSequenceSize() );
3862 unsigned int numPoints = subSequenceSize()-initialPos;
3863 double auxNumPoints = numPoints;
3864 double maxLamb = 0.;
3865 std::vector<double> ro (numPoints,0.);
3866 std::vector<double> Isam_mat(numPoints,0.);
3868 for (
unsigned int pointId = 0; pointId < numPoints; pointId++) {
3869 double p = ( ((double) pointId) + 1.0 )/auxNumPoints;
3870 double ro0 = p*(1.0-p);
3871 cdfStaccValues[pointId] = p;
3876 for (
unsigned int k = 0;
k < numPoints;
k++) {
3877 if (m_seq[
k] <= sortedDataValues[pointId]) {
3885 for (
unsigned int tau = 0; tau < (numPoints-1); tau++) {
3887 for (
unsigned int kk = 0; kk < numPoints-(tau+1); kk++) {
3888 ro[tau] += (Isam_mat[kk+tau+1]-p)*(Isam_mat[kk]-p);
3890 ro[tau] *= 1.0/auxNumPoints;
3893 for (
unsigned int tau = 0; tau < (numPoints-1); tau++) {
3894 double auxTau = tau;
3895 lamb += (1.-(auxTau+1.)/auxNumPoints)*ro[tau]/ro0;
3896 if (lamb > maxLamb) maxLamb = lamb;
3901 cdfStaccValuesUp [pointId] = cdfStaccValues[pointId]+1.96*sqrt(ro0/auxNumPoints*(1.+lamb));
3902 cdfStaccValuesLow[pointId] = cdfStaccValues[pointId]-1.96*sqrt(ro0/auxNumPoints*(1.+lamb));
3903 if (cdfStaccValuesLow[pointId] < 0.) cdfStaccValuesLow[pointId] = 0.;
3904 if (cdfStaccValuesUp [pointId] > 1.) cdfStaccValuesUp [pointId] = 1.;
3912 unsigned int dataSize = this->subSequenceSize() - initialPos;
3913 unsigned int numEvals = evaluationPositions.size();
3915 for (
unsigned int j = 0; j < numEvals; ++j) {
3916 double x = evaluationPositions[j];
3918 for (
unsigned int k = 0;
k < dataSize; ++
k) {
3919 double xk = m_seq[initialPos+
k];
3922 cdfStaccValues[j] = value/(double) dataSize;
3931 ScalarSequence<T>::subCdfStacc(
3932 unsigned int initialPos,
3933 const std::vector<T>& evaluationPositions,
3934 std::vector<double>& cdfStaccValues)
const
3938 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3939 (0 < evaluationPositions.size()) &&
3940 (evaluationPositions.size() == cdfStaccValues.size() ));
3950 unsigned int dataSize = this->subSequenceSize() - initialPos;
3951 unsigned int numEvals = evaluationPositions.size();
3953 for (
unsigned int j = 0; j < numEvals; ++j) {
3956 for (
unsigned int k = 0;
k < dataSize; ++
k) {
3960 cdfStaccValues[j] = value/(double) dataSize;
3966 #endif // #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
3976 unsigned int initialPos,
3979 const std::vector<T>& evaluationPositions1,
3980 const std::vector<T>& evaluationPositions2,
3981 std::vector<double>& densityValues)
3985 double covValue = 0.;
3986 double corrValue = 0.;
3995 (0 < evaluationPositions1.size() ) &&
3996 (evaluationPositions1.size() == evaluationPositions2.size() ) &&
3997 (evaluationPositions1.size() == densityValues.size() ));
4001 unsigned int numEvals = evaluationPositions1.size();
4003 double scale1Inv = 1./scaleValue1;
4004 double scale2Inv = 1./scaleValue2;
4006 double r = 1. - corrValue*corrValue;
4008 std::cerr <<
"In ComputeSubGaussian2dKde()"
4009 <<
": WARNING, r = " << r
4016 for (
unsigned int j = 0; j < numEvals; ++j) {
4017 double x1 = evaluationPositions1[j];
4018 double x2 = evaluationPositions2[j];
4020 for (
unsigned int k = 0;
k < dataSize; ++
k) {
4021 double d1k = scale1Inv*(x1 - scalarSeq1[initialPos+
k]);
4022 double d2k = scale2Inv*(x2 - scalarSeq2[initialPos+
k]);
4023 value += exp(-.5*( d1k*d1k + 2*corrValue*d1k*d2k + d2k*d2k )/r);
4025 densityValues[j] = scale1Inv * scale2Inv * (value/(double) dataSize) / 2. / M_PI / sqrt(r);
4036 unsigned int initialPos,
4037 double unifiedScaleValue1,
4038 double unifiedScaleValue2,
4039 const std::vector<T>& unifiedEvaluationPositions1,
4040 const std::vector<T>& unifiedEvaluationPositions2,
4041 std::vector<double>& unifiedDensityValues)
4049 unifiedEvaluationPositions1,
4050 unifiedEvaluationPositions2,
4051 unifiedDensityValues);
4056 if (useOnlyInter0Comm) {
4067 unifiedEvaluationPositions1,
4068 unifiedEvaluationPositions2,
4069 unifiedDensityValues);
4086 unsigned int subNumSamples,
4105 for (
unsigned k = 0;
k < subNumSamples; ++
k) {
4107 tmpP = subPSeq[
k] - unifiedMeanP;
4108 tmpQ = subQSeq[
k] - unifiedMeanQ;
4109 covValue += tmpP*tmpQ;
4125 unsigned int unifiedNumSamples = 0;
4127 "ComputeCovCorrBetweenScalarSequences()",
4128 "failed MPI.Allreduce() for subNumSamples");
4132 "ComputeCovCorrBetweenScalarSequences()",
4133 "failed MPI.Allreduce() for a matrix position");
4134 covValue = aux/((double) (unifiedNumSamples-1));
4136 corrValue = covValue/std::sqrt(unifiedSampleVarianceP)/std::sqrt(unifiedSampleVarianceQ);
4138 if ((corrValue < -1.) || (corrValue > 1.)) {
4139 std::cerr <<
"In ComputeCovCorrBetweenScalarSequences()"
4140 <<
": computed correlation is out of range, corrValue = " << corrValue
#define UQ_FILE_EXTENSION_FOR_MATLAB_FORMAT
double MiscHammingWindow(unsigned int N, unsigned int j)
T unifiedMedianExtra(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int localNumPos) const
Finds the median value of the unified sequence, considering numPos positions starting at position ini...
std::ofstream * ofsVar
Provides a stream interface to write data to files.
#define RawValue_MPI_UNSIGNED
#define UQ_FILE_EXTENSION_FOR_TXT_FORMAT
void inverse(const std::vector< T > &data, unsigned int fftSize, std::vector< std::complex< double > > &result)
Calculates the inverse Fourier transform for real and complex data.
void subWeightCdf(unsigned int numIntervals, std::vector< T > &gridValues, std::vector< T > &cdfValues) const
Finds the Weighted Cumulative Distribution Function (CDF) of the sub-sequence of scalars.
void getUnifiedContentsAtProc0Only(bool useOnlyInter0Comm, std::vector< T > &outputVec) const
Gets the unified contents of processor of rank equals to 0.
#define queso_error_msg(msg)
std::vector< T > & rawData()
The sequence of scalars. Access to private attribute m_seq.
void subBasicCdf(unsigned int numIntervals, UniformOneDGrid< T > *&gridValues, std::vector< T > &cdfValues) const
Finds the Cumulative Distribution Function (CDF) of the sub-sequence of scalars.
void unifiedUniformlySampledCdf(bool useOnlyInter0Comm, unsigned int numIntervals, T &unifiedMinDomainValue, T &unifiedMaxDomainValue, std::vector< T > &unifiedCdfValues) const
Uniformly samples from the CDF from the unified sequence.
void unifiedSort(bool useOnlyInter0Comm, unsigned int initialPos, ScalarSequence< T > &unifiedSortedSequence) const
Sorts the unified sequence of scalars.
and that you are informed that you can do these things To protect your we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it For if you distribute copies of the whether gratis or for a you must give the recipients all the rights that we gave you You must make sure that receive or can get the source code If you link other code with the you must provide complete object files to the so that they can relink them with the library after making changes to the library and recompiling it And you must show them these terms so they know their rights We protect your rights with a two step which gives you legal permission to copy
void setUniform(const T &a, const T &b)
Sets the values of the sequence as a uniform distribution between the values given by vectors aVec an...
T subMedianExtra(unsigned int initialPos, unsigned int numPos) const
Finds the median value of the sub-sequence, considering numPos positions starting at position initial...
const std::string & name() const
Access to the name of the sequence of scalars.
void clear()
Clears the sequence of scalars.
Class for accommodating uniform one-dimensional grids.
#define queso_require_less_msg(expr1, expr2, msg)
Class for a Fast Fourier Transform (FFT) algorithm.
T unifiedInterQuantileRange(bool useOnlyInter0Comm, unsigned int initialPos) const
Returns the interquartile range of the values in the unified sequence.
const T & subMaxPlain() const
Finds the maximum value of the sub-sequence of scalars.
void unifiedHistogram(bool useOnlyInter0Comm, unsigned int initialPos, const T &unifiedMinHorizontalValue, const T &unifiedMaxHorizontalValue, std::vector< T > &unifiedCenters, std::vector< unsigned int > &unifiedBins) const
Calculates the histogram of the unified sequence.
Class for handling scalar samples.
void resetValues(unsigned int initialPos, unsigned int)
Sets numPos values of the sequence to zero, starting at position initialPos.
void subUniformlySampledCdf(unsigned int numIntervals, T &minDomainValue, T &maxDomainValue, std::vector< T > &cdfValues) const
Uniformly samples from the CDF from the sub-sequence.
#define queso_require_not_equal_to_msg(expr1, expr2, msg)
void copy(const ScalarSequence< T > &src)
Copies the scalar sequence src to this.
const T & subMeanPlain() const
Finds the mean value of the sub-sequence of scalars.
const T & unifiedSampleVariancePlain(bool useOnlyInter0Comm) const
Finds the variance of a sample of the unified sequence of scalars.
void extractRawData(unsigned int initialPos, unsigned int spacing, unsigned int numPos, std::vector< double > &rawData) const
Extracts the raw data.
double MiscGetEllapsedSeconds(struct timeval *timeval0)
const T & unifiedMaxPlain(bool useOnlyInter0Comm) const
Finds the maximum value of the unified sequence of scalars.
#define queso_require_less_equal_msg(expr1, expr2, msg)
~ScalarSequence()
Destructor.
void ComputeSubGaussian2dKde(const ScalarSequence< T > &scalarSeq1, const ScalarSequence< T > &scalarSeq2, unsigned int initialPos, double scaleValue1, double scaleValue2, const std::vector< T > &evaluationPositions1, const std::vector< T > &evaluationPositions2, std::vector< double > &densityValues)
const T & subMinPlain() const
Finds the minimum value of the sub-sequence of scalars.
ScalarSequence< T > & operator=(const ScalarSequence< T > &rhs)
Assignment operator; it copies rhs to this.
T subPositionsOfMaximum(const ScalarSequence< T > &subCorrespondingScalarValues, ScalarSequence< T > &subPositionsOfMaximum)
Finds the positions where the maximum element occurs in the sub-sequence.
unsigned int numSubEnvironments() const
Access function to the number of sub-environments.
#define queso_require_msg(asserted, msg)
int inter0Rank() const
Returns the process inter0 rank.
void erasePositions(unsigned int initialPos, unsigned int numPos)
Erases numPos values of the sequence, starting at position initialPos.
#define queso_require_equal_to_msg(expr1, expr2, msg)
void ComputeCovCorrBetweenScalarSequences(const ScalarSequence< T > &subPSeq, const ScalarSequence< T > &subQSeq, unsigned int subNumSamples, T &covValue, T &corrValue)
#define queso_require_greater_equal_msg(expr1, expr2, msg)
void unifiedMinMaxExtra(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int numPos, T &unifiedMinValue, T &unifiedMaxValue) const
Finds the minimum and the maximum values of the unified sequence, considering numPos positions starti...
void unifiedGaussian1dKde(bool useOnlyInter0Comm, unsigned int initialPos, double unifiedScaleValue, const std::vector< T > &unifiedEvaluationPositions, std::vector< double > &unifiedDensityValues) const
Gaussian kernel for the KDE estimate of the unified sequence.
T unifiedScaleForKde(bool useOnlyInter0Comm, unsigned int initialPos, const T &unifiedIqrValue, unsigned int kdeDimension) const
Selects the scales (bandwidth) for the kernel density estimation, considering the unified sequence...
const BaseEnvironment & env() const
Access to QUESO environment.
void unifiedWriteContents(const std::string &fileName, const std::string &fileType) const
Writes the unified sequence to a file.
std::vector< T >::const_iterator seqScalarPositionConstIteratorTypedef
T unifiedPopulationVariance(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int numPos, const T &unifiedMeanValue) const
Finds the population variance of the unified sequence, considering numPos positions starting at posit...
const T & unifiedMinPlain(bool useOnlyInter0Comm) const
Finds the minimum value of the unified sequence of scalars.
void unifiedReadContents(const std::string &fileName, const std::string &fileType, const unsigned int subSequenceSize)
Reads the unified sequence from a file.
#define SCALAR_SEQUENCE_SIZE_MPI_MSG
T unifiedMeanExtra(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int localNumPos) const
Finds the mean value of the unified sequence of numPos positions starting at position initialPos...
void subHistogram(unsigned int initialPos, const T &minHorizontalValue, const T &maxHorizontalValue, std::vector< T > ¢ers, std::vector< unsigned int > &bins) const
Calculates the histogram of the sub-sequence.
Struct for handling data input and output from files.
void append(const ScalarSequence< T > &src, unsigned int srcInitialPos, unsigned int srcNumPos)
Appends the scalar sequence src to this sequence.
T autoCorrViaDef(unsigned int initialPos, unsigned int numPos, unsigned int lag) const
Calculates the autocorrelation via definition.
const T & subMedianPlain() const
Finds the median value of the sub-sequence of scalars.
T subSampleStd(unsigned int initialPos, unsigned int numPos, const T &meanValue) const
Finds the sample standard deviation of the unified sequence, considering numPos positions starting at...
T subSampleVarianceExtra(unsigned int initialPos, unsigned int numPos, const T &meanValue) const
Finds the sample variance of the sub-sequence, considering numPos positions starting at position init...
void subWriteContents(unsigned int initialPos, unsigned int numPos, const std::string &fileName, const std::string &fileType, const std::set< unsigned int > &allowedSubEnvIds) const
Writes the sub-sequence to a file.
This (virtual) class sets up the environment underlying the use of the QUESO library by an executable...
T subMeanExtra(unsigned int initialPos, unsigned int numPos) const
Finds the mean value of the sub-sequence, considering numPos positions starting at position initialPo...
#define UQ_FILE_EXTENSION_FOR_HDF_FORMAT
void setName(const std::string &newName)
Sets a new name to the sequence of scalars.
const T & unifiedMeanPlain(bool useOnlyInter0Comm) const
Finds the mean value of the unified sequence of scalars.
T subInterQuantileRange(unsigned int initialPos) const
Returns the interquartile range of the values in the sub-sequence.
void writeSubMatlabHeader(std::ofstream &ofs, double sequenceSize) const
Helper function to write header info for matlab files from one chain.
T unifiedSampleStd(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int localNumPos, const T &unifiedMeanValue) const
Finds the sample standard deviation of the unified sequence, considering localnumPos positions starti...
ScalarSequence(const BaseEnvironment &env, unsigned int subSequenceSize, const std::string &name)
Default constructor.
void resizeSequence(unsigned int newSequenceSize)
Resizes the size of the sequence of scalars.
const T & unifiedMedianPlain(bool useOnlyInter0Comm) const
Finds the median value of the unified sequence of scalars.
#define SCALAR_SEQUENCE_INIT_MPI_MSG
std::ifstream * ifsVar
Provides a stream interface to read data from files.
void ComputeUnifiedGaussian2dKde(bool useOnlyInter0Comm, const ScalarSequence< T > &scalarSeq1, const ScalarSequence< T > &scalarSeq2, unsigned int initialPos, double unifiedScaleValue1, double unifiedScaleValue2, const std::vector< T > &unifiedEvaluationPositions1, const std::vector< T > &unifiedEvaluationPositions2, std::vector< double > &unifiedDensityValues)
#define SCALAR_SEQUENCE_DATA_MPI_MSG
const MpiComm & inter0Comm() const
Access function for MpiComm inter0-communicator.
void writeTxtHeader(std::ofstream &ofs, double sequenceSize) const
Helper function to write txt info for matlab files.
void autoCorrViaFft(unsigned int initialPos, unsigned int numPos, unsigned int maxLag, std::vector< T > &autoCorrs) const
Calculates the autocorrelation via Fast Fourier transforms (FFT).
void subBasicHistogram(unsigned int initialPos, const T &minHorizontalValue, const T &maxHorizontalValue, UniformOneDGrid< T > *&gridValues, std::vector< unsigned int > &bins) const
Calculates the histogram of the sub-sequence.
unsigned int subSequenceSize() const
Size of the sub-sequence of scalars.
const T & operator[](unsigned int posId) const
Access position posId of the sequence of scalars (const).
void subMinMaxExtra(unsigned int initialPos, unsigned int numPos, T &minValue, T &maxValue) const
Finds the minimum and the maximum values of the sub-sequence, considering numPos positions starting a...
void setGaussian(const T &mean, const T &stdDev)
Sets the values of the sequence as a Gaussian distribution of mean given by meanVec and standard devi...
void subWeightHistogram(unsigned int initialPos, const T &minHorizontalValue, const T &maxHorizontalValue, UniformOneDGrid< T > *&gridValues, std::vector< unsigned int > &bins) const
Calculates the weighted histogram of the sub-sequence.
void filter(unsigned int initialPos, unsigned int spacing)
Filters positions in the sequence of vectors.
T unifiedSampleVarianceExtra(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int localNumPos, const T &unifiedMeanValue) const
Finds the sample variance of the unified sequence, considering numPos positions starting at position ...
T brooksGelmanConvMeasure(bool useOnlyInter0Comm, unsigned int initialPos, unsigned int spacing) const
Estimates convergence rate using Brooks & Gelman method.
T autoCovariance(unsigned int initialPos, unsigned int numPos, const T &meanValue, unsigned int lag) const
Calculates the autocovariance.
#define RawValue_MPI_ANY_SOURCE
void subSort()
Sorts the sequence of scalars in the private attribute m_seq.
double MiscGaussianDensity(double x, double mu, double sigma)
std::vector< T >::iterator seqScalarPositionIteratorTypedef
T subScaleForKde(unsigned int initialPos, const T &iqrValue, unsigned int kdeDimension) const
Selects the scales (output value) for the kernel density estimation, considering only the sub-sequenc...
T subPopulationVariance(unsigned int initialPos, unsigned int numPos, const T &meanValue) const
Finds the population variance of the sub-sequence, considering numPos positions starting at position ...
unsigned int unifiedSequenceSize(bool useOnlyInter0Comm) const
Size of the unified sequence of scalars.
void deleteStoredScalars()
Deletes all stored scalars.
const T & subSampleVariancePlain() const
Finds the variance of a sample of the sub-sequence of scalars.
#define queso_not_implemented()
void extractScalarSeq(unsigned int initialPos, unsigned int spacing, unsigned int numPos, ScalarSequence< T > &scalarSeq) const
Extracts a sequence of scalars.
void subGaussian1dKde(unsigned int initialPos, double scaleValue, const std::vector< T > &evaluationPositions, std::vector< double > &densityValues) const
Gaussian kernel for the KDE estimate of the sub-sequence.
T unifiedPositionsOfMaximum(const ScalarSequence< T > &subCorrespondingScalarValues, ScalarSequence< T > &unifiedPositionsOfMaximum)
Finds the positions where the maximum element occurs in the unified sequence.
#define RawValue_MPI_DOUBLE
void subSort(unsigned int initialPos, ScalarSequence< T > &sortedSequence) const
Sorts the sub-sequence of scalars.
void parallelMerge(std::vector< T > &sortedBuffer, const std::vector< T > &leafData, unsigned int treeLevel) const
Sorts/merges data in parallel using MPI.
void forward(const std::vector< T > &data, unsigned int fftSize, std::vector< std::complex< double > > &result)
Calculates the forward Fourier transform (for real data. TODO: complex data).
void writeUnifiedMatlabHeader(std::ofstream &ofs, double sequenceSize) const
Helper function to write header info for matlab files from all chains.