Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
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);
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
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));
	}
}