Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

MPD - Multiplex Primer Design

This package assists in the automation of multiplex primer design. This package was designed for the companion MPD program, which you can find here (mpd-c).


Please cite our paper if you use MPD in your work. Thanks.


  • Compiling the c binaries. Follow the instructions here: mpd-c.
  • Clone the perl MPD package (e.g., git clone
  • There is a pre-build tarball of the MPD package suitable for installation with cpanm (i.e., App::cpanminus). To install, cpanm MPD.tar.gz.
    • The tarball was created with Dist::Zilla. Otherwise, Dist::Zilla is not needed.
    • Run tests within the directory like so: prove -l or prove -lv t/some_test.t
    • Coding style and tidying is kept in .perltidyrc (Perl::Tidy) and tidyall -a (Code::Tidy) is used to tidy code before committing.
    • If you want to install Dist::Zilla, please see dagolden's distribution and Dist::Zilla on metacpan.
  • See examples scripts in the ex directory or look at the tests, specifically, t/05-Mpd.t to see how to build and use the MPD object.

Optional features

  • The MPD package can be made to use the standalone binary for isPcr by Jim Kent. If you are not familiar with isPcr here is a web version which has details about obtaining the source code to build the stand alone binary.
  • If you use the isPcr you will need the 2bit genome of the organism.


From the ex (example) directory:

BedFile: ex/markers.txt.bed      # TARGET LIST
isPcrBinary: isPcr               # isPcr binary, optional
TwoBitFile: hg38.2bit            # TwoBitFile, optional (needed for isPcr)
MpdBinary: ../mpd-c/build/mpd    # mpd binary (see
MpdIdx: hg38.d14.sdx             # HASHED GENOME, see mpd-c setup
dbSnpIdx: ds_flat.sdx            # LIST of FLAT DBSNP FILES, see mpd-c setup

CoverageThreshold: 0.8           # The definition of "covered"
PrimerSizeMin: 17                # Minimum primer size
PrimerSizeMax: 27                # Maximum primer size
PadSize: 60                      # The region flanking the target to search for primers
PoolMax: 10                      # Maximum number of primers in a pool
PoolMin: 5                       # Minimum number of primers in a pool

AmpSizeMax: 260                  # Initial maximum amplicon size
AmpSizeMin: 230                  # Initial minimum amplicon size
TmMax: 62                        # Initial maximum Tm
TmMin: 57                        # Initial minimum Tm
GcMax: 0.7                       # Initial maximum GC
GcMin: 0.3                       # Initial minimum GC

Iter: 2                          # Number of iterations to try to find primers
IncrTm: 1                        # degrees Celsius to widen the Min/Max Tm on successive trial
IncrTmStep: 1                    # degrees Celsius to widen the Tm step (within mpd-c) on successive trial
IncrAmpSize: 10                  # number of base pairs to widen the acceptable amplicon max/min on successive trial
  • Create an MPD object, and call the RunAll() method.


my $m = MPD->new_with_config(
    configfile  => $config_file,
    BedFile     => 'target_regions.bed',
    OutExt      => 'myGreatPrimerPools',
    OutDir      => '/temp/',
    InitTmMin   => 58,
    InitTmMax   => 61,
    PoolMin     => 5,
    Debug       => 0,
    IterMax     => 2,
    RunIsPcr    => undef, # set to something perl evaluates to true if you want isPcr to check the in-silico PCR
    Act         => 1,     # set to something perl evaluates to true if you want the program to execute the mpd-c binary
    ProjectName => $out_ext,
    FwdAdapter  => '',    # your fwd adapter
    RevAdapter  => '',    # your rev adapter
    Offset      => 0,     # when printing pools where do we start?
    Randomize   => 1,     # should we shuffle the pools so they are in random order?
$m->RunAll();             # run the design.
  • Feel free to email the authors with questions or suggestions.


Multiplex Primer Design




No packages published