#!/usr/bin/perl -w
#
# Copyright (C) 2001 by USC/ISI
# All rights reserved.
#
# Redistribution and use in source and binary forms are permitted
# provided that the above copyright notice and this paragraph are
# duplicated in all such forms and that any documentation, advertising
# materials, and other materials related to such distribution and use
# acknowledge that the software was developed by the University of
# Southern California, Information Sciences Institute. The name of the
# University may not be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# An perl script that transforms a data file (one-column format) into
# a ns-style CDF file, used by SAMAN ModelGen
#
# This work is supported by DARPA through SAMAN Project
# (http://www.isi.edu/saman/), administered by the Space and Naval
# Warfare System Center San Diego under Contract No. N66001-00-C-8066
sub usage {
print STDERR <<END;
usage: $0 [-e FirstEpoch] [-i Increment] [-d Dividend] [-t DataFile]
Options:
-e string specify the starting epoch
-i string size of each bin
-d string scaling factor of each epoch
-t string filename of data
END
exit 1;
}
BEGIN {
$dblibdir = "./";
push(@INC, $dblibdir);
}
use DbGetopt;
require "dblib.pl";
my(@orig_argv) = @ARGV;
&usage if ($#ARGV < 0);
my($prog) = &progname;
my($dbopts) = new DbGetopt("e:i:d:t:?", \@ARGV);
my($ch);
while ($dbopts->getopt) {
$ch = $dbopts->opt;
if ($ch eq 'e') {
$epoch = $dbopts->optarg;
} elsif ($ch eq 'i') {
$incr = $dbopts->optarg;
} elsif ($ch eq 'd') {
$dividend = $dbopts->optarg;
} elsif ($ch eq 't') {
$tfile = $dbopts->optarg;
} else {
&usage;
};
};
&outputCDF($epoch,$incr,$dividend,$tfile);
sub numerically { $a <=> $b; }
sub outputCDF {
local($cur_epoch,$incr,$dividend,$tfile) = @_;
local(@data);
local(@dataS);
local(@epoch);
local(@cum);
open(ORIG,$tfile) || die("cannot open $tfile.\n");
$tfileS = join('.',$tfile,"cdf");
$newtfile = join(' ',">",$tfileS);
open(CDF,$newtfile) || die("cannot open $newtfile.\n");
$count = 0;
$cur_time = 0;
$i = 0;
while ($line = <ORIG>) {
chop $line;
$data[$i] = $line;
$i++;
}
close(ORIG);
if ($i eq 0) { exit; }
@dataS = sort numerically @data;
$i = 0;
$sum = 0;
foreach $j (0 .. $#dataS) {
$cur_time = $dataS[$j];
if ($cur_time > $cur_epoch) {
while ($cur_epoch < $cur_time) {
$epoch[$i] = $cur_epoch;
$sum = $sum + $count;
$cum[$i] = $sum;
$i++;
$cur_epoch = $cur_epoch + $incr;
$count=0;
}
if ($cur_time <= $cur_epoch) {
$count = 1;
} else {
$count = 0;
}
} else {
$count++;
}
}
$epoch[$i] = $cur_epoch;
$sum = $sum + $count;
$cum[$i] = $sum;
$oldcum = 0;
foreach $j (0 .. $#epoch) {
$prob = $cum[$j]/$cum[$#cum];
$e = $epoch[$j]/$dividend;
if ($cum[$j] ne $oldcum) {
print CDF "$e $cum[$j] $prob\n";
}
$oldcum = $cum[$j];
}
close(CDF);
}
syntax highlighted by Code2HTML, v. 0.9.1