def create_general_top(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("general top test") settings["overwrite"] = True settings["description"] = "test top-level elements in /general" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(DATA_COLLECTION, "DATA_COLLECTION") neurodata.set_metadata(EXPERIMENT_DESCRIPTION, "EXPERIMENT_DESCRIPTION") neurodata.set_metadata(EXPERIMENTER, "EXPERIMENTER") neurodata.set_metadata(INSTITUTION, "INSTITUTION") neurodata.set_metadata(LAB, "LAB") neurodata.set_metadata(NOTES, "NOTES") neurodata.set_metadata(PROTOCOL, "PROTOCOL") neurodata.set_metadata(PHARMACOLOGY, "PHARMACOLOGY") neurodata.set_metadata(RELATED_PUBLICATIONS, "RELATED_PUBLICATIONS") neurodata.set_metadata(SESSION_ID, "SESSION_ID") neurodata.set_metadata(SLICES, "SLICES") neurodata.set_metadata(STIMULUS, "STIMULUS") neurodata.set_metadata(SURGERY, "SURGERY") neurodata.set_metadata(VIRUS, "VIRUS") # neurodata.set_metadata_from_file("source_script", __file__) # neurodata.close()
def create_isi_iface(fname, name): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("reference image test") settings["overwrite"] = True settings["description"] = "reference image test" neurodata = nwb.NWB(**settings) module = neurodata.create_module(name) iface = module.create_interface("ImagingRetinotopy") iface.add_axis_1_phase_map([[1.0, 1.1, 1.2], [2.0, 2.1, 2.2]], "altitude", .1, .1) iface.add_axis_2_phase_map([[3.0, 3.1, 3.2], [4.0, 4.1, 4.2]], "azimuth", .1, .1, unit="degrees") iface.add_axis_1_power_map([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], .1, .1) iface.add_sign_map([[-.1, .2, -.3], [.4, -.5, .6]]) iface.add_vasculature_image([[1, 0, 129], [2, 144, 0]], height=.22, width=.35) iface.add_focal_depth_image([[1, 0, 129], [2, 144, 0]], bpp=8) iface.finalize() module.finalize() neurodata.close()
def create_general_extra(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier( "general extracellular test") settings["overwrite"] = True settings["description"] = "test elements in /general/extracellular_ephys" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(EXTRA_ELECTRODE_MAP, [[1, 1, 1], [1, 2, 3]]) neurodata.set_metadata(EXTRA_ELECTRODE_GROUP, ["p1", "p2"]) neurodata.set_metadata(EXTRA_IMPEDANCE, [1.0e6, 2.0e6]) neurodata.set_metadata(EXTRA_FILTERING, "EXTRA_FILTERING") neurodata.set_metadata(EXTRA_CUSTOM("EXTRA_CUSTOM"), "EXTRA_CUSTOM") neurodata.set_metadata(EXTRA_SHANK_DESCRIPTION("p1"), "DESCRIPTION") neurodata.set_metadata(EXTRA_SHANK_LOCATION("p1"), "LOCATION") neurodata.set_metadata(EXTRA_SHANK_DEVICE("p1"), "DEVICE") neurodata.set_metadata(EXTRA_SHANK_CUSTOM("p1", "extra_shank_custom"), "EXTRA_SHANK_CUSTOM") # neurodata.set_metadata(EXTRA_SHANK_DESCRIPTION("p2"), "DESCRIPTION") neurodata.set_metadata(EXTRA_SHANK_LOCATION("p2"), "LOCATION") neurodata.set_metadata(EXTRA_SHANK_DEVICE("p2"), "DEVICE") neurodata.set_metadata(EXTRA_SHANK_CUSTOM("p2", "extra_shank_custom"), "EXTRA_SHANK_CUSTOM") # neurodata.close()
def create_annotation_series(fname, name, target): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("annotation example") settings["overwrite"] = True settings["start_time"] = "Sat Jul 04 2015 3:14:16" settings["description"] = "Test file with AnnotationSeries" neurodata = nwb.NWB(**settings) # annot = neurodata.create_timeseries("AnnotationSeries", name, target) annot.set_description("This is an AnnotationSeries with sample data") annot.set_comment( "The comment and description fields can store arbitrary human-readable data" ) annot.set_source("Observation of Dr. J Doe") # annot.add_annotation("Rat in bed, beginning sleep 1", 15.0) annot.add_annotation("Rat placed in enclosure, start run 1", 933.0) annot.add_annotation("Rat taken out of enclosure, end run 1", 1456.0) annot.add_annotation("Rat in bed, start sleep 2", 1461.0) annot.add_annotation("Rat placed in enclosure, start run 2", 2401.0) annot.add_annotation("Rat taken out of enclosure, end run 2", 3210.0) annot.add_annotation("Rat in bed, start sleep 3", 3218.0) annot.add_annotation("End sleep 3", 4193.0) # annot.finalize() neurodata.close()
def create_new_file(fname, identifier): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier(identifier) settings["overwrite"] = True settings["description"] = "softlink test" return nwb.NWB(**settings)
def create_linked_series(fname, root): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("link test") settings["overwrite"] = True settings["description"] = "time series link test" settings["start_time"] = "Sat Jul 04 2015 3:14:16" neurodata = nwb.NWB(**settings) # first = neurodata.create_timeseries("TimeSeries", root+"1", "template") first.ignore_time() first.set_value("num_samples", 1) first.set_data([1], unit="parsec", conversion=1, resolution=1e-12) first.finalize() # second = neurodata.create_timeseries("TimeSeries", root+"2", "stimulus") second.set_time([2]) second.set_value("num_samples", 1) second.set_data_as_link(first) second.finalize() # third = neurodata.create_timeseries("TimeSeries", root+"3", "acquisition") third.set_time_as_link(second) third.set_value("num_samples", 1) third.set_data([3], unit="parsec", conversion=1, resolution=1e-9) third.finalize() # neurodata.close()
def create_general_intra(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("general optophysiology test") settings["overwrite"] = True settings["description"] = "test elements in /general/optophysiology" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(IMAGE_CUSTOM("image_custom"), "IMAGE_CUSTOM") # neurodata.set_metadata(IMAGE_SITE_DESCRIPTION("p1"), "DESCRIPTION") # MANUAL CHECK # try storing string - -type system should balk #neurodata.set_metadata(IMAGE_SITE_MANIFOLD("p1"), "MANIFOLD") neurodata.set_metadata(IMAGE_SITE_MANIFOLD("p1"), [[[1,2,3],[2,3,4]],[[3,4,5],[4,5,6]]]) neurodata.set_metadata(IMAGE_SITE_INDICATOR("p1"), "INDICATOR") neurodata.set_metadata(IMAGE_SITE_EXCITATION_LAMBDA("p1"), "EXCITATION_LAMBDA") neurodata.set_metadata(IMAGE_SITE_CHANNEL_LAMBDA("p1", "red"), "CHANNEL_LAMBDA") neurodata.set_metadata(IMAGE_SITE_CHANNEL_DESCRIPTION("p1", "red"), "DESCRIPTION") neurodata.set_metadata(IMAGE_SITE_CHANNEL_LAMBDA("p1", "green"), "CHANNEL_LAMBDA") neurodata.set_metadata(IMAGE_SITE_CHANNEL_DESCRIPTION("p1", "green"), "DESCRIPTION") neurodata.set_metadata(IMAGE_SITE_IMAGING_RATE("p1"), "IMAGING_RATE") neurodata.set_metadata(IMAGE_SITE_LOCATION("p1"), "LOCATION") neurodata.set_metadata(IMAGE_SITE_DEVICE("p1"), "DEVICE") neurodata.set_metadata(IMAGE_SITE_CUSTOM("p1", "image_site_custom"), "IMAGE_SITE_CUSTOM") # neurodata.close()
def create_iface_series(fname, newfile): settings = {} settings["filename"] = fname if newfile: settings["identifier"] = nwb.create_identifier( "interface timeseries example") settings["overwrite"] = True settings["start_time"] = "Sat Jul 04 2015 3:14:16" settings["description"] = "Test interface timeseries file" else: settings["modify"] = True neurodata = nwb.NWB(**settings) # mod = neurodata.create_module("test module") iface = mod.create_interface("BehavioralEvents") ts = neurodata.create_timeseries("TimeSeries", "Ones") ts.set_data(np.ones(10), unit="Event", conversion=1.0, resolution=float('nan')) ts.set_value("num_samples", 10) ts.set_time(np.arange(10)) iface.add_timeseries(ts) iface.finalize() mod.finalize() # neurodata.close()
def create_empty_file(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("UnitTimes example") settings["overwrite"] = True settings["start_time"] = "Sat Jul 04 2015 3:14:16" settings["description"] = "Test file with spike times in processing module" neurodata = nwb.NWB(**settings) return neurodata
def create_refimage(fname, name): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("reference image test") settings["overwrite"] = True settings["description"] = "reference image test" neurodata = nwb.NWB(**settings) neurodata.create_reference_image([1, 2, 3, 4, 5], name, "raw", "test") neurodata.close()
def create_refimage(fname, name): settings = {} settings["filename"] = fname settings["identifier"] = "vwx" settings["overwrite"] = True settings["description"] = "wxy" settings["start_time"] = "xyz" neurodata = nwb.NWB(**settings) neurodata.close()
def create_softlink_source(fname, name, target): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("softlink source") settings["overwrite"] = True settings["description"] = "time series no data test" settings["start_time"] = "Sat Jul 04 2015 3:14:16" neurodata = nwb.NWB(**settings) source = neurodata.create_timeseries("TimeSeries", name, target) source.set_data([234], unit="parsec", conversion=1, resolution=1e-3) source.set_time([123]) source.finalize() neurodata.close()
def create_softlink_reader(fname, name, src_fname, src_name, target): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("softlink reader") settings["overwrite"] = True settings["description"] = "softlink test" neurodata = nwb.NWB(**settings) source = neurodata.create_timeseries("TimeSeries", name, target) source.set_data_as_remote_link( src_fname, "acquisition/timeseries/" + src_name + "/data") source.set_time([345]) source.finalize() neurodata.close()
def create_notime_series(fname, name, target): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("notime example") settings["overwrite"] = True settings["start_time"] = "Sat Jul 04 2015 3:14:16" settings["description"] = "Test no time" neurodata = nwb.NWB(**settings) # notime = neurodata.create_timeseries("TimeSeries", name, target) notime.ignore_time() notime.set_data([0], unit="n/a", conversion=1, resolution=1) # notime.finalize() neurodata.close()
def create_startingtime_series(fname, name, target): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("starting time test") settings["overwrite"] = True settings["description"] = "time series starting time test" settings["start_time"] = "Sat Jul 04 2015 3:14:16" neurodata = nwb.NWB(**settings) # stime = neurodata.create_timeseries("TimeSeries", name, target) stime.set_data([0, 1, 2, 3], unit="n/a", conversion=1, resolution=1) stime.set_value("num_samples", 4) stime.set_time_by_rate(0.125, 2) # stime.finalize() neurodata.close()
def create_general_subject(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("general top test") settings["overwrite"] = True settings["description"] = "test top-level elements in /general" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(SUBJECT, "SUBJECT") neurodata.set_metadata(SUBJECT_ID, "SUBJECT_ID") neurodata.set_metadata(SPECIES, "SPECIES") neurodata.set_metadata(GENOTYPE, "GENOTYPE") neurodata.set_metadata(SEX, "SEX") neurodata.set_metadata(AGE, "AGE") neurodata.set_metadata(WEIGHT, "WEIGHT") # neurodata.close()
def create_general_optogen(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier("metadata optogenetic test") settings["overwrite"] = True settings["description"] = "test elements in /general/optogentics" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(OPTOGEN_CUSTOM("optogen_custom"), "OPTOGEN_CUSTOM") # neurodata.set_metadata(OPTOGEN_SITE_DESCRIPTION("p1"), "DESCRIPTION") neurodata.set_metadata(OPTOGEN_SITE_DEVICE("p1"), "DEVICE") neurodata.set_metadata(OPTOGEN_SITE_LAMBDA("p1"), "LAMBDA") neurodata.set_metadata(OPTOGEN_SITE_LOCATION("p1"), "LOCATION") neurodata.set_metadata(OPTOGEN_SITE_CUSTOM("p1", "optogen_site_custom"), "OPTOGEN_SITE_CUSTOM") # neurodata.close()
def openNWB(siteNWB): """ Open the given NWB file """ outputNWB = deriveOutputNWB(siteNWB) if not os.path.isfile(outputNWB): shutil.copyfile(siteNWB, outputNWB) settings = {} settings["filename"] = outputNWB settings["auto_compress"] = True settings["modify"] = True try: return nwb.NWB(**settings) except: raise NameError("Could not open the NWB file \"%s\"." % outputNWB)
def create_general_intra(fname): settings = {} settings["filename"] = fname settings["identifier"] = nwb.create_identifier( "general intracellular test") settings["overwrite"] = True settings["description"] = "test elements in /general/intracellular_ephys" neurodata = nwb.NWB(**settings) # neurodata.set_metadata(INTRA_CUSTOM("intra_custom"), "INTRA_CUSTOM") # neurodata.set_metadata(INTRA_ELECTRODE_DESCRIPTION("p1"), "DESCRIPTION") neurodata.set_metadata(INTRA_ELECTRODE_FILTERING("p1"), "FILTERING") neurodata.set_metadata(INTRA_ELECTRODE_DEVICE("p1"), "DEVICE") neurodata.set_metadata(INTRA_ELECTRODE_LOCATION("p1"), "LOCATION") neurodata.set_metadata(INTRA_ELECTRODE_RESISTANCE("p1"), "RESISTANCE") neurodata.set_metadata(INTRA_ELECTRODE_SEAL("p1"), "SEAL") neurodata.set_metadata(INTRA_ELECTRODE_SLICE("p1"), "SLICE") neurodata.set_metadata(INTRA_ELECTRODE_INIT_ACCESS_RESISTANCE("p1"), "INITIAL_ACCESS_RESISTANCE") neurodata.set_metadata( INTRA_ELECTRODE_CUSTOM("p1", "intra_electrode_custom"), "INTRA_ELECTRODE_CUSTOM") # neurodata.set_metadata(INTRA_ELECTRODE_DESCRIPTION("e2"), "DESCRIPTION") neurodata.set_metadata(INTRA_ELECTRODE_FILTERING("e2"), "FILTERING") neurodata.set_metadata(INTRA_ELECTRODE_DEVICE("e2"), "DEVICE") neurodata.set_metadata(INTRA_ELECTRODE_LOCATION("e2"), "LOCATION") neurodata.set_metadata(INTRA_ELECTRODE_RESISTANCE("e2"), "RESISTANCE") neurodata.set_metadata(INTRA_ELECTRODE_SEAL("e2"), "SEAL") neurodata.set_metadata(INTRA_ELECTRODE_SLICE("e2"), "SLICE") neurodata.set_metadata(INTRA_ELECTRODE_INIT_ACCESS_RESISTANCE("e2"), "INITIAL_ACCESS_RESISTANCE") neurodata.set_metadata( INTRA_ELECTRODE_CUSTOM("e2", "intra_electrode_custom"), "INTRA_ELECTRODE_CUSTOM") # neurodata.close()
# indicate that it's OK to overwrite exting file settings["overwrite"] = True # specify the start time of the experiment. all times in the NWB file # are relative to experiment start time # if the start time is not specified the present time will be used settings["start_time"] = "Sat Jul 04 2015 3:14:16" # provide one or two sentences that describe the experiment and what # data is in the file settings["description"] = "Test file demonstrating a simple extracellular ephys recording" # create the NWB object. this manages the file print("Creating " + settings["filename"]) neurodata = nwb.NWB(**settings) ######################################################################## # create two electrical series, one with a single electrode and one with many # then create a spike event series # first create the electrode map # example simulated recording is made from two 2-electrode probes named # 'p0' and 'p1'. we need to define the locations of the electrodes # relative to each probe, and the location of the probes # electrode coordinates are in meters and their positions # are relative to each other. the location of the probe itself is # stored separately. using absolute coordinates here, if they are known, # is still OK electrode_map = [[0, 0, 0], [0, 1.5e-6, 0], [0, 0, 0], [0, 3.0e-5, 0]] electrode_group = [ "p0", "p0", "p1", "p1" ]
def main(): module = PipelineModule() jin = module.input_data() infile = jin["input_nwb"] outfile = jin["output_nwb"] # a temporary nwb file must be created. this is that file's name tmpfile = outfile + ".tmp" # create temp file and make modifications to it using h5py shutil.copy2(infile, tmpfile) f = h5py.File(tmpfile, "a") # change dataset names in acquisition time series to match that # of existing ephys NWB files # also rescale the contents of 'data' fields to match the scaling # in original files acq = f["acquisition/timeseries"] sweep_nums = [] for k, v in iteritems(acq): # parse out sweep number try: num = int(k[5:10]) except: print("Error - unexpected sweep name encountered in IGOR nwb file") print("Sweep called: '%s'" % k) print("Expecting 5-digit sweep number between chars 5 and 9") sys.exit(1) swp = "Sweep_%d" % num # rename objects try: acq.move(k, swp) ts = acq[swp] ts.move("stimulus_description", "aibs_stimulus_description") except: print("*** Error renaming HDF5 object in %s" % swp) type_, value_, traceback_ = sys.exc_info() print(traceback.print_tb(traceback_)) sys.exit(1) # rescale contents of data so conversion is 1.0 try: data = ts["data"] scale = float(data.attrs["conversion"]) data[...] = data.value * scale data.attrs["conversion"] = 1.0 except: print("*** Error rescaling data in %s" % swp) type_, value_, traceback_ = sys.exc_info() print(traceback.print_tb(traceback_)) sys.exit(1) # keep track of sweep numbers sweep_nums.append("%d" % num) ################################### #... ditto for stimulus time series stim = f["stimulus/presentation"] for k, v in iteritems(stim): # parse out sweep number try: num = int(k[5:10]) except: print("Error - unexpected sweep name encountered in IGOR nwb file") print("Sweep called: '%s'" % k) print("Expecting 5-digit sweep number between chars 5 and 9") sys.exit(1) swp = "Sweep_%d" % num try: stim.move(k, swp) except: print("Error renaming HDF5 group from %s to %s" % (k, swp)) sys.exit(1) # rescale contents of data so conversion is 1.0 try: ts = stim[swp] data = ts["data"] scale = float(data.attrs["conversion"]) data[...] = data.value * scale data.attrs["conversion"] = 1.0 except: print("*** Error rescaling data in %s" % swp) type_, value_, traceback_ = sys.exc_info() print(traceback.print_tb(traceback_)) sys.exit(1) f.close() #################################################################### # re-open file w/ nwb library and add indexing (epochs) nd = nwb.NWB(filename=tmpfile, modify=True) for num in sweep_nums: ts = nd.file_pointer["acquisition/timeseries/Sweep_" + num] # sweep epoch t0 = ts["starting_time"].value rate = float(ts["starting_time"].attrs["rate"]) n = float(ts["num_samples"].value) t1 = t0 + (n - 1) * rate ep = nd.create_epoch("Sweep_" + num, t0, t1) ep.add_timeseries("stimulus", "stimulus/presentation/Sweep_" + num) ep.add_timeseries("response", "acquisition/timeseries/Sweep_" + num) ep.finalize() if "CurrentClampSeries" in ts.attrs["ancestry"]: # test pulse epoch t0 = ts["starting_time"].value t1 = t0 + PULSE_LEN ep = nd.create_epoch("TestPulse_" + num, t0, t1) ep.add_timeseries("stimulus", "stimulus/presentation/Sweep_" + num) ep.add_timeseries("response", "acquisition/timeseries/Sweep_" + num) ep.finalize() # experiment epoch t0 = ts["starting_time"].value t1 = t0 + (n - 1) * rate t0 += EXPERIMENT_START_TIME ep = nd.create_epoch("Experiment_" + num, t0, t1) ep.add_timeseries("stimulus", "stimulus/presentation/Sweep_" + num) ep.add_timeseries("response", "acquisition/timeseries/Sweep_" + num) ep.finalize() nd.close() # rescaling the contents of the data arrays causes the file to grow # execute hdf5-repack to get it back to its original size try: print("Repacking hdf5 file with compression") process = subprocess.Popen( ["h5repack", "-f", "GZIP=4", tmpfile, outfile], stdout=subprocess.PIPE) process.wait() except: print("Unable to run h5repack on temporary nwb file") print("--------------------------------------------") raise try: print("Removing temporary file") os.remove(tmpfile) except: print("Unable to delete temporary file ('%s')" % tmpfile) raise # done (nothing to return) module.write_output_data({})