[{"data":1,"prerenderedAt":966},["ShallowReactive",2],{"content-query-CSkMSMpEtC":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"heading":8,"prompt":10,"tags":14,"files":18,"nav":6,"presets":19,"gallery":36,"body":38,"_type":959,"_id":960,"_source":961,"_file":962,"_stem":963,"_extension":964,"sitemap":965},"/tools/find-peaks","tools",false,"","Peak Finder","Find peaks online from Excel or CSV data. Detect maxima, rank prominence, and measure spacing and widths with AI.",{"prefix":11,"label":12,"placeholder":13},"Find peaks","Describe the peak detection analysis you want to run","e.g. find all peaks above height 1.0 with prominence > 0.5, report positions widths and areas, annotate on plot",[15,16,17],"charts","statistics","science",true,[20,26,31],{"label":21,"prompt":22,"dataset_url":23,"dataset_title":24,"dataset_citation":25},"Temperature peak years","find local maximum peaks in global temperature anomaly; minimum prominence 0.05°C; minimum distance 5 years; annotate each peak year on the time series; report the 5 largest peaks by prominence; identify the decade with the most peak years","https://ourworldindata.org/grapher/temperature-anomaly.csv","Global average temperature anomaly","Our World in Data",{"label":27,"prompt":28,"dataset_url":29,"dataset_title":30,"dataset_citation":25},"CO₂ seasonal peaks","find peaks and troughs in monthly CO2 concentration; minimum distance 6 months; report the annual seasonal amplitude (peak − trough) for each year; plot the series with peaks marked in green and troughs in red; has the seasonal amplitude changed over time?","https://ourworldindata.org/grapher/co2-concentration-long-term.csv","CO₂ concentration in the atmosphere",{"label":32,"prompt":33,"dataset_url":34,"dataset_title":35,"dataset_citation":25},"Energy use peak decades","find local maxima and minima in per-capita energy use; report each peak year, peak value, and prominence; identify the largest energy use peak by prominence; annotate peaks and troughs on the time series; export results as a table","https://ourworldindata.org/grapher/per-capita-energy-use.csv","Per capita energy use",[37],"/img/tools/find-peaks.png",{"type":39,"children":40,"toc":948},"root",[41,50,104,130,163,169,240,246,384,389,395,544,550,674,680,784,790,827,833,862,893,910],{"type":42,"tag":43,"props":44,"children":46},"element","h2",{"id":45},"what-is-peak-detection",[47],{"type":48,"value":49},"text","What Is Peak Detection?",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54,60,62,67,69,74,76,81,83,88,90,95,97,102],{"type":42,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":48,"value":59},"Peak detection",{"type":48,"value":61}," (also called ",{"type":42,"tag":55,"props":63,"children":64},{},[65],{"type":48,"value":66},"peak finding",{"type":48,"value":68},") is the task of automatically identifying local maxima — points higher than their immediate neighbors — in a signal and characterizing their properties. A ",{"type":42,"tag":55,"props":70,"children":71},{},[72],{"type":48,"value":73},"peak",{"type":48,"value":75}," is a local maximum: a point where the signal is higher than the surrounding points for some distance on both sides. The most useful peak properties are ",{"type":42,"tag":55,"props":77,"children":78},{},[79],{"type":48,"value":80},"height",{"type":48,"value":82}," (the absolute signal value at the peak), ",{"type":42,"tag":55,"props":84,"children":85},{},[86],{"type":48,"value":87},"prominence",{"type":48,"value":89}," (how much the peak stands out above the surrounding baseline — the key measure of peak \"importance\"), and ",{"type":42,"tag":55,"props":91,"children":92},{},[93],{"type":48,"value":94},"width",{"type":48,"value":96}," (the extent of the peak at a specified relative height, typically 50%, giving the ",{"type":42,"tag":55,"props":98,"children":99},{},[100],{"type":48,"value":101},"FWHM",{"type":48,"value":103}," — full width at half maximum). These three properties together characterize every detected peak and enable filtering, ranking, and interpretation.",{"type":42,"tag":51,"props":105,"children":106},{},[107,112,114,121,123,128],{"type":42,"tag":55,"props":108,"children":109},{},[110],{"type":48,"value":111},"Prominence",{"type":48,"value":113}," is the most important peak property for filtering out noise and minor fluctuations. It is defined as the height of the peak above the highest point in the valley between the peak and the nearest higher peak. A tall peak on a high plateau has low prominence; a smaller peak standing alone above a flat baseline has high prominence. Prominence-based filtering — \"find all peaks with prominence > 0.5\" — is far more robust than height-based filtering — \"find all peaks above 2.0\" — because it naturally ignores shoulders and ripples on the flanks of large peaks without requiring separate baseline correction. This makes ",{"type":42,"tag":115,"props":116,"children":118},"code",{"className":117},[],[119],{"type":48,"value":120},"scipy.signal.find_peaks",{"type":48,"value":122}," with the ",{"type":42,"tag":115,"props":124,"children":126},{"className":125},[],[127],{"type":48,"value":87},{"type":48,"value":129}," parameter the standard tool for real-world peak detection.",{"type":42,"tag":51,"props":131,"children":132},{},[133,135,140,142,147,149,154,156,161],{"type":48,"value":134},"Peak detection applies across a remarkable range of domains. In ",{"type":42,"tag":55,"props":136,"children":137},{},[138],{"type":48,"value":139},"spectroscopy",{"type":48,"value":141},", each peak in an IR, Raman, or NMR spectrum corresponds to a molecular vibration or resonance — the position identifies the functional group and the area is proportional to concentration. In ",{"type":42,"tag":55,"props":143,"children":144},{},[145],{"type":48,"value":146},"chromatography",{"type":48,"value":148},", each peak in a chromatogram is a separated compound — the retention time identifies it and the area quantifies it. In ",{"type":42,"tag":55,"props":150,"children":151},{},[152],{"type":48,"value":153},"time series analysis",{"type":48,"value":155},", peaks in sales data identify demand spikes; peaks in a temperature record identify warm events; peaks in an ECG trace identify heartbeats. In all these cases, the output is a ",{"type":42,"tag":55,"props":157,"children":158},{},[159],{"type":48,"value":160},"peak table",{"type":48,"value":162},": a row per detected peak with columns for position, height, prominence, width, and area.",{"type":42,"tag":43,"props":164,"children":166},{"id":165},"how-it-works",[167],{"type":48,"value":168},"How It Works",{"type":42,"tag":170,"props":171,"children":172},"ol",{},[173,198,214],{"type":42,"tag":174,"props":175,"children":176},"li",{},[177,182,184,189,191,196],{"type":42,"tag":55,"props":178,"children":179},{},[180],{"type":48,"value":181},"Upload your data",{"type":48,"value":183}," — provide a CSV or Excel file with an ",{"type":42,"tag":55,"props":185,"children":186},{},[187],{"type":48,"value":188},"x",{"type":48,"value":190}," column (time, wavenumber, index) and a ",{"type":42,"tag":55,"props":192,"children":193},{},[194],{"type":48,"value":195},"y",{"type":48,"value":197}," column (signal, intensity, value). One row per data point.",{"type":42,"tag":174,"props":199,"children":200},{},[201,206,208],{"type":42,"tag":55,"props":202,"children":203},{},[204],{"type":48,"value":205},"Describe the analysis",{"type":48,"value":207}," — e.g. ",{"type":42,"tag":209,"props":210,"children":211},"em",{},[212],{"type":48,"value":213},"\"find all peaks with height > 1.5 and prominence > 0.3; report positions, heights, FWHM widths, and areas; sort by prominence\"",{"type":42,"tag":174,"props":215,"children":216},{},[217,222,224,230,232,238],{"type":42,"tag":55,"props":218,"children":219},{},[220],{"type":48,"value":221},"Get full results",{"type":48,"value":223}," — the AI writes Python code using ",{"type":42,"tag":225,"props":226,"children":228},"a",{"href":227},"https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html",[229],{"type":48,"value":120},{"type":48,"value":231}," and ",{"type":42,"tag":225,"props":233,"children":235},{"href":234},"https://plotly.com/python/",[236],{"type":48,"value":237},"Plotly",{"type":48,"value":239}," to detect peaks, annotate the signal with markers and FWHM bars, and output a complete peak table",{"type":42,"tag":43,"props":241,"children":243},{"id":242},"required-data-format",[244],{"type":48,"value":245},"Required Data Format",{"type":42,"tag":247,"props":248,"children":249},"table",{},[250,274],{"type":42,"tag":251,"props":252,"children":253},"thead",{},[254],{"type":42,"tag":255,"props":256,"children":257},"tr",{},[258,264,269],{"type":42,"tag":259,"props":260,"children":261},"th",{},[262],{"type":48,"value":263},"Column",{"type":42,"tag":259,"props":265,"children":266},{},[267],{"type":48,"value":268},"Description",{"type":42,"tag":259,"props":270,"children":271},{},[272],{"type":48,"value":273},"Example",{"type":42,"tag":275,"props":276,"children":277},"tbody",{},[278,343],{"type":42,"tag":255,"props":279,"children":280},{},[281,290,295],{"type":42,"tag":282,"props":283,"children":284},"td",{},[285],{"type":42,"tag":115,"props":286,"children":288},{"className":287},[],[289],{"type":48,"value":188},{"type":42,"tag":282,"props":291,"children":292},{},[293],{"type":48,"value":294},"Independent variable (position, time, wavenumber)",{"type":42,"tag":282,"props":296,"children":297},{},[298,304,306,312,313,319,321,327,328,334,335,341],{"type":42,"tag":115,"props":299,"children":301},{"className":300},[],[302],{"type":48,"value":303},"400",{"type":48,"value":305},", ",{"type":42,"tag":115,"props":307,"children":309},{"className":308},[],[310],{"type":48,"value":311},"401",{"type":48,"value":305},{"type":42,"tag":115,"props":314,"children":316},{"className":315},[],[317],{"type":48,"value":318},"402",{"type":48,"value":320}," (cm⁻¹) or ",{"type":42,"tag":115,"props":322,"children":324},{"className":323},[],[325],{"type":48,"value":326},"1",{"type":48,"value":305},{"type":42,"tag":115,"props":329,"children":331},{"className":330},[],[332],{"type":48,"value":333},"2",{"type":48,"value":305},{"type":42,"tag":115,"props":336,"children":338},{"className":337},[],[339],{"type":48,"value":340},"3",{"type":48,"value":342}," (time)",{"type":42,"tag":255,"props":344,"children":345},{},[346,354,359],{"type":42,"tag":282,"props":347,"children":348},{},[349],{"type":42,"tag":115,"props":350,"children":352},{"className":351},[],[353],{"type":48,"value":195},{"type":42,"tag":282,"props":355,"children":356},{},[357],{"type":48,"value":358},"Signal value",{"type":42,"tag":282,"props":360,"children":361},{},[362,368,369,375,376,382],{"type":42,"tag":115,"props":363,"children":365},{"className":364},[],[366],{"type":48,"value":367},"0.23",{"type":48,"value":305},{"type":42,"tag":115,"props":370,"children":372},{"className":371},[],[373],{"type":48,"value":374},"1.45",{"type":48,"value":305},{"type":42,"tag":115,"props":377,"children":379},{"className":378},[],[380],{"type":48,"value":381},"2.81",{"type":48,"value":383}," (intensity, counts, value)",{"type":42,"tag":51,"props":385,"children":386},{},[387],{"type":48,"value":388},"Any column names work — describe them in your prompt. If the data is noisy, ask the AI to apply Savitzky-Golay smoothing before peak detection.",{"type":42,"tag":43,"props":390,"children":392},{"id":391},"interpreting-the-results",[393],{"type":48,"value":394},"Interpreting the Results",{"type":42,"tag":247,"props":396,"children":397},{},[398,414],{"type":42,"tag":251,"props":399,"children":400},{},[401],{"type":42,"tag":255,"props":402,"children":403},{},[404,409],{"type":42,"tag":259,"props":405,"children":406},{},[407],{"type":48,"value":408},"Output",{"type":42,"tag":259,"props":410,"children":411},{},[412],{"type":48,"value":413},"What it means",{"type":42,"tag":275,"props":415,"children":416},{},[417,433,449,464,480,496,512,528],{"type":42,"tag":255,"props":418,"children":419},{},[420,428],{"type":42,"tag":282,"props":421,"children":422},{},[423],{"type":42,"tag":55,"props":424,"children":425},{},[426],{"type":48,"value":427},"Peak position (x₀)",{"type":42,"tag":282,"props":429,"children":430},{},[431],{"type":48,"value":432},"x-value at the maximum — wavelength, retention time, frequency, date",{"type":42,"tag":255,"props":434,"children":435},{},[436,444],{"type":42,"tag":282,"props":437,"children":438},{},[439],{"type":42,"tag":55,"props":440,"children":441},{},[442],{"type":48,"value":443},"Peak height",{"type":42,"tag":282,"props":445,"children":446},{},[447],{"type":48,"value":448},"Signal value at the peak — absolute magnitude",{"type":42,"tag":255,"props":450,"children":451},{},[452,459],{"type":42,"tag":282,"props":453,"children":454},{},[455],{"type":42,"tag":55,"props":456,"children":457},{},[458],{"type":48,"value":111},{"type":42,"tag":282,"props":460,"children":461},{},[462],{"type":48,"value":463},"How much the peak stands above its surrounding baseline — key for ranking peaks",{"type":42,"tag":255,"props":465,"children":466},{},[467,475],{"type":42,"tag":282,"props":468,"children":469},{},[470],{"type":42,"tag":55,"props":471,"children":472},{},[473],{"type":48,"value":474},"Width (FWHM)",{"type":42,"tag":282,"props":476,"children":477},{},[478],{"type":48,"value":479},"Full width at half maximum — peak extent at 50% of height above the base",{"type":42,"tag":255,"props":481,"children":482},{},[483,491],{"type":42,"tag":282,"props":484,"children":485},{},[486],{"type":42,"tag":55,"props":487,"children":488},{},[489],{"type":48,"value":490},"Area / integral",{"type":42,"tag":282,"props":492,"children":493},{},[494],{"type":48,"value":495},"Integral of the peak above the baseline — proportional to amount (chromatography, spectroscopy)",{"type":42,"tag":255,"props":497,"children":498},{},[499,507],{"type":42,"tag":282,"props":500,"children":501},{},[502],{"type":42,"tag":55,"props":503,"children":504},{},[505],{"type":48,"value":506},"Left / right base",{"type":42,"tag":282,"props":508,"children":509},{},[510],{"type":48,"value":511},"x-positions where the peak descends to the valley baseline on each side",{"type":42,"tag":255,"props":513,"children":514},{},[515,523],{"type":42,"tag":282,"props":516,"children":517},{},[518],{"type":42,"tag":55,"props":519,"children":520},{},[521],{"type":48,"value":522},"Peak table",{"type":42,"tag":282,"props":524,"children":525},{},[526],{"type":48,"value":527},"One row per detected peak with all properties — sortable and exportable",{"type":42,"tag":255,"props":529,"children":530},{},[531,539],{"type":42,"tag":282,"props":532,"children":533},{},[534],{"type":42,"tag":55,"props":535,"children":536},{},[537],{"type":48,"value":538},"Prominence threshold",{"type":42,"tag":282,"props":540,"children":541},{},[542],{"type":48,"value":543},"Peaks below this prominence are noise / shoulders — increase to reduce detections",{"type":42,"tag":43,"props":545,"children":547},{"id":546},"example-prompts",[548],{"type":48,"value":549},"Example Prompts",{"type":42,"tag":247,"props":551,"children":552},{},[553,569],{"type":42,"tag":251,"props":554,"children":555},{},[556],{"type":42,"tag":255,"props":557,"children":558},{},[559,564],{"type":42,"tag":259,"props":560,"children":561},{},[562],{"type":48,"value":563},"Scenario",{"type":42,"tag":259,"props":565,"children":566},{},[567],{"type":48,"value":568},"What to type",{"type":42,"tag":275,"props":570,"children":571},{},[572,589,606,623,640,657],{"type":42,"tag":255,"props":573,"children":574},{},[575,580],{"type":42,"tag":282,"props":576,"children":577},{},[578],{"type":48,"value":579},"Basic detection",{"type":42,"tag":282,"props":581,"children":582},{},[583],{"type":42,"tag":115,"props":584,"children":586},{"className":585},[],[587],{"type":48,"value":588},"find peaks with minimum height 0.5 and minimum prominence 0.2; annotate positions and heights",{"type":42,"tag":255,"props":590,"children":591},{},[592,597],{"type":42,"tag":282,"props":593,"children":594},{},[595],{"type":48,"value":596},"Chromatogram",{"type":42,"tag":282,"props":598,"children":599},{},[600],{"type":42,"tag":115,"props":601,"children":603},{"className":602},[],[604],{"type":48,"value":605},"find all chromatogram peaks with prominence > 1000 counts; report retention times and peak areas; sort by area",{"type":42,"tag":255,"props":607,"children":608},{},[609,614],{"type":42,"tag":282,"props":610,"children":611},{},[612],{"type":48,"value":613},"Spectral peaks",{"type":42,"tag":282,"props":615,"children":616},{},[617],{"type":42,"tag":115,"props":618,"children":620},{"className":619},[],[621],{"type":48,"value":622},"detect NMR peaks with minimum prominence 0.1; report chemical shifts, heights, and FWHM linewidths",{"type":42,"tag":255,"props":624,"children":625},{},[626,631],{"type":42,"tag":282,"props":627,"children":628},{},[629],{"type":48,"value":630},"Time series extrema",{"type":42,"tag":282,"props":632,"children":633},{},[634],{"type":42,"tag":115,"props":635,"children":637},{"className":636},[],[638],{"type":48,"value":639},"find both peaks (maxima) and troughs (minima) in monthly sales; annotate on time series; report seasonal amplitude",{"type":42,"tag":255,"props":641,"children":642},{},[643,648],{"type":42,"tag":282,"props":644,"children":645},{},[646],{"type":48,"value":647},"Prominence filter",{"type":42,"tag":282,"props":649,"children":650},{},[651],{"type":42,"tag":115,"props":652,"children":654},{"className":653},[],[655],{"type":48,"value":656},"find all peaks; plot prominence vs height; which peaks have prominence > 2× noise level?",{"type":42,"tag":255,"props":658,"children":659},{},[660,665],{"type":42,"tag":282,"props":661,"children":662},{},[663],{"type":48,"value":664},"Smoothed detection",{"type":42,"tag":282,"props":666,"children":667},{},[668],{"type":42,"tag":115,"props":669,"children":671},{"className":670},[],[672],{"type":48,"value":673},"apply SG filter (window=21) before peak detection; compare detected peaks on raw vs smoothed signal",{"type":42,"tag":43,"props":675,"children":677},{"id":676},"assumptions-to-check",[678],{"type":48,"value":679},"Assumptions to Check",{"type":42,"tag":681,"props":682,"children":683},"ul",{},[684,702,720,744,766],{"type":42,"tag":174,"props":685,"children":686},{},[687,692,694,700],{"type":42,"tag":55,"props":688,"children":689},{},[690],{"type":48,"value":691},"Smooth before detecting",{"type":48,"value":693}," — ",{"type":42,"tag":115,"props":695,"children":697},{"className":696},[],[698],{"type":48,"value":699},"find_peaks",{"type":48,"value":701}," operates on the raw signal; noise creates many spurious local maxima; Savitzky-Golay smoothing before detection dramatically reduces false positives without broadening real peaks",{"type":42,"tag":174,"props":703,"children":704},{},[705,710,712,718],{"type":42,"tag":55,"props":706,"children":707},{},[708],{"type":48,"value":709},"Set minimum distance",{"type":48,"value":711}," — the ",{"type":42,"tag":115,"props":713,"children":715},{"className":714},[],[716],{"type":48,"value":717},"distance",{"type":48,"value":719}," parameter enforces a minimum number of samples between detected peaks; without it, shoulders and ripples on a single broad peak are detected as multiple peaks; set distance to at least half the expected minimum inter-peak spacing",{"type":42,"tag":174,"props":721,"children":722},{},[723,728,730,735,737,742],{"type":42,"tag":55,"props":724,"children":725},{},[726],{"type":48,"value":727},"Prominence vs height threshold",{"type":48,"value":729}," — for baseline-corrected signals, ",{"type":42,"tag":115,"props":731,"children":733},{"className":732},[],[734],{"type":48,"value":80},{"type":48,"value":736}," works well; for signals with varying baselines, ",{"type":42,"tag":115,"props":738,"children":740},{"className":739},[],[741],{"type":48,"value":87},{"type":48,"value":743}," is more reliable because it measures height relative to the local surrounding rather than the absolute zero",{"type":42,"tag":174,"props":745,"children":746},{},[747,752,753,758,760],{"type":42,"tag":55,"props":748,"children":749},{},[750],{"type":48,"value":751},"Trough detection",{"type":48,"value":693},{"type":42,"tag":115,"props":754,"children":756},{"className":755},[],[757],{"type":48,"value":699},{"type":48,"value":759}," detects maxima only; for troughs (local minima), pass the negated signal: ",{"type":42,"tag":115,"props":761,"children":763},{"className":762},[],[764],{"type":48,"value":765},"find_peaks(-y, ...)",{"type":42,"tag":174,"props":767,"children":768},{},[769,774,776,782],{"type":42,"tag":55,"props":770,"children":771},{},[772],{"type":48,"value":773},"Overlapping peaks",{"type":48,"value":775}," — peaks that share a common base are detected as a single peak or missed; use the second derivative (SG with ",{"type":42,"tag":115,"props":777,"children":779},{"className":778},[],[780],{"type":48,"value":781},"deriv=2",{"type":48,"value":783},") or peak deconvolution (Gaussian/Lorentzian fitting) to resolve them",{"type":42,"tag":43,"props":785,"children":787},{"id":786},"related-tools",[788],{"type":48,"value":789},"Related Tools",{"type":42,"tag":51,"props":791,"children":792},{},[793,795,801,803,809,811,817,819,825],{"type":48,"value":794},"Use the ",{"type":42,"tag":225,"props":796,"children":798},{"href":797},"/tools/gaussian-peak-fit",[799],{"type":48,"value":800},"Gaussian Peak Fit",{"type":48,"value":802}," to fit explicit Gaussian models to detected peaks — extracting precise centers, widths, and areas with confidence intervals. Use the ",{"type":42,"tag":225,"props":804,"children":806},{"href":805},"/tools/lorentzian-peak-fit",[807],{"type":48,"value":808},"Lorentzian Peak Fit",{"type":48,"value":810}," for NMR and Raman spectra where peaks follow Lorentzian lineshapes. Use the ",{"type":42,"tag":225,"props":812,"children":814},{"href":813},"/tools/savitzky-golay-filter",[815],{"type":48,"value":816},"Savitzky-Golay Filter",{"type":48,"value":818}," to smooth the signal before peak detection and to compute first/second derivatives for shoulder peak resolution. Use the ",{"type":42,"tag":225,"props":820,"children":822},{"href":821},"/tools/moving-median-filter",[823],{"type":48,"value":824},"Moving Median Filter",{"type":48,"value":826}," to suppress spike outliers that would otherwise be falsely detected as peaks.",{"type":42,"tag":43,"props":828,"children":830},{"id":829},"frequently-asked-questions",[831],{"type":48,"value":832},"Frequently Asked Questions",{"type":42,"tag":51,"props":834,"children":835},{},[836,841,846,848,852,854,860],{"type":42,"tag":55,"props":837,"children":838},{},[839],{"type":48,"value":840},"What is the difference between height and prominence?",{"type":42,"tag":55,"props":842,"children":843},{},[844],{"type":48,"value":845},"Height",{"type":48,"value":847}," is the absolute signal value at the peak top. ",{"type":42,"tag":55,"props":849,"children":850},{},[851],{"type":48,"value":111},{"type":48,"value":853}," is how much the peak stands out relative to its immediate surroundings — it equals the peak height minus the highest point in the valley between the peak and the nearest taller peak. Consider two peaks: a small spike of height 3.0 on top of a plateau at 2.8 (prominence = 0.2), and a smaller spike of height 2.0 on a flat baseline at 0.0 (prominence = 2.0). The first is nearly invisible as a \"real\" peak despite its higher absolute value; the second is a prominent isolated feature. Filtering by ",{"type":42,"tag":115,"props":855,"children":857},{"className":856},[],[858],{"type":48,"value":859},"prominence > 0.5",{"type":48,"value":861}," catches the second and skips the first — the correct result for most applications.",{"type":42,"tag":51,"props":863,"children":864},{},[865,870,872,877,879,884,886,891],{"type":42,"tag":55,"props":866,"children":867},{},[868],{"type":48,"value":869},"How do I find the right threshold parameters?",{"type":48,"value":871},"\nStart with a ",{"type":42,"tag":55,"props":873,"children":874},{},[875],{"type":48,"value":876},"prominence sweep",{"type":48,"value":878},": detect all peaks with no constraints, then plot a histogram of peak prominences. There is usually a clear gap between the broad low-prominence mass (noise peaks, shoulders) and the narrow high-prominence cluster (real peaks). Set the threshold just above the gap. For ",{"type":42,"tag":115,"props":880,"children":882},{"className":881},[],[883],{"type":48,"value":80},{"type":48,"value":885},", look at the noise floor in a signal-free region and set height to 3–5× the noise standard deviation. The ",{"type":42,"tag":115,"props":887,"children":889},{"className":888},[],[890],{"type":48,"value":717},{"type":48,"value":892}," parameter should be set to at least half the expected minimum spacing between real peaks in your data.",{"type":42,"tag":51,"props":894,"children":895},{},[896,901,903,908],{"type":42,"tag":55,"props":897,"children":898},{},[899],{"type":48,"value":900},"How do I compute peak areas for quantification?",{"type":48,"value":902},"\nAfter detecting peaks, integrate the signal within each peak's left and right base boundaries. Ask the AI to ",{"type":42,"tag":209,"props":904,"children":905},{},[906],{"type":48,"value":907},"\"integrate the signal between the left and right base of each detected peak; subtract a linear baseline drawn between the base points; report peak area for each peak\"",{"type":48,"value":909},". For spectroscopy and chromatography, the area (not height) is proportional to concentration. For overlapping peaks, use Gaussian or Lorentzian deconvolution to separate the contributions before integrating.",{"type":42,"tag":51,"props":911,"children":912},{},[913,918,920,925,927,932,934,939,941,946],{"type":42,"tag":55,"props":914,"children":915},{},[916],{"type":48,"value":917},"My signal has peaks on a sloping baseline — how do I handle that?",{"type":48,"value":919},"\nA sloping baseline inflates the height of peaks on the ascending side and deflates peaks on the descending side. Solutions: (1) ",{"type":42,"tag":55,"props":921,"children":922},{},[923],{"type":48,"value":924},"baseline subtraction",{"type":48,"value":926}," — ask the AI to fit a polynomial or spline baseline to the signal-free regions and subtract it before detection; (2) ",{"type":42,"tag":55,"props":928,"children":929},{},[930],{"type":48,"value":931},"use prominence",{"type":48,"value":933}," instead of height — prominence is self-referencing relative to local valleys, so it is less affected by global slope; (3) ",{"type":42,"tag":55,"props":935,"children":936},{},[937],{"type":48,"value":938},"asymmetric least squares baseline",{"type":48,"value":940}," — a standard method for spectral baseline correction. Ask the AI to ",{"type":42,"tag":209,"props":942,"children":943},{},[944],{"type":48,"value":945},"\"fit a polynomial baseline to the regions outside the peaks and subtract it before running peak detection\"",{"type":48,"value":947},".",{"title":7,"searchDepth":949,"depth":949,"links":950},2,[951,952,953,954,955,956,957,958],{"id":45,"depth":949,"text":49},{"id":165,"depth":949,"text":168},{"id":242,"depth":949,"text":245},{"id":391,"depth":949,"text":394},{"id":546,"depth":949,"text":549},{"id":676,"depth":949,"text":679},{"id":786,"depth":949,"text":789},{"id":829,"depth":949,"text":832},"markdown","content:tools:059.find-peaks.md","content","tools/059.find-peaks.md","tools/059.find-peaks","md",{"loc":4},1775502471900]