See below.

On 2/27/2010 10:58 AM, Steven D'Aprano wrote:
On Sun, 28 Feb 2010 05:30:49 am Wayne Watson wrote:
Ok, I'm back after a three day trip. You are correct about the use of
pronouns and a few misplaced words. I should have reread what I
wrote. I had described this in better detail elsewhere, and followed
that description with the request here probably thinking back to it.
I think I was getting a bit weary of trying to find an answer. Try
this.


Folder1
     track1.py
    data1.txt
    data2.txt
    data3.txt

Folder2
     track1.py
     dset1.txt
     dset2.txt
     ...
     dset8.txt

data and dset files have the same record formats. track1.py was
copied into  Folder2 with ctrl-c + ctrl-v. When I run track1.py from
folder1, it clearly has examined the data.txt  files. If I run the
copy of track1.py in folder2, it clearly operates on folder1 (one)
data.txt files. This should not be.
Without seeing the code in track1.py, we cannot judge whether it should
be or not. I can think of lots of reasons why it should be. For
example:
I'll attach the code to this. However, I haven't had the best of luck getting attachments posted. Frankly, I think it's better to try the sample program I provided at the top of the thread. If you are not using Win7, I don't think this is going to work well, but maybe you'll see something that's a no-no in any OS. I have several data files, if anyone wants to go that far. I can supply a data file if necessary. Note this program is still in development. In fact, I was going to pull the debug "wtw" statements and wrap it all up when this problem occurred.
if you have hard-coded the path to Folder1

if you call os.chdir(Folder1)
Not to my knowledge. I just "assume" that the program will read the txt files in alpha order in the same folder as the program.
if you have changed the PATH so that Folder1 gets searched before the
current directory

then the behaviour you describe theoretically could happen.

How are you calling track1.py? Do you do this?

   cd Folder2
   python track1.py
Yes, I believe I've tried that.
What if you change the second line to:

   python ./track1.py

Are you perhaps using this?

   python -m track1
Don't even know what it means.
If you change the name of the copy from track1.py to copy_of_track1.py,
and then call this:

   python copy_of_track1.py

how does the behaviour change?
I'll try it later. I probably have tried it already. See my "point" comments below. If Properties doesn't change, changing the name isn't going to work.

If I look at  the  properties of track1.py in folder2  (two), it  is
pointing back to the program in folder1 (one).
What? "Pointing back", as in a Shortcut? Or a symlink?
Aren't symlinks Linux world? I know nothing about them. Windows7
Properties of track1.py in folder 2 (two) show the py file is really in folder1.
If you've created a shortcut instead of a copy, I'm not surprised you
are executing it in the "wrong" folder. That's what shortcuts do.
If I've created a shortcut, it wasn't by design. Ctrl-c to ctrl-v most likely.



--
            "There is nothing so annoying as to have two people
             talking when you're busy interrupting." -- Mark Twain

#  Generates summary reports on description txt files in present folder
#  There are three output files, A, B and C.
#  A produces a report with titles and column descriptions along with event data
#  B only produces event data, no titles; otherwise, same as A
#  C produces a report with titles and amplitude stats; otherwise same as A

# Things to do
# Re-examine magnitude philosophy on segments and for first 30 seconds.
# print DST year via dictionary entry

# sentuser txt (track data) contents on each line
# 1. Frame count relative to the trigger time.  Negative values are before 
trigger.  Positive values are after trigger.
# 2. Number of pixels that are above threshold.
# 3. Amplitude.  Basically, the sum of all pixels above threshold.
# 4. X coordinate of the event centroid, in pixels.
# 5. Y coordinate of the event centroid, in pixels.
#
# There is a header line, which is followed by an empty line

# Note that some of the functions here are not used here  They are
# part of a class, and as such are perfectly acceptable Python's reuseability
# philosophy. They produce statistics that may be needed in the future,
# particularly the segment calcs.  See the CollectTrkData class.

import sys, os, glob
import string
from numpy import *
from datetime import datetime, timedelta
import time
from scipy import stats as stats # scoreatpercentile

