Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] View of /trunk/gadget/readaggregation.cc
[mareframe] / trunk / gadget / readaggregation.cc Repository:
ViewVC logotype

View of /trunk/gadget/readaggregation.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (download) (annotate)
Mon Feb 10 17:09:07 2014 UTC (10 years, 4 months ago) by agomez
File size: 5051 byte(s)
Initial version based on Gadget 2.2.00
#include "readaggregation.h"
#include "readfunc.h"
#include "errorhandler.h"
#include "gadget.h"
#include "global.h"

int readAggregation(CommentStream& infile, IntMatrix& agg, CharPtrVector& aggindex) {
  int i, j, tmp;
  char text[MaxStrLength];
  strncpy(text, "", MaxStrLength);

  agg.Reset();
  aggindex.Reset();
  i = tmp = 0;
  infile >> ws;
  while (!infile.eof()) {
    aggindex.resize(new char[MaxStrLength]);
    strncpy(aggindex[i], "", MaxStrLength);
    infile >> aggindex[i];
    agg.AddRows(1, 0, 0);

    infile.getLine(text, MaxStrLength);
    if (infile.fail())
        handle.logFileMessage(LOGFAIL, "failed to read aggregation vector");

    istringstream line(text);
    line >> ws;
    while (!line.eof()) {
      line >> tmp >> ws;
      if (line.fail() && !line.eof())
        handle.logFileMessage(LOGFAIL, "failed to read aggregation vector");
      agg[i].resize(1, tmp);
    }

    infile >> ws;
    i++;
  }

  //check that the labels are unique
  for (i = 0; i < aggindex.Size(); i++)
    for (j = 0; j < aggindex.Size(); j++)
      if ((strcasecmp(aggindex[i], aggindex[j]) == 0) && (i != j))
        handle.logMessage(LOGFAIL, "Error in aggregation file - repeated label", aggindex[i]);

  handle.logMessage(LOGMESSAGE, "Read aggregation file - number of entries", aggindex.Size());
  return aggindex.Size();
}

int readAggregation(CommentStream& infile, IntVector& agg, CharPtrVector& aggindex) {
  int i, j;
  i = 0;

  agg.Reset();
  aggindex.Reset();
  infile >> ws;
  while (!infile.eof()) {
    aggindex.resize(new char[MaxStrLength]);
    strncpy(aggindex[i], "", MaxStrLength);
    agg.resize(1, 0);
    infile >> aggindex[i] >> agg[i] >> ws;
    i++;
  }

  //check that the labels are unique
  for (i = 0; i < aggindex.Size(); i++)
    for (j = 0; j < aggindex.Size(); j++)
      if ((strcasecmp(aggindex[i], aggindex[j]) == 0) && (i != j))
        handle.logMessage(LOGFAIL, "Error in aggregation file - repeated label", aggindex[i]);

  handle.logMessage(LOGMESSAGE, "Read aggregation file - number of entries", aggindex.Size());
  return aggindex.Size();
}

int readLengthAggregation(CommentStream& infile, DoubleVector& lengths, CharPtrVector& lenindex) {
  int i, j;
  double dblA, dblB;
  i = 0;

  lengths.Reset();
  lenindex.Reset();
  infile >> ws;
  while (!infile.eof()) {
    lenindex.resize(new char[MaxStrLength]);
    strncpy(lenindex[i], "", MaxStrLength);
    infile >> lenindex[i] >> dblA >> dblB >> ws;

    if (i == 0)
      lengths.resize(1, dblA); //first length entry to be read

    if (isEqual(lengths[i], dblA))
      lengths.resize(1, dblB); //add next length entry
    else
      handle.logMessage(LOGFAIL, "Error in length aggregation - lengths not consecutive");

    i++;
  }

  //check that the labels are unique
  for (i = 0; i < lenindex.Size(); i++)
    for (j = 0; j < lenindex.Size(); j++)
      if ((strcasecmp(lenindex[i], lenindex[j]) == 0) && (i != j))
        handle.logMessage(LOGFAIL, "Error in length aggregation file - repeated label", lenindex[i]);

  handle.logMessage(LOGMESSAGE, "Read length aggregation file - number of entries", lenindex.Size());
  return lenindex.Size();
}

int readPreyAggregation(CommentStream& infile, CharPtrMatrix& preynames,
  DoubleMatrix& preylengths, FormulaMatrix& digestioncoeff,
  CharPtrVector& preyindex, Keeper* const keeper) {

  int i, j, k;
  char text[MaxStrLength];
  strncpy(text, "", MaxStrLength);
  i = j = 0;

  preylengths.Reset();
  preyindex.Reset();
  infile >> ws;
  while (!infile.eof()) {
    preyindex.resize(new char[MaxStrLength]);
    strncpy(preyindex[i], "", MaxStrLength);
    infile >> preyindex[i];

    j = 0;
    preynames.resize();
    infile >> text >> ws;
    while (!infile.eof() && (strcasecmp(text, "lengths") != 0)) {
      preynames[i].resize(new char[strlen(text) + 1]);
      strcpy(preynames[i][j++], text);
      infile >> text >> ws;
    }

    if (strcasecmp(text, "lengths") != 0)
      handle.logFileUnexpected(LOGFAIL, "lengths", text);

    //JMB - changed so that only 2 lengths are read in
    preylengths.AddRows(1, 2, 0.0);
    infile >> preylengths[i][0] >> preylengths[i][1] >> text >> ws;

    if (strcasecmp(text, "digestioncoefficients") != 0)
      handle.logFileUnexpected(LOGFAIL, "digestioncoefficients", text);

    //JMB - changed so that only 3 elements are read in
    digestioncoeff.AddRows(1, 3, 0);
    for (k = 0; k < 3; k++)
      if (!(infile >> digestioncoeff[i][k]))
        handle.logFileMessage(LOGFAIL, "invalid format for digestion coefficient vector");
    digestioncoeff[i].Inform(keeper);

    infile >> ws;
    i++;
  }

  //check that the labels are unique
  for (i = 0; i < preyindex.Size(); i++)
    for (j = 0; j < preyindex.Size(); j++)
      if ((strcasecmp(preyindex[i], preyindex[j]) == 0) && (i != j))
        handle.logMessage(LOGFAIL, "Error in prey aggregation file - repeated label", preyindex[i]);

  handle.logMessage(LOGMESSAGE, "Read prey aggregation file - number of entries", preyindex.Size());
  return preyindex.Size();
}

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge