| 15 | | def load(self, sepchar = "\t", skipchar = "#"): |
|---|
| | 16 | def pickle_load(self): |
|---|
| | 17 | return cPickle.load(file(self.filename,"r")) |
|---|
| | 18 | |
|---|
| | 19 | def pickle_write(self, object, filename): |
|---|
| | 20 | return cPickle.dump(object, file(filename, "w")) |
|---|
| | 21 | |
|---|
| | 22 | def txt_load(self, sepchar = "\t", skipchar = "#"): |
|---|
| 58 | | def write_header(self, outputfile): |
|---|
| 59 | | f = open(outputfile,"w") |
|---|
| 60 | | for key, value in self.header.items(): |
|---|
| 61 | | f.write("# %s = %s" %(key, value)) |
|---|
| | 71 | def write_header(self, spikelist, filename): |
|---|
| | 72 | f = open(filename,"w") |
|---|
| | 73 | f.write("# dimensions = %s\n" % spikelist.dimensions) |
|---|
| | 74 | f.write("# first_id = %d\n" % numpy.min(spikelist.id_list)+1) |
|---|
| | 75 | f.write("# last_id = %d\n" % numpy.max(spikelist.id_list)+1) |
|---|
| | 76 | f.write("# dt = %g\n" % spikelist.dt) |
|---|
| 69 | | if dt is None and 'dt' in self.header: |
|---|
| 70 | | logging.debug("dt is infered from the file header") |
|---|
| 71 | | dt = self.header['dt'] |
|---|
| | 82 | # First, we try to see if the data are stored in a pickled way (MUCH FASTER) |
|---|
| | 83 | try : |
|---|
| | 84 | res = self.data_io.pickle_load() |
|---|
| | 85 | return res |
|---|
| | 86 | except Exception: |
|---|
| | 87 | # Otherwise we try the text mode.... |
|---|
| | 88 | self.parse_header() |
|---|
| | 89 | if dt is None and 'dt' in self.header: |
|---|
| | 90 | logging.debug("dt is infered from the file header") |
|---|
| | 91 | dt = self.header['dt'] |
|---|
| | 92 | if (id_list is None) and (('first_id' in self.header) and ('last_id' in self.header)): |
|---|
| | 93 | logging.debug("id_list is infered from the file header") |
|---|
| | 94 | n_cells = int(self.header['last_id']) - int(self.header['first_id']) + 1 |
|---|
| | 95 | id_list = n_cells |
|---|
| | 96 | else: |
|---|
| | 97 | raise Exception("id_list not provided and cannot be inferred from file header.") |
|---|
| | 98 | if dims is None and 'dimensions' in self.header: |
|---|
| | 99 | dims = self.header['dimensions'] |
|---|
| | 100 | if label is None: |
|---|
| | 101 | label = self.data_io.filename |
|---|
| | 102 | if isinstance(id_list, int): # allows to just specify the number of neurons |
|---|
| | 103 | id_list = range(id_list) |
|---|
| | 104 | from NeuroTools import signals |
|---|
| | 105 | return signals.SpikeList(self.data_io.txt_load(), id_list, dt, t_start, t_stop, dims, label) |
|---|
| 80 | | if dims is None and 'dimensions' in self.header: |
|---|
| 81 | | dims = self.header['dimensions'] |
|---|
| 82 | | |
|---|
| 83 | | if label is None: |
|---|
| 84 | | label = self.loader.filename |
|---|
| 85 | | |
|---|
| 86 | | if isinstance(id_list, int): # allows to just specify the number of neurons |
|---|
| 87 | | id_list = range(id_list) |
|---|
| 88 | | |
|---|
| 89 | | from NeuroTools import signals |
|---|
| 90 | | return signals.SpikeList(self.loader.load(), id_list, dt, t_start, t_stop, dims, label) |
|---|
| 91 | | |
|---|
| | 110 | def save_spikelist_txt(self, spikelist, filename): |
|---|
| | 111 | self.write_header(spikelist, filename) |
|---|
| | 112 | data = numpy.array(spikelist.convert(format="[times, ids]")) |
|---|
| | 113 | data = data.reshape(data.shape[1],data.shape[0]) |
|---|
| | 114 | self.data_io.txt_write(data, filename+".tmp") |
|---|
| | 115 | os.system("cat %s >> %s" %(filename+".tmp", filename)) |
|---|
| | 116 | os.system("rm %s" %(filename+".tmp")) |
|---|