# README for data for *Odor motion sensing enhances navigation of complex plumes* All data are saved as Python numpy arrays, and are titled by the figure they pertain to. There are a few types of data files ## 1. Fly behavioral data from optogenetic assay The fly behavioral data are all `*.npy` files (such as the *.npy files in fig2/). Each file contains one multi-dimensional array with 2 indices, containing fly behaviors and signals at a given frame. The first index represents a distinct frame. The second index runs from 0 to 7 and represents, in order, 1. the fly trajectory indicator, as an integer. These restart with each experiment, so this column may contain duplicates 2. time since beginning of experiment in seconds 3. fly x-position in mm (along the long axis of the arena and parallel to the airflow when there is wind) 4. fly y-position in mm (along the short axis of the arena) 5. fly walking speed in mm/s 6. fly orientation in degrees 7. fly angular velocity (dtheta/dt) in degrees/s 8. binary vector indicating the fictive odor signal is on (1) or off (0) Note that the position, speed, orientation, and angular velocity are obtained **after** filtering with a Savitsky-Golay filter (see Methods of the paper for details). The filename indicates which type of data the array contains. For example, `thin_bars_15mm-s_5sON_5sOFF_dir+x.npy` indicates the fly responses to thin moving bars (Fig. 2c-d), when the bars are moving in the +x direction (blue lines in figure). These are the types of data in folders fig2, fig3, & fig4 and the .npy files in fig6. Full details: ### 1.1 fig2/ * `thin_bars_15mm-s_5sON_5sOFF_dir+x` and `thin_bars_15mm-s_5sON_5sOFF_dir-x` are for experimental (Orco>Chrimson) flies, for the thin bars without wind, moving right or left, respectively. * `thin_bars_15mm-s_5sON_5sOFF_dir{DIRECTION}_{FLY_TYPE}`where `FLY_TYPE` is either `OR42b` or `Orco_single_antenna` , is analogous to above, except for flies with OR42b driving Chrimson, or with Orco driving Chrimson, but with 1 antenna ablated, respectively, and where `DIRECTION` is right (`+x` ) or left (`-x` ), as above. * `wide_bars_{EXP_TYPE}_{DIRECTION} `are for the experiments in which behaviors were quantified at the ON and OFF edge separately. `DIRECTIION`is either `+y` or `-y` ; as indicated in the main text, this data is flipped and pooled in the analysis. `EXP_TYPE` can be * a speed (e.g. `1mm-s`), which indicates the bar speed, where Orco>Chrimson flies fed ATR are used * `No_ATR` , which indicates data for the negative control experiment using Orco>Chrimson flies that are not fed ATR * `Or42b` which indicates the positive control experiment using flies in which Or42b drives Chrimson, also fed ATR. ### 1.2 fig3/ * `wide_bars_{DIR_TYPE}_to_wind_dir={DIRECTION_x}`. Behavioral data for the wide bars used in the main figure, where `DIR_TYPE` is either * `antiparallel`, for which the bars move antiparallel to the wind (and hence `DIRECTION_x` is `+x`, since they move in the +x direction, which points in the upwind direction in the assay), or * `parallel` , for which the bars move parallel to the wind (and hence `DIRECTION_x` is `-x`, since they move in the -x direction, which points in the downwind direction in the assay), or * `perpendicular`, for which the bars move either toward the experimenter (`DIRECTION_x` is `+y`), or away from the experimenter (`DIRECTION_x` is `-y`). * `full_field_flash_with_wind_freq=0.2`, which is the data for the full field flash of the arena, while wind is flowing, where the flashes occur at a frequency of 0.2 Hz. ### 1.3 fig4/ * `correlated_noise_t_step={T_STEP}_{POLARITY}_corr_{DIRECTION}` These are behavioral data for correlated noise stimuli used in the main figure, where * `T_STEP` is an integer giving the number of frames between updating (which dictates the perceived speed of the stimuli, where a larger T_STEP gives a lower speed) * `POLARITY` is either `neg` or `pos`, referring to whether the correlations for the stimuli are negative or positive, respectively * `DIRECTION` refers to the direction of the correlation displacement, either parallel to the wind `with_wind_dir=-x`, or antiparallel to the wind `against_wind_dir=+x` . * `gliders_t_step={T_STEP}_{SPACING}_{DIRECTION}` These are behavioral data for the glider stimuli used in the associated Extended Data figure. Here, - `T_STEP` is an integer giving the number of frames between updating (which dictates the perceived speed of the stimuli, where a larger T_STEP gives a lower speed) - `SPACING` is either blank, in which case the bars are the width of a single pixel, or it is `double_px_spacing`, in which the bars are twice the width, which is used as a negative control. - `DIRECTION` refers to the direction of the correlation displacement for the glider, either parallel to the wind `with_wind_dir=-x`, or antiparallel to the wind `against_wind_dir=+x` . ### 1.4 fig6/ * `lateral_bars_{DIRECTION}` are data for the plume-like structure with lateral bars, where the bars move outward (`DIRECTION` is`OUTWARD`) or artificially inward (`DIRECTION` is `INWARD`). * `plume_{DIRECTION}_playback`, is data for the projected naturalistic plume experiments, where `DIRECTION` can be `NORMAL` for normal playback of the projected plume or `REVERSE`for the plume played in reverse. ## 2. Electrophysiology data (fig5/) These are the data in fig5 and are comma-delimited text files. Two jupyter notebooks that plot the data are included in that folder, one for pulses and one for the natural stimuli. The files in the main folder are for electrophysiological responses to pulses of odor and have structure `{DURATION}_ms_{DILUTION}_{QUANTITY}`, where ​ * `DURATION ` is the length of the pulse in milliseconds, * `DILUTION` is the * `QUANTITY` is the type of quantity saved: * `FlyOrnTrial` contains 3 columns, for the fly identity, ORN identity for that particular fly, and trial number for that particular ORN. * `ASpike`is the spike times for each trial; each row is a new trial, each column is a binary value for spike (1) or no spike (0) at the given recording time. The recordings are taken at 10 KHz. * `LFP`is the local field potential, each row is a new trial, each column is the LFP at that recording time * `PID`is the concentration measured by photoionization detector, same structure as LFP * `Valve` is the binary state of the inlet valve (1 = open; 0 = closed) at each recording time. There is only 1 row here since all trials had the same valve states. The data in the subfolder `ab2-2but/` is the data for the naturalistic stimulus. The Matlab source data is in the `consolidated_data.mat ` file; however the relevant data for the paper has been extracted to 3 `*.txt` files: * `nat_stim_spikes_orn_num` is a single row of data, containing the ORN number of each trial as a separate column * `nat_stim_PID`which gives the concentration for the natural stimulus at each recording time (columns) for each of the trials (rows) * `nat_stim_spikes` is spike data in 3 columns: first column gives the ORN number, second column gives the time in ms of a spike for that ORN, 3rd column is the trial number for that ORN. There was only 1 trial per ORN, so the 3rd column is identically 1. Each row in the file is thus (ORN #, spike time, trial #). The data from all ORNs is thus stacked row-wise. ## 3. Recorded plumes (fig6/) These are in fig6 (new_smoke_2a.npy and new_smoke_2a_reverse.npy). These are the recorded smoke videos that were presented as fictive odor movies for Fig. 6. Metadata files are included for each, in the associated *.pkl files.