# DST for several years from
# Naval Obs. <http://aa.usno.navy.mil/faq/docs/daylight_time.php>
DST_dict = { # West coast, 8 hours from Greenwich for PST (Pacific States)
         2007:("2007/03/11 02:00:00", "2007/11/04 02:00:00"), 
         2008:("2008/03/09 02:00:00", "2008/11/02 02:00:00"),
         2009:("2009/03/08 02:00:00", "2009/11/01 02:00:00"),
         2010:("2010/03/14 02:00:00", "2010/11/07 02:00:00"),
         2011:("2011/03/13 02:00:00", "2011/11/06 02:00:00"),
         2012:("2012/03/11 02:00:00", "2012/11/04 02:00:00")}

def adjust_DST(DT_stamp, spring, fall):
    # yyyy/mm/dd hh:mm:ss in, adjusted out
    format = '%Y/%m/%d %H:%M:%S'
    dt      = datetime(*(time.strptime(DT_stamp, format)[0:6])) # get six tuple
    dspring = datetime(*(time.strptime(spring, format)[0:6]))
    dfall   = datetime(*(time.strptime(fall, format)[0:6]))
    if ((dt >= dspring) and (dt <= dfall)):
        #print "   mid-year adjustment"
        adj = timedelta(seconds = 3600) 
        dt = dt + adj       
    else:
        pass
        #print "   no adjustment"
    format = '%Y/%m/%d %H:%M:%S'
    return dt.strftime(format)

def adjust_ftime(afilename, sec):
    # yyyymmdd_hhmmss & seconds in, new yyyy/mm/dd hh:mm:ss with new time out
    td_stamp = afilename
    format = '%Y%m%d_%H%M%S'
    d = datetime(*(time.strptime(td_stamp, format)[0:6])) # get six tuple
    diff = timedelta(seconds = sec)
    d = d + diff
    format = '%Y/%m/%d %H:%M:%S'
    return d.strftime(format)

global output_fileA

class Track_data:
    def __init__(self, line):
        self.aline = line
        return

    def get_data(self, line):
        self.aline = line
        self.frame_count = int(self.aline[0:4])
        self.pix_above_thold = int(self.aline[5:11])
        self.amplitude = float(self.aline[14:19])
        self.cntrd_x = float(self.aline[20:27])
        self.cntrd_y = float(self.aline[28:35])
        data = [self.frame_count, self.pix_above_thold, \
                self.amplitude, self.cntrd_x, self.cntrd_y]
        return data

    def print_me(self):
        print self.amplitude, self.cntrd_x,self.cntrd_y
        return
        
