DOI: 10.5061/dryad.zw3r228fw
title: Wind gates olfaction-driven search states in free flight

description: For any organism tracking a chemical cue to its source, the motion of its
 surrounding fluid provides crucial information for success. For both
 swimming and flying animals engaged in olfactory search, turning into the
 direction of oncoming wind or water current is often a critical first
 step. However, in nature, wind and water currents may not always provide a
 reliable directional cue , and it is unclear how organisms adjust their
 search strategies accordingly due to the challenges of separately
 controlling flow and chemical encounters. Here, we use the genetic toolkit
 of Drosophila melanogaster, a model organism for olfaction, to develop an
 optogenetic paradigm to deliver temporally precise “virtual” olfactory
 experiences in free-flying animals while independently manipulating the
 wind conditions. We show that in free flight, Drosophila melanogaster
 adopt distinct search routines that are gated by whether they are flying
 in laminar wind or in still air. We first confirm that in laminar wind
 flies turn upwind, and further, we show that they achieve this using a
 rapid turn. In still air, flies adopt remarkably stereotyped “sink and
 circle” search state characterized by ∼60° turns at 3-4 Hz, biased in a
 consistent direction. In both laminar wind and still air, immediately
 after odor onset, flies decelerate and often perform a rapid turn. Both
 maneuvers are consistent with predictions from recent control theoretic
 analyses for how insects may estimate properties of wind while in flight.
 We suggest that flies may use their deceleration and “anemometric” turn as
 active sensing maneuvers to rapidly gauge properties of their wind
 environment before initiating a proximal or upwind search routine.
description: For information on specific methodologies involved in data
 collections see the methods section found in:
 https://www.cell.com/current-biology/fulltext/S0960-9822(24)00912-6
