void Validate::Facility_Stats (void) { int i, n; String label; Group_Data *data; Group_Map_Itr map_itr; Statistics stats; Link_Itr link_itr; Str_Map_Itr str_itr; for (link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++) { if (link_itr->AB_Dir () >= 0) { Sum_Group (link_itr->Type (), &(*link_itr), link_itr->AB_Dir ()); } if (link_itr->BA_Dir () >= 0) { Sum_Group (link_itr->Type (), &(*link_itr), link_itr->BA_Dir ()); } } //---- print the page header ---- Header_Number (FACILITY_TYPE); if (!Break_Check ((int) group_data.size () + 9)) { Print (1); Facility_Header (); } //---- print each functional class ---- for (map_itr = group_data.begin (); map_itr != group_data.end (); map_itr++) { data = &map_itr->second; n = data->number; if (n == 0) continue; Calc_Stats (data, stats); i = data->index; str_itr = facility_type.find (i); if (str_itr == facility_type.end ()) { label = Facility_Code ((Facility_Type) i); } else { label = str_itr->second; } Page_Check (1); Print (0, String (stats_format) % label % n % data->volume % data->count % (data->volume - data->count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % data->max_vc); } //---- calculate the total statistics ---- n = total.number; if (n > 0) { Calc_Stats (&total, stats); Page_Check (3); Print (0, "\n"); Print (0, String (stats_format) % "TOTAL" % n % total.volume % total.count % (total.volume - total.count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % total.max_vc); Print (0, "\n"); } Header_Number (0); }
void Validate::Zone_Group_Stats (void) { int i, n, type; String label; Group_Data *data; Group_Map_Itr map_itr; Statistics stats; Link_Itr link_itr; Str_Map_Itr str_itr; for (link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++) { if (link_itr->AB_Dir () >= 0) { n = node_zone [link_itr->Anode ()]; type = zone_equiv.Zone_Group (n); Sum_Group (type, &(*link_itr), link_itr->AB_Dir ()); } if (link_itr->BA_Dir () >= 0) { n = node_zone [link_itr->Bnode ()]; type = zone_equiv.Zone_Group (n); Sum_Group (type, &(*link_itr), link_itr->BA_Dir ()); } } //---- print the page header ---- Header_Number (ZONE_GROUP); if (!Break_Check ((int) group_data.size () + 9)) { Print (1); Zone_Group_Header (); } //---- print each zone group ---- for (map_itr = group_data.begin (); map_itr != group_data.end (); map_itr++) { data = &map_itr->second; n = data->number; if (n == 0) continue; Calc_Stats (data, stats); i = data->index; label = zone_equiv.Group_Label (i); if (label.empty ()) { label = String ("Zone Group %d") % i; } Page_Check (1); Print (0, String (stats_format) % label % n % data->volume % data->count % (data->volume - data->count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % data->max_vc); } //---- calculate the total statistics ---- n = total.number; if (n > 0) { Calc_Stats (&total, stats); Page_Check (3); Print (0, "\n"); Print (0, String (stats_format) % "TOTAL" % n % total.volume % total.count % (total.volume - total.count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % total.max_vc); Print (0, "\n"); } Header_Number (0); }
void Validate::Link_Group_Stats (void) { int i, n, lnk; String label; Group_Data *data; Group_Map_Itr map_itr; Statistics stats; Link_Data *link_ptr; Int_Set *list; Int_Set_Itr itr; Int_Map_Itr int_itr; for (i = 1; i <= link_equiv.Max_Group (); i++) { list = link_equiv.Group_List (i); if (list == 0) continue; for (itr = list->begin (); itr != list->end (); itr++) { lnk = *itr; int_itr = link_map.find (abs (lnk)); if (int_itr == link_map.end ()) continue; link_ptr = &link_array [int_itr->second]; if (lnk > 0 && link_ptr->AB_Dir () >= 0) { Sum_Group (i, link_ptr, link_ptr->AB_Dir ()); } else if (lnk < 0 && link_ptr->BA_Dir () >= 0) { Sum_Group (i, link_ptr, link_ptr->BA_Dir ()); } } } //---- print the page header ---- Header_Number (LINK_GROUP); if (!Break_Check ((int) group_data.size () + 9)) { Print (1); Link_Group_Header (); } //---- print each link group ---- for (map_itr = group_data.begin (); map_itr != group_data.end (); map_itr++) { data = &map_itr->second; n = data->number; if (n == 0) continue; Calc_Stats (data, stats); i = data->index; label = link_equiv.Group_Label (i); if (label.empty ()) { label = String ("Link Group %d") % i; } label = String ("%-25.25s") % label; Page_Check (1); Print (0, String (stats_format) % label % n % data->volume % data->count % (data->volume - data->count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % data->max_vc); } //---- calculate the total statistics ---- n = total.number; if (n > 0) { Calc_Stats (&total, stats); Page_Check (3); Print (0, "\n"); label = String ("%-25.25s") % "TOTAL"; Print (0, String (stats_format) % "TOTAL" % n % total.volume % total.count % (total.volume - total.count) % stats.per_diff % stats.avg_error % stats.per_error % stats.std_dev % stats.rmse % stats.r_sq % stats.avg_vc % total.max_vc); Print (0, "\n"); } Header_Number (0); }
void Validate::Link_Group_Details (void) { int i, j, n, lnk; char *str_ptr, buffer [32], bearing [8]; Group_Data *data; Statistics stats; Link_Data *link_ptr; Dir_Data *dir_ptr; Integer_List *list; for (i = 1; i <= link_equiv.Max_Group (); i++) { list = link_equiv.Group_List (i); if (list == NULL) continue; for (j=1, lnk = list->First (); lnk != 0; lnk = list->Next ()) { link_ptr = link_data.Get (abs (lnk)); if (link_ptr == NULL) continue; if (lnk > 0 && link_ptr->AB_Dir () > 0) { Sum_Group (j++, link_ptr, link_ptr->AB_Dir ()); } else if (lnk < 0 && link_ptr->BA_Dir () > 0) { Sum_Group (j++, link_ptr, link_ptr->BA_Dir ()); } } //---- get the link group label ---- group_label = link_equiv.Group_Label (i); if (group_label == NULL) { str_fmt (buffer, sizeof (buffer), "Link Group %d", i); group_label = buffer; } //---- print the page header ---- Header_Number (GROUP_DETAILS); if (!Break_Check (group_data.Num_Records () + 9)) { Print (1); Group_Detail_Header (); } //---- print each link ---- for (j=1, lnk = list->First (); lnk != 0; lnk = list->Next ()) { link_ptr = link_data.Get (abs (lnk)); if (link_ptr == NULL) continue; if ((lnk > 0 && link_ptr->AB_Dir () <= 0) || (lnk < 0 && link_ptr->BA_Dir () <= 0)) { continue; } data = (Group_Data *) group_data.Get (&j); j++; if (data == NULL) continue; if (!(n = data->number)) continue; Calc_Stats (data, &stats); //---- get the link name ---- if (street_name != NULL) { str_ptr = street_name [link_data.Record_Index () - 1]; } else { str_ptr = NULL; } if (str_ptr == NULL) { str_ptr = str_fmt (buffer, sizeof (buffer), "Link %d %s", abs (lnk), ((lnk > 0) ? "AB" : "BA")); } //---- get the link direction ---- if (lnk > 0) { dir_ptr = dir_data [link_ptr->AB_Dir ()]; } else { dir_ptr = dir_data [link_ptr->BA_Dir ()]; } str_cpy (bearing, sizeof (bearing), compass.Point_Text (dir_ptr->Out_Bearing ())); if (bearing [1] == '\0') { bearing [1] = 'B'; bearing [2] = '\0'; } //---- print the record ---- Page_Check (1); Print (0, "\n%-25.25s %-2.2s ", str_ptr, bearing); Print (0, "%4d%10.0lf%10.0lf%9.0lf %7.1lf %7.0lf %6.1lf %7.0lf %6.1lf %6.3lf%6.2lf%6.2lf", n, data->volume, data->count, (data->volume - data->count), stats.per_diff, stats.avg_error, stats.per_error, stats.std_dev, stats.rmse, stats.r_sq, stats.avg_vc, data->max_vc); } //---- calculate the total statistics ---- if ((n = total.number)) { Calc_Stats (&total, &stats); Page_Check (3); Print (0, "\n\n%-25.25s ", "TOTAL"); Print (0, "%7d%10.0lf%10.0lf%9.0lf %7.1lf %7.0lf %6.1lf %7.0lf %6.1lf %6.3lf%6.2lf%6.2lf\n", n, total.volume, total.count, (total.volume - total.count), stats.per_diff, stats.avg_error, stats.per_error, stats.std_dev, stats.rmse, stats.r_sq, stats.avg_vc, total.max_vc); } Header_Number (0); group_data.Reset (); memset (&total, '\0', sizeof (total)); } }