Evaluating place cell detection methods in Rats and Humans: Implications for cross-species spatial coding.
The 2 matches
- [1] § Datasets › Feature estimation ↔ code/utils/utils.py, lines 71–123 · score 0.60 · Pearson correlation, Odd Correlation, spatial firing rate
- [2] § Datasets › Permutation testing ↔ spiketools/stats/shuffle.py, lines 168–217 · score 0.57 · circularly shifted, spike train, shuffling
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 178 lines · 6.9 KB · MIT · 1 match
- import numpy as np
- from scipy.ndimage import label
- from feature_settings import PLACE_FIELD_THRESH, PLACE_FIELD_NOISE_THRESH, TOLERANCE, PEAK, AVERAGE, PEAK_OVER_AVERAGE, PLACE_FIELD_WIDTH, N_PLACE_FIELD, EVEN_ODD_CORRELATION, PLACE_FIELD_CONSISTENCY, PRESENCE_RATIO
- def find_place_field(rate_map, place_field_thresh=PLACE_FIELD_THRESH, noise_thresh=PLACE_FIELD_NOISE_THRESH):
- """
- Identify contiguous regions of high firing rates above a threshold, and remove noisy regions below a threshold.
- Parameters:
- - rate_map: 2D array representing the spatial firing rate map.
- - place_field_thresh: Fraction of the peak firing rate used for thresholding (e.g., 0.2).
- - noise_thresh: Threshold below which regions are considered noise and excluded.
- Returns:
- - place_field_mask: Binary map of the identified place fields (True for regions above the threshold).
- - place_bins_passed_thresh: Number of bins above the place field threshold.
- - labeled_fields: 2D array where each contiguous region above the threshold is labeled with a unique integer.
- - num_fields: Number of contiguous place fields found.
- - peak_rate: Peak firing rate used for thresholding.
- """
- # Find the peak firing rate in the rate map
- peak_rate = np.max(rate_map)
- peak_loc = np.argmax(rate_map)
- # Define the threshold value (fraction of peak firing rate)
- place_field_thresh_value = place_field_thresh * peak_rate
- noise_thresh_value = noise_thresh*peak_rate
- # Create a binary mask of regions with firing rates above the threshold
- place_field_mask = rate_map >= place_field_thresh_value
- # Apply the noise threshold: Remove regions where firing rate is below the noise threshold
- noise_mask = rate_map < noise_thresh_value
- # Count how many bins (or regions) passed the combined threshold
- num_place_field_bins = place_field_mask.sum()
- num_noise_bins = noise_mask.sum()
- # Label contiguous regions above the threshold
- labeled_place_fields, num_place_fields = label(place_field_mask)
- # Return all the relevant information
- return num_place_field_bins,num_noise_bins, labeled_place_fields, num_place_fields, peak_rate,peak_loc
- def find_place_location(trial_place_bins, peak_loc, tolerance=TOLERANCE):
- max_locs = [] # List to store the indices of max values
- max_values = [] # List to store the max values
- for indx, trial in enumerate(trial_place_bins):
- # Find the index of the maximum value in the trial
- max_index = np.argmax(trial)
- max_value = np.max(trial)
- # Store the results
- max_locs.append(max_index)
- max_values.append(max_value)
- max_locs = np.array(max_locs)
- max_values = np.array(max_values)
- # Compute the number of max_locs close to the peak_loc within a given tolerance
- close_to_peak = np.abs(max_locs - peak_loc) <= tolerance
- num_close_to_peak = np.sum(close_to_peak)
- percentage_num_close_to_peak = num_close_to_peak/len(trial_place_bins)
- return max_locs, max_values, num_close_to_peak,percentage_num_close_to_peak
- def even_odd_correlation(x):
- """
- Calculate the correlation between the average firing rates of even and odd trials.
- This function splits trials into even and odd numbered trials, averages each group,
- and computes the correlation between these averages. This measures the consistency
- of spatial firing patterns across trials.
- Args:
- x: List or array of trial firing rates, where each trial contains firing rates
- across spatial positions
- Returns:
- float: Pearson correlation coefficient between even and odd trial averages.
- Returns np.nan if:
- - Input has no variance (constant values)
- - Input contains only NaN values
- - Less than 2 valid data points after processing
- """
- # Convert input to numpy array if it's a list
- x = np.array(x)
- # find the even and odd indices
- even_indices = np.arange(0, len(x), 2)
- odd_indices = np.arange(1, len(x), 2)
- # Split trials into even and odd groups
- even_trials = np.array([x[i] for i in even_indices])
- odd_trials = np.array([x[i] for i in odd_indices])
- # Calculate mean firing rate for each position across even/odd trials
- even_avg = np.mean(even_trials, axis=0)
- odd_avg = np.mean(odd_trials, axis=0)
- # Handle cases where there is no variance
- if np.all(even_avg == even_avg[0]) or np.all(odd_avg == odd_avg[0]):
- return np.nan
- # Remove any NaN values
- mask = ~np.isnan(even_avg) & ~np.isnan(odd_avg)
- if not np.any(mask):
- return np.nan
- even_avg = even_avg[mask]
- odd_avg = odd_avg[mask]
- # Compute correlation only if we have enough valid data points
- if len(even_avg) < 2:
- return np.nan
- # Calculate Pearson correlation between even and odd trial averages
- correlation = np.corrcoef(even_avg, odd_avg)[0,1]
- return correlation
- def get_all_place_field_features(all_cell_place_bins):
- """
- Process all cell place bins and compute feature metrics for each cell.
- Parameters:
- -----------
- all_cell_place_bins : list or array-like
- List of arrays, each containing the place bins for a cell across trials.
- Returns:
- --------
- all_results : dict
- Dictionary containing lists of computed features for each cell.
- """
- all_results = {
- PEAK: [],
- AVERAGE: [],
- PEAK_OVER_AVERAGE: [],
- PLACE_FIELD_WIDTH: [],
- N_PLACE_FIELD: [],
- EVEN_ODD_CORRELATION: [],
- PLACE_FIELD_CONSISTENCY: [],
- PRESENCE_RATIO: [],
- }
- for cell_place_bins in all_cell_place_bins:
- # Calculate rate map by averaging across trials
- rate_map = np.mean(cell_place_bins, axis=0)
- # Find place fields and get results
- num_place_field_bins, num_noise_bins, labeled_fields, num_fields, peak_rate, peak_loc = find_place_field(rate_map)
- # Find trial-by-trial peak locations
- trial_peak_locs, trial_peak_rates, num_close, pct_close = find_place_location(cell_place_bins, peak_loc)
- even_odd_corr = even_odd_correlation(cell_place_bins)
- # Calculate basic metrics
- avg_rate = np.mean(rate_map)
- snr = peak_rate / avg_rate
- # Append results for this cell
- all_results[PEAK].append(peak_rate)
- all_results[AVERAGE].append(avg_rate)
- all_results[PEAK_OVER_AVERAGE].append(snr)
- all_results[PLACE_FIELD_WIDTH].append(num_place_field_bins)
- all_results[EVEN_ODD_CORRELATION].append(even_odd_corr)
- all_results[N_PLACE_FIELD].append(num_fields)
- all_results[PLACE_FIELD_CONSISTENCY].append(pct_close)
- all_results[PRESENCE_RATIO].append(np.mean(cell_place_bins > 0, axis=0).mean())
- return all_results
utils.py at commit ce0d921, under MIT · at the source
Overview
- Department of Biomedical Engineering, Columbia University, New York, New York, United States of America
- Department of Neurosurgery, Rutgers Robert Wood Johnson Medical School and Rutgers Brain Health Institute, New Brunswick, New Jersey, United States of America
- Department of Neurology and Neuroscience Institute, University of Chicago, Chicago, Illinois, United States of America
Abstract
Place cells, first identified in the rat hippocampus as neurons that fire selectively at specific locations, are central to investigations of the neural underpinnings of spatial navigation. Recent spatial studies in human patients with drug-resistant epilepsy have made identifying and characterizing place cells across species increasingly important for understanding the extent to which decades of rodent research generalize to humans and for uncovering fundamental principles of spatial cognition. One challenge, however, is that detection methods differ: rodent studies often rely on spatial information (SI) in conjunction with place field stability measures, whereas human studies employ analysis of variance (ANOVA) based approaches. These methodological differences may affect the identified place cell populations, which complicates how their properties are interpreted and cross-species comparisons. To address this, we systematically applied multiple detection pipelines to human and rat datasets, supported by simulations that vary place-field properties. Our analyses and simulations demonstrate that spatial information and ANOVA-based approaches are responsive to distinct place field properties: spatial information primarily reflects the contrast between peak and average firing rates, while ANOVA emphasizes consistency across trials. Across species, rodent place cells revealed a broad spectrum of spatial tuning, including strongly tuned neurons with high spatial information and high ANOVA values. In contrast, human place cells lacked this strongly tuned population and exhibited a narrower distribution of tuning scores, concentrated at the lower end of both spatial tuning metrics. Despite these differences, both species had an overlapping population of neurons with weaker yet consistent spatial tuning, which may support important functional roles such as generalization and mixed selectivity. Addressing these analytical differences allows for more direct comparisons between species, though differences in spatial tuning may still relate to variations in experimental paradigms that warrant further investigation. Together, our study provides a roadmap showing how spatial tuning metrics shape place cell detection and interpretation.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
HSNPipeline/PlaceCellMethods
a6ad6d9385c876899956e6f0d6866dc79cdfa3d2, 2 September 2025Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
2 files
- literature/
PlaceCellLiterature.ipyn , Jupyter, 108 linesb - README.md, Text, 80 lines
HSNPipeline/SimPlaceCells
ce0d921f693478ab9324fa3a3e31a32c40d72fe6, 3 December 2025Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
35 files
- FIGURES_SIM/
FIGURE_1a_SimPlaceField. , Jupyter, 102 linesipynb - FIGURES_SIM/
FIGURE_5a_PlaceFieldSimu , Jupyter, 131 lineslation.ipynb - FIGURES_SIM/
FIGURE_5bc_SimParams.ipy , Jupyter, 228 linesnb - FIGURES_SIM/
FIGURE_6a_PlaceFieldPara , Jupyter, 148 linesms.ipynb - FIGURES_SIM/
FIGURE_6bc_ParamsMethods , Jupyter, 294 lines.ipynb - FIGURES_SIM/
FIGURE_FeatureEstimate.i , Jupyter, 409 linespynb - FIGURES_SIM/
FIGURE_PCA.ipynb , Jupyter, 292 lines - FIGURES_SIM/
Figure_Supplement_2D.ipy , Jupyter, 791 linesnb - INTRO_SIM/
00-Sim_PlaceField_Compon , Jupyter, 123 linesents.ipynb - INTRO_SIM/
01-Sim_PeakModels.ipynb , Jupyter, 128 lines - INTRO_SIM/
02-Sim_PlaceFields.ipynb , Jupyter, 89 lines - INTRO_SIM/
03-Sim_Trials.ipynb , Jupyter, 93 lines - INTRO_SIM/
04-Sim_Cells_wParam_Upda , Jupyter, 175 linestes.ipynb - INTRO_SIM/
A1_2D_SimPlaceField_Comp , Jupyter, 227 linesonents.ipynb - code/
models.py , Python, 15 lines - code/
plts/ , Python, 90 linescell.py - code/
plts/ , Python, 16 linesfiringrate.py - code/
plts/ , Python, 17 linesmethods.py - code/
plts/ , Python, 148 linespca.py - code/
plts/ , Python, 64 linessettings.py - code/
plts/ , Python, 22 linesstats.py - code/
plts/ , Python, 99 linestrial.py - code/
sim/ , Python, 283 linescells.py - code/
sim/ , Python, 173 linesconfig.py - code/
sim/ , Python, 115 linesnoise.py - code/
sim/ , Python, 40 linesoccupancy.py - code/
sim/ , Python, 57 linesparam_vals.py - code/
sim/ , Python, 122 linesparams.py - code/
sim/ , Python, 179 linespeak.py - code/
sim/ , Python, 207 linesplacefield.py - code/
sim/ , Python, 557 linestrials.py - code/
utils/ , Python, 17 linesfeature_settings.py - code/
utils/ , Python, 178 lines, 1 matchutils.py - LICENSE, License, 21 lines
- README.md, Text, 114 lines
HSNPipeline
Availability: 1 check, the latest on 28 September 2026: the link answers (HTTP 200)
- 28 September 2026: the link answers (HTTP 200)
spiketools/spiketools
b7076514e794f6accc76aac47430e1a98da30854, 17 September 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
122 files
- doc/
conf.py , Python, 156 lines - setup.py, Python, 62 lines
- spiketools/
__init__.py , Python, 3 lines - spiketools/
measures/ , Python, 1 line__init__.py - spiketools/
measures/ , Python, 33 linescircular.py - spiketools/
measures/ , Python, 122 linescollections.py - spiketools/
measures/ , Python, 196 linesconversions.py - spiketools/
measures/ , Python, 192 linesspikes.py - spiketools/
measures/ , Python, 205 linestrials.py - spiketools/
modutils/ , Python, 1 line__init__.py - spiketools/
modutils/ , Python, 66 linesdependencies.py - spiketools/
modutils/ , Python, 80 linesfunctions.py - spiketools/
objects/ , Python, 4 lines__init__.py - spiketools/
objects/ , Python, 46 linessession.py - spiketools/
objects/ , Python, 82 linesunit.py - spiketools/
plts/ , Python, 1 line__init__.py - spiketools/
plts/ , Python, 311 linesannotate.py - spiketools/
plts/ , Python, 259 linesdata.py - spiketools/
plts/ , Python, 22 linessettings.py - spiketools/
plts/ , Python, 308 linesspatial.py - spiketools/
plts/ , Python, 213 linesspikes.py - spiketools/
plts/ , Python, 47 linesstats.py - spiketools/
plts/ , Python, 85 linesstyle.py - spiketools/
plts/ , Python, 98 linestask.py - spiketools/
plts/ , Python, 293 linestrials.py - spiketools/
plts/ , Python, 235 linesutils.py - spiketools/
sim/ , Python, 5 lines__init__.py - spiketools/
sim/ , Python, 87 linestimes.py - spiketools/
sim/ , Python, 206 linestrain.py - spiketools/
sim/ , Python, 82 linestrials.py - spiketools/
sim/ , Python, 125 linesutils.py - spiketools/
spatial/ , Python, 1 line__init__.py - spiketools/
spatial/ , Python, 81 lineschecks.py - spiketools/
spatial/ , Python, 214 linesdistance.py - spiketools/
spatial/ , Python, 92 linesinformation.py - spiketools/
spatial/ , Python, 610 linesoccupancy.py - spiketools/
spatial/ , Python, 173 linesplace.py - spiketools/
spatial/ , Python, 55 linesspeed.py - spiketools/
spatial/ , Python, 69 linestarget.py - spiketools/
spatial/ , Python, 213 linesutils.py - spiketools/
stats/ , Python, 1 line__init__.py - spiketools/
stats/ , Python, 194 linesanova.py - spiketools/
stats/ , Python, 47 linesgenerators.py - spiketools/
stats/ , Python, 105 linespermutations.py - spiketools/
stats/ , Python, 359 lines, 1 matchshuffle.py - spiketools/
stats/ , Python, 108 linestrials.py - spiketools/
tests/ , Python, 1 line__init__.py - spiketools/
tests/ , Python, 97 linesconftest.py - spiketools/
tests/ , Python, 1 linemeasures/ __init__.py - spiketools/
tests/ , Python, 16 linesmeasures/ test_circular.py - spiketools/
tests/ , Python, 41 linesmeasures/ test_collections.py - spiketools/
tests/ , Python, 112 linesmeasures/ test_conversions.py - spiketools/
tests/ , Python, 71 linesmeasures/ test_spikes.py - spiketools/
tests/ , Python, 64 linesmeasures/ test_trials.py - spiketools/
tests/ , Python, 1 linemodutils/ __init__.py - spiketools/
tests/ , Python, 31 linesmodutils/ test_dependencies.py - spiketools/
tests/ , Python, 33 linesmodutils/ test_functions.py - spiketools/
tests/ , Python, 1 lineobjects/ __init__.py - spiketools/
tests/ , Python, 22 linesobjects/ test_session.py - spiketools/
tests/ , Python, 38 linesobjects/ test_unit.py - spiketools/
tests/ , Python, 1 lineplts/ __init__.py - spiketools/
tests/ , Python, 120 linesplts/ test_annotate.py - spiketools/
tests/ , Python, 74 linesplts/ test_data.py - spiketools/
tests/ , Python, 114 linesplts/ test_spatial.py - spiketools/
tests/ , Python, 51 linesplts/ test_spikes.py - spiketools/
tests/ , Python, 17 linesplts/ test_stats.py - spiketools/
tests/ , Python, 52 linesplts/ test_style.py - spiketools/
tests/ , Python, 44 linesplts/ test_task.py - spiketools/
tests/ , Python, 83 linesplts/ test_trials.py - spiketools/
tests/ , Python, 111 linesplts/ test_utils.py - spiketools/
tests/ , Python, 1 linesim/ __init__.py - spiketools/
tests/ , Python, 36 linessim/ test_times.py - spiketools/
tests/ , Python, 90 linessim/ test_train.py - spiketools/
tests/ , Python, 37 linessim/ test_trials.py - spiketools/
tests/ , Python, 78 linessim/ test_utils.py - spiketools/
tests/ , Python, 1 linespatial/ __init__.py - spiketools/
tests/ , Python, 50 linesspatial/ test_checks.py - spiketools/
tests/ , Python, 111 linesspatial/ test_distance.py - spiketools/
tests/ , Python, 56 linesspatial/ test_information.py - spiketools/
tests/ , Python, 268 linesspatial/ test_occupancy.py - spiketools/
tests/ , Python, 69 linesspatial/ test_place.py - spiketools/
tests/ , Python, 46 linesspatial/ test_speed.py - spiketools/
tests/ , Python, 36 linesspatial/ test_target.py - spiketools/
tests/ , Python, 96 linesspatial/ test_utils.py - spiketools/
tests/ , Python, 1 linestats/ __init__.py - spiketools/
tests/ , Python, 69 linesstats/ test_anova.py - spiketools/
tests/ , Python, 37 linesstats/ test_generators.py - spiketools/
tests/ , Python, 22 linesstats/ test_permutations.py - spiketools/
tests/ , Python, 174 linesstats/ test_shuffle.py - spiketools/
tests/ , Python, 33 linesstats/ test_trials.py - spiketools/
tests/ , Python, 11 linestdata.py - spiketools/
tests/ , Python, 16 linestsettings.py - spiketools/
tests/ , Python, 53 linestutils.py - spiketools/
tests/ , Python, 1 lineutils/ __init__.py - spiketools/
tests/ , Python, 124 linesutils/ test_base.py - spiketools/
tests/ , Python, 177 linesutils/ test_checks.py - spiketools/
tests/ , Python, 99 linesutils/ test_data.py - spiketools/
tests/ , Python, 164 linesutils/ test_epoch.py - spiketools/
tests/ , Python, 353 linesutils/ test_extract.py - spiketools/
tests/ , Python, 35 linesutils/ test_options.py - spiketools/
tests/ , Python, 25 linesutils/ test_random.py - spiketools/
tests/ , Python, 13 linesutils/ test_run.py - spiketools/
tests/ , Python, 130 linesutils/ test_timestamps.py - spiketools/
tests/ , Python, 92 linesutils/ test_trials.py - spiketools/
utils/ , Python, 3 lines__init__.py - spiketools/
utils/ , Python, 365 linesbase.py - spiketools/
utils/ , Python, 355 lineschecks.py - spiketools/
utils/ , Python, 281 linesdata.py - spiketools/
utils/ , Python, 289 linesepoch.py - spiketools/
utils/ , Python, 651 linesextract.py - spiketools/
utils/ , Python, 72 linesoptions.py - spiketools/
utils/ , Python, 42 linesrandom.py - spiketools/
utils/ , Python, 26 linesrun.py - spiketools/
utils/ , Python, 351 linestimestamps.py - spiketools/
utils/ , Python, 153 linestrials.py - spiketools/
version.py , Python, 1 line - tutorials/
plot_measures.py , Python, 347 lines - tutorials/
plot_sims.py , Python, 357 lines - tutorials/
plot_spatial.py , Python, 381 lines - tutorials/
plot_stats.py , Python, 456 lines - LICENSE, License, 201 lines
- README.rst, Text, 174 lines
lisc-tools/lisc
e5a5f66e9d87ec0d8a2de01963f25ca933334663, 17 September 2026Availability: 1 check, the latest on 28 September 2026: the link answers
- 28 September 2026: the link answers
121 files
- doc/
conf.py , Python, 135 lines - examples/
plot_db_terms.py , Python, 128 lines - examples/
plot_functions_counts.py , Python, 97 lines - examples/
plot_functions_words.py , Python, 63 lines - examples/
plot_requester_urls.py , Python, 154 lines - lisc/
__init__.py , Python, 7 lines - lisc/
analysis/ , Python, 1 line__init__.py - lisc/
analysis/ , Python, 134 linescounts.py - lisc/
analysis/ , Python, 31 linestime.py - lisc/
analysis/ , Python, 79 lineswords.py - lisc/
collect/ , Python, 7 lines__init__.py - lisc/
collect/ , Python, 127 linescitations.py - lisc/
collect/ , Python, 234 linescounts.py - lisc/
collect/ , Python, 103 linesinfo.py - lisc/
collect/ , Python, 195 linesprocess.py - lisc/
collect/ , Python, 214 linesterms.py - lisc/
collect/ , Python, 78 linestime.py - lisc/
collect/ , Python, 256 lineswords.py - lisc/
data/ , Python, 6 lines__init__.py - lisc/
data/ , Python, 230 linesarticles.py - lisc/
data/ , Python, 197 linesarticles_all.py - lisc/
data/ , Python, 67 linesbase_articles.py - lisc/
data/ , Python, 162 linesmeta_data.py - lisc/
data/ , Python, 92 linesprocess.py - lisc/
data/ , Python, 33 linesstopwords.py - lisc/
data/ , Python, 29 linesterm.py - lisc/
data/ , Python, 181 linesutils.py - lisc/
io/ , Python, 5 lines__init__.py - lisc/
io/ , Python, 348 linesdb.py - lisc/
io/ , Python, 384 linesio.py - lisc/
io/ , Python, 78 linesutils.py - lisc/
modutils/ , Python, 1 line__init__.py - lisc/
modutils/ , Python, 34 linesdecorators.py - lisc/
modutils/ , Python, 67 linesdependencies.py - lisc/
modutils/ , Python, 13 lineserrors.py - lisc/
objects/ , Python, 4 lines__init__.py - lisc/
objects/ , Python, 439 linesbase.py - lisc/
objects/ , Python, 638 linescounts.py - lisc/
objects/ , Python, 35 linesutils.py - lisc/
objects/ , Python, 216 lineswords.py - lisc/
plts/ , Python, 1 line__init__.py - lisc/
plts/ , Python, 234 linescounts.py - lisc/
plts/ , Python, 45 linestime.py - lisc/
plts/ , Python, 229 linesutils.py - lisc/
plts/ , Python, 64 lineswordcloud.py - lisc/
plts/ , Python, 100 lineswords.py - lisc/
requester/ , Python, 3 lines__init__.py - lisc/
requester/ , Python, 256 linesrequester.py - lisc/
tests/ , Python, 1 line__init__.py - lisc/
tests/ , Python, 1 lineanalysis/ __init__.py - lisc/
tests/ , Python, 56 linesanalysis/ test_counts.py - lisc/
tests/ , Python, 20 linesanalysis/ test_time.py - lisc/
tests/ , Python, 56 linesanalysis/ test_words.py - lisc/
tests/ , Python, 1 linecollect/ __init__.py - lisc/
tests/ , Python, 28 linescollect/ test_citations.py - lisc/
tests/ , Python, 43 linescollect/ test_counts.py - lisc/
tests/ , Python, 11 linescollect/ test_info.py - lisc/
tests/ , Python, 66 linescollect/ test_process.py - lisc/
tests/ , Python, 62 linescollect/ test_terms.py - lisc/
tests/ , Python, 36 linescollect/ test_time.py - lisc/
tests/ , Python, 70 linescollect/ test_words.py - lisc/
tests/ , Python, 120 linesconftest.py - lisc/
tests/ , Python, 1 linedata/ __init__.py - lisc/
tests/ , Python, 94 linesdata/ test_articles.py - lisc/
tests/ , Python, 46 linesdata/ test_articles_all.py - lisc/
tests/ , Python, 18 linesdata/ test_base_articles.py - lisc/
tests/ , Python, 70 linesdata/ test_meta_data.py - lisc/
tests/ , Python, 51 linesdata/ test_process.py - lisc/
tests/ , Python, 23 linesdata/ test_term.py - lisc/
tests/ , Python, 68 linesdata/ test_utils.py - lisc/
tests/ , Python, 1 lineio/ __init__.py - lisc/
tests/ , Python, 94 linesio/ test_db.py - lisc/
tests/ , Python, 96 linesio/ test_io.py - lisc/
tests/ , Python, 18 linesio/ test_utils.py - lisc/
tests/ , Python, 1 linemodutils/ __init__.py - lisc/
tests/ , Python, 24 linesmodutils/ test_decorators.py - lisc/
tests/ , Python, 28 linesmodutils/ test_dependencies.py - lisc/
tests/ , Python, 1 lineobjects/ __init__.py - lisc/
tests/ , Python, 304 linesobjects/ test_base.py - lisc/
tests/ , Python, 109 linesobjects/ test_counts.py - lisc/
tests/ , Python, 12 linesobjects/ test_utils.py - lisc/
tests/ , Python, 86 linesobjects/ test_words.py - lisc/
tests/ , Python, 1 lineplts/ __init__.py - lisc/
tests/ , Python, 65 linesplts/ test_counts.py - lisc/
tests/ , Python, 20 linesplts/ test_time.py - lisc/
tests/ , Python, 121 linesplts/ test_utils.py - lisc/
tests/ , Python, 25 linesplts/ test_wordcloud.py - lisc/
tests/ , Python, 24 linesplts/ test_words.py - lisc/
tests/ , Python, 1 linerequester/ __init__.py - lisc/
tests/ , Python, 76 linesrequester/ test_requester.py - lisc/
tests/ , Python, 182 linestdata.py - lisc/
tests/ , Python, 37 linestfiles.py - lisc/
tests/ , Python, 17 linestsettings.py - lisc/
tests/ , Python, 53 linestutils.py - lisc/
tests/ , Python, 1 lineurls/ __init__.py - lisc/
tests/ , Python, 53 linesurls/ test_eutils.py - lisc/
tests/ , Python, 32 linesurls/ test_open_citations.py - lisc/
tests/ , Python, 50 linesurls/ test_urls.py - lisc/
tests/ , Python, 39 linesurls/ test_utils.py - lisc/
tests/ , Python, 1 lineutils/ __init__.py - lisc/
tests/ , Python, 21 linesutils/ test_base.py - lisc/
urls/ , Python, 5 lines__init__.py - lisc/
urls/ , Python, 157 lineseutils.py - lisc/
urls/ , Python, 58 linesopen_citations.py - lisc/
urls/ , Python, 218 linesurls.py - lisc/
urls/ , Python, 103 linesutils.py - lisc/
utils/ , Python, 7 lines__init__.py - lisc/
utils/ , Python, 70 linesbase.py - lisc/
version.py , Python, 1 line - setup.py, Python, 67 lines
- tutorials/
plot_00-Overview.py , Python, 315 lines - tutorials/
plot_01-WordsCollection. , Python, 163 linespy - tutorials/
plot_02-WordsAnalysis.py , Python, 184 lines - tutorials/
plot_03-Counts1D.py , Python, 101 lines - tutorials/
plot_04-CountsCollection , Python, 145 lines.py - tutorials/
plot_05-CountsAnalysis.p , Python, 146 linesy - tutorials/
plot_06-CollectAcrossTim , Python, 230 linese.py - tutorials/
plot_07-MetaData.py , Python, 70 lines - tutorials/
plot_08-Citations.py , Python, 150 lines - LICENSE, License, 201 lines
- README.rst, Text, 181 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 5 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 273 scripts, each with its path and the digest of its content;
- 2 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- doi:10.6080/
k09g5jrz , at the source; found in “Data Availability” - osf:dh3wv, at OSF; found in “Data Availability”
Data Availability
Repository This project is openly available through an online project repository, which includes all the code used for data pre-processing and analysis. Project Repository: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Materials descriptions and availability statements
Project repository: This project is openly available through an online project repository, which includes all the code used for data pre-processing and analysis.
Project Repository: https://
Dataset: This project uses electrophysiological data collected from neurosurgical patients, as well as an open-access rat recording dataset from CRCNS.org: http://
The human single-neuron dataset was collected as part of a previously published study and is publicly available through OSF [14]: https://
To systematically evaluate place cell detection methods across species, we developed a custom simulation framework, SimPlaceCells, available at: https://
Software: All code used and developed for this project was written in the Python programming language. The code is openly available, licensed for reuse, and deposited in the project repository.
Management of the dataset was conducted using the Human Single Neuron (HSN) Pipeline:
https://
Analyses of the single-neuron data were performed using the open-source Spiketools toolbox:
https://
Literature searches and related resources were organized using LISC, an open-source Python module for literature analysis.
https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Authors: added Salman E. Qasim (0000-0001-8739-5962); Joshua Jacobs (0000-0003-1807-6882); removed Salman E. Qasim; Joshua Jacobs
Version 1, 28 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 4 authors, 12 MeSH terms, 1 funder, 64 references.
Cite
This paper
Zhang, W., Donoghue, T., Qasim, S. E., & Jacobs, J. (2026). Evaluating place cell detection methods in Rats and Humans: Implications for cross-species spatial coding. PLoS computational biology, 22(5), e1013488. https://
BibTeX
@article{zhang2026evalua
author = {Zhang, Weijia and Donoghue, Thomas and Qasim, Salman E. and Jacobs, Joshua},
title = {{Evaluating place cell detection methods in Rats and Humans: Implications for cross-species spatial coding}},
journal = {PLoS computational biology},
year = {2026},
month = may,
volume = {22},
number = {5},
pages = {e1013488},
publisher = {PLOS},
issn = {1553-734X},
doi = {10.1371/
url = {https://
pmid = {42189870},
pmcid = {PMC13225663}
}
RIS
TY - JOUR
AU - Zhang, Weijia
AU - Donoghue, Thomas
AU - Qasim, Salman E.
AU - Jacobs, Joshua
TI - Evaluating place cell detection methods in Rats and Humans: Implications for cross-species spatial coding
T2 - PLoS computational biology
J2 - PLoS Comput Biol
PY - 2026
DA - 2026/
VL - 22
IS - 5
SP - e1013488
SN - 1553-734X
PB - PLOS
DO - 10.1371/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1371/
"type": "article-journal",
"title": "Evaluating place cell detection methods in Rats and Humans: Implications for cross-species spatial coding",
"container-title": "PLoS computational biology",
"author": [
{
"family": "Zhang",
"given": "Weijia"
},
{
"family": "Donoghue",
"given": "Thomas"
},
{
"family": "Qasim",
"given": "Salman E."
},
{
"family": "Jacobs",
"given": "Joshua"
}
],
"container-title-short":
"volume": "22",
"issue": "5",
"page": "e1013488",
"DOI": "10.1371/
"PMID": "42189870",
"PMCID": "PMC13225663",
"ISSN": "1553-734X",
"publisher": "PLOS",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
26
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1126/sciadv.adz9893 [code]
- Hippocampal place cells map terrain geometry independently of behavior.Journal: Science advancesIn common: extracellular electrophysiology (units, LFP), rat, 9 references
- [2] doi:10.3389/fnbeh.2026.1895371 [code]
- Discrete and differentiated encoding of distinct components of spatial experience occurs within the proximodistal subfields of the dorsoventral axis of the hippocampus.Journal: Frontiers in behavioral neuroscienceIn common: SciPy, Matplotlib, NumPy, rat, 8 references
- [3] doi:10.1111/ejn.70255 [code]
- A Systematic Review of Aperiodic Neural Activity in Clinical InvestigationsJournal: n/aIn common: NeuroDSP, seaborn, pandas, 2 other tools, 1 reference, author Thomas Donoghue
- [4] doi:10.1038/s41467-026-71386-z [code]
- Planar, spiral, and concentric traveling waves distinguish behavioral states in human memory.Journal: Nature communicationsIn common: statsmodels, seaborn, scikit-learn, 4 other tools, 1 reference, author Joshua Jacobs
- [5] doi:10.1038/s41586-026-10537-0 [code]
- Sparse-to-dense coding transformation between hippocampal areas CA3 and CA1.Journal: NatureIn common: 8 references
- [6] doi:10.3389/fcogn.2026.1767179 [code]
- Adult lifespan effects on functional specialization along the hippocampal long axis.Journal: Frontiers in cognitionIn common: statsmodels, scikit-learn, Matplotlib, 1 other tool, 5 references
- [7] doi:10.7554/elife.100605 [code]
- Age-related changes in ‘cortical’ 1/
f dynamics are linked to cardiac activity Journal: n/aIn common: NeuroDSP, statsmodels, seaborn, 5 other tools, 1 reference - [8] doi:10.1073/pnas.2517639123 [code]
- Transformations of the spatial activity manifold convey aversive information in CA3.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: statsmodels, scikit-learn, pandas, 3 other tools, 4 references
- [9] doi:10.1038/s41467-026-74834-y [code]
- Voltage imaging of CA1 pyramidal cells and SST+ interneurons reveals stability and plasticity mechanisms of spatial firing.Journal: Nature communicationsIn common: 6 references
- [10] doi:10.1126/sciadv.aeg6797 [code]
- Dorsoventral gradient of theta sweeps in the medial entorhinal cortex.Journal: Science advancesIn common: statsmodels, seaborn, scikit-learn, 4 other tools, 2 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 5 repositories of the authors' code, each at its verified commit and with its license, 273 scripts, and 2 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:d9630958fcfd054d…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
