Difference between revisions of "Tutorial:Selecting subsets of atoms"
(→Program description) |
|||
Line 44: | Line 44: | ||
=== Program description === | === Program description === | ||
− | * | + | * Creating an AtomSelection object |
<source lang="cpp"> | <source lang="cpp"> | ||
− | + | ||
− | + | AtomSelection sel(sys.getAtomPointers()); | |
− | + | ||
− | + | </source> | |
+ | |||
+ | * Basic selection 'all' | ||
+ | <source lang="cpp"> | ||
+ | AtomPointerVector allAts = sel.select("all"); | ||
+ | <source> | ||
+ | |||
+ | |||
+ | * Select chain A atoms and store as "chA" for easy retrieval | ||
+ | <source lang="cpp"> | ||
+ | |||
+ | AtomPointerVector chainAAts = sel.select("chA, chain A"); | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | // Expanding the selection logic | ||
+ | cout << "Select backbone atoms using selection logic"<<endl; | ||
+ | cout << " sel.select(\"bb, (((name CA OR name N) OR name C) OR name O)\");"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | |||
+ | AtomPointerVector backbone = sel.select("bb, (((name CA OR name N) OR name C) OR name O)"); | ||
+ | for (uint i = 0; i < backbone.size();i++){ | ||
+ | cout << *backbone[i]<<endl; | ||
+ | } | ||
+ | cout << endl; | ||
+ | cout << "Select backbone atoms using short-hand selection logic"<<endl; | ||
+ | cout << " sel.select(\"bb2, name CA+N+C+O\");"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | AtomPointerVector bbShortHand = sel.select("bb2, name CA+N+C+O"); | ||
+ | for (uint i = 0; i < bbShortHand.size();i++){ | ||
+ | cout << *bbShortHand[i]<<endl; | ||
+ | } | ||
+ | |||
+ | // Selections using names from previous selections | ||
+ | cout << "Create a selection using the name of a previous selection.."<<endl; | ||
+ | cout << " AtomPointerVector test = sel.select(\"new, bb AND name O\");"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | AtomPointerVector test = sel.select("new, bb AND name O"); | ||
+ | for (uint i = 0; i < test.size();i++){ | ||
+ | cout << *test[i]<<endl; | ||
+ | } | ||
+ | |||
+ | // Selections using NOT operator | ||
+ | cout << "Create a selection using the NOT operator.."<<endl; | ||
+ | cout <<" AtomPointerVector notBB = sel.select(\"notBB, not name CA+C+O+N\")"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | AtomPointerVector notBB = sel.select("notBB, not name CA+C+O+N"); | ||
+ | for (uint i = 0; i < notBB.size();i++){ | ||
+ | cout << *notBB[i]<<endl; | ||
+ | } | ||
+ | |||
+ | // Selections using range "-" operator. | ||
+ | cout << "Create a selection using the '-' operator.."<<endl; | ||
+ | cout <<" AtomPointerVector res26 = sel.select(\"res26, resi 2-6\")"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | AtomPointerVector res26 = sel.select("res26, resi 2-6"); | ||
+ | for (uint i = 0; i < res26.size();i++){ | ||
+ | cout << *res26[i]<<endl; | ||
+ | } | ||
+ | |||
+ | // Selection using distances to a sub-selection | ||
+ | cout << "Create an atom selection named 'oxygensHbondSer', based on a distance from another selection 'name OG'\n"; | ||
+ | cout << " AtomPointerVector oxygensHbondSer = sel.select(\"oxygensHbondSer, name O WITHIN 3.5 OF name OG\");"<<endl; | ||
+ | cout << " Hit any character and enter to execute test"<<endl; | ||
+ | cin >> file; // dummy line to wait for input to run | ||
+ | AtomPointerVector oxygensHbondSer = sel.select("oxygensHbondSer, name O WITHIN 3.5 OF name OG"); | ||
+ | for (uint i = 0; i < oxygensHbondSer.size();i++){ | ||
+ | cout << *oxygensHbondSer[i]<<endl; | ||
+ | } | ||
+ | |||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
</source> | </source> | ||
Revision as of 21:22, 23 March 2010
NOTE: TUTORIAL WRITING IN PROGRESS DO NOT FOLLOW THIS
This is an example on how to select atoms and residues with MSL, following the example program example_selecting_atoms_and_residues.cpp in the examples/ subdirectory.
Complete source of example_selecting_atoms_and_residues
Contents
Background
MSL objects can be selected if they inherit the Selectable object. So far, Atoms and Residues are Selectable. The requirement for being selectable is to implement the virtual "addSelectableFunctions", which define what properties of the object can be selected upon.
Selection By Name:
Can select based on selection flags that are inside each Atom. By default every atom has an "all" selection flag set.
You can create selection flags for atoms by:
- Using Atom object:
a.setSelectionFlag("foobar")
- Using AtomSelection object:
as.select("foobar, chain A")
Selection By Property
Using AtomSelection Object, to select all atoms of chain A:
as.select("chain A")
To compile
% make bin/example_selecting_atoms_and_residues
To run the program
Go to the main directory and run the command (note, the location of the exampleFiles subdirectory needs to be provided as an argument)
% bin/example_selecting_atoms_and_residues exampleFiles
Program description
- Creating an AtomSelection object
AtomSelection sel(sys.getAtomPointers());
- Basic selection 'all'
AtomPointerVector allAts = sel.select("all");
<source>
* Select chain A atoms and store as "chA" for easy retrieval
<source lang="cpp">
AtomPointerVector chainAAts = sel.select("chA, chain A");
// Expanding the selection logic
cout << "Select backbone atoms using selection logic"<<endl;
cout << " sel.select(\"bb, (((name CA OR name N) OR name C) OR name O)\");"<<endl;
cout << " Hit any character and enter to execute test"<<endl;
cin >> file; // dummy line to wait for input to run
AtomPointerVector backbone = sel.select("bb, (((name CA OR name N) OR name C) OR name O)"); for (uint i = 0; i < backbone.size();i++){ cout << *backbone[i]<<endl; } cout << endl; cout << "Select backbone atoms using short-hand selection logic"<<endl; cout << " sel.select(\"bb2, name CA+N+C+O\");"<<endl; cout << " Hit any character and enter to execute test"<<endl; cin >> file; // dummy line to wait for input to run AtomPointerVector bbShortHand = sel.select("bb2, name CA+N+C+O"); for (uint i = 0; i < bbShortHand.size();i++){ cout << *bbShortHand[i]<<endl; }
// Selections using names from previous selections cout << "Create a selection using the name of a previous selection.."<<endl; cout << " AtomPointerVector test = sel.select(\"new, bb AND name O\");"<<endl; cout << " Hit any character and enter to execute test"<<endl; cin >> file; // dummy line to wait for input to run AtomPointerVector test = sel.select("new, bb AND name O"); for (uint i = 0; i < test.size();i++){ cout << *test[i]<<endl; }
// Selections using NOT operator cout << "Create a selection using the NOT operator.."<<endl; cout <<" AtomPointerVector notBB = sel.select(\"notBB, not name CA+C+O+N\")"<<endl; cout << " Hit any character and enter to execute test"<<endl; cin >> file; // dummy line to wait for input to run AtomPointerVector notBB = sel.select("notBB, not name CA+C+O+N"); for (uint i = 0; i < notBB.size();i++){ cout << *notBB[i]<<endl; }
// Selections using range "-" operator. cout << "Create a selection using the '-' operator.."<<endl; cout <<" AtomPointerVector res26 = sel.select(\"res26, resi 2-6\")"<<endl; cout << " Hit any character and enter to execute test"<<endl; cin >> file; // dummy line to wait for input to run AtomPointerVector res26 = sel.select("res26, resi 2-6"); for (uint i = 0; i < res26.size();i++){ cout << *res26[i]<<endl; }
// Selection using distances to a sub-selection cout << "Create an atom selection named 'oxygensHbondSer', based on a distance from another selection 'name OG'\n"; cout << " AtomPointerVector oxygensHbondSer = sel.select(\"oxygensHbondSer, name O WITHIN 3.5 OF name OG\");"<<endl; cout << " Hit any character and enter to execute test"<<endl; cin >> file; // dummy line to wait for input to run AtomPointerVector oxygensHbondSer = sel.select("oxygensHbondSer, name O WITHIN 3.5 OF name OG"); for (uint i = 0; i < oxygensHbondSer.size();i++){ cout << *oxygensHbondSer[i]<<endl; }
return 0;
}
</source>