PHPackages                             amelaye/biotools - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. amelaye/biotools

ActiveSymfony-bundle

amelaye/biotools
================

Symfony forms and services for the BioPHP minitools

v1.0.0(today)02↑2900%[1 issues](https://github.com/amelaye/biotools/issues)GPL-2.0-onlyPHPPHP ^8.2CI failing

Since Aug 24Pushed todayCompare

[ Source](https://github.com/amelaye/biotools)[ Packagist](https://packagist.org/packages/amelaye/biotools)[ Docs](https://www.amelayes-biophp.net)[ RSS](/packages/amelaye-biotools/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (9)Versions (3)Used By (0)

BioTools
========

[](#biotools)

Symfony forms and business logic for the [BioPHP minitools](http://www.biophp.org/resources.php?mode=minitools).

This package ships the **reusable half** of the minitools: a Symfony form type and a service (manager) for each tool. It deliberately contains **no controller and no template** — the consuming application wires the forms into its own controllers and renders them with its own views.

All biological reference data (nucleotides, amino acids, codon tables, restriction endonucleases, vendors…) comes from [`amelaye/biophp`](https://github.com/amelaye/biophp), so nothing is duplicated here.

Requirements
------------

[](#requirements)

- PHP 8.2+
- Symfony 7.4
- `amelaye/biophp`, which itself needs **JMSSerializerBundle** and **DoctrineBundle**registered in the host application, and network access to `api.amelayes-biophp.net`(the API adapters fetch reference data over HTTP)

Installation
------------

[](#installation)

```
composer require amelaye/biotools
```

Register both bundles in `config/bundles.php`:

```
return [
    // ...
    JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true],
    Amelaye\BioPHP\AmelayeBioPHPBundle::class => ['all' => true],
    Amelaye\BioTools\AmelayeBioToolsBundle::class => ['all' => true],
];
```

Usage
-----

[](#usage)

Every form type and every manager is available for autowiring. A controller only has to build the form and delegate to the manager:

```
use Amelaye\BioTools\Form\FindPalindromesType;
use Amelaye\BioTools\Service\FindPalindromeManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MinitoolsController extends AbstractController
{
    #[Route('/minitools/find-palindromes', name: 'find_palindromes')]
    public function findPalindromes(Request $request, FindPalindromeManager $manager): Response
    {
        $palindromes = [];
        $form = $this->createForm(FindPalindromesType::class);

        if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
            $data = $form->getData();
            $palindromes = $manager->findPalindromicSeqs($data['seq'], $data['min'], $data['max']);
        }

        return $this->render('find_palindromes.html.twig', [
            'form' => $form->createView(),
            'palindromes' => $palindromes,
        ]);
    }
}
```

Available tools
---------------

[](#available-tools)

ToolForm typeManagerChaos Game Representation of DNA`ChaosGameRepresentationType``ChaosGameRepresentationManager`Oligonucleotide frequency based distance`DistanceAmongSequencesType``DistanceAmongSequencesManager`DNA to protein translation`DnaToProteinType``DnaToProteinManager`Palindromic sequences finder`FindPalindromesType``FindPalindromeManager`GC content finder`FastaUploaderType``FastaUploaderManager`Melting temperature (Tm)`MeltingTemperatureType``MeltingTemperatureManager`Microarray data analysis`MicroArrayDataAnalysisType``MicroarrayAnalysisAdaptiveManager`Microsatellite repeats finder`MicrosatelliteRepeatsFinderType``MicrosatelliteRepeatsFinderManager`Nucleotide / oligonucleotide frequency`OligoNucleotideFrequencyType`*(biophp `OligosManager`)*PCR amplification`PcrAmplificationType``PcrAmplificationManager`Protein sequence properties`ProteinPropertiesType``ProteinPropertiesManager`Protein to DNA reverse translation`ProteinToDnaType``ProteinToDnaManager`Random sequences`RandomSequencesType``RandomSequencesManager`Reduced alphabets for proteins`ReduceAlphabetType``ReduceProteinAlphabetManager`Restriction enzyme digest of DNA`RestrictionEnzymeDigestType``RestrictionDigestManager`Alignment of two sequences`SequenceAlignmentType``SequenceAlignmentManager`DNA sequence manipulation / properties`SequenceManipulationType``SequenceManipulationAndDataManager`GC-, AT-, KETO- and oligo-skews`SkewsType``SkewsManager`Formula functions`FormulasType``FormulasManager`The upstream *Reader (fasta/gff)* minitool is not covered: it is a parsing library rather than a form-driven tool, so it belongs with the other parsers in `amelaye/biophp`. Its original source is kept in [`legacy/`](legacy/).

Generated graphics
------------------

[](#generated-graphics)

Four tools produce a drawing: Chaos Game Representation (CGR and FCGR), skews and the distance dendrogram. They are rendered as **SVG** — vector, so crisp at any zoom, with real fonts and styleable with CSS — and written into the directory configured under `nucleotids_graphs.path_graphs`. Each method **returns the path it wrote**; the file name carries a random suffix so two concurrent requests cannot overwrite each other's graphic:

```
$sFile = $chaosGameRepresentationManager->createCGRImage($sName, $sSequence, 300);
// /var/www/created_files/CGR_9f3a1c0e.svg

$aResult = $chaosGameRepresentationManager->createFCGRImage(...);
// ['map' => [...image map coordinates...], 'file' => '.../FCGR_1b7d4a22.svg']
```

The directory must exist and be writable, otherwise an exception is thrown — the previous GD implementation failed silently and returned a name for a file it had not written.

Configuration
-------------

[](#configuration)

The bundle works without configuration. Two data sets can be overridden:

```
# config/packages/amelaye_biotools.yaml
amelaye_biotools:
    nucleotids_graphs:
        path_graphs: 'created_files/'   # where generated PNG images are written
        # ... geometry and file names for CGR/FCGR and skew images
    protein_colors:
        # colour palettes for reduced protein alphabets (20, Murphy15, Li10, …)
```

Defaults live in [`Resources/config/defaults.php`](Resources/config/defaults.php).

Divergences from the original minitools
---------------------------------------

[](#divergences-from-the-original-minitools)

Two formulas are mathematically wrong in the upstream biophp.org code and have been corrected here (each divergence is commented in `Service/FormulasManager.php`):

- **Centigrade to Fahrenheit** — the original applies `32 + (C x 0.555)`; `0.555`(~5/9) is the Fahrenheit-to-Centigrade factor, used in the wrong direction. It returns 87.5 °F for 100 °C instead of 212 °F. Corrected to `32 + (C x 1.8)`.
- **Millibars to inches of mercury** — the original applies `mbar x 0.0394`, the millimetre-to-inch factor, overstating the result by about 33%. Corrected to `mbar x 0.02953`.

Legacy code
-----------

[](#legacy-code)

The original single-file minitools by Joseba Bikandi are kept verbatim in [`legacy/`](legacy/) for reference and GPL continuity. See [`legacy/README.md`](legacy/README.md) for provenance and the mapping to the modernised classes.

Tests
-----

[](#tests)

```
composer install
vendor/bin/phpunit
```

Licence
-------

[](#licence)

GNU GPL v2 only — the licence of the original BioPHP minitools.

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance100

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5f0173e29d24f2ee6964cd206683b691cf4d36450120740406c43416ab172039?d=identicon)[amelaye](/maintainers/amelaye)

---

Top Contributors

[![amelaye](https://avatars.githubusercontent.com/u/9379556?v=4)](https://github.com/amelaye "amelaye (17 commits)")

---

Tags

phpsymfonyformbioinformaticsbiology

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/amelaye-biotools/health.svg)

```
[![Health](https://phpackages.com/badges/amelaye-biotools/health.svg)](https://phpackages.com/packages/amelaye-biotools)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k18.3M432](/packages/easycorp-easyadmin-bundle)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k6.0M780](/packages/sylius-sylius)[chameleon-system/chameleon-base

The Chameleon System core.

1029.4k6](/packages/chameleon-system-chameleon-base)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.8M683](/packages/shopware-core)[contao/core-bundle

Contao Open Source CMS

1301.7M3.1k](/packages/contao-core-bundle)[symfony/ux-cropperjs

Cropper.js integration for Symfony

19376.7k3](/packages/symfony-ux-cropperjs)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
