| 158 | 
  | 
      // which bin is this stuntdouble in? | 
| 159 | 
  | 
      // wrapped positions are in the range [-0.5*hmat(2,2), +0.5*hmat(2,2)] | 
| 160 | 
  | 
 | 
| 161 | 
< | 
      int binNo = midBin + int(nBins_ * (pos.z()) / hmat(2,2)); | 
| 161 | 
> | 
      int binNo = int((nBins_-1) * (pos.z() + 0.5*hmat(2,2)) / hmat(2,2)); | 
| 162 | 
  | 
 | 
| 163 | 
  | 
      //std::cerr << "pos.z() = " << pos.z() << " bin = " << binNo << "\n"; | 
| 164 | 
  | 
 | 
| 319 | 
  | 
    bool max_found = false; | 
| 320 | 
  | 
    StuntDouble* max_sd; | 
| 321 | 
  | 
    */ | 
| 322 | 
< | 
    std::vector<RealType> valueHist; | 
| 323 | 
< | 
    std::vector<int> valueCount; | 
| 322 | 
> | 
    std::vector<RealType> valueHist;  // keeps track of what's being averaged | 
| 323 | 
> | 
    std::vector<int> valueCount; // keeps track of the number of degrees of  | 
| 324 | 
> | 
                                 // freedom being averaged | 
| 325 | 
  | 
    valueHist.resize(nBins_); | 
| 326 | 
  | 
    valueCount.resize(nBins_); | 
| 327 | 
  | 
    //do they initialize themselves to zero automatically? | 
| 340 | 
  | 
      // which bin is this stuntdouble in? | 
| 341 | 
  | 
      // wrapped positions are in the range [-0.5*hmat(2,2), +0.5*hmat(2,2)] | 
| 342 | 
  | 
       | 
| 343 | 
< | 
      int binNo = midBin + int(nBins_ * (pos.z()) / hmat(2,2)); | 
| 343 | 
> | 
      int binNo = int((nBins_-1) * (pos.z()+0.5*hmat(2,2)) / hmat(2,2)); | 
| 344 | 
  | 
       | 
| 345 | 
  | 
      //std::cerr << "pos.z() = " << pos.z() << " bin = " << binNo << "\n"; | 
| 346 | 
  | 
       | 
| 355 | 
  | 
        value = mass * (vel[0]*vel[0] + vel[1]*vel[1] +  | 
| 356 | 
  | 
                        vel[2]*vel[2]); | 
| 357 | 
  | 
         | 
| 358 | 
+ | 
        valueCount[binNo] += 3; | 
| 359 | 
+ | 
 | 
| 360 | 
  | 
        if (sd->isDirectional()) { | 
| 361 | 
  | 
          Vector3d angMom = sd->getJ(); | 
| 362 | 
  | 
          Mat3x3d I = sd->getI(); | 
| 367 | 
  | 
            int k = (i + 2) % 3; | 
| 368 | 
  | 
            value += angMom[j] * angMom[j] / I(j, j) +  | 
| 369 | 
  | 
              angMom[k] * angMom[k] / I(k, k); | 
| 370 | 
+ | 
 | 
| 371 | 
+ | 
            valueCount[binNo] +=2; | 
| 372 | 
+ | 
 | 
| 373 | 
  | 
          } else {                         | 
| 374 | 
  | 
            value += angMom[0]*angMom[0]/I(0, 0)  | 
| 375 | 
  | 
              + angMom[1]*angMom[1]/I(1, 1)  | 
| 376 | 
  | 
              + angMom[2]*angMom[2]/I(2, 2); | 
| 377 | 
+ | 
            valueCount[binNo] +=3; | 
| 378 | 
+ | 
 | 
| 379 | 
  | 
          } | 
| 380 | 
  | 
        } | 
| 381 | 
  | 
        //std::cerr <<"this value = " << value << "\n"; | 
| 382 | 
< | 
        value = value * 0.5 / OOPSEConstant::energyConvert; | 
| 382 | 
> | 
        value *= 0.5 / OOPSEConstant::energyConvert;  // get it in kcal / mol | 
| 383 | 
> | 
        value *= 2.0 / OOPSEConstant::kb;             // convert to temperature | 
| 384 | 
  | 
        //std::cerr <<"this value = " << value << "\n"; | 
| 385 | 
  | 
        break; | 
| 386 | 
  | 
      case rnemdPx : | 
| 387 | 
  | 
        value = mass * vel[0]; | 
| 388 | 
+ | 
        valueCount[binNo]++; | 
| 389 | 
  | 
        break; | 
| 390 | 
  | 
      case rnemdPy : | 
| 391 | 
  | 
        value = mass * vel[1]; | 
| 392 | 
+ | 
        valueCount[binNo]++; | 
| 393 | 
  | 
        break; | 
| 394 | 
  | 
      case rnemdPz : | 
| 395 | 
  | 
        value = mass * vel[2]; | 
| 396 | 
+ | 
        valueCount[binNo]++; | 
| 397 | 
  | 
        break; | 
| 398 | 
  | 
      case rnemdUnknown :  | 
| 399 | 
  | 
      default : | 
| 401 | 
  | 
      } | 
| 402 | 
  | 
      //std::cerr << "bin = " << binNo << " value = " << value ; | 
| 403 | 
  | 
      valueHist[binNo] += value; | 
| 392 | 
– | 
      valueCount[binNo]++; | 
| 404 | 
  | 
      //std::cerr << " hist = " << valueHist[binNo] << " count = " << valueCount[binNo] << "\n"; | 
| 405 | 
  | 
    } | 
| 406 | 
  | 
     |