[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BZX64XQPC43WS32T2JZ0ZP":3,"skill-same:01M7BZX64XQPC43WS32T2JZ0ZP":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7BZX64XQPC43WS32T2JZ0ZP","box-least-squares",null,"Box Least Squares (BLS) periodogram for detecting transiting exoplanets and eclipsing binaries. Use when searching for periodic box-shaped dips in light curves. Alternative to Transit Least Squares, available in astropy.timeseries. Based on Kovács et al. (2002).","linyouxue\u002Fskill-repair-benchmark","linyouxue","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F216151464?v=4","01M7BJEVCXKD74KH6FG9CBVSQB","林宥学","01M7BJEVE02NP217V93BKZFC0J",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FSkillGrad\u002Ftasks\u002Fexoplanet-detection-period\u002Fskills\u002Fbox-least-squares\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: box-least-squares\ndescription: Box Least Squares (BLS) periodogram for detecting transiting exoplanets and eclipsing binaries. Use when searching for periodic box-shaped dips in light curves. Alternative to Transit Least Squares, available in astropy.timeseries. Based on Kovács et al. (2002).\n---\n\n# Box Least Squares (BLS) Periodogram\n\nThe Box Least Squares (BLS) periodogram is a statistical tool for detecting transiting exoplanets and eclipsing binaries in photometric time series data. BLS models a transit as a periodic upside-down top hat (box shape) and finds the period, duration, depth, and reference time that best fit the data.\n\n## Overview\n\nBLS is built into Astropy and provides an alternative to Transit Least Squares (TLS). Both search for transits, but with different implementations and performance characteristics.\n\n**Key parameters BLS searches for:**\n- Period (orbital period)\n- Duration (transit duration)\n- Depth (how much flux drops during transit)\n- Reference time (mid-transit time of first transit)\n\n## Installation\n\nBLS is part of Astropy:\n\n```bash\npip install astropy\n```\n\n## Basic Usage\n\n```python\nimport numpy as np\nimport astropy.units as u\nfrom astropy.timeseries import BoxLeastSquares\n\n# Prepare data\n# time, flux, and flux_err should be numpy arrays or Quantities\nt = time * u.day  # Add units if not already present\ny = flux\ndy = flux_err  # Optional but recommended\n\n# Create BLS object\nmodel = BoxLeastSquares(t, y, dy=dy)\n\n# Automatic period search with specified duration\nduration = 0.2 * u.day  # Expected transit duration\nperiodogram = model.autopower(duration)\n\n# Extract results\nbest_period = periodogram.period[np.argmax(periodogram.power)]\nprint(f\"Best period: {best_period:.5f}\")\n```\n\n## Using autopower vs power\n\n### autopower: Automatic Period Grid\n\nRecommended for initial searches. Automatically determines appropriate period grid:\n\n```python\n# Specify duration (or multiple durations)\nduration = 0.2 * u.day\nperiodogram = model.autopower(duration)\n\n# Or search multiple durations\ndurations = [0.1, 0.15, 0.2, 0.25] * u.day\nperiodogram = model.autopower(durations)\n```\n\n### power: Custom Period Grid\n\nFor more control over the search:\n\n```python\n# Define custom period grid\nperiods = np.linspace(2.0, 10.0, 1000) * u.day\nduration = 0.2 * u.day\n\nperiodogram = model.power(periods, duration)\n```\n\n**Warning**: Period grid quality matters! Too coarse and you'll miss the true period.\n\n## Objective Functions\n\nBLS supports two objective functions:\n\n### 1. Log Likelihood (default)\n\nMaximizes the statistical likelihood of the model fit:\n\n```python\nperiodogram = model.autopower(0.2 * u.day, objective='likelihood')\n```\n\n### 2. Signal-to-Noise Ratio (SNR)\n\nUses the SNR with which the transit depth is measured:\n\n```python\nperiodogram = model.autopower(0.2 * u.day, objective='snr')\n```\n\nThe SNR objective can improve reliability in the presence of correlated noise.\n\n## Complete Example\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport astropy.units as u\nfrom astropy.timeseries import BoxLeastSquares\n\n# Load and prepare data\ndata = np.loadtxt('light_curve.txt')\ntime = data[:, 0] * u.day\nflux = data[:, 1]\nflux_err = data[:, 3]\n\n# Create BLS model\nmodel = BoxLeastSquares(time, flux, dy=flux_err)\n\n# Run BLS with automatic period grid\n# Try multiple durations to find best fit\ndurations = np.linspace(0.05, 0.3, 10) * u.day\nperiodogram = model.autopower(durations, objective='likelihood')\n\n# Find peak\nmax_power_idx = np.argmax(periodogram.power)\nbest_period = periodogram.period[max_power_idx]\nbest_duration = periodogram.duration[max_power_idx]\nbest_t0 = periodogram.transit_time[max_power_idx]\nmax_power = periodogram.power[max_power_idx]\n\nprint(f\"Period: {best_period:.5f}\")\nprint(f\"Duration: {best_duration:.5f}\")\nprint(f\"T0: {best_t0:.5f}\")\nprint(f\"Power: {max_power:.2f}\")\n\n# Plot periodogram\nimport matplotlib.pyplot as plt\nplt.plot(periodogram.period, periodogram.power)\nplt.xlabel('Period [days]')\nplt.ylabel('BLS Power')\nplt.show()\n```\n\n## Peak Statistics for Validation\n\nUse `compute_stats()` to calculate detailed statistics about a candidate transit:\n\n```python\n# Get statistics for the best period\nstats = model.compute_stats(\n    periodogram.period[max_power_idx],\n    periodogram.duration[max_power_idx],\n    periodogram.transit_time[max_power_idx]\n)\n\n# Key statistics for validation\nprint(f\"Depth: {stats['depth']:.6f}\")\nprint(f\"Depth uncertainty: {stats['depth_err']:.6f}\")\nprint(f\"SNR: {stats['depth_snr']:.2f}\")\nprint(f\"Odd\u002FEven mismatch: {stats['depth_odd'] - stats['depth_even']:.6f}\")\nprint(f\"Number of transits: {stats['transit_count']}\")\n\n# Check for false positives\nif abs(stats['depth_odd'] - stats['depth_even']) > 3 * stats['depth_err']:\n    print(\"Warning: Significant odd-even mismatch - may not be planetary\")\n```\n\n**Validation criteria:**\n- **High depth SNR (>7)**: Strong signal\n- **Low odd-even mismatch**: Consistent transit depth\n- **Multiple transits observed**: More reliable\n- **Reasonable duration**: Not too long or too short for orbit\n\n## Period Grid Sensitivity\n\nThe BLS periodogram is sensitive to period grid spacing. The `autoperiod()` method provides a conservative grid:\n\n```python\n# Get automatic period grid\nperiods = model.autoperiod(durations, minimum_period=1*u.day, maximum_period=10*u.day)\nprint(f\"Period grid has {len(periods)} points\")\n\n# Use this grid with power()\nperiodogram = model.power(periods, durations)\n```\n\n**Tips:**\n- Use `autopower()` for initial searches\n- Use finer grids around promising candidates\n- Period grid quality matters more for BLS than for Lomb-Scargle\n\n## Comparing BLS Results\n\nTo compare multiple peaks:\n\n```python\n# Find top 5 peaks\nsorted_idx = np.argsort(periodogram.power)[::-1]\ntop_5 = sorted_idx[:5]\n\nprint(\"Top 5 candidates:\")\nfor i, idx in enumerate(top_5):\n    period = periodogram.period[idx]\n    power = periodogram.power[idx]\n    duration = periodogram.duration[idx]\n\n    stats = model.compute_stats(period, duration, periodogram.transit_time[idx])\n\n    print(f\"\\n{i+1}. Period: {period:.5f}\")\n    print(f\"   Power: {power:.2f}\")\n    print(f\"   Duration: {duration:.5f}\")\n    print(f\"   SNR: {stats['depth_snr']:.2f}\")\n    print(f\"   Transits: {stats['transit_count']}\")\n```\n\n## Phase-Folded Light Curve\n\nAfter finding a candidate, phase-fold to visualize the transit:\n\n```python\n# Fold the light curve at the best period\nphase = ((time.value - best_t0.value) % best_period.value) \u002F best_period.value\n\n# Plot to verify transit shape\nimport matplotlib.pyplot as plt\nplt.plot(phase, flux, '.')\nplt.xlabel('Phase')\nplt.ylabel('Flux')\nplt.show()\n```\n\n## BLS vs Transit Least Squares (TLS)\n\nBoth methods search for transits, but differ in implementation:\n\n### Box Least Squares (BLS)\n**Pros:**\n- Built into Astropy (no extra install)\n- Fast for targeted searches\n- Good statistical framework\n- compute_stats() provides detailed validation\n\n**Cons:**\n- Simpler transit model (box shape)\n- Requires careful period grid setup\n- May be less sensitive to grazing transits\n\n### Transit Least Squares (TLS)\n**Pros:**\n- More sophisticated transit models\n- Generally more sensitive\n- Better handles grazing transits\n- Automatic period grid is more robust\n\n**Cons:**\n- Requires separate package\n- Slower for very long time series\n- Less control over transit shape\n\n**Recommendation**: Try both! TLS is often more sensitive, but BLS is faster and built-in.\n\n## Integration with Preprocessing\n\nBLS works best with preprocessed data. Consider this pipeline:\n\n1. **Quality filtering**: Remove flagged data points\n2. **Outlier removal**: Clean obvious artifacts\n3. **Detrending**: Remove stellar variability (rotation, trends)\n4. **BLS search**: Run period search on cleaned data\n5. **Validation**: Use `compute_stats()` to check candidate quality\n\n### Key Considerations\n\n- Preprocessing should **preserve transit shapes** (use gentle methods like `flatten()`)\n- Don't over-process - too aggressive cleaning removes real signals\n- BLS needs reasonable period and duration ranges\n- Always validate with multiple metrics (power, SNR, odd-even)\n\n## Common Issues\n\n### Issue: No clear peak\n**Causes:**\n- Transits too shallow\n- Wrong duration range\n- Period outside search range\n- Over-aggressive preprocessing\n\n**Solutions:**\n- Try wider duration range\n- Extend period search range\n- Use less aggressive `flatten()` window\n- Check raw data for transits\n\n### Issue: Period is 2× or 0.5× expected\n**Causes:**\n- Missing alternating transits\n- Data gaps\n- Period aliasing\n\n**Solutions:**\n- Check both periods manually\n- Examine odd-even statistics\n- Look at phase-folded plots for both periods\n\n### Issue: High odd-even mismatch\n**Cause:**\n- Not a planetary transit\n- Eclipsing binary\n- Instrumental artifact\n\n**Solution:**\n- Check `stats['depth_odd']` vs `stats['depth_even']`\n- May not be a transiting planet\n\n## Dependencies\n\n```bash\npip install astropy numpy matplotlib\n# Optional: lightkurve for preprocessing\npip install lightkurve\n```\n\n## References\n\n### Official Documentation\n- [Astropy BLS Documentation](https:\u002F\u002Fdocs.astropy.org\u002Fen\u002Fstable\u002Ftimeseries\u002Fbls.html)\n- [Astropy Time Series Guide](https:\u002F\u002Fdocs.astropy.org\u002Fen\u002Fstable\u002Ftimeseries\u002F)\n\n### Key Papers\n- **Kovács, Zucker, & Mazeh (2002)**: Original BLS paper - [A&A 391, 369](https:\u002F\u002Farxiv.org\u002Fabs\u002Fastro-ph\u002F0206099)\n- **Hartman & Bakos (2016)**: VARTOOLS implementation - [A&C 17, 1](https:\u002F\u002Farxiv.org\u002Fabs\u002F1605.06811)\n\n### Related Resources\n- [Lightkurve Tutorials](https:\u002F\u002Flightkurve.github.io\u002Flightkurve\u002Ftutorials\u002F)\n- [TLS GitHub](https:\u002F\u002Fgithub.com\u002Fhippke\u002Ftls) - Alternative transit detection method\n\n## When to Use BLS\n\n**Use BLS when:**\n- You want a fast, built-in solution\n- You need detailed validation statistics (`compute_stats`)\n- Working within the Astropy ecosystem\n- You want fine control over period grid\n\n**Use TLS when:**\n- Maximum sensitivity is critical\n- Dealing with grazing or partial transits\n- Want automatic robust period grid\n- Prefer more sophisticated transit models\n\n**Use Lomb-Scargle when:**\n- Searching for general periodic signals (not specifically transits)\n- Detecting stellar rotation, pulsation\n- Initial exploration of periodicity\n\nFor exoplanet detection, both BLS and TLS are valid choices. Try both and compare results!\n","# Box Least Squares (BLS) Periodogram\n\nThe Box Least Squares (BLS) periodogram is a statistical tool for detecting transiting exoplanets and eclipsing binaries in photometric time series data. BLS models a transit as a periodic upside-down top hat (box shape) and finds the period, duration, depth, and reference time that best fit the data.\n\n## Overview\n\nBLS is built into Astropy and provides an alternative to Transit Least Squares (TLS). Both search for transits, but with different implementations and performance characteristics.\n\n**Key parameters BLS searches for:**\n- Period (orbital period)\n- Duration (transit duration)\n- Depth (how much flux drops during transit)\n- Reference time (mid-transit time of first transit)\n\n## Installation\n\nBLS is part of Astropy:\n\n```bash\npip install astropy\n```\n\n## Basic Usage\n\n```python\nimport numpy as np\nimport astropy.units as u\nfrom astropy.timeseries import BoxLeastSquares\n\n# Prepare data\n# time, flux, and flux_err should be numpy arrays or Quantities\nt = time * u.day  # Add units if not already present\ny = flux\ndy = flux_err  # Optional but recommended\n\n# Create BLS object\nmodel = BoxLeastSquares(t, y, dy=dy)\n\n# Automatic period search with specified duration\nduration = 0.2 * u.day  # Expected transit duration\nperiodogram = model.autopower(duration)\n\n# Extract results\nbest_period = periodogram.period[np.argmax(periodogram.power)]\nprint(f\"Best period: {best_period:.5f}\")\n```\n\n## Using autopower vs power\n\n### autopower: Automatic Period Grid\n\nRecommended for initial searches. Automatically determines appropriate period grid:\n\n```python\n# Specify duration (or multiple durations)\nduration = 0.2 * u.day\nperiodogram = model.autopower(duration)\n\n# Or search multiple durations\ndurations = [0.1, 0.15, 0.2, 0.25] * u.day\nperiodogram = model.autopower(durations)\n```\n\n### power: Custom Period Grid\n\nFor more control over the search:\n\n```python\n# Define custom period grid\nperiods = np.linspace(2.0, 10.0, 1000) * u.day\nduration = 0.2 * u.day\n\nperiodogram = model.power(periods, duration)\n```\n\n**Warning**: Period grid quality matters! Too coarse and you'll miss the true period.\n\n## Objective Functions\n\nBLS supports two objective functions:\n\n### 1. Log Likelihood (default)\n\nMaximizes the statistical likelihood of the model fit:\n\n```python\nperiodogram = model.autopower(0.2 * u.day, objective='likelihood')\n```\n\n### 2. Signal-to-Noise Ratio (SNR)\n\nUses the SNR with which the transit depth is measured:\n\n```python\nperiodogram = model.autopower(0.2 * u.day, objective='snr')\n```\n\nThe SNR objective can improve reliability in the presence of correlated noise.\n\n## Complete Example\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport astropy.units as u\nfrom astropy.timeseries import BoxLeastSquares\n\n# Load and prepare data\ndata = np.loadtxt('light_curve.txt')\ntime = data[:, 0] * u.day\nflux = data[:, 1]\nflux_err = data[:, 3]\n\n# Create BLS model\nmodel = BoxLeastSquares(time, flux, dy=flux_err)\n\n# Run BLS with automatic period grid\n# Try multiple durations to find best fit\ndurations = np.linspace(0.05, 0.3, 10) * u.day\nperiodogram = model.autopower(durations, objective='likelihood')\n\n# Find peak\nmax_power_idx = np.argmax(periodogram.power)\nbest_period = periodogram.period[max_power_idx]\nbest_duration = periodogram.duration[max_power_idx]\nbest_t0 = periodogram.transit_time[max_power_idx]\nmax_power = periodogram.power[max_power_idx]\n\nprint(f\"Period: {best_period:.5f}\")\nprint(f\"Duration: {best_duration:.5f}\")\nprint(f\"T0: {best_t0:.5f}\")\nprint(f\"Power: {max_power:.2f}\")\n\n# Plot periodogram\nimport matplotlib.pyplot as plt\nplt.plot(periodogram.period, periodogram.power)\nplt.xlabel('Period [days]')\nplt.ylabel('BLS Power')\nplt.show()\n```\n\n## Peak Statistics for Validation\n\nUse `compute_stats()` to calculate detailed statistics about a candidate transit:\n\n```python\n# Get statistics for the best period\nstats = model.compute_stats(\n    periodogram.period[max_power_idx],\n    periodogram.duration[max_power_idx],\n    periodogram.transit_time[max_power_idx]\n)\n\n# Key statistics for validation\nprint(f\"Depth: {stats['depth']:.6f}\")\nprint(f\"Depth uncertainty: {stats['depth_err']:.6f}\")\nprint(f\"SNR: {stats['depth_snr']:.2f}\")\nprint(f\"Odd\u002FEven mismatch: {stats['depth_odd'] - stats['depth_even']:.6f}\")\nprint(f\"Number of transits: {stats['transit_count']}\")\n\n# Check for false positives\nif abs(stats['depth_odd'] - stats['depth_even']) > 3 * stats['depth_err']:\n    print(\"Warning: Significant odd-even mismatch - may not be planetary\")\n```\n\n**Validation criteria:**\n- **High depth SNR (>7)**: Strong signal\n- **Low odd-even mismatch**: Consistent transit depth\n- **Multiple transits observed**: More reliable\n- **Reasonable duration**: Not too long or too short for orbit\n\n## Period Grid Sensitivity\n\nThe BLS periodogram is sensitive to period grid spacing. The `autoperiod()` method provides a conservative grid:\n\n```python\n# Get automatic period grid\nperiods = model.autoperiod(durations, minimum_period=1*u.day, maximum_period=10*u.day)\nprint(f\"Period grid has {len(periods)} points\")\n\n# Use this grid with power()\nperiodogram = model.power(periods, durations)\n```\n\n**Tips:**\n- Use `autopower()` for initial searches\n- Use finer grids around promising candidates\n- Period grid quality matters more for BLS than for Lomb-Scargle\n\n## Comparing BLS Results\n\nTo compare multiple peaks:\n\n```python\n# Find top 5 peaks\nsorted_idx = np.argsort(periodogram.power)[::-1]\ntop_5 = sorted_idx[:5]\n\nprint(\"Top 5 candidates:\")\nfor i, idx in enumerate(top_5):\n    period = periodogram.period[idx]\n    power = periodogram.power[idx]\n    duration = periodogram.duration[idx]\n\n    stats = model.compute_stats(period, duration, periodogram.transit_time[idx])\n\n    print(f\"\\n{i+1}. Period: {period:.5f}\")\n    print(f\"   Power: {power:.2f}\")\n    print(f\"   Duration: {duration:.5f}\")\n    print(f\"   SNR: {stats['depth_snr']:.2f}\")\n    print(f\"   Transits: {stats['transit_count']}\")\n```\n\n## Phase-Folded Light Curve\n\nAfter finding a candidate, phase-fold to visualize the transit:\n\n```python\n# Fold the light curve at the best period\nphase = ((time.value - best_t0.value) % best_period.value) \u002F best_period.value\n\n# Plot to verify transit shape\nimport matplotlib.pyplot as plt\nplt.plot(phase, flux, '.')\nplt.xlabel('Phase')\nplt.ylabel('Flux')\nplt.show()\n```\n\n## BLS vs Transit Least Squares (TLS)\n\nBoth methods search for transits, but differ in implementation:\n\n### Box Least Squares (BLS)\n**Pros:**\n- Built into Astropy (no extra install)\n- Fast for targeted searches\n- Good statistical framework\n- compute_stats() provides detailed validation\n\n**Cons:**\n- Simpler transit model (box shape)\n- Requires careful period grid setup\n- May be less sensitive to grazing transits\n\n### Transit Least Squares (TLS)\n**Pros:**\n- More sophisticated transit models\n- Generally more sensitive\n- Better handles grazing transits\n- Automatic period grid is more robust\n\n**Cons:**\n- Requires separate package\n- Slower for very long time series\n- Less control over transit shape\n\n**Recommendation**: Try both! TLS is often more sensitive, but BLS is faster and built-in.\n\n## Integration with Preprocessing\n\nBLS works best with preprocessed data. Consider this pipeline:\n\n1. **Quality filtering**: Remove flagged data points\n2. **Outlier removal**: Clean obvious artifacts\n3. **Detrending**: Remove stellar variability (rotation, trends)\n4. **BLS search**: Run period search on cleaned data\n5. **Validation**: Use `compute_stats()` to check candidate quality\n\n### Key Considerations\n\n- Preprocessing should **preserve transit shapes** (use gentle methods like `flatten()`)\n- Don't over-process - too aggressive cleaning removes real signals\n- BLS needs reasonable period and duration ranges\n- Always validate with multiple metrics (power, SNR, odd-even)\n\n## Common Issues\n\n### Issue: No clear peak\n**Causes:**\n- Transits too shallow\n- Wrong duration range\n- Period outside search range\n- Over-aggressive preprocessing\n\n**Solutions:**\n- Try wider duration range\n- Extend period search range\n- Use less aggressive `flatten()` window\n- Check raw data for transits\n\n### Issue: Period is 2× or 0.5× expected\n**Causes:**\n- Missing alternating transits\n- Data gaps\n- Period aliasing\n\n**Solutions:**\n- Check both periods manually\n- Examine odd-even statistics\n- Look at phase-folded plots for both periods\n\n### Issue: High odd-even mismatch\n**Cause:**\n- Not a planetary transit\n- Eclipsing binary\n- Instrumental artifact\n\n**Solution:**\n- Check `stats['depth_odd']` vs `stats['depth_even']`\n- May not be a transiting planet\n\n## Dependencies\n\n```bash\npip install astropy numpy matplotlib\n# Optional: lightkurve for preprocessing\npip install lightkurve\n```\n\n## References\n\n### Official Documentation\n- [Astropy BLS Documentation](https:\u002F\u002Fdocs.astropy.org\u002Fen\u002Fstable\u002Ftimeseries\u002Fbls.html)\n- [Astropy Time Series Guide](https:\u002F\u002Fdocs.astropy.org\u002Fen\u002Fstable\u002Ftimeseries\u002F)\n\n### Key Papers\n- **Kovács, Zucker, & Mazeh (2002)**: Original BLS paper - [A&A 391, 369](https:\u002F\u002Farxiv.org\u002Fabs\u002Fastro-ph\u002F0206099)\n- **Hartman & Bakos (2016)**: VARTOOLS implementation - [A&C 17, 1](https:\u002F\u002Farxiv.org\u002Fabs\u002F1605.06811)\n\n### Related Resources\n- [Lightkurve Tutorials](https:\u002F\u002Flightkurve.github.io\u002Flightkurve\u002Ftutorials\u002F)\n- [TLS GitHub](https:\u002F\u002Fgithub.com\u002Fhippke\u002Ftls) - Alternative transit detection method\n\n## When to Use BLS\n\n**Use BLS when:**\n- You want a fast, built-in solution\n- You need detailed validation statistics (`compute_stats`)\n- Working within the Astropy ecosystem\n- You want fine control over period grid\n\n**Use TLS when:**\n- Maximum sensitivity is critical\n- Dealing with grazing or partial transits\n- Want automatic robust period grid\n- Prefer more sophisticated transit models\n\n**Use Lomb-Scargle when:**\n- Searching for general periodic signals (not specifically transits)\n- Detecting stellar rotation, pulsation\n- Initial exploration of periodicity\n\nFor exoplanet detection, both BLS and TLS are valid choices. Try both and compare results!\n",{"name":5,"description":7},"main","cdcb6d230f3b15c3c33f8a2bdd16439f43602cbe","evaluation\u002Fresults\u002FSkillGrad\u002Ftasks\u002Fexoplanet-detection-period\u002Fskills\u002Fbox-least-squares",1,"https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark","https:\u002F\u002Fgithub.com\u002Flinyouxue","2026-11-14 20:28:35",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add linyouxue\u002Fskill-repair-benchmark --skill box-least-squares",{"tool":37,"command":38},"bunx","bunx skills add linyouxue\u002Fskill-repair-benchmark --skill box-least-squares",{"tool":40,"command":41},"pnpm","pnpm dlx skills add linyouxue\u002Fskill-repair-benchmark --skill box-least-squares","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FSkillGrad\u002Ftasks\u002Fexoplanet-detection-period\u002Fskills\u002Fbox-least-squares\u002FSKILL.md",true,[],[46,53,60,67,72,77],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7E1HGVRY73NBJ022CJG13X6","video-frame-extraction","Extract frames from video files and save them as images using OpenCV","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7E1HAG5R7CJ9C8NYJS771MB","openai-vision","Analyze images and multi-frame sequences using OpenAI GPT vision models","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7E1H7DADKB6QBWKC2KQ63SZ","image-ocr","Extract text content from images using Tesseract OCR via Python, including structured field extraction from receipts and forms","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[],{"skillNo":68,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7E1H0WBNT43TENGQY7AVZHD","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":73,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7E1GTC7D4N4Q2EF03875J9E","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":78,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E1GQ92CWFMGH53KSSE4WER","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[]]