description: # Wind Gates Olfaction-Driven Search States in Free Flight
 [https://doi.org/10.5061/dryad.zw3r228fw](https://doi.org/10.5061/dryad.zw3r228fw) Data relevant to "Wind Gates Olfaction-Driven Search States in Free Flight", currently published in Current Biology: [https://www.cell.com/current-biology/fulltext/S0960-9822(24)00912-6](https://www.cell.com/current-biology/fulltext/S0960-9822\(24\)00912-6) This data set is built in conjunction and meant to complement the github page to recreate all the figures, which is located  for the public here: [https://github.com/dstupski/wind_gates_search_states](https://github.com/dstupski/wind_gates_search_states) ## Description of the data and file structure Directory contains the following.  See the accompanied github page for examples that use the data to generate each figure.   1: trimmed_data- the processed data sets which were used to generate figures 2: auxillary_code- standard python scripts used to clean raw data 3: main_text- jupyter notebooks necessary to recreate all of the figures in the main text of the manuscript 4: supplement- jupyter notebooks necessary to recreate data figures in the supplement section of the manuscript 5: figure_first_templates- .svg templates used in conjunction with the inkscape plug in, FigureFirst, which serve as templates for the notebooks to create figures 6: trajectories_for_figures- example trajectories used for generating figures Note* The raw Braid recordings comprised several hundred gigabytes of data and are not included here. They are however available upon reasonable request of the authors. For consistency, we do include our filtering scripts that trim the raw recordings into the relevant trajectories that initiated trigger events. Any further processing or calculation is done within the notebooks that generate each figure. ### List of data sets and descripttions: #### main trimmed_data/main/OrcoCsChrimson_laminar_wind_merged.csv :  Orco&gt;CsChrimson fly experiments in laminar wind, used in Figure 1, Figure 3, Figure 5, and Figure 6 trimmed_data/main/wildtype_laminar_merged.csv: Wild Type fly experiments in laminar wind.  Used in Figure 1, Figure 3, and Figure 6 trimmed_data/main/etoh_object.csv:     Wild type flies flying in an ethanol plume with a visually salient feature on the wind tunnel floor.  Used in Figure 1 trimmed_data/main/flash_object_approach.csv   :  Orco&gt;CsChrimson flies which recieved a light pulse in the presence of a visually salient object on the wind tunnel floor.  used in Figure 1 trimmed_data/main/no_etoh_object.csv: Wild type flies fly in the presence of a visually salient feature, but no odorant.  Used in Figure 1 trimmed_data/main/sham_object_approach.csv: Orco&gt;CsChrimson flies which received a shame event in the presence of a visually salient object.  Used in Figure 1. trimmed_data/main/OrcoCsChrimson_still_air_merged.csv: Orco&gt;CsChrimson fly experiments in still air. Used in Figure 2, Figure 3, Figure 4, Figure 5, and Figure 6 trimmed_data/main/no_wind_wt_flash_qc_checked.csv : Wild type fly trajectories flying in still air which recieved a flash event. Used in Figure 3, Figure 5 trimmed_data/main/no_wind_wt_sham_qc_checked.csv: WIld type fly trajectories flying in still air which recieved a sham event. Used in Figure 3, Figure 5 trimmed_data/main/wildtype_still_air_merged.cav: Merged wild type fly trajectories flying in still air. Used in Figure 3, Figure 5 #### supp trimmed_data/supp/CsChrimson_hets.csv: CsChrimson/+ genotype control trimmed_data/supp/OrcoCsChrimson_no_atr.csv: Orco&gt;CsChrimson flies which did not have supplemented atr in their diet. trimmed_data/supp/fly_trajec_data_all_etoh.hdf: Re-analyzed ethanol data from van Breugel 2014. trimmed_data/supp/fly_trajec_data_noodor_all.hdf: Re-analyzed clean air data from van Breugel 2014 trimmed_data/supp/no_wind_no_grid_orco.csv: Optic flow control for altitude lowering effects #### mGSD annotations trimmed_data/mGSD_annotations/modified_GSD_no_wind_orco.csv: mGSD annotations for Orco&gt;CsChrimson Flies in still air trimmed_data/mGSD_annotations/modified_GSD_wt_no_wind.csv: mGSD annotations for Wild Type Flies in still air trimmed_data/mGSD_annotations/modified_GSD_laminar_wind_orco.csv: mGSD annotations for Orco&gt;CsChrimson Flies in laminar wind trimmed_data/mGSD_annotations/modified_GSD_laminar_wt: mGSD annotations for Wild Type Flies in laminar wind trimmed_data/mGSD_annotations/lw0_orco_sacc.csv: annotated saccades for Orco&gt;CsChrimson flies which recieved sham events in laminar wind. Used in Figure 3 trimmed_data/mGSD_annotations/lw100_orco_sacc.csv: annotated saccades for Orco&gt;CsChrimson flies which recieved flash events in laminar wind. Used in Figure 3 trimmed_data/mGSD_annotations/lw0_wt_sacc.csv: annotated saccades for wild type flies which recieved sham events in laminar wind. Used in Figure 3 trimmed_data/mGSD_annotations/lw100_wt_sacc.csv: annotated saccades for wild type flies which recieved flash events in laminar wind. Used in Figure 3 trimmed_data/mGSD_annotations/nw100_wt_sacc.csv: annotated saccades for wild type flies which recieved flash events in still air. Used in Figure 3 trimmed_data/mGSD_annotations/nw0_wt_sacc.csv: annotated saccades for wild type flies which recieved sham events in still. Used in Figure 3 trimmed_data/mGSD_annotations/nw100_orco_sacc.csv: annotated saccades for Orco&gt;CsChrimson flies which recieved flash events in still air. Used in Figure 3 trimmed_data/mGSD_annotations/nw0_orco_sacc.csv: annotated saccades for Orco&gt;CsChrimson flies which recieved sham events in still air. Used in Figure 3 #### Trimmed Double Flash /trimmed_data/trimmed_double_flash/orco_double_pulse_distilled_response.csv: averaged responses for Orco&gt;CsChrimson flies which recieved two optogenetic pulses. Used in Figure 4 /trimmed_data/trimmed_double_flash/orco_shams_distilled_and_merged.csv: averaged responses for Orco&gt;CsChrimson flies which recieved sham events. Used in Figure 4 /trimmed_data/trimmed_double_flash/orco_single_distilled.csv: averaged responses for Orco&gt;CsChrimson flies which recieved a single pulse. Used in Figure 4 /trimmed_data/trimmed_double_flash/double_flash_mean_time_trace_qc.csv: Average ang vel time trace for Orco&gt;CsChrimson flies which recieved two flash events. used in Figure 4 /trimmed_data/trimmed_double_flash/sham_merged_mean_time_trace.csv: Average ang vel time trace for Orco&gt;CsChrimson flies which recieved sham events: Used in Figure 4 /trimmed_data/trimmed_double_flash/single_pulse_mean_time_trace.csv: Average ang vel time trace for Orco&gt;CsChrimson flies which recieved a single flash events: Used in Figure 4 /trimmed_data/trimmed_double_flash/no_wind_wt_shams_merged_distilled.csv: Average ang vel time trace for Wild type flies which recieved a sham events: Used in Figure 4 /trimmed_data/trimmed_double_flash/single_flash_wt_distilled.csv: Average ang vel time trace for wild type glies which revieved a single flash evennt: Used in Figure 4 /trimmed_data/trimmed_double_flash/wt_double_flash_distilled.csv: Average ang vel time trace for wild type glies which revieved two flash events: Used in Figure 4 ## guide to .csv headings for primary data sets Most data is in a standard .csv format.   * 'P0-P##': Camera detection variables from orignal .braidz recordings. Not critical for the data here * 'timestamp': epoch time * 'time stamp': for an individual trajectory, this corresponds to what time it is relative to when the fly received the triggering stimulus * 'frame': frame number from braid experiment, recording is usually done at 100hz so frames come in 10ms apart, I recommend calculating things based on frame rather than epoch time because it is much easier to match up * 'obj_id': object ID assigned to that trajectory from its individual nights experiment- may not be unique * 'obj_id_unique': unique object id assigned to a trajectory- helps parse data when multiple experiments are merged into a single file and its possible to have overlapping obj_id's * 'Flash_bool': True if in that Frame for the object triggered an experimental event * 'x': x position in wind tunnel (m) * 'xvel': ground velocity (m/s) in x direction- for experiments with wind, a positive x velocity is upwind  * 'y': y position in wind tunnel (m) * 'yvel' y velocity (m/s) in wind tunnel, the tunnel is calibrated such that a negative y velocity indicates the fly is flying to the left (as if you are looking through the tunnel towards upwind) * 'z': z position (m) or altitude, n.b. this value may sometimes have weird estimates that are way out of the bounds of the wind tunnel- this is not a big deal and usually indicates the fly was crawling around on the roof or floor of the tunnel where the calibration data doesn't always know how to handle it- the data for flies in the middle of the tunnel volume is accurate * 'zvel': velocity in the z direction (m/s), positive means the fly is gaining altitude and negative means the fly is losing altitude- this estimate is sometimes noisy and I recommend some light smoothing if you intend to use it. * 'ground speed': flies ground speed (m/s) * 'duration': experimental condition assigned at that triggering even. E.g. for a typical experiment this might be 100, indicating that the fly received a full intensity flash or 50 indicating the fly got a flash that was 50% of the intensity. 0 always means that this was a control trajectory to account for naturalistic motion statistics in the wind tunnel. The context of the 'duration' can change depending on the experiment we're running e.g. in the double pulse experiments this can have a value of 0, a control trajectory, 1, a single pulse of light or 2, meaning the flight got two pulses of light. * 'heading': the fly's orientation with upwind at 0, raw calculation without smoothing * 'ang vel': angular velocity of the trajectory as calculated from the raw data without any smoothing * 'theta smooth': Smoothed estimate of the heading based off the pynumdiff corrections * 'theta dot smooth': Smoothed estimate of the angular velocity using the pynumdiff smoothing * 'orientation': a value that is either "u" or "d" indicating if the fly was flying up or downwind at the time of it's triggering event N.B. we have included for internal convenience two data sets from van Breugel and Dickinson, 2014 in .hdf5 format. For specifics see: van Breugel, Floris, and Michael H. Dickinson. "Plume-tracking behavior of flying Drosophila emerges from a set of distinct sensory-motor reflexes." Current Biology 24.3 (2014): 274-286. ## guide to .csv headings in mGSD\_annotations For saccade analyses, we developed an algorithm (modified geometric saccade detector, or mGSD) that helps identify when trajectories meet the kinematic profile of a saccade (rapid turn in flight).  The following are keys to the mGSD annotations.   -'amp': amplitude term as defined in Supplementary Section 1 -'disp': dispersion score as determined in Supplementary Section 1 For saccade data sets (e.g. /trimmed/mGSD_annotations/lw100_sacc.csv), saccade events are annotated with the following keys -'when': frame at which the saccade occured -'obj_id_unique': the unique trajectory identity to which the saccade belongs -'max len': maximum length of that trajectory, used to calculate saccade frequency -'ipsi': key that determines if that saccade was in the same direction as the previous saccade -'direction': clockwise/counter-clockwise orientation of the saccade -'amp': amplitude of that saccade