When you use need to pass many arguments to a PLUMED action, being them components of a few collective variables or also multiple collective variables, you might find it convenient to use regular expressions.
Regular expressions are enclosed in round braces and must not contain spaces (the components names have no spaces indeed, so why use them?).
As an example the command:
d1: DISTANCEATOMS=1,2the pair of atom that we are calculating the distance between.COMPONENTSPRINT( default=off ) calculate the x, y and z components of the distance separately and store them as label.x,ARG=(d1\.[xy])compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvarthe name of the file on which to output these quantitiesFMT=%8.4fthe format that should be used to output real numbers
will cause both the d1.x and d1.y components of the DISTANCE action to be printed.
Notice that selection does not happen in alphabetic order, nor in the order in which [xy]
are listed, but rather in the order in which the two variables have been created by PLUMED. Also notice that the .
character must be escaped as \.
in order to interpret it as a literal .
. An un-escaped dot is a wildcard which is matched by any character, So as an example
d1: DISTANCEATOMS=1,2the pair of atom that we are calculating the distance between.COMPONENTSdxy: DISTANCE( default=off ) calculate the x, y and z components of the distance separately and store them as label.x,ATOMS=1,3 # this will match d1.x,d1.y,dxy PRINTthe pair of atom that we are calculating the distance between.ARG=(d1.[xy])compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvarthe name of the file on which to output these quantitiesFMT=%8.4f # while this will match d1.x,d1.y only PRINTthe format that should be used to output real numbersARG=(d1\.[xy])compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvarthe name of the file on which to output these quantitiesFMT=%8.4fthe format that should be used to output real numbers
You can concatenate more than one regular expression by using comma separated regular expressions. The resulting matches will be concatenated:
t1: TORSIONATOMS=5,7,9,15 t2: TORSIONthe four atoms involved in the torsional angleATOMS=7,9,15,17 d1: DISTANCEthe four atoms involved in the torsional angleATOMS=7,17the pair of atom that we are calculating the distance between.COMPONENTS# The first expression matches d1.x and d1.y # The second expression matches t1 and t2 PRINT( default=off ) calculate the x, y and z components of the distance separately and store them as label.x,ARG=(d1\.[xy]),(t[0-9])compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvarthe name of the file on which to output these quantitiesFMT=%8.4f # Thus this is the same as ARG=d1.x,d1.y,t1,t2the format that should be used to output real numbers
Be aware that if you have overlapping selections they will be duplicated. As an alternative you could use the "or" operator |
:
t1: TORSIONATOMS=5,7,9,15 t2: TORSIONthe four atoms involved in the torsional angleATOMS=7,9,15,17 d1: DISTANCEthe four atoms involved in the torsional angleATOMS=7,17the pair of atom that we are calculating the distance between.COMPONENTS# Here is a single regular expression PRINT( default=off ) calculate the x, y and z components of the distance separately and store them as label.x,ARG=(d1\.[xy]|t[0-9])compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvarthe name of the file on which to output these quantitiesFMT=%8.4f # Thus this is the same as ARG=t1,t2,d1.x,d1.ythe format that should be used to output real numbers
this selects the same set of arguments as the previous example.
()
and only available when PLUMED has been compiled with the regex library, with the capability of PLUMED to use *
as a wildcard in arguments:
d1: DISTANCERegular expressions are way more flexible than wildcards!ATOMS=1,2the pair of atom that we are calculating the distance between.COMPONENTS# this is a regular expression that selects all components of d1 # i.e. d1.x d1.y and d1.z PRINT( default=off ) calculate the x, y and z components of the distance separately and store them as label.x,ARG=(d1\..*)compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvar_regthe name of the file on which to output these quantitiesFMT=%8.4f # this is a wildcard that selects all the components of d1 as well PRINTthe format that should be used to output real numbersARG=d1.*compulsory keyword the labels of the values that you would like to print to the fileSTRIDE=100compulsory keyword ( default=1 ) the frequency with which the quantities of interest should be outputFILE=colvar_wildthe name of the file on which to output these quantitiesFMT=%8.4fthe format that should be used to output real numbers
You can check the log to see whether or not your regular expression is picking the set of components you desire.
For more information on regular expressions visit http://www.regular-expressions.info/reference.html.