/* -------------------------------------------------------------------------
 * MSTriggeredReader::UserCommand-methods
 * ----------------------------------------------------------------------- */
MSCalibrator::MSCalibrator_FileTriggeredChild::MSCalibrator_FileTriggeredChild(
    MSNet &net, const std::string &aXMLFilename,
    MSCalibrator &parent, MSVehicleControl &vc) throw()
        : MSTriggeredXMLReader(net, aXMLFilename), MSCalibratorChild(parent, vc),
        myHaveNext(false), myFlow(-1), myHaveInitialisedFlow(false), myRunningID(0) {
    myBeginTime = net.getCurrentTimeStep();
}
// ===========================================================================
// method definitions
// ===========================================================================
MSTriggeredXMLReader::MSTriggeredXMLReader(MSNet& net,
        const std::string& filename)
    : MSTriggeredReader(net),
      SUMOSAXHandler(filename),
      myParser(0), myHaveMore(true) {
    Command* c = new WrappingCommand< MSTriggeredReader >(this, &MSTriggeredReader::wrappedExecute);
    MSNet::getInstance()->getInsertionEvents().addEvent(c, net.getCurrentTimeStep(), MSEventControl::NO_CHANGE);
}
Esempio n. 3
0
void MSNet::updateWeather()
{
  OptionsCont &oc = OptionsCont::getOptions();
  std::string currentTimeString, initialTimeString =
   MyHandler2::getInitialTimeString();
  MSNet *net = MSNet::getInstance();
  if(oc.getAnyVerbosity()>1)
    std::cout<<"----> void MSNet::updateWeather()"<<std::endl;
  if(oc.getAnyVerbosity()>2)
    std::cout<<"initialTimeString{"<<initialTimeString<<"}"<<std::endl;
  int tempTendingTo;
  if(oc.getSafeBool("rlwc"))
  {
    // Update time string to catch night or day becoming
    currentTimeString = net->makeTimeString(net->getCurrentTimeStep());
    if(getCity()=="cambiano")
    {
      // Real Life simulation envtemp update
      // Month depending analysis
      if(extractMonth(initialTimeString) < 3 ||
       extractMonth(initialTimeString) > 11)
      {
        // December, January or February
        if(net->isNight(currentTimeString))
          tempTendingTo = 0;
        else
          tempTendingTo = 5;
      }
      else if(extractMonth(initialTimeString)<6)
      {
        // March, April or May
        if(net->isNight(currentTimeString))
          tempTendingTo = 10;
        else
          tempTendingTo = 15;
      }
      else if(extractMonth(initialTimeString)<9)
      {
        // June, July or August
        if(net->isNight(currentTimeString))
          tempTendingTo = 15;
        else
          tempTendingTo = 20;
      }
      else
      {
        // September, October or November
        if(net->isNight(currentTimeString))
          tempTendingTo = 5;
        else
          tempTendingTo = 10;
      }
      // Real Life simulation envhum update
      if(rand()%10==0)
      {
        rand()%2==0?
        setCurrentEnvHum(getCurrentEnvHum() + ((float)rand()) / RAND_MAX) :
        setCurrentEnvHum(getCurrentEnvHum() - ((float)rand()) / RAND_MAX);
      }
    }
    else if(getCity()=="munchen")
    {
      // Real Life simulation envtemp update
      // Month depending analysis
      if((extractMonth(initialTimeString)<3)||
          extractMonth(initialTimeString)>11)
      {
        // December, January or February
        if(net->isNight(currentTimeString))
          tempTendingTo = 0;
        else
          tempTendingTo = 5;
      }
      else if(extractMonth(initialTimeString)<6)
      {
        // March, April or May
        if(net->isNight(currentTimeString))
          tempTendingTo = 10;
        else
          tempTendingTo = 15;
      }
      else if(extractMonth(initialTimeString)<9)
      {
        // June, July or August
        if(net->isNight(currentTimeString))
          tempTendingTo = 15;
        else
          tempTendingTo = 20;
      }
      else
      {
        // September, October or November
        if(net->isNight(currentTimeString))
          tempTendingTo = 5;
        else
          tempTendingTo = 10;
      }
      // Real Life simulation envhum update
      if(rand() % 10 == 0)
      {
        (rand() % 2 == 0) ?
        setCurrentEnvHum(getCurrentEnvHum() + ((float)rand()) / RAND_MAX) :
        setCurrentEnvHum(getCurrentEnvHum() - ((float)rand()) / RAND_MAX);
      }
    }
    // Envtemp update
    if(rand() % 10 == 0)
    {
    if(rand() % 2 == 0)
    {
      // Adding
      if(getCurrentEnvTemp() > tempTendingTo)
      {
        rand() % 3 == 0 ?
        setCurrentEnvTemp(getCurrentEnvTemp() + ((float)rand()) / RAND_MAX) :
        setCurrentEnvTemp(getCurrentEnvTemp() - ((float)rand()) / RAND_MAX);
      }
      else
      {
        rand() % 2 == 0 ?
        setCurrentEnvTemp(getCurrentEnvTemp() + ((float)rand()) / RAND_MAX) :
        setCurrentEnvTemp(getCurrentEnvTemp() - ((float)rand()) / RAND_MAX);
      }
    }
    else
    {
      // Substracting
      if(getCurrentEnvTemp() > tempTendingTo)
      {
        rand() % 2 == 0 ?
        setCurrentEnvTemp(getCurrentEnvTemp() + ((float)rand()) / RAND_MAX) :
        setCurrentEnvTemp(getCurrentEnvTemp() - ((float)rand()) / RAND_MAX);
      }
      else
      {
        rand() % 3 == 0 ?
        setCurrentEnvTemp(getCurrentEnvTemp() - ((float)rand()) / RAND_MAX) :
        setCurrentEnvTemp(getCurrentEnvTemp() + ((float)rand()) / RAND_MAX);
      }
    }
    }    
  }
  else if((oc.getSafeBool("rwc") ||
          (oc.getSafeBool("rlwc") && (getCity() == "unknown"))))
  {
   tag:
    // Random envtemp update
    if(rand() % 10 == 0)
    {
      (rand() % 2 == 0) ?
      setCurrentEnvTemp(getCurrentEnvTemp() + ((float)rand())/RAND_MAX) :
      setCurrentEnvTemp(getCurrentEnvTemp() - ((float)rand())/RAND_MAX);
    }
    // Random envhum update
    if(rand()%10==0)
    {
      (rand()%2==0)?
      setCurrentEnvHum(getCurrentEnvHum()+((float)rand())/RAND_MAX) :
      setCurrentEnvHum(getCurrentEnvHum()-((float)rand())/RAND_MAX);
    }
  }
  // else weather is constant
}