class CollectTrkData:
    # Collect track data into a list of 3-tuples, xya. Misc track
    # calculations.
    def __init__(self):
        self.xya = []   # (x , y, amplitude)
        self.ntrk_pts = 0
        return

    def collection(self, amp, x, y):
        self.xya.append((x, y, amp)) # list of 3-tuples
        self.ntrk_pts += 1
        return
    
    def get_collection(self):
        return self.xya

    def distance(self):
        # total distance from start to end of track
        x0 = self.xya[0][0]
        y0 = self.xya[0][1]
        xn = self.xya[self.ntrk_pts-1][0]
        yn = self.xya[self.ntrk_pts-1][1]
        #print "wtw nframes: ", self.ntrk_pts
        #print "wtw-xy-0: ", x0,y0, "xy-n: ",xn,yn
        dist = sqrt((xn-x0)**2+(yn-y0)**2)
        return dist

    def angle(self):       
        x0 = self.xya[0][0]
        y0 = self.xya[0][1]
        xn = self.xya[self.ntrk_pts-1][0]
        yn = self.xya[self.ntrk_pts-1][1]
        x = xn - x0
        y = yn - y0
        a = (arctan2((xn-x0), (yn-y0))*57.3) -90.0 + 360.0
        angle = fmod(a,360.0)     
        return angle
    
    def print_sums(self):
        print self.total_amp, self.total_cntrd_x, \
              self.total_cntrd_y, self.ntrk_pts

    def print_xya(self, begin, end):
        for n in range(begin, end):
            print n, self.xya[n][0], self.xya[n][1]

    def get_amplitude_stats(self): # Simple track statistics
        abc = array(self.xya)[:,2]
        per_tile25 = stats.scoreatpercentile(abc,25.0)
        per_tile50 = stats.scoreatpercentile(abc,50.0)
        per_tile75 = stats.scoreatpercentile(abc,75.0)
        mean       = stats.mean(abc)
        std        = stats.std(abc)
        min        = abc.min()
        max        = abc.max()
        #print "per_tile: ", per_tile10, per_tile50, per_tile90
        #print "mean, std, min, max: ", mean,std,min,max
        trk_stats = (min, max, mean, std, per_tile25, per_tile50, per_tile75)
        return trk_stats

    def get_pix_speed(self):
        # Need to revise for degrees/sec when get ra/dec code available
        # calculate avg pixel/sec traveled every 10 frames, and
        # in segment group if less than 10
        # seg_size is the # of points in the segment, 0-9, 9-18, ...
        global output_fileA
        seg_size = 10
        n_segments = (self.ntrk_pts - 1)/(seg_size - 1)
        print "No. of line segments: ",n_segments
        segs = []
        for j in xrange(0,n_segments):
            segs.append(0)             
        if (self.ntrk_pts - 1 - n_segments*(seg_size - 1)) != 0:
            #print "hey: ", self.ntrk_pts - 1, n_segments*(seg_size - 1)
            # extra segment with less than seg_size frames
            n_segments = n_segments + 1
            n_in_last = self.ntrk_pts - 1 - (seg_size - 1)*(n_segments-1)
            #print "lastly:", n_in_last
        x = []; y = []
        # isolate x,y pairs
        for k in xrange(0, self.ntrk_pts):
            x.append(self.xya[k][0])
            y.append(self.xya[k][1])
            #print x[k],y[k]
        #print "x len: ",len(x)
        # create speed segments
        speed = []
        for j in xrange(0,n_segments):
            speed.append(0)
        
        #print "speed len", len(speed)
        # compute distances from line segment start to end   
        lower_index = 0
        bump = seg_size - 1
        upper_index = bump
        j = 0
        while (j < n_segments):
            #print "j,low,up: ",j, lower_index, upper_index
            # calculate segment distance
            #print "j low, up are: ",j, lower_index,upper_index
            # note this does not measure sub-segments
            x0 = x[lower_index]; y0 = y[lower_index]
            xn = x[upper_index]; yn = y[upper_index]
            #print "x0,y0 and x,y", x0,y0," -- ", xn,yn
            dist = sqrt((xn-x0)**2+(yn-y0)**2)
            #print "dist = ", dist
            speed[j] = dist/((1.0/30)*(upper_index - lower_index)) # (distance 
/ time
            print "Pix/sec [",j,"]:", speed[j], "(",(upper_index - 
lower_index+1), ")",\
            ' Pixel distance: ',dist
            output_fileA.write("Pix/sec ["+str(j)+"]:"+str(speed[j])+ " 
("+str((upper_index - lower_index+1))+")"+
            ' Pixel distance: '+str(dist)+'\n')
            lower_index = upper_index
            upper_index = lower_index + bump
            if upper_index > self.ntrk_pts-1:
                upper_index = self.ntrk_pts - 1
            #print "quick j,n_seg: ", j, n_segments
            j = j + 1

    def get_avg_xamp(self):
        # Find average amp in segments of size seg_size frames
        seg_size = 10
        n_segments = self.ntrk_pts/seg_size
        segs = []
        sample_size = []
        for j in xrange(0,n_segments):
            segs.append(0)
            sample_size.append(seg_size)
            
        if (n_segments*n_segments - self.ntrk_pts) != 0:
            # extra segment with less than seg_size frames
            n_segments = n_segments + 1
            sample_size.append(0)
            n_samples = self.ntrk_pts - seg_size*(n_segments - 1)
            sample_size[n_segments - 1] = n_samples
            segs.append(0)
        lower_index = 0
        for j in xrange(0, n_segments):
            upper_index = sum(sample_size[0:j+1])
            amps = []
            # calculate segment stats
            for k in xrange(0, self.ntrk_pts):
                amps.append(self.xya[k][2])
            segs[j] = sum(amps[lower_index:upper_index])
            lower_index = upper_index
            avg = segs[j]/sample_size[j]
            print "avg. amp sample size: ", j, sample_size[j]

