double DEGU_CORNER::getReliability(SpMObject mobile, Datapool& datapool) {
      //Add reliability measure according to minimal corner distance
      SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
      if(m.isNull())
          return 0;

      return (m->dynamics.dynamics["X"].att.VR.RC + m->dynamics.dynamics["Y"].att.VR.RC)/2.0;

  }
  double V2D::getValue(SpMObject  mobile, Datapool& datapool) {
      SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
      if(m.isNull())
          return 0;

      double VX = m->dynamics.dynamics["X"].V.value,
             VY = m->dynamics.dynamics["Y"].V.value;
      return sqrt(VX*VX+VY*VY);
  }
void setMultiModelObjects::displayShowRMMMobile(QPainter &painter, std::deque<SpReliabilitySingleModelInterface> &models) {
    if(models.empty())
        return;
    int i, s = models.size();
    SpReliabilitySingleModelInterface current;
    for(i=s-1; i>=0; i--) {
        current = models[i];
        current->draw(painter, 0, 255, 255);
    }


}
  std::string DEGU_CORNER::getValue(SpMObject mobile, Datapool& datapool) {
      if(checked) {
         checked = true;
         valid = true;
         //First check zones
         std::vector< QSharedPointer<world::ZoneH> > &zones = datapool.sceneModel->ZonesH;
         if (zones.empty())
             valid = false;
         else {
            int num = 0;
            std::vector< QSharedPointer<world::ZoneH> >::iterator zone_it, zone_end = zones.end();
            for(zone_it = zones.begin(); zone_it != zone_end; zone_it++ ) {
                if(values.count((*zone_it)->name.toStdString()) == 1) {
                    num++;
                    DEGU_CORNER::zones[(*zone_it)->name.toStdString()] = (*zone_it);
                }
            }
            if(num != values.size() - 1)
                valid = false;
         }
      }

      SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
      if(m.isNull())
          return "NONE";

      if(valid) {
          double dist, X, Y, min_dist = DBL_MAX;
          std::string nearest;
          if(datapool.sceneModel->hmatrix_filled) {
            datapool.sceneModel->imgToHomographyCoords(datapool.sceneModel->h_matrix,
                                                       nearbyint(m->dynamics.dynamics["X"].att.value),
                                                       nearbyint(m->dynamics.dynamics["Y"].att.value),
                                                       &X, &Y);
            QSharedPointer<world::ZoneH> z;
            std::map< std::string, QSharedPointer<world::ZoneH> >::iterator it, it_end = zones.end();
            for(it = zones.begin();it != it_end; it++) {
                z = (*it).second;
                if(z->pointInZone(X,Y)) {
                    dist = z->distanceToCenter(X,Y);
                    if(dist < min_dist) {
                        min_dist = dist;
                        nearest = (*it).first;
                    }
                }
            }
            if(min_dist < DBL_MAX)
                return nearest;
         }
      }
      return "NONE";
  }
 double HY::getValue(SpMObject  mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
     if(m.isNull())
         return 0;
     return (m->dynamics.dynamics["T"].att.value+m->dynamics.dynamics["B"].att.value)/2.0;
     //double X,Y;
     /*if(datapool.sceneModel->hmatrix_filled) {
       datapool.sceneModel->imgToHomographyCoords(datapool.sceneModel->h_matrix,
                                                  nearbyint(mobile->t2DSpatialData.X),
                                                  nearbyint(mobile->t2DSpatialData.Y),
                                                    &X, &Y);
     }*/
 }
 double VX::getReliability(SpMObject mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
     if(m.isNull())
         return 0;
     return m->dynamics.dynamics["X"].V.VR.RC;
 }
 double Y::getValue(SpMObject  mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
     if(m.isNull())
         return 0;
     return m->dynamics.dynamics["Y"].att.value;
 }
 double HY::getReliability(SpMObject  mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("BaseModel");
     if(m.isNull())
         return 0;
     return (m->dynamics.dynamics["T"].att.VR.RC+m->dynamics.dynamics["B"].att.VR.RC)/2.0;
 }
 double VX::getValue(SpMObject  mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("Blob2DFromBGSubstractionModel");
     if(m.isNull())
         return 0;
     return m->dynamics.dynamics["X"].V.value;
 }
 double Y::getReliability(SpMObject  mobile, Datapool& datapool) {
     SpReliabilitySingleModelInterface m = mobile->getSubModel("Blob2DFromBGSubstractionModel");
     if(m.isNull())
         return 0;
     return m->dynamics.dynamics["Y"].att.VR.RC;
 }