“end: not in while/foreach”
This sounds like tcsh or a shell script, it’s certainly not rosetta. Are you running from inside a script?
Hacking in the options system:
We should probably add this to the “how to write a protocol” spiel in the manual. This will be a little vague, but I can be more specific if you have trouble. Anyway, the option system lives in src/core/options/options_rosetta.py. Read that file’s header material and options.py in the same folder.
You can add globally accessible options by adding entries within options_rosetta.py. I’d suggest either sticking a new one into an obvious option group like “run”, or making a new group named dhorita or whatever (this is slightly harder). Make several options, one for a boolean control of this option, one for start of flexible region, one for end. After adding new things to options_rosetta.py, run options.py in the same folder. options.py is a script that generates the C++ code for the option system from the giant-huge data structure in options_rosetta.py.
Now that your option exists, you need to shoehorn it into relax in the movemap function. Go find a line of code that looks like ~pp~ core::options::option[ core::options::OptionKeys::somenamespaces:anoption].value(). ~/pp~ This is how the global options object is accessed. I’d suggest just searching relax_protocols.cc for the word option, one is bound to be there somewhere. Use lines like this within the movemap-creation function to query the command line for what options were passed in. You know the decision logic already…
If you don’t want to add new options, there are guaranteed to be “unused” options ripe for the picking already in the options system that you could just access (skipping the first part). This leads to a maintenance nightmare trying to figure out what the repurposed options do, but it’s faster if you’re uncomfortable messing with options_rosetta.py. For example, the entire AnchoredDesign option group is unused in the rosetta3.0 release (the code that uses it is unreleased), so you could just “abuse” its pre-existing options by checking their values from relax mode. At that point the hassle is remembering that “AnchoredDesign::refine_only” secretly means “relax executeable limited movemap”…