{"id":24206414,"url":"https://github.com/openscilab/opr","last_synced_at":"2025-09-22T05:32:23.987Z","repository":{"id":258657766,"uuid":"748979825","full_name":"openscilab/opr","owner":"openscilab","description":"OPR: Optimized Primer","archived":false,"fork":false,"pushed_at":"2025-01-09T13:37:32.000Z","size":92,"stargazers_count":7,"open_issues_count":6,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-09T14:32:48.766Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openscilab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-27T08:11:26.000Z","updated_at":"2025-01-09T13:17:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c3a4777-ae67-46fb-acff-24cb4646d61d","html_url":"https://github.com/openscilab/opr","commit_stats":null,"previous_names":["openscilab/opr"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscilab%2Fopr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscilab%2Fopr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscilab%2Fopr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscilab%2Fopr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openscilab","download_url":"https://codeload.github.com/openscilab/opr/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233828071,"owners_count":18736577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-14T00:32:01.103Z","updated_at":"2025-09-22T05:32:23.978Z","avatar_url":"https://github.com/openscilab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/openscilab/opr/raw/main/otherfiles/logo.png\" width=\"250\"\u003e\n    \u003ch1\u003eOPR: Optimized Primer\u003c/h1\u003e\n    \u003cbr/\u003e\n    \u003ca href=\"https://codecov.io/gh/openscilab/opr\"\u003e\u003cimg src=\"https://codecov.io/gh/openscilab/opr/branch/dev/graph/badge.svg\" alt=\"Codecov\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://badge.fury.io/py/opr\"\u003e\u003cimg src=\"https://badge.fury.io/py/opr.svg\" alt=\"PyPI version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.python.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/built%20with-Python3-green.svg\" alt=\"built with Python3\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/8mBspwXqcA\"\u003e\u003cimg src=\"https://img.shields.io/discord/1064533716615049236.svg\" alt=\"Discord Channel\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n----------\n\n\n## Overview\n\u003cp align=\"justify\"\u003e\n\u003cb\u003eOPR\u003c/b\u003e is an open-source Python package designed to simplify and streamline primer design and analysis for biologists and bioinformaticians. \u003cb\u003eOPR\u003c/b\u003e enables users to design, validate, and optimize primers with ease, catering to a wide range of applications such as PCR, qPCR, and sequencing. With a focus on user-friendliness and efficiency, \u003cb\u003eOPR\u003c/b\u003e aims to bridge the gap between biological research and computational tools, making primer-related workflows faster and more reliable.\n\u003c/p\u003e\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003ePyPI Counter\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://pepy.tech/projects/opr\"\u003e\n                \u003cimg src=\"https://static.pepy.tech/badge/opr\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003eGithub Stars\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://github.com/openscilab/opr\"\u003e\n                \u003cimg src=\"https://img.shields.io/github/stars/openscilab/opr.svg?style=social\u0026label=Stars\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\u003ctable\u003e\n    \u003ctr\u003e \n        \u003ctd align=\"center\"\u003eBranch\u003c/td\u003e\n        \u003ctd align=\"center\"\u003emain\u003c/td\u003e\n        \u003ctd align=\"center\"\u003edev\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003eCI\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003cimg src=\"https://github.com/openscilab/opr/actions/workflows/test.yml/badge.svg?branch=main\"\u003e\n        \u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003cimg src=\"https://github.com/openscilab/opr/actions/workflows/test.yml/badge.svg?branch=dev\"\u003e\n            \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\u003ctable\u003e\n    \u003ctr\u003e \n        \u003ctd align=\"center\"\u003eCode Quality\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://app.codacy.com/gh/openscilab/opr/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade\"\u003e\u003cimg src=\"https://app.codacy.com/project/badge/Grade/0a819f6eb6ae483695ad4934eff42df9\"\u003e\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.codefactor.io/repository/github/openscilab/opr\"\u003e\u003cimg src=\"https://www.codefactor.io/repository/github/openscilab/opr/badge\" alt=\"CodeFactor\"\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n## Installation\n\n### PyPI\n- Check [Python Packaging User Guide](https://packaging.python.org/installing/)\n- Run `pip install opr==0.5`\n### Source code\n- Download [Version 0.5](https://github.com/openscilab/opr/archive/v0.5.zip) or [Latest Source](https://github.com/openscilab/opr/archive/dev.zip)\n- Run `pip install .`\n\n## Usage\n\n### Load\n```pycon\n\u003e\u003e\u003e from opr import Primer, MeltingTemperature\n\u003e\u003e\u003e primer1 = Primer(sequence=\"CTGGAGGACGGAAGAGGAAGTAA\", salt=50)\n\u003e\u003e\u003e primer1.sequence\n'CTGGAGGACGGAAGAGGAAGTAA'\n```\n\n### Properties\n\n#### Molecular weight\n```pycon\n\u003e\u003e\u003e primer1.molecular_weight\n7235.79\n```\n#### GC content\n```pycon\n\u003e\u003e\u003e primer1.gc_content\n0.5217391304347826\n```\n#### GC clamp\n```pycon\n\u003e\u003e\u003e primer1.gc_clamp\n1\n```\n#### Single run length\n```pycon\n\u003e\u003e\u003e primer1.single_runs\n{'A': 2, 'T': 1, 'C': 1, 'G': 2}\n```\n#### Double run length\n```pycon\n\u003e\u003e\u003e primer1.double_runs\n{'TA': 1, 'TC': 0, 'TG': 1, 'AT': 0, 'AC': 1, 'AG': 2, 'CT': 1, 'CA': 0, 'CG': 1, 'GT': 1, 'GA': 1, 'GC': 0}\n```\n#### Repeats\n```pycon\n\u003e\u003e\u003e primer1.repeats(sequence=\"GG\", consecutive=False)\n4\n```\n```pycon\n\u003e\u003e\u003e primer1.repeats(sequence=\"GG\", consecutive=True)\n1\n```\n#### Melting temperature\n##### Basic\n```pycon\n\u003e\u003e\u003e primer1.melting_temperature()\n57.056521739130446\n\u003e\u003e\u003e primer1.melting_temperature(MeltingTemperature.BASIC)\n57.056521739130446\n```\n##### Salt-adjusted\n```pycon\n\u003e\u003e\u003e primer1.melting_temperature(MeltingTemperature.SALT_ADJUSTED)\n64.64203250676053\n```\n##### Nearest neighbor\n```pycon\n\u003e\u003e\u003e primer1.melting_temperature(MeltingTemperature.NEAREST_NEIGHBOR)\n66.42693710590595\n```\n#### Thermodynamic Constants\n##### Enthalpy change (ΔH)\n```pycon\n\u003e\u003e\u003e primer1.delta_h\n-174.99999999999997\n```\n##### Entropy change (ΔS)\n```pycon\n\u003e\u003e\u003e primer1.delta_s\n-0.44210000000000005\n```\n#### Extinction Coefficient at 260 nm (E260)\n```pycon\n\u003e\u003e\u003e primer1.E260\n248.40000000000006\n```\n### Operations\n\n#### Reverse\n```pycon\n\u003e\u003e\u003e primer1_reversed = primer1.reverse()\n\u003e\u003e\u003e primer1_reversed.sequence\n'AATGAAGGAGAAGGCAGGAGGTC'\n```\n#### Complement\n```pycon\n\u003e\u003e\u003e primer1_complemented = primer1.complement()\n\u003e\u003e\u003e primer1_complemented.sequence\n'GACCTCCTGCCTTCTCCTTCATT'\n```\n\n#### To RNA\n```pycon\n\u003e\u003e\u003e oprimer_rna = oprimer.to_rna()\n\u003e\u003e\u003e oprimer_rna\n'CUGGAGGACGGAAGAGGAAGUAA'\n```\n\n#### To protein\n```pycon\n\u003e\u003e\u003e oprimer_protein = oprimer.to_protein(frame=3)\n\u003e\u003e\u003e oprimer_protein\n'GGRKRK*'\n\u003e\u003e\u003e oprimer_protein_aa3 = oprimer.to_protein(frame=3, multi_letter=True)\n\u003e\u003e\u003e oprimer_protein_aa3\n'Gly-Gly-Arg-Lys-Arg-Lys-Stop'\n```\n\nℹ️ When the `frame=3` it starts from the third nucleotide. The list of codons is then [`GGA`(G), `GGA`(G), `CGG`(R), `AAG`(K), `AGG`(R), `AAG`(K), `TAA`(STOP)]\n\nℹ️ Stop signal is marked as `*` in OPR\n\n## Issues \u0026 bug reports\n\nJust fill an issue and describe it. We'll check it ASAP! or send an email to [opr@openscilab.com](mailto:opr@openscilab.com \"opr@openscilab.com\"). \n\n- Please complete the issue template\n \nYou can also join our discord server\n\n\u003ca href=\"https://discord.gg/8mBspwXqcA\"\u003e\n  \u003cimg src=\"https://img.shields.io/discord/1064533716615049236.svg?style=for-the-badge\" alt=\"Discord Channel\"\u003e\n\u003c/a\u003e\n\n## References\n\n\u003cblockquote\u003e1- \u003ca href=\"http://biotools.nubic.northwestern.edu/OligoCalc.html\"\u003eOligo Calc: Oligonucleotide Properties Calculator\u003c/a\u003e\u003c/blockquote\u003e\n\n\u003cblockquote\u003e2- Marmur, Julius, and Paul Doty. \"Determination of the base composition of deoxyribonucleic acid from its thermal denaturation temperature.\" \u003ci\u003eJournal of molecular biology\u003c/i\u003e 5.1 (1962): 109-118.\u003c/blockquote\u003e\n\n\u003cblockquote\u003e3- Wallace, R. Bruce, et al. \"Hybridization of synthetic oligodeoxyribonucleotides to Φ X 174 DNA: the effect of single base pair mismatch.\" \u003ci\u003eNucleic acids research\u003c/i\u003e 6.11 (1979): 3543-3558.\u003c/blockquote\u003e\n\n\u003cblockquote\u003e4- Panjkovich, Alejandro, and Francisco Melo. \"Comparison of different melting temperature calculation methods for short DNA sequences.\" \u003ci\u003eBioinformatics 21.6\u003c/i\u003e (2005): 711-722.\u003c/blockquote\u003e\n\n\n## Show your support\n\n\n### Star this repo\n\nGive a ⭐️ if this project helped you!\n\n### Donate to our project\nIf you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .\t\t\t\n\n\u003ca href=\"https://openscilab.com/#donation\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/openscilab/opr/raw/main/otherfiles/donation.png\" height=\"90px\" width=\"270px\" alt=\"OPR Donation\"\u003e\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenscilab%2Fopr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenscilab%2Fopr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenscilab%2Fopr/lists"}