📄 stats_obj.c
字号:
} fclose (fp);#elsevoid stats_ConcatenateAvgFiles (int current_run){ char func[] = "stats_ConcatenateAvgFiles"; char line[MAX_LINE_LEN]; char source_file[MAX_FILENAME_LEN]; char destination_file[MAX_FILENAME_LEN]; char command[2 * MAX_FILENAME_LEN + 20]; FILE *fp; FILE *source_fp; int line_count; sprintf (destination_file, "%savg.log", scen_GetOutputDir ()); sprintf (source_file, "%savg_pe_%u.log", scen_GetOutputDir (), 0); FILE_OPEN (fp, destination_file, "a"); sprintf (source_file, "%savg_pe_%u.log", scen_GetOutputDir (), current_run); FILE_OPEN (source_fp, source_file, "r"); line_count = 0; while (fgets (line, MAX_LINE_LEN, source_fp) != NULL) { line_count++; if (line_count <= 1) continue; fputs (line, fp); } fclose (source_fp); fclose (fp); sprintf (command, "rm %s", source_file);#if 1 system (command);#endif#endif}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void stats_Update (int num_growth_pix){ char func[] = "stats_Update"; char filename[MAX_FILENAME_LEN]; int total_pixels; int road_pixel_count; int excluded_pixel_count; total_pixels = mem_GetTotalPixels (); road_pixel_count = igrid_GetIGridRoadPixelCount (proc_GetCurrentYear ()); excluded_pixel_count = igrid_GetIGridExcludedPixelCount (); stats_ComputeThisYearStats (); stats_SetNumGrowthPixels (num_growth_pix); stats_CalGrowthRate (); stats_CalPercentUrban (total_pixels, road_pixel_count, excluded_pixel_count); if (igrid_TestForUrbanYear (proc_GetCurrentYear ())) { stats_CalLeesalee (); sprintf (filename, "%sgrow_%u_%u.log", scen_GetOutputDir (), proc_GetCurrentRun (), proc_GetCurrentYear ()); stats_Save (filename); } if (proc_GetProcessingType () == PREDICTING) { sprintf (filename, "%sgrow_%u_%u.log", scen_GetOutputDir (), proc_GetCurrentRun (), proc_GetCurrentYear ()); stats_Save (filename); }}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void stats_Init (){ static BOOLEAN first_call = TRUE; stats_ClearStatsValArrays (); if (first_call) { stats_ComputeBaseStats (); first_call = FALSE; }}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_CalStdDev (int index){#define SD(val) pow(((val)*(val)/total_monte_carlo),0.5) int total_monte_carlo; total_monte_carlo = scen_GetMonteCarloIterations (); std_dev[index].sng = SD (record.this_year.sng - average[index].sng); std_dev[index].sdg = SD (record.this_year.sdg - average[index].sdg); std_dev[index].sdc = SD (record.this_year.sdc - average[index].sdc); std_dev[index].og = SD (record.this_year.og - average[index].og); std_dev[index].rt = SD (record.this_year.rt - average[index].rt); std_dev[index].pop = SD (record.this_year.pop - average[index].pop); std_dev[index].area = SD (record.this_year.area - average[index].area); std_dev[index].edges = SD (record.this_year.edges - average[index].edges); std_dev[index].clusters = SD (record.this_year.clusters - average[index].clusters); std_dev[index].xmean = SD (record.this_year.xmean - average[index].xmean); std_dev[index].ymean = SD (record.this_year.ymean - average[index].ymean); std_dev[index].rad = SD (record.this_year.rad - average[index].rad); std_dev[index].slope = SD (record.this_year.slope - average[index].slope); std_dev[index].mean_cluster_size = SD (record.this_year.mean_cluster_size - average[index].mean_cluster_size); std_dev[index].diffusion = SD (record.this_year.diffusion - average[index].diffusion); std_dev[index].spread = SD (record.this_year.spread - average[index].spread); std_dev[index].breed = SD (record.this_year.breed - average[index].breed); std_dev[index].slope_resistance = SD (record.this_year.slope_resistance - average[index].slope_resistance); std_dev[index].road_gravity = SD (record.this_year.road_gravity - average[index].road_gravity); std_dev[index].percent_urban = SD (record.this_year.percent_urban - average[index].percent_urban); std_dev[index].percent_road = SD (record.this_year.percent_road - average[index].percent_road); std_dev[index].growth_rate = SD (record.this_year.growth_rate - average[index].growth_rate); std_dev[index].leesalee = SD (record.this_year.leesalee - average[index].leesalee); std_dev[index].num_growth_pix = SD (record.this_year.num_growth_pix - average[index].num_growth_pix);}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_CalAverages (int index){ int total_monte_carlo; total_monte_carlo = scen_GetMonteCarloIterations (); average[index].sng = running_total[index].sng / total_monte_carlo; average[index].sdg = running_total[index].sdg / total_monte_carlo; average[index].sdc = running_total[index].sdc / total_monte_carlo; average[index].og = running_total[index].og / total_monte_carlo; average[index].rt = running_total[index].rt / total_monte_carlo; average[index].pop = running_total[index].pop / total_monte_carlo; average[index].area = running_total[index].area / total_monte_carlo; average[index].edges = running_total[index].edges / total_monte_carlo; average[index].clusters = running_total[index].clusters / total_monte_carlo; average[index].xmean = running_total[index].xmean / total_monte_carlo; average[index].ymean = running_total[index].ymean / total_monte_carlo; average[index].rad = running_total[index].rad / total_monte_carlo; average[index].slope = running_total[index].slope / total_monte_carlo; average[index].mean_cluster_size = running_total[index].mean_cluster_size / total_monte_carlo; average[index].diffusion = running_total[index].diffusion / total_monte_carlo; average[index].spread = running_total[index].spread / total_monte_carlo; average[index].breed = running_total[index].breed / total_monte_carlo; average[index].slope_resistance = running_total[index].slope_resistance / total_monte_carlo; average[index].road_gravity = running_total[index].road_gravity / total_monte_carlo; average[index].percent_urban = running_total[index].percent_urban / total_monte_carlo; average[index].percent_road = running_total[index].percent_road / total_monte_carlo; average[index].growth_rate = running_total[index].growth_rate / total_monte_carlo; average[index].leesalee = running_total[index].leesalee / total_monte_carlo; average[index].num_growth_pix = running_total[index].num_growth_pix / total_monte_carlo;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_UpdateRunningTotal (int index){#ifndef lint char func[] = "stats_UpdateRunningTotal";#endif running_total[index].sng += record.this_year.sng; running_total[index].sdg += record.this_year.sdg; running_total[index].sdc += record.this_year.sdc; running_total[index].og += record.this_year.og; running_total[index].rt += record.this_year.rt; running_total[index].pop += record.this_year.pop; running_total[index].area += record.this_year.area; running_total[index].edges += record.this_year.edges; running_total[index].clusters += record.this_year.clusters; running_total[index].xmean += record.this_year.xmean; running_total[index].ymean += record.this_year.ymean; running_total[index].rad += record.this_year.rad; running_total[index].slope += record.this_year.slope; running_total[index].mean_cluster_size += record.this_year.mean_cluster_size; running_total[index].diffusion += record.this_year.diffusion; running_total[index].spread += record.this_year.spread; running_total[index].breed += record.this_year.breed; running_total[index].slope_resistance += record.this_year.slope_resistance; running_total[index].road_gravity += record.this_year.road_gravity; running_total[index].percent_urban += record.this_year.percent_urban; running_total[index].percent_road += record.this_year.percent_road; running_total[index].growth_rate += record.this_year.growth_rate; running_total[index].leesalee += record.this_year.leesalee; running_total[index].num_growth_pix += record.this_year.num_growth_pix;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_ClearStatsValArrays (){ char func[] = "stats_ClearStatsValArrays"; int i; for (i = 0; i < MAX_URBAN_YEARS; i++) { memset ((void *) (&running_total[i]), 0, sizeof (stats_val_t)); memset ((void *) (&average[i]), 0, sizeof (stats_val_t)); memset ((void *) (&std_dev[i]), 0, sizeof (stats_val_t)); } memset ((void *) (®ression), 0, sizeof (stats_info));}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/double stats_GetLeesalee (){ return record.this_year.leesalee;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_CalLeesalee (){ char func[] = "stats_CalLeesalee"; GRID_P z_ptr; GRID_P urban_ptr; z_ptr = pgrid_GetZPtr (); urban_ptr = igrid_GetUrbanGridPtrByYear (__FILE__, func, __LINE__, proc_GetCurrentYear ()); record.this_year.leesalee = 1.0; if (proc_GetProcessingType () != PREDICTING) { stats_compute_leesalee (z_ptr, /* IN */ urban_ptr, /* IN */ &record.this_year.leesalee); /* OUT */ } urban_ptr = igrid_GridRelease (__FILE__, func, __LINE__, urban_ptr);}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_SetNumGrowthPixels (int val){ record.this_year.num_growth_pix = val;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/int stats_GetNumGrowthPixels (){ return record.this_year.num_growth_pix;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/void stats_SetPercentUrban (int val){ record.this_year.percent_urban = val;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_CalPercentUrban (int total_pixels, int road_pixels, int excld_pixels){ record.this_year.percent_urban = (double) (100.0 * (record.this_year.pop + road_pixels) / (total_pixels - road_pixels - excld_pixels));}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/double stats_GetPercentUrban (){ return record.this_year.percent_urban;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:*****/static void stats_CalGrowthRate (){ record.this_year.growth_rate = record.this_year.num_growth_pix / record.this_year.pop * 100.0;}/*************************************************************************************************************************************************************** FUNCTION NAME: ** PURPOSE: ** AUTHOR: Keith Clarke** PROGRAMMER: Tommy E. Cathey of NESC (919)541-1500** CREATION DATE: 11/11/1999** DESCRIPTION:****
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -