Beispiel #1
0
void ClusterDist_DME::PairwiseDist(ClusterMatrix& frameDistances,
                                   ClusterSieve::SievedFrames const& frames)
{
  int f1, f2;
  Frame frm2 = frm1_;
  int f2end = (int)frames.size();
  int f1end = f2end - 1;
#ifdef _OPENMP
  Frame frm1 = frm1_;
# define frm1_ frm1
#pragma omp parallel private(f1, f2) firstprivate(frm1, frm2)
{
#pragma omp for schedule(dynamic)
#endif
  for (f1 = 0; f1 < f1end; f1++) { 
    coords_->GetFrame( frames[f1], frm1_, mask_ );
    for (f2 = f1 + 1; f2 < f2end; f2++) {
      coords_->GetFrame( frames[f2], frm2,  mask_ );
      frameDistances.SetElement( f1, f2, frm1_.DISTRMSD( frm2 ) );
    }
  }
#ifdef _OPENMP
# undef frm1_
} // END pragma omp parallel
#endif
}
Beispiel #2
0
void ClusterDist_SRMSD::PairwiseDist(ClusterMatrix& frameDistances,
                                   ClusterSieve::SievedFrames const& frames)
{
  double rmsd;
  int f1, f2;
  Frame frm2 = frm1_;
  int f2end = (int)frames.size();
  int f1end = f2end - 1;
  ParallelProgress progress(f1end);
#ifdef _OPENMP
  Frame frm1 = frm1_;
# define frm1_ frm1
  SymmetricRmsdCalc SRMSD_OMP = SRMSD_;
# define SRMSD_ SRMSD_OMP
#pragma omp parallel private(f1, f2, rmsd) firstprivate(SRMSD_OMP, frm1, frm2, progress)
{
  progress.SetThread(omp_get_thread_num());
#pragma omp for schedule(dynamic)
#endif
  for (f1 = 0; f1 < f1end; f1++) {
    progress.Update(f1);
    coords_->GetFrame( frames[f1], frm1_, mask_ );
    for (f2 = f1 + 1; f2 < f2end; f2++) {
      coords_->GetFrame( frames[f2], frm2,  mask_ );
      rmsd = SRMSD_.SymmRMSD(frm1_, frm2);
      frameDistances.SetElement( f1, f2, rmsd );
    }
  }
#ifdef _OPENMP
# undef frm1_
# undef SRMSD_
} // END pragma omp parallel
#endif
  progress.Finish();
}
Beispiel #3
0
void ClusterDist_Euclid::PairwiseDist(ClusterMatrix& frameDistances,
                                      ClusterSieve::SievedFrames const& frames)
{
  int f1, f2;
  double dist, diff;
  DcArray::iterator dcalc;
  D1Array::iterator ds;
  int f2end = (int)frames.size();
  int f1end = f2end - 1;
#ifdef _OPENMP
#pragma omp parallel private(f1, f2, dist, diff, dcalc, ds)
{
#pragma omp for schedule(dynamic)
#endif
  for (f1 = 0; f1 < f1end; f1++) {
    for (f2 = f1 + 1; f2 < f2end; f2++) {
      dist = 0.0;
      dcalc = dcalcs_.begin();
      for (ds = dsets_.begin(); ds != dsets_.end(); ++ds, ++dcalc) {
        diff = (*dcalc)((*ds)->Dval(frames[f1]), (*ds)->Dval(frames[f2]));
        dist += (diff * diff);
      }
      frameDistances.SetElement( f1, f2, sqrt(dist) );
    }
  }
#ifdef _OPENMP
}
#endif
}
Beispiel #4
0
void ClusterDist_Num::PairwiseDist(ClusterMatrix& frameDistances, 
                                   ClusterSieve::SievedFrames const& frames)
{
  int f1, f2;
  int f2end = (int)frames.size();
  int f1end = f2end - 1;
#ifdef _OPENMP
#pragma omp parallel private(f1, f2)
{
#pragma omp for schedule(dynamic)
#endif
  for (f1 = 0; f1 < f1end; f1++) {
    for (f2 = f1 + 1; f2 < f2end; f2++)
      frameDistances.SetElement( f1, f2, dcalc_(data_->Dval(frames[f1]), 
                                                data_->Dval(frames[f2])) );
  }
#ifdef _OPENMP
}
#endif
}