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.