def finish():
    print; print "Bye"
    print
    raw_input('Press Enter to Quit')
    sys.exit()

def get_track_data(file_name): #NEW
    # Collecting frame data
    track_file = open(file_name)
    track_file.readline();
    track_file.readline() # get past lines 1 and 2 to data
    # Get past the next 30 lines (ignore 1 sec of data). Start at track 0
    # An event starts at -1, but it is not possible to tell in the next
    # 60 seconds where it might end, since the untrigger value is unknown
    # Here I'm going to use 5 as an untrigger value for testing
    print
    print "wtw NEW",file_name
    for j in range(0,30):  
        line=track_file.readline()
    line_data = Track_data(line)   # Create object for line
    trk_data = CollectTrkData()
    untrigger = 5
    untrigger_switch = False
    n_data_pts = 0
    while 1:
        line = track_file.readline()  # track data lines
        if len(line) == 0:  # reach eof?
            break
        else:
            amp = int(line[5:11])
            if amp <= untrigger:
                if untrigger_switch:
                    # two untriggers in a row
                    break
                else:
                    # First untrigger event 
                    untrigger_switch = True
            fields = line_data.get_data(line)
            trk_data.collection(fields[2],fields[3],fields[4])
            n_data_pts += 1
            untrigger_switch = False
    print "wtw n:",n_data_pts
    xya = trk_data.get_collection() # (x, y, amplitude)
    
    # Now do  stats from xya, percentiles, range, std. dev., avg
    amp_stats = trk_data.get_amplitude_stats()
    fmt_amp_stats = "%8.1f %8.1f %8.1f %8.1f    %8.1f   %8.1f   %8.1f" % 
amp_stats
    #stats = trk_data.get_point_track_stats(n_data_pts, file_name)
    track_file.close()
    if n_data_pts == 0: 
        return
    fmt_basic_stats = "%3i " % trk_data.ntrk_pts\
        + "  %7.2f" % (trk_data.ntrk_pts*(1.0/30))\
        + " %7.2f" % trk_data.distance()
    #amp_stats = trk_data.get_amplitude_stats()
    #fmt_amp_stats = "%8.1f %8.1f %8.1f %8.1f    %8.1f   %8.1f   %8.1f" % 
amp_stats
    return (fmt_basic_stats, fmt_amp_stats)

def XXXget_track_data(file_name):
    global output_fileA
    track_file = open(file_name)
    track_file.readline(); abc = track_file.readline() # get past lines 1 and 2 
to data
    for j in range(0,90):  # Get past the next 90 lines (ignore 3 sec of data)
        # Toss it, but maybe want to start collecing at one second
        abc=track_file.readline() 
    #print "wtw after 90: ",abc
    line = track_file.readline()
    trk_data = CollectTrkData()
    if len(line) == 0: # track has 90 or less points. short, maybe noise
        fini_stats = "%3i " % 0\
            + "  %7.2f" % (0.0)  # 3 seconds
        # effecitvely ended output for track
        return fini_stats
    while 1:
        if len(line) == 0:  # reach eof?
            break
        else:
            line_data = Track_data(line)
            fields = line_data.get_data()
            trk_data.collection(fields[2],fields[3],fields[4])
        line = track_file.readline()

    xya = trk_data.get_collection() # (x, y, amplitude)
    
    fmt_basic_stats = "%3i " % trk_data.ntrk_pts\
        + "  %7.2f" % (trk_data.ntrk_pts*(1.0/30))\
        + " %7.2f" % trk_data.distance()
    # Now do magnitude (amplitude) stats from xya, percentiles, range, std. 
dev., avg_stats = trk_data.get_amplitude_stats()
    fmt_amp_stats = "%8.1f %8.1f %8.1f %8.1f    %8.1f   %8.1f   %8.1f" % 
amp_stats
    track_file.close()
    return (fmt_basic_stats, fmt_amp_stats)

# Main program code
global output_fileA
print; print "Starting"; print
FLinit = raw_input('Enter your two initials in caps: ')
FLinit = string.capitalize(FLinit[0])+string.capitalize(FLinit[1])
print
print "UTC date-times are adjusted for the years 2006-2012"
print "   Note: The first 3.0 seconds of a track are ignored."
print "         Blank data for an event means either a short"
print "         track or a noisy first 3.0 seconds."
print "   date-time stamp is set about 1 second into the track."
print
#pathname = os.path.dirname(sys.argv[0])
now = datetime.now()
dt  = now.strftime("%Y%m%d_%H%M%S")
output_fileA = open('SentEventsA-'+FLinit+dt+'.txt','w') # Titles and events
output_fileB = open('SentEventsB-'+FLinit+dt+'.txt','w') # Events only
output_fileC = open('SentEventsC-'+FLinit+dt+'.txt','w') # Titles, events, amp 
stats
filenames = glob.glob('v2*.txt')
n_stop = 30000 # debug, testing -- to shorten output
seqno = 0
header_ctrl = 0
events_per_page = 20
dt_local = ""
first_page = True
for file in filenames:
    if mod(header_ctrl, events_per_page) == 0:
        if first_page == True:
            first_page = False
        else:
            output_fileA.write(chr(12))  # page/form feed
            output_fileC.write(chr(12))  # page/form feed
        header1 = "                                                  <---Track 
Stats--->"
        header2 = "Date/Time &    Station UTC                  Seq # Frames 
Time Span Pix Dst"
        header3 = "------------------- -- -------------------  ----- ------ 
--------- -------"
        print header1; print header2; print header3
        output_fileA.write(header1+"\n")
        output_fileA.write(header2+"\n")
        output_fileA.write(header3+"\n")
        amp_banner = "                    <--- Amplitude Statistics --->"
        amp_header = "  min      max      mean     std       pct-tile25 
pct_tile50 pct_tile75"
        amp_underline= "  -------- -------- -------- --------  ---------- 
---------- ----------"
        output_fileC.write(header1+amp_banner+"\n")
        output_fileC.write(header2+amp_header+"\n")
        output_fileC.write(header3+amp_underline+"\n")
    header_ctrl += 1
    seqno = seqno + 1

    dtf = file[1:16]   #date-time stamp on file 
    if dt_local == "":  # Identify if event is in a group
        dt = datetime.strptime(dtf,"%Y%m%d_%H%M%S")
        dt_last = dt.strftime("%Y/%m/%d %H:%M:%S")
        dt_local = dt_last
    else:
        dt = datetime.strptime(dtf,"%Y%m%d_%H%M%S")
        dt_local = dt.strftime("%Y/%m/%d %H:%M:%S")
    year   = int(str(dt_local)[0:4])
    spring = DST_dict[year][0]
    fall   = DST_dict[year][1]
    dt_utc = adjust_DST(dt_local, spring, fall)
    tz_adjust = 60*60.0*8  # PST
    dt_us = dt_utc
    dt_underscore = dt_us[0:10] + "_" + dt_us[11:]
    dt = datetime.strptime(dt_us,"%Y/%m/%d %H:%M:%S")
    dt_underscore = dt.strftime("%Y%m%d_%H%M%S")
    dt_utc    = adjust_ftime(dt_underscore, tz_adjust) # add 8 hours of time
    
    event_dt = str(dt_local) + " "+FLinit+" "+str(dt_utc)+("   %4i" % seqno)+"  
 " 
    output_fileA.write(event_dt+"")  # May need space after dt at some future 
time
    output_fileB.write(event_dt+"")
    output_fileC.write(event_dt+"")
    print event_dt,  # Output to shell window or console

    # Basic stats and amplitude stats
    trk_stats = get_track_data(file)  # adds track data to output
    output_fileA.write(trk_stats[0]+""+"\n")  # "" might need space in future
    output_fileB.write(trk_stats[0]+""+"\n")
    output_fileC.write(trk_stats[0]+"   "+trk_stats[1]+""+"\n")  # + amplitude 
stats
    print trk_stats[0]  # Output to shell window or console

    dt_last = dt_local    
    if seqno > n_stop: # debug, testing
        break

output_fileA.close()
output_fileB.close()
output_fileC.close()
finish()
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to