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 |
|
|