TaskOperations (RosettaScripts)

This section defines instances of the TaskOperation class hierarchy when used in the context of the Parser/RosettaScripts. They become available in the DataMap.

TaskOperation classes are used by TaskFactory to configure the behavior of PackerTask when it is generated on-demand for routines that use the "packer" to reorganize/mutate sidechains. When used by certain Movers (at present, the PackRotamersMover and its subclasses), the TaskOperations control what happens during packing, usually by restriction "masks."

Table of contents


  <ReadResfile name=rrf/>
  <ReadResfile name=rrf2 filename=resfile2/>
  <PreventRepacking name=NotBeingUsedHereButPresenceOkay/>
  <RestrictResidueToRepacking name=restrict_Y100 resnum=100/>
  <RestrictToRepacking name=rtrp/>
  <OperateOnCertainResidues name=NoPackNonProt>
    <ResidueLacksProperty property=PROTEIN/>
  <PackRotamersMover name=packrot scorefxn=sf task_operations=rrf,NoPackNonProt,rtrp,restrict_Y100/>

In the rosetta code, the TaskOperation instances are registered with and then later created by a TaskOperationFactory. The factory calls parse_tag() on the base class virtual function, with no result by default. However, some TaskOperation classes (e.g. OperateOnCertainResidues and ReadResfile above) do implement parse_tag, and therefore their behavior can be configured using additional options in the "XML"/Tag definition.

General TaskOperations

List of current TaskOperation classes in the core library (* indicates use-at-own-risk/not sufficiently tested/still under development):

Position/Identity Specification


Read a resfile. If a filename is given, read from that file. Otherwise, read the file specified on the commandline with -packing:resfile.

 <ReadResfile name=(&string) filename=(&string) />


Lookup the resfile in the supplied relational database. This is useful for processing different structures with different resfiles in the same protocol. The database db should have a table table_name with the following schema:

    CREATE TABLE <table_name> (
        tag TEXT,
        resfile TEXT,
        PRIMARY KEY(tag));

When this task operation is applied, it tries to look up the resfile string associated with the tag defined by


This task operation takes the following parameters:

When db_mode is "sqlite3", db is the name of the sqlite3 database file. When db_mode is "mysql", then compile with extras=mysql and supply -mysql:host, -mysql:password, and -mysql:port to the command line, then db is the name of the database on the MySQL server.


Do not allow design in a particular chain

  <RestrictChainToRepacking name=(&string) chain=(1 &int)/>


Only allow residues to repack. No design.

 <RestrictToRepacking name=(&string) />


Restrict a single residue to repacking. No design.

 <RestrictResidueToRepacking name=(&string) resnum=(0 &integer)/>


Restrict a string of comma-delimited residues to repacking. No design.

 <RestrictResiduesToRepacking name=(&string) residues=(0 &integer "," separated)/>


Do not allow repacking at all for the specified residue. Freezes residues.

<PreventRepacking name=(&string) resnum=(0 &int) />


Restrict a string of residues to repacking. No design. Use comma-delimited list of residues

 <PreventResiduesFromRepacking name=(&string) residues=(0 &integer,"," separated)/>


Do not allow disulfides to repack.

 <NoRepackDisulfides name=(&string) />


Designs in shells around a user-defined list of residues. Restricts all other residues to repacking. <DesignAround name=(&string) design_shell=(8.0 &real) resnums=(comma-delimited list) repack_shell=(8.0&Real) allow_design=(1 &bool)/>


Restrict to repack only one or both termini on the specified chain.

<RestrictToTermini chain=(1 &size) repack_n_terminus=(1 &bool) repack_c_terminus=(1 &bool) />


Design residues with selected amino acids depending on the enviroment: layer. The layer of each residue is assigned as core, boundary, or surface, which are defined by accessible surface area of mainchain + CB. If resfile is read before calling this operation, this operation is not applied for the residues defined by PIKAA. Note that this task is not ligand compatible (remove ligand prior to use).

Selected amino acid types for each layer:

Option list


Restricts to interface between two protein chains along a specified jump and with a given radius.

 <RestrictToInterface name=(&string) rb_jump=(&integer, 1) distance=(&Real, 8.0) />


