Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/analysis_correlation.hpp

    rbd61b41 r790807  
    5151CorrelationToPointMap *PeriodicCorrelationToPoint(MoleculeListClass * const &molecules, const element * const type, const Vector *point, const int ranges[NDIM] );
    5252CorrelationToSurfaceMap *PeriodicCorrelationToSurface(MoleculeListClass * const &molecules, const element * const type, const Tesselation * const Surface, const LinkedCell *LC, const int ranges[NDIM] );
    53 int GetBin ( const double value, const double BinWidth, const double BinStart );
     53double GetBin ( const double value, const double BinWidth, const double BinStart );
    5454void OutputCorrelation( ofstream * const file, const BinPairMap * const map );
    55 void OutputPairCorrelation( ofstream * const file, const BinPairMap * const map );
    56 void OutputCorrelationToPoint( ofstream * const file, const BinPairMap * const map );
    57 void OutputCorrelationToSurface( ofstream * const file, const BinPairMap * const map );
     55void OutputPairCorrelation( ofstream * const file, const PairCorrelationMap * const map );
     56void OutputCorrelationToPoint( ofstream * const file, const CorrelationToPointMap * const map );
     57void OutputCorrelationToSurface( ofstream * const file, const CorrelationToSurfaceMap * const map );
    5858
    5959
     
    9090/** Puts given correlation data into bins of given size (histogramming).
    9191 * Note that BinStart and BinEnd are desired to fill the complete range, even where Bins are zero. If this is
    92  * not desired, give equal BinStart and BinEnd and the map will contain only Bins where the count is one or greater.
     92 * not desired, give equal BinStart and BinEnd and the map will contain only Bins where the count is one or greater. If a
     93 * certain start value is desired, give BinStart and a BinEnd that is smaller than BinStart, then only BinEnd will be
     94 * calculated automatically, i.e. BinStart = 0. and BinEnd = -1. .
    9395 * Also note that the range is given inclusive, i.e. [ BinStart, BinEnd ].
    9496 * \param *map map of doubles to count
     
    101103{
    102104  BinPairMap *outmap = new BinPairMap;
    103   int bin = 0;
     105  double bin = 0.;
    104106  double start = 0.;
    105107  double end = 0.;
     
    114116  if (BinStart == BinEnd) { // if same, find range ourselves
    115117    GetMinMax( map, start, end);
    116   } else { // if not, initialise range to zero
     118  } else if (BinEnd < BinStart) { // if BinEnd smaller, just look for new max
     119    GetMinMax( map, start, end);
     120    start = BinStart;
     121  } else { // else take both values
    117122    start = BinStart;
    118123    end = BinEnd;
    119     for (int runner = 0; runner <= ceil((end-start)/BinWidth); runner++)
    120       outmap->insert( pair<double, int> ((double)runner*BinWidth+start, 0) );
     124    for (double runner = start; runner <= end; runner += BinWidth)
     125      outmap->insert( pair<double, int> (runner, 0) );
    121126  }
    122127
    123128  for (typename T::iterator runner = map->begin(); runner != map->end(); ++runner) {
    124129    bin = GetBin (runner->first, BinWidth, start);
    125     BinPairMapInserter = outmap->insert ( pair<double, int> ((double)bin*BinWidth+start, 1) );
     130    BinPairMapInserter = outmap->insert ( pair<double, int> (bin, 1) );
    126131    if (!BinPairMapInserter.second) {  // bin already present, increase
    127132      BinPairMapInserter.first->second += 1;
Note: See TracChangeset for help on using the changeset viewer.