Ignore:
Timestamp:
04/09/12 15:16:20 (8 years ago)
Author:
sc
Message:
  • Updates to move CSV export into server modules
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Puzzlebox/Synapse/Session.py

    r382 r386  
    77 
    88__changelog__ = """\ 
    9 Last Update: 2012.04.01 
     9Last Update: 2012.04.09 
    1010""" 
    1111 
     
    4646DEBUG = configuration.DEBUG 
    4747 
    48 PACKET_MINIMUM_TIME_DIFFERENCE_THRESHOLD = 0.75 
     48#PACKET_MINIMUM_TIME_DIFFERENCE_THRESHOLD = 0.75 
    4949 
    5050 
     
    364364        def exportDataToCSV(self, parent=None, source=None, target=None): 
    365365                 
    366                 if parent == None: 
    367                         if self.parent == None: 
    368                                 parent = self 
    369                         else: 
    370                                 parent = self.parent 
    371                  
    372                 if source == None: 
    373                         if self.parent == None: 
    374                                 source = self 
    375                         else: 
    376                                 source = self.parent 
    377                  
    378                 if target == None: 
    379                         if self.parent == None: 
    380                                 target = self 
    381                         else: 
    382                                 target = self.parent 
    383                  
    384                 try: 
    385                         truncate_csv_timezone = target.configuration.EXPORT_CSV_TRUNCATE_TIMEZONE 
    386                 except: 
    387                         truncate_csv_timezone = False 
    388                  
    389                 try: 
    390                         scrub_data = target.configuration.EXPORT_CSV_SCRUB_DATA 
    391                 except: 
    392                         scrub_data = False 
    393                  
    394                  
    395                 headers = 'Date,Time,Attention,Meditation,Signal Level,Delta,Theta,Low Alpha,High Alpha,Low Beta,High Beta,Low Gamma,Mid Gamma' 
    396                  
    397                 customDataHeaders = [] 
    398                 for header in parent.customDataHeaders: 
    399                         customDataHeaders.append(header) 
    400                 for plugin in parent.activePlugins: 
    401                         for header in plugin.customDataHeaders: 
    402                                 customDataHeaders.append(header) 
    403                  
    404                 for each in customDataHeaders: 
    405                         headers = headers + ',%s' % each 
    406                  
    407                 headers = headers + '\n' 
    408                  
    409                 csv = {} 
    410                  
    411                 for packet in source.packets['signals']: 
    412                          
    413                          
    414                         if 'rawEeg' in packet.keys(): 
    415                                 continue 
    416                          
    417                         if packet['timestamp'] not in csv.keys(): 
    418                                  
    419                                 if 'blinkStrength' in packet.keys(): 
    420                                         # Skip any blink packets from log 
    421                                         continue 
    422                                  
    423                                  
    424                                 #print packet 
    425                                 timestamp = packet['timestamp'] 
    426                                 (date, localtime) = self.parseTimeStamp(timestamp, \ 
    427                                                     truncate_time_zone=truncate_csv_timezone) 
    428                                  
    429                                 csv[timestamp] = {} 
    430                                 csv[timestamp]['Date'] = date 
    431                                 csv[timestamp]['Time'] = localtime 
    432                                 csv[timestamp]['Attention'] = '' 
    433                                 csv[timestamp]['Meditation'] = '' 
    434                                 csv[timestamp]['Signal Level'] = '' 
    435                                 csv[timestamp]['Delta'] = '' 
    436                                 csv[timestamp]['Theta'] = '' 
    437                                 csv[timestamp]['Low Alpha'] = '' 
    438                                 csv[timestamp]['High Alpha'] = '' 
    439                                 csv[timestamp]['Low Beta'] = '' 
    440                                 csv[timestamp]['High Beta'] = '' 
    441                                 csv[timestamp]['Low Gamma'] = '' 
    442                                 csv[timestamp]['Mid Gamma'] = '' 
    443                                  
    444                                 for header in customDataHeaders: 
    445                                         csv[timestamp][header] = '' 
    446                          
    447                          
    448                         if 'eSense' in packet.keys(): 
    449                                 if 'attention' in packet['eSense'].keys(): 
    450                                         csv[timestamp]['Attention'] = packet['eSense']['attention'] 
    451                                 if 'meditation' in packet['eSense'].keys(): 
    452                                         csv[timestamp]['Meditation'] = packet['eSense']['meditation'] 
    453                          
    454                         if 'eegPower' in packet.keys(): 
    455                                 if 'delta' in packet['eegPower'].keys(): 
    456                                         csv[timestamp]['Delta'] = packet['eegPower']['delta'] 
    457                                 if 'theta' in packet['eegPower'].keys(): 
    458                                         csv[timestamp]['Theta'] = packet['eegPower']['theta'] 
    459                                 if 'lowAlpha' in packet['eegPower'].keys(): 
    460                                         csv[timestamp]['Low Alpha'] = packet['eegPower']['lowAlpha'] 
    461                                 if 'highAlpha' in packet['eegPower'].keys(): 
    462                                         csv[timestamp]['High Alpha'] = packet['eegPower']['highAlpha'] 
    463                                 if 'lowBeta' in packet['eegPower'].keys(): 
    464                                         csv[timestamp]['Low Beta'] = packet['eegPower']['lowBeta'] 
    465                                 if 'highBeta' in packet['eegPower'].keys(): 
    466                                         csv[timestamp]['High Beta'] = packet['eegPower']['highBeta'] 
    467                                 if 'lowGamma' in packet['eegPower'].keys(): 
    468                                         csv[timestamp]['Low Gamma'] = packet['eegPower']['lowGamma'] 
    469                                 if 'highGamma' in packet['eegPower'].keys(): 
    470                                         csv[timestamp]['Mid Gamma'] = packet['eegPower']['highGamma'] 
    471                          
    472                         if 'poorSignalLevel' in packet.keys(): 
    473                                 csv[timestamp]['Signal Level'] = packet['poorSignalLevel'] 
    474                          
    475                         for header in customDataHeaders: 
    476                                 if 'custom' in packet.keys() and \ 
    477                                    header in packet['custom'].keys(): 
    478                                         csv[timestamp][header] = packet['custom'][header] 
    479                  
    480                  
    481                 if scrub_data: 
    482                         csv = self.scrubData(csv, truncate_csv_timezone) 
    483                  
    484                  
    485                 output = headers 
    486                  
    487                 csv_keys = csv.keys() 
    488                 csv_keys.sort() 
    489                  
    490                 for key in csv_keys: 
    491                          
    492                         row = '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' % \ 
    493                               (csv[key]['Date'], \ 
    494                                csv[key]['Time'], \ 
    495                                csv[key]['Attention'], \ 
    496                                csv[key]['Meditation'], \ 
    497                                csv[key]['Signal Level'], \ 
    498                                csv[key]['Delta'], \ 
    499                                csv[key]['Theta'], \ 
    500                                csv[key]['Low Alpha'], \ 
    501                                csv[key]['High Alpha'], \ 
    502                                csv[key]['Low Beta'], \ 
    503                                csv[key]['High Beta'], \ 
    504                                csv[key]['Low Gamma'], \ 
    505                                csv[key]['Mid Gamma']) 
    506                          
    507                         for header in customDataHeaders: 
    508                                 row = row + ',%s' % csv[key][header] 
    509                          
    510                         row = row + '\n' 
    511                          
    512                         output = output + row 
    513                  
    514                  
    515                 return(output) 
    516          
    517          
    518         ################################################################## 
    519          
    520         def scrubData(self, csv, truncate_csv_timezone=False): 
    521                  
    522                 # If there are missing packets, repeat a given packet once per missing 
    523                 # second until there is a gap between 1 and 2 seconds, in which case 
    524                 # produce a final duplicate packet at the mid-point between the packets 
    525  
    526                 if self.DEBUG: 
    527                         print "INFO: Scrubbing Data" 
    528                  
    529                 last_time = None 
    530                 last_recorded_time = None 
    531                  
    532                 output = {} 
    533                  
    534                 csv_keys = csv.keys() 
    535                 csv_keys.sort() 
    536                  
    537                 for key in csv_keys: 
    538                          
    539                         timestamp = key 
    540  
    541                         if csv[key]['Attention'] == '': 
    542                                 continue 
    543                          
    544                         if last_time == None: 
    545                                 # First entry in log 
    546                                 last_time = timestamp 
    547                                 last_recorded_time = timestamp 
    548                                 output[key] = csv[key] 
    549                                 continue 
    550                          
    551                         else: 
    552                                  
    553                                 #time_difference = timestamp - last_time 
    554                                 time_difference = timestamp - last_recorded_time 
    555                                  
    556                                 if (time_difference <= 1) and \ 
    557                                    (time_difference >= PACKET_MINIMUM_TIME_DIFFERENCE_THRESHOLD): 
    558                                         # Skip packets within the correct time threshold 
    559                                         last_time = timestamp 
    560                                         last_recorded_time = timestamp 
    561                                         output[key] = csv[key] 
    562                                         continue 
    563                                  
    564                                 else: 
    565                                          
    566                                         if self.DEBUG > 1: 
    567                                                 print "time_difference:", 
    568                                                 print time_difference 
    569                                                 print "timestamp:", 
    570                                                 print self.parseTimeStamp(timestamp)[-1].split(' ')[0] 
    571                                                 print "last_time:", 
    572                                                 print self.parseTimeStamp(last_time)[-1].split(' ')[0] 
    573                                                 print "last_recorded_time:", 
    574                                                 print self.parseTimeStamp(last_recorded_time)[-1].split(' ')[0] 
    575                                          
    576                                          
    577                                         new_packet = csv[key].copy() 
    578                                          
    579                                         if time_difference >= 2: 
    580                                                  
    581                                                 ##new_time = last_time + 1 
    582                                                 #new_time = last_recorded_time + 1 
    583                                                  
    584                                                 count = int(time_difference) 
    585                                                 while count >= 1: 
    586                                                         new_packet = csv[key].copy() 
    587                                                         new_time = last_recorded_time + 1 
    588                                                         (date, formatted_new_time) = self.parseTimeStamp(new_time, \ 
    589                                                          truncate_time_zone=truncate_csv_timezone) 
    590                                                         new_packet['Time'] = formatted_new_time 
    591                                                         last_recorded_time = new_time 
    592                                                         last_time = timestamp 
    593                                                         output[new_time] = new_packet 
    594                                                         count = count - 1 
    595                                                 continue 
    596                                                  
    597                                         elif time_difference < PACKET_MINIMUM_TIME_DIFFERENCE_THRESHOLD: 
    598                                                 # Spread out "bunched up" packets 
    599                                                 #new_time = last_time + 1 
    600                                                 new_time = last_recorded_time + 1 
    601                                          
    602                                          
    603                                         elif (time_difference < 2) and (time_difference > 1): 
    604                                                  
    605                                                 #new_time = last_time + ((last_time - timestamp) / 2) 
    606                                                 #new_time = last_recorded_time + ((last_recorded_time - timestamp) / 2) 
    607                                                 #new_time = last_time + 1 
    608                                                 new_time = last_recorded_time + 1 
    609                                          
    610                                          
    611                                         (date, formatted_new_time) = self.parseTimeStamp(new_time, \ 
    612                                            truncate_time_zone=truncate_csv_timezone) 
    613                                          
    614                                         new_packet['Time'] = formatted_new_time 
    615                                          
    616                                         #last_time = new_time 
    617                                         last_recorded_time = new_time 
    618                                         last_time = timestamp 
    619                                         output[new_time] = new_packet 
    620                                          
    621                                         if self.DEBUG > 1: 
    622                                                 print "WARN: Scrubbing new packet:", 
    623                                                 print new_packet 
    624                                                 print 
     366                #if parent == None: 
     367                        #if self.parent == None: 
     368                                #parent = self 
     369                        #else: 
     370                                #parent = self.parent 
     371                 
     372                #if source == None: 
     373                        #if self.parent == None: 
     374                                #source = self 
     375                        #else: 
     376                                #source = self.parent 
     377                 
     378                #if target == None: 
     379                        #if self.parent == None: 
     380                                #target = self 
     381                        #else: 
     382                                #target = self.parent 
     383                 
     384                #try: 
     385                        #truncate_csv_timezone = target.configuration.EXPORT_CSV_TRUNCATE_TIMEZONE 
     386                #except: 
     387                        #truncate_csv_timezone = False 
     388                 
     389                #try: 
     390                        #scrub_data = target.configuration.EXPORT_CSV_SCRUB_DATA 
     391                #except: 
     392                        #scrub_data = False 
     393                 
     394                output = '' 
     395                 
     396                if self.synapseServer != None: 
     397                        #output = self.synapseServer.exportDataToCSV(parent=self.parent, source=self) 
     398                        output = self.synapseServer.exportDataToCSV(parent=parent, source=source, target=target) 
    625399                 
    626400                 
Note: See TracChangeset for help on using the changeset viewer.