Restricts the task to residues defined as interface by core/pack/task/operation/util/interface_vector_calculate.cc Calculates the residues at an interface between two protein chains or jump. The calculation is done in the following manner. First the point graph is used to find all residues within some big cutoff(CB_dist_cutoff) of residues on the other chain. For these residues near the interface, two metrics are used to decide if they are actually possible interface residues. The first metric is to itterate through all the side chain atoms in the residue of interest and check to see if their distance is less than the nearby atom cutoff (nearby_atom_cutoff), if so then they are an interface residue. If a residue does not pass that check, then two vectors are drawn, a CA-CB vector and a vector from CB to a CB atom on the neighboring chain. The dot product between these two vectors is then found and if the angle between them (vector_angle_cutoff) is less than some cutoff then they are classified as interface. The vector cannot be longer than some other distance (vector_dist_cutoff).

There are two ways of using this task, first way is to use jumps:

  <RestrictToInterfaceVector name=(& string) jump=(1 & int,int,int... ) CB_dist_cutoff=(10.0 & Real) nearby_atom_cutoff=(5.5 & Real) vector_angle_cutoff=(75.0 & Real) vector_dist_cutoff=(9.0 & Real)/>

OR you can use chains instead

  <RestrictToInterfaceVector name=(& string) chain1_num=(1 & int) chain2_num=(2 & int) CB_dist_cutoff=(10.0 & Real) nearby_atom_cutoff=(5.5 & Real) vector_angle_cutoff=(75.0 & Real) vector_dist_cutoff=(9.0 & Real)/>

Common tags, see descriptions above:


Restricts to the task that is the basis for protein-interface design.


Setup packer task based on the detect design interface settings from enzyme design.

<DetectProteinLigandInterface name=(&string) cut1=(6.0 &Real) cut2=(8.0 &Real) cut3=(10.0 &Real) cut4=(12.0 &Real) design=(1 &bool) resfile=("" &string)/>

The task will set to design all residues with a Calpha within cut1 of the ligand (specifically the last ligand), or within cut2 of the ligand, where the Calpha-Cbeta vector points toward the ligand. Those residues within cut3 or within cut4 pointing toward the ligand will be set to repack. All others will be set to be fixed. Setting design to false will turn off design at all positions.

If resfile is specified, the listed resfile will be read in the settings therein applied to the task. Any positions set to "AUTO" (and only those set to AUTO) will be subjected the detect design interface procedure as described above. Note that design=0 will turn off design even for positions where it is permitted in the resfile (use "cut1=0.0 cut2=0.0 design=1" to allow design at resfile-permitted positions while disabling design at all AUTO positions).


Ensures that catalytic residues as specified in a match/constraint file do not get designed. If no option is specified the constrained residues will be set to repack only (not design).

If the option fix_catalytic_aa=1 is set in the tag (or on the commandline), catalytic residues will be set to non-repacking.

If the option -enzdes::ex_catalytic_rot <number> is active, the extra_sd sampling for every chi angle of the catalytic residues will be according to <number>, i.e. one can selectively oversample the catalytic residues


Restrict design to user-specified residues. If resnum is left as 0, the restriction will apply throughout the pose.

 <RestrictAbsentCanonicalAAS name=(&string) resnum=(0 &integer) keep_aas=(&string) />


Restrict design to not include a residue as an possibility in the task at a position unless it is the starting residue. If resnum is left as 0, the restriction will apply throughout the pose.

 <DisallowIfNonnative name=(&string) resnum=(0 &integer) disallow_aas=(&string) />

This task is useful when you are designing in a region that has Gly and Pro and you do not want to include them at other positions that aren't already Gly or Pro.


Threads a fasta-formatted sequence onto the source pdb. target_sequence=(&string), start_res=(1&int)

and call PackRotamersMover. Notice that this only packs the threaded sequence, holding everything else constant. The target sequence can contain 'wildcard' positions that are then designed. For instance:

target_sequence="TFYxxxHFS" will thread the two specified tripeptides and allow design in the intervening tripeptide. The string "TFY HFS" has the same effect as the one above.


<JointSequence use_current=(true &bool)  use_native=(false &bool) filename=(&string) native=(&string) use_natro=(false &bool) />

Prohibit designing to residue identities that aren't found at that position in any of the listed structures:

If use_natro is true, the task operation also adds the rotamers from the native structures (use_native/native) in the rotamer library.


Restrict Design and repacking to protein residues around the defined DNA bases

<RestrictDesignToProteinDNAInterface name=(&string) dna_defs=(chain.pdb_num.base) base_only=(1, &bool) z_cutoff=(0.0, &real) />

