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,
2596 this->subWriteContents(initialPos,
2600 m_env.closeFile(filePtrSet,fileType);
2612 const std::string& fileType)
const
2615 this->writeSubMatlabHeader(ofs, this->subSequenceSize());
2618 this->writeTxtHeader(ofs, this->subSequenceSize());
2621 unsigned int chainSize = this->subSequenceSize();
2622 for (
unsigned int j = 0; j < chainSize; ++j) {
2637 const std::string& fileName,
2638 const std::string& inputFileType)
const
2640 std::string fileType(inputFileType);
2641 #ifdef QUESO_HAS_HDF5
2645 if (m_env.subDisplayFile()) {
2646 *m_env.subDisplayFile() <<
"WARNING in ScalarSequence<T>::unifiedWriteContents()"
2648 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2653 if (m_env.subRank() == 0) {
2654 std::cerr <<
"WARNING in ScalarSequence<T>::unifiedWriteContents()"
2656 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2668 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
2669 *m_env.subDisplayFile() <<
"Entering ScalarSequence<T>::unifiedWriteContents()"
2670 <<
": worldRank " << m_env.worldRank()
2671 <<
", subEnvironment " << m_env.subId()
2672 <<
", subRank " << m_env.subRank()
2673 <<
", inter0Rank " << m_env.inter0Rank()
2675 <<
", fileName = " << fileName
2676 <<
", fileType = " << fileType
2682 if (m_env.inter0Rank() >= 0) {
2683 for (
unsigned int r = 0; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
2684 if (m_env.inter0Rank() == (int) r) {
2688 bool writeOver =
false;
2691 if (m_env.openUnifiedOutputFile(fileName,
2694 unifiedFilePtrSet)) {
2697 unsigned int chainSize = this->subSequenceSize();
2704 this->writeUnifiedMatlabHeader(*unifiedFilePtrSet.
ofsVar,
2705 this->subSequenceSize()*m_env.inter0Comm().NumProc());
2708 this->writeTxtHeader(*unifiedFilePtrSet.
ofsVar,
2709 this->subSequenceSize()*m_env.inter0Comm().NumProc());
2713 for (
unsigned int j = 0; j < chainSize; ++j) {
2714 *unifiedFilePtrSet.
ofsVar << m_seq[j]
2718 m_env.closeFile(unifiedFilePtrSet,fileType);
2720 #ifdef QUESO_HAS_HDF5
2722 unsigned int numParams = 1;
2724 hid_t datatype = H5Tcopy(H5T_NATIVE_DOUBLE);
2727 dimsf[0] = numParams;
2728 dimsf[1] = chainSize;
2729 hid_t dataspace = H5Screate_simple(2, dimsf, NULL);
2731 hid_t dataset = H5Dcreate2(unifiedFilePtrSet.h5Var,
2740 struct timeval timevalBegin;
2742 iRC = gettimeofday(&timevalBegin,NULL);
2746 std::vector<double*> dataOut((
size_t) numParams,NULL);
2747 dataOut[0] = (
double*) malloc(numParams*chainSize*
sizeof(
double));
2748 for (
unsigned int i = 1; i < numParams; ++i) {
2749 dataOut[i] = dataOut[i-1] + chainSize;
2752 for (
unsigned int j = 0; j < chainSize; ++j) {
2753 T tmpScalar = m_seq[j];
2754 for (
unsigned int i = 0; i < numParams; ++i) {
2755 dataOut[i][j] = tmpScalar;
2762 status = H5Dwrite(dataset,
2767 (
void*) dataOut[0]);
2774 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
2775 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedWriteContents()"
2776 <<
": worldRank " << m_env.worldRank()
2777 <<
", fullRank " << m_env.fullRank()
2778 <<
", subEnvironment " << m_env.subId()
2779 <<
", subRank " << m_env.subRank()
2780 <<
", inter0Rank " << m_env.inter0Rank()
2781 <<
", fileName = " << fileName
2782 <<
", numParams = " << numParams
2783 <<
", chainSize = " << chainSize
2784 <<
", writeTime = " << writeTime <<
" seconds"
2790 H5Sclose(dataspace);
2795 for (
unsigned int tmpIndex = 0; tmpIndex < dataOut.size(); tmpIndex++) {
2796 free (dataOut[tmpIndex]);
2800 queso_error_msg(
"hdf file type not supported for multiple sub-environments yet");
2807 m_env.inter0Comm().Barrier();
2810 if (m_env.inter0Rank() == 0) {
2814 if (m_env.openUnifiedOutputFile(fileName,
2817 unifiedFilePtrSet)) {
2820 *unifiedFilePtrSet.
ofsVar <<
"];\n";
2823 m_env.closeFile(unifiedFilePtrSet,fileType);
2835 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
2836 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<T>::unifiedWriteContents()"
2837 <<
", fileName = " << fileName
2838 <<
", fileType = " << fileType
2849 double sequenceSize)
const
2851 ofs << m_name <<
"_unified" <<
" = zeros(" << sequenceSize
2855 ofs << m_name <<
"_unified" <<
" = [";
2861 double sequenceSize)
const
2863 ofs << m_name <<
"_sub" << m_env.subIdString() <<
" = zeros(" << sequenceSize
2867 ofs << m_name <<
"_sub" << m_env.subIdString() <<
" = [";
2873 double sequenceSize)
const
2875 ofs << sequenceSize <<
" " << 1 << std::endl;
2882 const std::string& fileName,
2883 const std::string& inputFileType,
2884 const unsigned int subReadSize)
2887 std::string fileType(inputFileType);
2888 #ifdef QUESO_HAS_HDF5
2892 if (m_env.subDisplayFile()) {
2893 *m_env.subDisplayFile() <<
"WARNING in ScalarSequence<T>::unifiedReadContents()"
2895 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2900 if (m_env.subRank() == 0) {
2901 std::cerr <<
"WARNING in ScalarSequence<T>::unifiedReadContents()"
2903 <<
"' has been requested, but this QUESO library has not been built with 'hdf5'"
2913 if (m_env.subDisplayFile()) {
2914 *m_env.subDisplayFile() <<
"Entering ScalarSequence<T>::unifiedReadContents()"
2915 <<
": worldRank " << m_env.worldRank()
2916 <<
", fullRank " << m_env.fullRank()
2917 <<
", subEnvironment " << m_env.subId()
2918 <<
", subRank " << m_env.subRank()
2919 <<
", inter0Rank " << m_env.inter0Rank()
2921 <<
", fileName = " << fileName
2922 <<
", subReadSize = " << subReadSize
2927 this->resizeSequence(subReadSize);
2929 if (m_env.inter0Rank() >= 0) {
2930 double unifiedReadSize = subReadSize*m_env.inter0Comm().NumProc();
2933 unsigned int idOfMyFirstLine = 1 + m_env.inter0Rank()*subReadSize;
2934 unsigned int idOfMyLastLine = (1 + m_env.inter0Rank())*subReadSize;
2935 unsigned int numParams = 1;
2937 for (
unsigned int r = 0; r < (
unsigned int) m_env.inter0Comm().NumProc(); ++r) {
2938 if (m_env.inter0Rank() == (int) r) {
2941 if (m_env.openUnifiedInputFile(fileName,
2943 unifiedFilePtrSet)) {
2949 std::string tmpString;
2952 *unifiedFilePtrSet.
ifsVar >> tmpString;
2956 *unifiedFilePtrSet.
ifsVar >> tmpString;
2961 *unifiedFilePtrSet.
ifsVar >> tmpString;
2963 unsigned int posInTmpString = 6;
2967 std::string nPositionsString((
size_t) (tmpString.size()-posInTmpString+1),
' ');
2968 unsigned int posInPositionsString = 0;
2971 nPositionsString[posInPositionsString++] = tmpString[posInTmpString++];
2972 }
while (tmpString[posInTmpString] !=
',');
2973 nPositionsString[posInPositionsString] =
'\0';
2978 std::string nParamsString((
size_t) (tmpString.size()-posInTmpString+1),
' ');
2979 unsigned int posInParamsString = 0;
2982 nParamsString[posInParamsString++] = tmpString[posInTmpString++];
2983 }
while (tmpString[posInTmpString] !=
')');
2984 nParamsString[posInParamsString] =
'\0';
2987 unsigned int sizeOfChainInFile = (
unsigned int) strtod(nPositionsString.c_str(),NULL);
2988 unsigned int numParamsInFile = (
unsigned int) strtod(nParamsString.c_str(), NULL);
2989 if (m_env.subDisplayFile()) {
2990 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedReadContents()"
2991 <<
": worldRank " << m_env.worldRank()
2992 <<
", fullRank " << m_env.fullRank()
2993 <<
", sizeOfChainInFile = " << sizeOfChainInFile
2994 <<
", numParamsInFile = " << numParamsInFile
3002 queso_require_equal_to_msg(numParamsInFile, numParams,
"number of parameters of chain in file is different than number of parameters in this chain object");
3006 unsigned int maxCharsPerLine = 64*numParams;
3008 unsigned int lineId = 0;
3009 while (lineId < idOfMyFirstLine) {
3010 unifiedFilePtrSet.
ifsVar->ignore(maxCharsPerLine,
'\n');
3017 std::string tmpString;
3020 *unifiedFilePtrSet.
ifsVar >> tmpString;
3024 *unifiedFilePtrSet.
ifsVar >> tmpString;
3029 std::streampos tmpPos = unifiedFilePtrSet.
ifsVar->tellg();
3030 unifiedFilePtrSet.
ifsVar->seekg(tmpPos+(std::streampos)2);
3034 while (lineId <= idOfMyLastLine) {
3035 for (
unsigned int i = 0; i < numParams; ++i) {
3036 *unifiedFilePtrSet.
ifsVar >> tmpScalar;
3038 m_seq[lineId - idOfMyFirstLine] = tmpScalar;
3042 #ifdef QUESO_HAS_HDF5
3045 hid_t dataset = H5Dopen2(unifiedFilePtrSet.h5Var,
3048 hid_t datatype = H5Dget_type(dataset);
3049 H5T_class_t t_class = H5Tget_class(datatype);
3051 hid_t dataspace = H5Dget_space(dataset);
3052 int rank = H5Sget_simple_extent_ndims(dataspace);
3056 status_n = H5Sget_simple_extent_dims(dataspace, dims_in, NULL);
3065 struct timeval timevalBegin;
3067 iRC = gettimeofday(&timevalBegin,NULL);
3070 unsigned int chainSizeIn = (
unsigned int) dims_in[1];
3072 std::vector<double*>
dataIn((
size_t) numParams,NULL);
3073 dataIn[0] = (
double*) malloc(numParams*chainSizeIn*
sizeof(
double));
3074 for (
unsigned int i = 1; i < numParams; ++i) {
3075 dataIn[i] = dataIn[i-1] + chainSizeIn;
3079 status = H5Dread(dataset,
3088 for (
unsigned int j = 0; j < subReadSize; ++j) {
3089 for (
unsigned int i = 0; i < numParams; ++i) {
3090 tmpScalar = dataIn[i][j];
3092 m_seq[j] = tmpScalar;
3096 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 2)) {
3097 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::unifiedReadContents()"
3098 <<
": worldRank " << m_env.worldRank()
3099 <<
", fullRank " << m_env.fullRank()
3100 <<
", subEnvironment " << m_env.subId()
3101 <<
", subRank " << m_env.subRank()
3102 <<
", inter0Rank " << m_env.inter0Rank()
3103 <<
", fileName = " << fileName
3104 <<
", numParams = " << numParams
3105 <<
", chainSizeIn = " << chainSizeIn
3106 <<
", subReadSize = " << subReadSize
3107 <<
", readTime = " << readTime <<
" seconds"
3111 H5Sclose(dataspace);
3115 for (
unsigned int tmpIndex = 0; tmpIndex < dataIn.size(); tmpIndex++) {
3116 free (dataIn[tmpIndex]);
3120 queso_error_msg(
"hdf file type not supported for multiple sub-environments yet");
3127 m_env.closeFile(unifiedFilePtrSet,fileType);
3130 m_env.inter0Comm().Barrier();
3135 for (
unsigned int i = 1; i < subReadSize; ++i) {
3136 m_seq[i] = tmpScalar;
3140 if (m_env.subDisplayFile()) {
3141 *m_env.subDisplayFile() <<
"Leaving ScalarSequence<T>::unifiedReadContents()"
3142 <<
", fileName = " << fileName
3157 for (
unsigned int i = 0; i < m_seq.size(); ++i) {
3158 m_seq[i] = src.
m_seq[i];
3160 deleteStoredScalars();
3168 unsigned int initialPos,
3169 unsigned int spacing,
3170 unsigned int numPos,
3175 for (
unsigned int j = 0; j < numPos; ++j) {
3185 scalarSeq[j] = m_seq[initialPos+j ];
3189 for (
unsigned int j = 0; j < numPos; ++j) {
3199 scalarSeq[j] = m_seq[initialPos+j*spacing];
3209 unsigned int initialPos,
3210 unsigned int spacing,
3211 unsigned int numPos,
3212 std::vector<double>& rawDataVec)
const
3214 rawDataVec.resize(numPos);
3216 for (
unsigned int j = 0; j < numPos; ++j) {
3217 rawDataVec[j] = m_seq[initialPos+j ];
3221 for (
unsigned int j = 0; j < numPos; ++j) {
3222 rawDataVec[j] = m_seq[initialPos+j*spacing];
3241 std::sort(m_seq.begin(), m_seq.end());
3250 std::vector<T>& sortedBuffer,
3251 const std::vector<T>& leafData,
3252 unsigned int currentTreeLevel)
const
3254 int parentNode = m_env.inter0Rank() & ~(1 << currentTreeLevel);
3256 if (m_env.inter0Rank() >= 0) {
3257 if (currentTreeLevel == 0) {
3259 unsigned int leafDataSize = leafData.size();
3260 sortedBuffer.resize(leafDataSize,0.);
3261 for (
unsigned int i = 0; i < leafDataSize; ++i) {
3262 sortedBuffer[i] = leafData[i];
3264 std::sort(sortedBuffer.begin(), sortedBuffer.end());
3265 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3266 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3267 <<
": tree node " << m_env.inter0Rank()
3268 <<
", leaf sortedBuffer[0] = " << sortedBuffer[0]
3269 <<
", leaf sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3274 int nextTreeLevel = currentTreeLevel - 1;
3275 int rightChildNode = m_env.inter0Rank() | (1 << nextTreeLevel);
3277 if (rightChildNode >= m_env.inter0Comm().NumProc()) {
3278 this->parallelMerge(sortedBuffer,
3283 unsigned int uintBuffer[1];
3284 uintBuffer[0] = nextTreeLevel;
3286 "ScalarSequence<T>::parallelMerge()",
3287 "failed MPI.Send() for init");
3289 this->parallelMerge(sortedBuffer,
3294 unsigned int leftSize = sortedBuffer.size();
3295 std::vector<T> leftSortedBuffer(leftSize,0.);
3296 for (
unsigned int i = 0; i < leftSize; ++i) {
3297 leftSortedBuffer[i] = sortedBuffer[i];
3303 "ScalarSequence<T>::parallelMerge()",
3304 "failed MPI.Recv() for size");
3307 unsigned int rightSize = uintBuffer[0];
3308 std::vector<T> rightSortedBuffer(rightSize,0.);
3310 "ScalarSequence<T>::parallelMerge()",
3311 "failed MPI.Recv() for data");
3314 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3315 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3316 <<
": tree node " << m_env.inter0Rank()
3317 <<
" is combining " << leftSortedBuffer.size()
3318 <<
" left doubles with " << rightSortedBuffer.size()
3323 sortedBuffer.clear();
3324 sortedBuffer.resize(leftSortedBuffer.size()+rightSortedBuffer.size(),0.);
3328 while ((i < leftSize ) &&
3330 if (leftSortedBuffer[i] > rightSortedBuffer[j]) sortedBuffer[k++] = rightSortedBuffer[j++];
3331 else sortedBuffer[k++] = leftSortedBuffer [i++];
3333 while (i < leftSize ) sortedBuffer[k++] = leftSortedBuffer [i++];
3334 while (j < rightSize) sortedBuffer[k++] = rightSortedBuffer[j++];
3335 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 0)) {
3336 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3337 <<
": tree node " << m_env.inter0Rank()
3338 <<
", merged sortedBuffer[0] = " << sortedBuffer[0]
3339 <<
", merged sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3345 if (parentNode != m_env.inter0Rank()) {
3347 unsigned int uintBuffer[1];
3348 uintBuffer[0] = sortedBuffer.size();
3350 "ScalarSequence<T>::parallelMerge()",
3351 "failed MPI.Send() for size");
3353 if ((m_env.subDisplayFile()) && (m_env.displayVerbosity() >= 10)) {
3354 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::parallelMerge()"
3355 <<
": tree node " << m_env.inter0Rank()
3356 <<
" is sending " << sortedBuffer.size()
3357 <<
" doubles to tree node " << parentNode
3358 <<
", with sortedBuffer[0] = " << sortedBuffer[0]
3359 <<
" and sortedBuffer[" << sortedBuffer.size()-1 <<
"] = " << sortedBuffer[sortedBuffer.size()-1]
3364 "ScalarSequence<T>::parallelMerge()",
3365 "failed MPI.Send() for data");
3377 #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
3381 unsigned int numEvaluationPoints,
3384 std::vector<T>& mdfValues)
const
3388 std::vector<T> centers(numEvaluationPoints,0.);
3389 std::vector<unsigned int> bins (numEvaluationPoints,0);
3392 this->subSequenceSize(),
3401 minDomainValue = centers[0];
3402 maxDomainValue = centers[centers.size()-1];
3403 T binSize = (maxDomainValue - minDomainValue)/((
double)(centers.size() - 1));
3405 unsigned int totalCount = 0;
3406 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
3407 totalCount += bins[i];
3411 mdfValues.resize(numEvaluationPoints);
3412 for (
unsigned int i = 0; i < numEvaluationPoints; ++i) {
3413 mdfValues[i] = ((T) bins[i])/((T) totalCount)/binSize;
3421 ScalarSequence<T>::subMeanCltStd(
3422 unsigned int initialPos,
3423 unsigned int numPos,
3424 const T& meanValue)
const
3426 if (this->subSequenceSize() == 0)
return 0.;
3428 bool bRC = ((initialPos < this->subSequenceSize()) &&
3430 ((initialPos+numPos) <= this->subSequenceSize()));
3433 unsigned int finalPosPlus1 = initialPos + numPos;
3436 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
3437 diff = m_seq[j] - meanValue;
3438 stdValue += diff*diff;
3441 stdValue /= (((T) numPos) - 1.);
3442 stdValue /= (((T) numPos) - 1.);
3443 stdValue = sqrt(stdValue);
3450 ScalarSequence<T>::unifiedMeanCltStd(
3451 bool useOnlyInter0Comm,
3452 unsigned int initialPos,
3453 unsigned int numPos,
3454 const T& unifiedMeanValue)
const
3456 if (m_env.numSubEnvironments() == 1) {
3457 return this->subMeanCltStd(initialPos,
3464 T unifiedStdValue = 0.;
3465 if (useOnlyInter0Comm) {
3466 if (m_env.inter0Rank() >= 0) {
3467 bool bRC = ((initialPos < this->subSequenceSize()) &&
3469 ((initialPos+numPos) <= this->subSequenceSize()));
3472 unsigned int finalPosPlus1 = initialPos + numPos;
3474 T localStdValue = 0.;
3475 for (
unsigned int j = initialPos; j < finalPosPlus1; ++j) {
3476 diff = m_seq[j] - unifiedMeanValue;
3477 localStdValue += diff*diff;
3480 unsigned int unifiedNumPos = 0;
3481 m_env.inter0Comm().template Allreduce<unsigned int>(&numPos, &unifiedNumPos, (int) 1,
RawValue_MPI_SUM,
3482 "ScalarSequence<T>::unifiedMeanCltStd()",
3483 "failed MPI.Allreduce() for numPos");
3485 m_env.inter0Comm().template Allreduce<double>(&localStdValue, &unifiedStdValue, (int) 1,
RawValue_MPI_SUM,
3486 "ScalarSequence<T>::unifiedMeanCltStd()",
3487 "failed MPI.Allreduce() for stdValue");
3489 unifiedStdValue /= (((T) unifiedNumPos) - 1.);
3490 unifiedStdValue /= (((T) unifiedNumPos) - 1.);
3491 unifiedStdValue /= sqrt(unifiedStdValue);
3495 this->subMeanCltStd(initialPos,
3505 return unifiedStdValue;
3510 ScalarSequence<T>::bmm(
3511 unsigned int initialPos,
3512 unsigned int batchLength)
const
3514 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3515 (batchLength < (this->subSequenceSize()-initialPos)));
3518 unsigned int numberOfBatches = (this->subSequenceSize() - initialPos)/batchLength;
3519 ScalarSequence<T> batchMeans(m_env,numberOfBatches,
"");
3521 for (
unsigned int batchId = 0; batchId < numberOfBatches; batchId++) {
3522 batchMeans[batchId] = this->subMeanExtra(initialPos + batchId*batchLength,
3526 T meanOfBatchMeans = batchMeans.subMeanExtra(0,
3527 batchMeans.subSequenceSize());
3534 T bmmValue = batchMeans.subSampleVarianceExtra(0,
3535 batchMeans.subSequenceSize(),
3538 bmmValue /= (T) batchMeans.subSequenceSize();
3546 ScalarSequence<T>::psd(
3547 unsigned int initialPos,
3548 unsigned int numBlocks,
3549 double hopSizeRatio,
3550 std::vector<double>& psdResult)
const
3552 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3553 (hopSizeRatio != 0. ) &&
3554 (numBlocks < (this->subSequenceSize() - initialPos)) &&
3555 (fabs(hopSizeRatio) < (double) (this->subSequenceSize() - initialPos)));
3558 unsigned int dataSize = this->subSequenceSize() - initialPos;
3560 T meanValue = this->subMeanExtra(initialPos,
3564 unsigned int hopSize = 0;
3565 unsigned int blockSize = 0;
3566 if (hopSizeRatio <= -1.) {
3567 double overlapSize = -hopSizeRatio;
3568 double tmp = ((double) (dataSize + (numBlocks - 1)*overlapSize))/((double) numBlocks);
3569 blockSize = (
unsigned int) tmp;
3571 else if (hopSizeRatio < 0.) {
3572 double tmp = ((double) dataSize)/(( ((double) numBlocks) - 1. )*(-hopSizeRatio) + 1.);
3573 blockSize = (
unsigned int) tmp;
3574 hopSize = (
unsigned int) ( ((
double) blockSize) * (-hopSizeRatio) );
3576 else if (hopSizeRatio == 0.) {
3579 else if (hopSizeRatio < 1.) {
3580 double tmp = ((double) dataSize)/(( ((double) numBlocks) - 1. )*hopSizeRatio + 1.);
3581 blockSize = (
unsigned int) tmp;
3582 hopSize = (
unsigned int) ( ((
double) blockSize) * hopSizeRatio );
3585 hopSize = (
unsigned int) hopSizeRatio;
3586 blockSize = dataSize - (numBlocks - 1)*hopSize;
3589 int numberOfDiscardedDataElements = dataSize - (numBlocks-1)*hopSize - blockSize;
3603 double tmp = log((
double) blockSize)/log(2.);
3604 double fractionalPart = tmp - ((double) ((
unsigned int) tmp));
3605 if (fractionalPart > 0.) tmp += (1. - fractionalPart);
3606 unsigned int fftSize = (
unsigned int) std::pow(2.,tmp);
3614 double modificationScale = 0.;
3615 for (
unsigned int j = 0; j < blockSize; ++j) {
3617 modificationScale += tmpValue*tmpValue;
3619 modificationScale = 1./modificationScale;
3621 std::vector<double> blockData(blockSize,0.);
3622 Fft<T> fftObj(m_env);
3623 std::vector<std::complex<double> > fftResult(0,std::complex<double>(0.,0.));
3626 unsigned int halfFFTSize = fftSize/2;
3628 psdResult.resize(1+halfFFTSize,0.);
3629 double factor = 1./M_PI/((double) numBlocks);
3632 psdResult.resize(fftSize,0.);
3633 double factor = 1./2./M_PI/((double) numBlocks);
3636 for (
unsigned int blockId = 0; blockId < numBlocks; blockId++) {
3638 unsigned int initialDataPos = initialPos + blockId*hopSize;
3639 for (
unsigned int j = 0; j < blockSize; ++j) {
3640 unsigned int dataPos = initialDataPos + j;
3642 blockData[j] =
MiscHammingWindow(blockSize-1,j) * ( m_seq[dataPos] - meanValue );
3645 fftObj.forward(blockData,fftSize,fftResult);
3655 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
3656 psdResult[j] += norm(fftResult[j])*modificationScale;
3660 for (
unsigned int j = 0; j < psdResult.size(); ++j) {
3661 psdResult[j] *= factor;
3669 ScalarSequence<T>::geweke(
3670 unsigned int initialPos,
3672 double ratioNb)
const
3674 double doubleFullDataSize = (double) (this->subSequenceSize() - initialPos);
3675 ScalarSequence<T> tmpSeq(m_env,0,
"");
3676 std::vector<double> psdResult(0,0.);
3678 unsigned int dataSizeA = (
unsigned int) (doubleFullDataSize * ratioNa);
3679 double doubleDataSizeA = (double) dataSizeA;
3680 unsigned int initialPosA = initialPos;
3681 this->extractScalarSeq(initialPosA,
3685 double meanA = tmpSeq.subMeanExtra(0,
3688 (
unsigned int) std::sqrt((
double) dataSizeA),
3691 double psdA = psdResult[0];
3692 double varOfMeanA = 2.*M_PI*psdA/doubleDataSizeA;
3694 unsigned int dataSizeB = (
unsigned int) (doubleFullDataSize * ratioNb);
3695 double doubleDataSizeB = (double) dataSizeB;
3696 unsigned int initialPosB = this->subSequenceSize() - dataSizeB;
3697 this->extractScalarSeq(initialPosB,
3701 double meanB = tmpSeq.subMeanExtra(0,
3704 (
unsigned int) std::sqrt((
double) dataSizeB),
3707 double psdB = psdResult[0];
3708 double varOfMeanB = 2.*M_PI*psdB/doubleDataSizeB;
3710 if (m_env.subDisplayFile()) {
3711 *m_env.subDisplayFile() <<
"In ScalarSequence<T>::geweke()"
3712 <<
", before computation of gewCoef"
3714 <<
", dataSizeA = " << dataSizeA
3715 <<
", numBlocksA = " << (
unsigned int) std::sqrt((
double) dataSizeA)
3716 << ", meanA = " << meanA
3717 << ", psdA = " << psdA
3718 << ", varOfMeanA = " << varOfMeanA
3720 << ", dataSizeB = " << dataSizeB
3721 << ", numBlocksB = " << (
unsigned int) std::sqrt((
double) dataSizeB)
3722 << ", meanB = " << meanB
3723 << ", psdB = " << psdB
3724 << ", varOfMeanB = " << varOfMeanB
3727 double gewCoef = (meanA - meanB)/std::sqrt(varOfMeanA + varOfMeanB);
3734 ScalarSequence<T>::meanStacc(
3735 unsigned int initialPos)
const
3746 ScalarSequence<T>::subCdfPercentageRange(
3747 unsigned int initialPos,
3748 unsigned int numPos,
3751 T& upperValue)
const
3757 ScalarSequence<T> sortedSequence(m_env,0,
"");;
3758 sortedSequence.resizeSequence(numPos);
3759 this->extractScalarSeq(initialPos,
3763 sortedSequence.subSort();
3765 unsigned int lowerId = (
unsigned int) round( 0.5*(1.-range)*((double) numPos) );
3766 lowerValue = sortedSequence[lowerId];
3768 unsigned int upperId = (
unsigned int) round( 0.5*(1.+range)*((double) numPos) );
3769 if (upperId == numPos) {
3770 upperId = upperId-1;
3773 upperValue = sortedSequence[upperId];
3780 ScalarSequence<T>::unifiedCdfPercentageRange(
3781 bool useOnlyInter0Comm,
3782 unsigned int initialPos,
3783 unsigned int numPos,
3785 T& unifiedLowerValue,
3786 T& unifiedUpperValue)
const
3788 if (m_env.numSubEnvironments() == 1) {
3789 return this->subCdfPercentageRange(initialPos,
3802 if (useOnlyInter0Comm) {
3803 if (m_env.inter0Rank() >= 0) {
3808 this->subCdfPercentageRange(initialPos,
3824 ScalarSequence<T>::subCdfStacc(
3825 unsigned int initialPos,
3826 std::vector<double>& cdfStaccValues,
3827 std::vector<double>& cdfStaccValuesUp,
3828 std::vector<double>& cdfStaccValuesLow,
3829 const ScalarSequence<T>& sortedDataValues)
const
3832 bool bRC = (initialPos < this->subSequenceSize() );
3835 unsigned int numPoints = subSequenceSize()-initialPos;
3836 double auxNumPoints = numPoints;
3837 double maxLamb = 0.;
3838 std::vector<double> ro (numPoints,0.);
3839 std::vector<double> Isam_mat(numPoints,0.);
3841 for (
unsigned int pointId = 0; pointId < numPoints; pointId++) {
3842 double p = ( ((double) pointId) + 1.0 )/auxNumPoints;
3843 double ro0 = p*(1.0-p);
3844 cdfStaccValues[pointId] = p;
3849 for (
unsigned int k = 0;
k < numPoints;
k++) {
3850 if (m_seq[
k] <= sortedDataValues[pointId]) {
3858 for (
unsigned int tau = 0; tau < (numPoints-1); tau++) {
3860 for (
unsigned int kk = 0; kk < numPoints-(tau+1); kk++) {
3861 ro[tau] += (Isam_mat[kk+tau+1]-p)*(Isam_mat[kk]-p);
3863 ro[tau] *= 1.0/auxNumPoints;
3866 for (
unsigned int tau = 0; tau < (numPoints-1); tau++) {
3867 double auxTau = tau;
3868 lamb += (1.-(auxTau+1.)/auxNumPoints)*ro[tau]/ro0;
3869 if (lamb > maxLamb) maxLamb = lamb;
3874 cdfStaccValuesUp [pointId] = cdfStaccValues[pointId]+1.96*sqrt(ro0/auxNumPoints*(1.+lamb));
3875 cdfStaccValuesLow[pointId] = cdfStaccValues[pointId]-1.96*sqrt(ro0/auxNumPoints*(1.+lamb));
3876 if (cdfStaccValuesLow[pointId] < 0.) cdfStaccValuesLow[pointId] = 0.;
3877 if (cdfStaccValuesUp [pointId] > 1.) cdfStaccValuesUp [pointId] = 1.;
3885 unsigned int dataSize = this->subSequenceSize() - initialPos;
3886 unsigned int numEvals = evaluationPositions.size();
3888 for (
unsigned int j = 0; j < numEvals; ++j) {
3889 double x = evaluationPositions[j];
3891 for (
unsigned int k = 0;
k < dataSize; ++
k) {
3892 double xk = m_seq[initialPos+
k];
3895 cdfStaccValues[j] = value/(double) dataSize;
3904 ScalarSequence<T>::subCdfStacc(
3905 unsigned int initialPos,
3906 const std::vector<T>& evaluationPositions,
3907 std::vector<double>& cdfStaccValues)
const
3911 bool bRC = ((initialPos < this->subSequenceSize() ) &&
3912 (0 < evaluationPositions.size()) &&
3913 (evaluationPositions.size() == cdfStaccValues.size() ));
3923 unsigned int dataSize = this->subSequenceSize() - initialPos;
3924 unsigned int numEvals = evaluationPositions.size();
3926 for (
unsigned int j = 0; j < numEvals; ++j) {
3929 for (
unsigned int k = 0;
k < dataSize; ++
k) {
3933 cdfStaccValues[j] = value/(double) dataSize;
3939 #endif // #ifdef QUESO_COMPUTES_EXTRA_POST_PROCESSING_STATISTICS
3949 unsigned int initialPos,
3952 const std::vector<T>& evaluationPositions1,
3953 const std::vector<T>& evaluationPositions2,
3954 std::vector<double>& densityValues)
3958 double covValue = 0.;
3959 double corrValue = 0.;
3968 (0 < evaluationPositions1.size() ) &&
3969 (evaluationPositions1.size() == evaluationPositions2.size() ) &&
3970 (evaluationPositions1.size() == densityValues.size() ));
3974 unsigned int numEvals = evaluationPositions1.size();
3976 double scale1Inv = 1./scaleValue1;
3977 double scale2Inv = 1./scaleValue2;
3979 double r = 1. - corrValue*corrValue;
3981 std::cerr <<
"In ComputeSubGaussian2dKde()"
3982 <<
": WARNING, r = " << r
3989 for (
unsigned int j = 0; j < numEvals; ++j) {
3990 double x1 = evaluationPositions1[j];
3991 double x2 = evaluationPositions2[j];
3993 for (
unsigned int k = 0;
k < dataSize; ++
k) {
3994 double d1k = scale1Inv*(x1 - scalarSeq1[initialPos+
k]);
3995 double d2k = scale2Inv*(x2 - scalarSeq2[initialPos+
k]);
3996 value += exp(-.5*( d1k*d1k + 2*corrValue*d1k*d2k + d2k*d2k )/r);
3998 densityValues[j] = scale1Inv * scale2Inv * (value/(double) dataSize) / 2. / M_PI / sqrt(r);
4009 unsigned int initialPos,
4010 double unifiedScaleValue1,
4011 double unifiedScaleValue2,
4012 const std::vector<T>& unifiedEvaluationPositions1,
4013 const std::vector<T>& unifiedEvaluationPositions2,
4014 std::vector<double>& unifiedDensityValues)
4022 unifiedEvaluationPositions1,
4023 unifiedEvaluationPositions2,
4024 unifiedDensityValues);
4029 if (useOnlyInter0Comm) {
4040 unifiedEvaluationPositions1,
4041 unifiedEvaluationPositions2,
4042 unifiedDensityValues);
4059 unsigned int subNumSamples,
4078 for (
unsigned k = 0;
k < subNumSamples; ++
k) {
4080 tmpP = subPSeq[
k] - unifiedMeanP;
4081 tmpQ = subQSeq[
k] - unifiedMeanQ;
4082 covValue += tmpP*tmpQ;
4098 unsigned int unifiedNumSamples = 0;
4100 "ComputeCovCorrBetweenScalarSequences()",
4101 "failed MPI.Allreduce() for subNumSamples");
4105 "ComputeCovCorrBetweenScalarSequences()",
4106 "failed MPI.Allreduce() for a matrix position");
4107 covValue = aux/((double) (unifiedNumSamples-1));
4109 corrValue = covValue/std::sqrt(unifiedSampleVarianceP)/std::sqrt(unifiedSampleVarianceQ);
4111 if ((corrValue < -1.) || (corrValue > 1.)) {
4112 std::cerr <<
"In ComputeCovCorrBetweenScalarSequences()"
4113 <<
": 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.