| 51 | 
  | 
#include "io/DumpReader.hpp" | 
| 52 | 
  | 
#include "primitives/Molecule.hpp" | 
| 53 | 
  | 
#include "utils/NumericConstant.hpp" | 
| 54 | 
< | 
#include "math/RealSphericalHarmonic.hpp" | 
| 54 | 
> | 
#include "math/SphericalHarmonic.hpp" | 
| 55 | 
  | 
 | 
| 56 | 
  | 
namespace oopse { | 
| 57 | 
  | 
 | 
| 108 | 
  | 
    Molecule::RigidBodyIterator rbIter; | 
| 109 | 
  | 
    Molecule::AtomIterator ai; | 
| 110 | 
  | 
    StuntDouble* sd; | 
| 111 | 
< | 
    RealType theta; | 
| 111 | 
> | 
    RealType costheta; | 
| 112 | 
  | 
    RealType phi; | 
| 113 | 
  | 
    RealType r; | 
| 114 | 
  | 
    RealType dist; | 
| 115 | 
< | 
    std::map<int, RealType> QBar_lm; | 
| 115 | 
> | 
    std::map<int, ComplexType> QBar_lm; | 
| 116 | 
  | 
    RealType QSq_l; | 
| 117 | 
  | 
    RealType Q_l; | 
| 118 | 
  | 
    int nBonds; | 
| 119 | 
< | 
    RealSphericalHarmonic sphericalHarmonic; | 
| 119 | 
> | 
    SphericalHarmonic sphericalHarmonic; | 
| 120 | 
  | 
    int i, j; | 
| 121 | 
  | 
   | 
| 122 | 
  | 
    // Set the l for the spherical harmonic, it doesn't change | 
| 180 | 
  | 
            // Check to see if neighbor is in bond cutoff  | 
| 181 | 
  | 
             | 
| 182 | 
  | 
            if (r < rCut_) {             | 
| 183 | 
< | 
              theta = atan2(vec.y(), vec.x()); | 
| 184 | 
< | 
              phi = acos(vec.z()/r); | 
| 183 | 
> | 
              costheta = vec.z() / r; | 
| 184 | 
> | 
              phi = atan2(vec.y(), vec.x()); | 
| 185 | 
> | 
               | 
| 186 | 
  | 
              for(int m = -lNumber_; m <= lNumber_; m++){ | 
| 187 | 
  | 
                sphericalHarmonic.setM(m); | 
| 188 | 
< | 
                QBar_lm[m] += sphericalHarmonic.getValueAt(theta,phi); | 
| 188 | 
> | 
                QBar_lm[m] += sphericalHarmonic.getValueAt(costheta,phi); | 
| 189 | 
  | 
              } | 
| 190 | 
  | 
              nBonds++; | 
| 191 | 
  | 
            }   | 
| 192 | 
  | 
          } | 
| 193 | 
  | 
        } | 
| 194 | 
  | 
         | 
| 195 | 
< | 
        // Normalize Qbar | 
| 195 | 
> | 
        // Normalize Qbar2 | 
| 196 | 
  | 
        for (int m = -lNumber_;m <= lNumber_; m++){ | 
| 197 | 
  | 
          QBar_lm[m] /= nBonds;  | 
| 198 | 
  | 
        } | 
| 201 | 
  | 
 | 
| 202 | 
  | 
        QSq_l = 0.0; | 
| 203 | 
  | 
        for (int m = -lNumber_; m <= lNumber_; m++){ | 
| 204 | 
< | 
          QSq_l += pow(QBar_lm[m], 2);   | 
| 204 | 
> | 
          QSq_l += norm(QBar_lm[m]); | 
| 205 | 
  | 
        } | 
| 206 | 
  | 
        Q_l = sqrt(QSq_l*(4.0 * NumericConstant::PI / (2.0*(RealType)lNumber_ + 1))); | 
| 207 | 
  | 
      | 
| 214 | 
  | 
        double m1Pass, m2Min, m2Max; | 
| 215 | 
  | 
        int error, m1, m2, m3; | 
| 216 | 
  | 
 | 
| 217 | 
< | 
        RealType W_l; | 
| 218 | 
< | 
        RealType W_l_hat; | 
| 217 | 
> | 
        ComplexType W_l; | 
| 218 | 
> | 
        ComplexType W_l_hat; | 
| 219 | 
  | 
        W_l = 0.0; | 
| 220 | 
  | 
        for (int m1 = -lNumber_; m1 <= lNumber_; m1++) { | 
| 221 | 
  | 
          // Zero work array | 
| 236 | 
  | 
 | 
| 237 | 
  | 
        // accumulate histogram data for Q_l and W_l_hat: | 
| 238 | 
  | 
 | 
| 239 | 
< | 
        collectHistogram(Q_l, W_l_hat); | 
| 239 | 
> | 
        collectHistogram(Q_l, real(W_l_hat)); | 
| 240 | 
  | 
                 | 
| 241 | 
  | 
      } | 
| 242 | 
  | 
    } |