Rotamer Specification


Reads commandline options. For example, -ex1 -ex2 (does not read resfile from command line options) This taskoperation will complain about an unimplemented method, but you can safely ignore the message.

 <InitializeFromCommandline name=(&string) />


Includes current rotamers (eg - from input pdb) in the rotamer set. These rotamers will be lost after a packing run, so they are only effective upon initial loading of a pdb!

 <IncludeCurrent name=(&string) />


During packing, extra rotamers can be used to increase sampling. Use this TaskOperation to specify for all residues at once what extra rotamers should be used. Note: The extrachi_cutoff is used to determine how many neighbors a residue must have before the extra rotamers are applied. For example of you want to apply extra rotamers to all residues, set extrachi_cutoff=0. See the Extra Rotamer Commands section on the resfile syntax and convention (http://graylab.jhu.edu/Rosetta.Developer.Documentation/all_else/d1/d97/resfiles.html) page for additional details.

 <ExtraRotamersGeneric name=(&string)
ex1=(0 &boolean) ex2=(0 &boolean) ex3=(0 &boolean) ex4=(0 &boolean)
ex1aro=(0 &boolean) ex2aro=(0 &boolean) ex1aro_exposed=(0 &boolean) ex2aro_exposed=(0 &boolean)
ex1_sample_level=(7 &Size) ex2_sample_level=(7 &Size) ex3_sample_level=(7 &Size) ex4_sample_level=(7 &Size)
ex1aro_sample_level=(7 &Size) ex2aro_sample_level=(7 &Size) ex1aro_exposed_sample_level=(7 &Size) ex2aro_exposed_sample_level=(7 &Size) 
exdna_sample_level=(7 &Size)
extrachi_cutoff=(18 &Size)/> 


Sample residue chi angles much more finely during packing. Currently hardcoded to use three 1/3 step standard deviation.

Note: This might actually need to be called as RotamerExplosionCreator in the xml

 <RotamerExplosionCreator name=(&string) resnum=(&Integer) chi=(&Integer) />


Prevent to use the rotamers of PHE, TYR and HIS that have chi2 far from 90.


Using a library of protein-ligand interactions, identify possible native-like interactions to the ligand and add those rotamers to the packer, possibly with a bonus.

Required command line flags:


<AddLigandMotifRotamers name=(&string)/>

Since it only makes sense to run AddLigandMotifRotamers once (it takes a very long time), I have not made the options parseable. I can do that if there's interest--the code would take a minute--but I can't see an advantage. You can however read in multiple weight files in order to do motif weight ramping. -Matt

Packer Behavior Modification


Specifically upweight the strength of the protein-ligand interaction energies by a given factor.

<ProteinLigandInterfaceUpweighter name=(&string) interface_weight=(1.0 &Real)/>



Under development and untested. Use at your own risk.


Under development and untested. Use at your own risk.


Under development and untested. Use at your own risk.


Under development and untested. Use at your own risk.


Under development and untested. Use at your own risk.


Restrict amino acid choices during design to Tyr and Ser. This is similar to the restricted YS alphabet used by Sidhu's group during in vitro evolution experiments. Under development and untested. Use at your own risk.

Per Residue Specification

OperateOnCertainResidues Operation

Allows specification of Residue Level Task Operations based on residue properties specified with ResFilters.


<OperateOnCertainResidues name=PROTEINnopack>
  <PreventRepackingRLT/> //Only one Residue level task per OperateOnCertainResidues block
  <ResidueHasProperty property=PROTEIN/> //Only one ResFilter per OperateOnCertainResidues block

Residue Level TaskOperations

Use these as a subtag for special OperateOnCertainResidues TaskOperation. Only one may be used per OperateOnCertainResidues






Use these as a subtag for special OperateOnCertainResidues TaskOperation. Only one may be used per OperateOnCertainResidues





Selects a set of residues based on their chain letter in the original PDB.


Excludes a set of residues based on their chain letter in the original PDB.




comma-separated list of rosetta residue indices (1 to nres) e.g. indices=1,2,3,4,33




Currently Undocumented

The following TaskOperations are available through RosettaScripts, but are not currently documented. See the code (particularly the respective parse_tag() and apply() functions) for details. (Some may be undocumented as they are experimental/not fully functional.)

Residue Level TaskOperations: