EM算法的改进

源代码在线查看: plot-usage

软件大小: 1644 K
上传用户: sunyuang
关键词: 法的改进
下载地址: 免注册下载 普通下载 VIP

相关代码

				#!/bin/csh				#				# $Id: plot-usage 1339 2006-09-21 19:46:28Z tbailey $				# $Log$				# Revision 1.2  2005/10/05 06:18:35  nadya				# use full path for "rm". Asssume everybody has /bin/rm.				#				# Revision 1.1.1.1  2005/07/29 00:01:33  nadya				# Importing from meme-3.0.14, and adding configure/make				#				#								set months = "JanFebMarAprMayJunJulAugSepOctNovDec"				set format = "meme" 				set t = 0				set ts = "runs"				set pgm = $0; set pgm = $pgm:t				set args = ($*)				if ($#argv < 0) then				  usage:				  more 				  USAGE:				        $pgm [] [-meme] [-mast] [-metameme] [-r] [-u] [-m] [-c] [-s]				 					[]	MEME server log file; default: read standard input					[-meme]		log file is in MEME format; (default)					[-mast]		log file is in MAST format; default: MEME format					[-metameme]	log file is in MetaMEME format; default: MEME format					[-r]		plot number of runs (default)					[-u]            plot number of users; default: number of runs					[-m]		plot maximum runs by any user; default: number of runs					[-c]		plot cpu time for all runs; default: number of runs							note: meme only; cpu time not recorded in mast-log					[-s]            plot to screen				 				        Plot the number of runs or users of MEME, MAST or MetaMEME					month-by-month.								        Number of users is based on the number of distinct email addresses				        given for MEME and MAST.				        Number of users is based on the number of distinct IP addresses				        for MetaMEME.									Creates files:						$pgm.[.].[ps tex]					where  is "runs", "max", "users" or "cpu".				USAGE				  exit 1				endif								unlimit cputime				onintr cleanup								# get input arguments				set logfile = ""				set name = ""				while ("$1" != "")				  switch ($1)				  case -h:				    goto usage				    break				  case -meme:				    breaksw				  case -mast:				    set format = "mast";				    breaksw				  case -metameme:				    set format = "metameme";				    breaksw				  case -r:				    breaksw				  case -u:				    set t = 1				    set ts = "users"				    breaksw				  case -m:				    set t = 2				    set ts = "max"				    breaksw				  case -c: 				    set t = 3				    set ts = "cpu"				    breaksw				  case -s: 				    set s = 1				    breaksw				  default:				    set logfile = $1				    set name = ".$1"				  endsw				  shift				end								# set name to meme/mast/metameme if input is standard input				if ($logfile == "") then				  set name = ".$format"				endif								if ($t == 3 && $format == "mast") then				  echo "CPU time is not recorded in mast-log so -c not available"				  exit 1				endif								set gawk = $pgm.$$.gawk.tmp				cat  $gawk				BEGIN {				  big = 100000; 				  little = -1;				  min_year = min_month = big; 				  max_year = max_month = -1;				  for (i=0; i				}				# read next record in file				NF >= 4 {				  ok = 1;				  if (format == "meme" || format == "metameme") {	# meme format				    # check for missing host and repair it				    if ($2 == "submit:") {				      for (i=NF+1; i>=2; i--) {				        $i = $(i-1);			# shift everything 1 right				      }				      $1 = "host";				    }				    # check for a bad MEME record where the submit date is missing				    # and try to repair it by using start date/time for submit date/time				    if ($4 == "start:") {				      # insert the start time in place of the submit time				      for (i=NF+2; i>=6; i--) {				        $i = $(i-2);			# shift everything 2 right				      }				      $4 = $7;				# copy start time & date				      $5 = $8; 				    }				    # check for a bad Meta-MEME record where the start date is missing				    # and try to repair it by using submit date/time for start date/time				    if ($6 == "end:") {				      # insert the submit time in place of the start time				      for (i=NF+3; i>=9; i--) {				        $i = $(i-3);			# shift everything 3 right				      }				      $6 = "start:";				      $7 = $10;				# copy start time & date				      $7 = $11; 				    }				    # check for a bad Meta-MEME record where the "start" is missing				    if (0 && $8 == "end:") {				      # insert the "start:" 				      for (i=NF+2; i>=9; i--) {				        $i = $(i-1);			# shift everything 1 right				      }				      $6 = $9;				# copy start time & date				      $7 = $10; 				    }				    # check for "end" instead of "end:"				    if ($9 == "end") {$9 = "end:";}				    # check for bad record 				    if ($3 != "submit:" || $6 != "start:" || $9 != "end:") {				      print "bad record number", NR, "\n" > "/dev/stderr"				      print $0, "\n" > "/dev/stderr"				      ok = 0;				    } 				    date = $4;				    if (format == "meme") {				      day = substr(date, 1, 2) + 0;				      imonth = substr(date, 4, 2) + 0;				    } else {				      day = substr(date, 4, 2) + 0;				      imonth = substr(date, 1, 2) + 0;				    }				    year = substr(date, 7, 2) + 0;				    if (year < 96) {year = 2000 + year;} else {year = 1900 + year;}				    if (t == 3) {				# get cpu time				      start = $8;				# start time hh:mm:ss				      sex1 = substr(start,7,2)+60*(substr(start,4,2)+(60*substr(start,1,2)));				      end = $11;				# end time hh:mm:ss				      sex2 = substr(end,7,2)+60*(substr(end,4,2)+(60*substr(end,1,2)));				      cpu_hrs = sex2-sex1;			# elapsed sconds				      if (cpu_hrs < 0) cpu_hrs += 24*60*60;	# day change				      cpu_hrs /= 3600;			# convert to hours				      #print $2, cpu_hrs;				    }				  } else {					# mast format				    month = $4;				    year = $8;				    imonth = int(index(months, month)/3)+1;     # get index of month				  }				  if (ok) {				    user = $NF;				    runs[year,imonth]++;			# increment runs				    if (t==3) cpu[year,imonth] += cpu_hrs;	# increase cpu time				    if (!(users[year,imonth,user])) {				      nusers[year,imonth]++;				      users[year,imonth,user] = 1;				    }				    nruns[year,imonth,user]++;				    if (nruns[year,imonth,user] > maxruns[year,imonth]) {				      maxruns[year,imonth] = nruns[year,imonth,user];				    }				    # save minimum date				    if (year < min_year) {				      min_year = year; 				      min_month = imonth;				    }				    if (year == min_year && imonth < min_month) min_month = imonth;				    # save maximum date				    if (year > max_year) {				      #print "new year: ", year, " new month:, imonth, NR > "/dev/stderr";				      max_year = year;				      max_month = imonth;				    }				    if (year == max_year && imonth > max_month) max_month = imonth;				  } # ok				}				END {				  # print number of runs/users/cpu_time for each month				  # print "min", min_year, min_month, "max", max_year, max_month > plotdata				  x = 1;				  ymax = 0;				  printf("set xtics (") > com;				  #print "max_year", max_year, "max_month", max_month;				  for (year=min_year; year				    if (year==min_year) { min = min_month; } else { min = 1; }				    if (year==max_year) { max = max_month; } else { max = 12; }				    for (imonth=min; imonth				      printf("\'%s\' %d", smonth[imonth], x) > com;				      if (! (year==max_year && imonth==max) ) printf(", ") > com;				      if (t == 1) {				        y = nusers[year,imonth];				      } else if (t == 2) {  				        y = maxruns[year,imonth];				      } else if (t == 3) {  				        y = cpu[year,imonth];				      } else {				        y = runs[year,imonth];				      }				      if (y > ymax) ymax = y; 				      print x, y+.001 > plotdata;				      x++;				    }				  }				  printf(")\n") > com;				  print "set xlabel '", min_year, "-", max_year, "' 0,-1 font '1,40'" > com				  if (t == 1) {				    print "set ylabel 'USERS PER MONTH' font '1,40'" > com				  } else if (t == 2) {  				    print "set ylabel 'MAX RUNS PER MONTH' font '1,40'" > com				  } else if (t == 3) {  				    print "set ylabel 'CPU HOURS PER MONTH' font '1,40'" > com				  } else {				    print "set ylabel 'RUNS PER MONTH' font '1,40'" > com				  }				  print "set xrange [0:", x, "]" > com				  print "set yrange [0:", ymax, "]" > com				  print "set data style boxes" > com				  print "plot '" plotdata "' notitle" > com				  # print pointsize				  point = int(784/(x-1));				  if (point > 30) {point = 30;}				  print point;				}				"END"								# create file to hold points				set plotdata = $pgm.$$.plotdata.tmp				set com = $pgm.$$.com.tmp								# execute script				set point = `gawk -v format=$format -v plotdata=$plotdata -v com=$com -v months=$months -v t=$t -f $gawk $logfile`								#echo point = $point				#cat $com				#echo $plotdata				#cat $plotdata								# set up for screen or postscript				if ($?s) then				  set ps = "-ps _screen_" 				else				  set ps = "-ps $pgm.$ts$name"				endif								plotgen -f -nocat -color \				  -point $point \				  -file $com \				  $ps								if (!($?s)) then				  /bin/rm $pgm.$ts$name.tex				endif								cleanup:				/bin/rm $pgm.$$.*.tmp							

相关资源