schrodinger.application.matsci.nano.tube module¶
Classes and functions for building single- and multi-walled nanotubes.
Copyright Schrodinger, LLC. All rights reserved.
- class schrodinger.application.matsci.nano.tube.CheckInput¶
Bases:
schrodinger.application.matsci.nano.check.CheckInput
Check user input.
- checkAll(element1, element2, bondlength, nindex, mindex, ncells, no_double_bonds, termfrag, min_term_frags, up_to_nindex, up_to_mindex, nwalls, wallsep, logger=None, is_coarse_grain=False)¶
Manage all checks.
- Parameters
element1 (str) – elemental symbol of the first atom
element2 (str) – elemental symbol of the second atom
bondlength (float) – bond length between the first and second atoms in Angstrom
nindex (int) – first chiral index
mindex (int) – second chiral index
ncells (int) – number of unit cells
no_double_bonds (bool) – disable the formation of double bonds
termfrag (str) – terminate the lattice with a given fragment
min_term_frags (bool) – minimize the geometry of terminating fragments
up_to_nindex (bool) – enumerate nanotube structures on the n-index
up_to_mindex (bool) – enumerate nanotube structures on the m-index
nwalls (int) – number of walls in a multi-wall nanotube
wallsep (float) – wall separation in Angstrom for a multi-wall nanotube
logger (logging.getLogger) – output logger
is_coarse_grain (bool) – Whether a coarse grain structure is being created
- DEFAULTMSG = '\n You have specified a value for flag %s that is not supported. Values\n must be %s. Proceeding with the default value of %s.'¶
- MIDFIX = '-'¶
- checkBilayerSep(bilayersep, logger=None)¶
- checkBilayerShift(bilayershift, logger=None)¶
- checkBilayerStackType(stacktype, logger=None)¶
- checkBondlength(bondlength, logger=None)¶
- checkCellDims(ncell1, ncell2, logger=None)¶
- checkEdgetypes(edgetype1, edgetype2, logger=None)¶
- checkElements(element1, element2, logger=None)¶
- checkExistingFile(infile)¶
Check if the infile already exists and find a new name if it does.
- Parameters
infile (str) – file name to check
- Return type
str
- Returns
outfile, if infile is bad return new file name
- checkIndicies(nindex, mindex, logger=None)¶
Check n-index and m-index.
- Parameters
nindex (int) – the first chiral index
mindex (int) – the second chiral index
logger (logging.getLogger) – output logger
- checkMaeExt(infile)¶
Check that the infile has a supported Maestro extension.
- Parameters
infile (str) – file name to check
- Return type
str
- Returns
outfile, if infile is bad return its basename plus constants.DEFAULT_MAE_EXT
- checkNumBilayers(nbilayers, logger=None)¶
- checkNumCells(ncells, logger=None)¶
Check the number of unit cells.
- Parameters
ncells (int) – the number of unit cells
logger (logging.getLogger) – output logger
- checkNumWalls(nwalls, logger=None)¶
Check the number of walls.
- Parameters
nwalls (int) – the number of walls
logger (logging.getLogger) – output logger
- checkTermFrag(termfrag, logger=None)¶
- checkUpToIndex(up_to_nindex, up_to_mindex, logger=None)¶
Check the enumeration options.
- Parameters
up_to_nindex (bool) – enumerate on the n-index
up_to_mindex (bool) – enumerate on the m-index
logger (logging.getLogger) – output logger
- checkWallSep(wallsep, logger=None)¶
Check the desired wall separation.
- Parameters
wallsep (float) – wall separation in Angstrom
logger (logging.getLogger) – output logger
- class schrodinger.application.matsci.nano.tube.Rectangle(origin, bottom, left, end)¶
Bases:
object
Manage the properties of a rectangle.
- INSIDETHRESH = 1e-05¶
- __init__(origin, bottom, left, end)¶
Create an instance.
- Parameters
origin (numpy.array) – lower left point
bottom (numpy.array) – lower right point
left (numpy.array) – upper left point
end (numpy.array) – upper right point
- linear_equation(ixy, fxy, x)¶
Return y = m*x + b for m and b from the line formed by initial point ixy and final point fxy.
- Parameters
ixy (numpy.array) – initial point on line
fxy (numpy.array) – final point on line
x (float) – domain argument
- Return type
float
- Returns
y, range value
- insideRectangle(xy, logger=None)¶
Return boolean specifying if the provided plane coordinates lie within the boundary.
- Parameters
xy (numpy.array) – plane coordinates
logger (logging.getLogger) – output logger
- Return type
bool, bool
- Returns
insidex, insidey, inside the x-boundary or not, same for y-boundary
- class schrodinger.application.matsci.nano.tube.NanoSheet(nanotube_sheet_obj)¶
Bases:
object
Create a sheet.HoneycombLattice that is large enough so that the nanotube sheet can be cut out from it.
- ANGLEMEDIUM = 1.0471975511965976¶
- __init__(nanotube_sheet_obj)¶
Create an instance.
- Parameters
nanotube_sheet_obj (NanoTubeSheet) – contains parameters of the nanotube sheet
- defineVectors()¶
Define HoneycombLattice and NanoTubeSheet lattice, etc. vectors.
- Return type
numpy.array, numpy.array
- Returns
lattvec1, lattvec2, the HoneycombLattice lattice vectors
- getGrowParams(lattvec1, lattvec2)¶
Get HoneycombLattice grow parameters.
- Parameters
lattvec1 (numpy.array) – lattice vector 1
lattvec2 (numpy.array) – lattice vector 2
- Return type
float, numpy.array, float, numpy.array
- Returns
grow1len, grow1unit, grow2len, grow2unit, the lengths and unit vectors of the grow vectors
- changeBasis(grow1unit, grow2unit)¶
Change the basis of the NanoTubeSheet to that of the NanoSheet.
- Parameters
grow1unit (numpy.array) – unit vector of first grow vector
grow2unit (numpy.array) – unit vector of second grow vector
- Return type
float, float
- Returns
coef1, coef2, coefficients of the end vector in the grow basis
- defineDimensions(coef1, grow1len, coef2, grow2len)¶
Define the dimensions of the NanoSheet.
- Parameters
coef1 (float) – coefficient of end vector on first grow vector
grow1len (float) – length of first grow vector
coef2 (float) – coefficient of end vector on second grow vector
grow2len (float) – length of second grow vector
- rotateNanoSheet()¶
Rotate the nanosheet so that lattice edge 1 is along the x-axis.
- getNanoSheet(logger=None)¶
Get the sheet.HoneycombLattice from which the nanotube sheet will be cut.
- Parameters
logger (logging.getLogger) – output logger
- class schrodinger.application.matsci.nano.tube.NanoTubeSheet(element1, element2, bondlength, nindex, mindex, ncells, is_coarse_grain)¶
Bases:
object
Preprocess a nanosheet into a nanotube sheet which will be rolled up into a nanotube.
- ZEROVEC = array([0., 0.])¶
- __init__(element1, element2, bondlength, nindex, mindex, ncells, is_coarse_grain)¶
Create an instance.
- Parameters
element1 (str) – elemental symbol of the first atom
element2 (str) – elemental symbol of the second atom
bondlength (float) – bond length between the first and second atoms in Angstrom
nindex (int) – first chiral index
mindex (int) – second chiral index
ncells (int) – number of unit cells
is_coarse_grain (bool) – Whether a coarse grain structure is being created
- static redefineLatticeVecs(lattvec1, lattvec2)¶
Redefine lattice vectors according to Dresselhaus.
- Parameters
lattvec1 (numpy.array) – first lattice vector
lattvec2 (numpy.array) – second lattice vector
- Return type
numpy.array, numpy.array
- Returns
nlattvec1, nlattvec2, first and second lattice vectors redefined
- renumberAtomLists(renumbermap)¶
Apply the given renumbering map to the terminating and matching atom lists.
- Parameters
renumbermap (dict) – maps old indicies into new indicies
- cutOutNanoSheet(logger=None)¶
Cut out the nanotube sheet from the nanosheet.
- Parameters
logger (logging.getLogger) – output logger
- delDanglingTermAtoms()¶
Remove dangling atoms from the top and bottom of the nanotube sheet.
- delZigZagMatchAtoms(logger=None)¶
Remove overlapping match atoms for the zigzag case.
- Parameters
logger (logging.getLogger) – output logger
- delChiralMatchAtoms(logger=None)¶
Remove overlapping match atoms for the chiral case.
- Parameters
logger (logging.getLogger) – output logger
- buildNanoTubeSheet(termfrag, use_finite_bos=True, logger=None)¶
Build the nanotube sheet.
- Parameters
termfrag (str) – terminate the lattice with a given fragment
use_finite_bos (bool) – use a bond order protocol meant for finite molecules
logger (logging.getLogger) – output logger
- class schrodinger.application.matsci.nano.tube.NanoTube(element1, element2, bondlength, no_double_bonds, nindex, mindex, ncells, termfrag, min_term_frags, is_coarse_grain)¶
Bases:
object
Create a nanotube by rolling up a nanotube sheet.
- TITLEKEY = 's_m_title'¶
- ENTRYKEY = 's_m_entry_name'¶
- TITLENAME = 'nanotube'¶
- NINDEX = 'i_matsci_N_Index'¶
- MINDEX = 'i_matsci_M_Index'¶
- NCELLS = 'i_matsci_N_Cells'¶
- RADIUS = 'r_matsci_Radius/Ang.'¶
- LENGTH = 'r_matsci_Length/Ang.'¶
- MSGWIDTH = 50¶
- NUMDECIMAL = 3¶
- __init__(element1, element2, bondlength, no_double_bonds, nindex, mindex, ncells, termfrag, min_term_frags, is_coarse_grain)¶
Create an instance.
- Parameters
element1 (str) – elemental symbol of the first atom
element2 (str) – elemental symbol of the second atom
bondlength (float) – bond length between the first and second atoms in Angstrom
no_double_bonds (bool) – disable the formation of double bonds
nindex (int) – first chiral index
mindex (int) – second chiral index
ncells (int) – number of unit cells
termfrag (str) – terminate the lattice with a given fragment
min_term_frags (bool) – minimize the geometry of terminating fragments
is_coarse_grain (bool) – Whether a coarse grain structure is being created
- getChiralAngle(logger=None)¶
Determine the chiral angle of the tube in degrees where the chiral angle is angle(lattvec1, chiral) and is in [0.0, 30.0], 0.0 for zigzag and 30.0 for armchair and the rest are chiral.
- Parameters
logger (logging.getLogger) – output logger
- tubularizeNanoTubeSheet(logger=None)¶
Tubularize the nanotube sheet.
- Parameters
logger (logging.getLogger) – output logger
- rotateTube(logger=None)¶
Rotate the nanotube so that the tube axis is the translation vector.
- preprocessMatchAtoms(inmatch)¶
Dangling match atoms require two bonding partners so make those atom indicies redundant in the list.
- Parameters
inmatch (list of ints) – non-redundant list
- Return type
list of ints
- Returns
outmatch, redundant list
- bondMatchingEdges(matchleft, matchright)¶
Properly bond the left and right edges which meet each other after rolling.
- Parameters
matchleft (list of ints) – indicies of atoms on the left
matchright (list of ints) – indicies of atoms on the right
- doTermination(nanosheet_obj, fragment)¶
Terminate the nanotube. Do this by hijacking the HoneycombLattice instance and overwriting some attributes.
- Parameters
nanosheet_obj (sheet.HoneycombLattice) – contains information shared between this instance and the nanotube instance
fragment (str) – fragment name
- Return type
list of ints
- Returns
nanosheet_obj.frozenatoms, those fragment atoms bound to the nanotube
- doBondOrders(logger=None)¶
Assign bond orders to the nanotube.
- Parameters
logger (logging.getLogger) – output logger
- removeHydrogens()¶
Remove all hydrogens from the structure.
- minTerminatingFrags(nanosheet_obj)¶
Minimize terminating fragments. Do this by hijacking the HoneycombLattice instance and overwriting some attributes.
- Parameters
nanosheet_obj (sheet.HoneycombLattice) – contains information shared between this instance and the nanotube instance
- handleProps(chorus_properties)¶
Handle the structure properties of the tube.
- Parameters
chorus_properties (list) – contains the nine chorus properties, i.e. ax, ay, az, bx, …, cz
- printProps(logger=None)¶
Print the properties of this nanotube.
- Parameters
logger (logging.getLogger) – output logger
- getChorusPBC()¶
Return the chorus box PBC.
- Return type
list
- Returns
contains the nine chorus properties, i.e. ax, ay, az, bx, …, cz
- buildTube(use_finite_bos=True, logger=None)¶
Build a tube.
- Parameters
use_finite_bos (bool) – use a bond order protocol meant for finite molecules
logger (logging.getLogger) – output logger
- class schrodinger.application.matsci.nano.tube.MultiWalledNanoTube(innertube, nwalls, wallsep)¶
Bases:
object
Build a multi-walled nanotube by assembling specific NanoTubes.
- NWALLS = 'i_matsci_N_Walls'¶
- WALLSEP = 'r_matsci_Wall_Sep./Ang.'¶
- MSGWIDTH = 50¶
- __init__(innertube, nwalls, wallsep)¶
Create an instance.
- Parameters
innertube (NanoTube) – tube object of inner most tube
nwalls (int) – number of walls in the multi-walled tube
wallsep (float) – wall separation in Angstrom for the multi-walled tube.
- areSameLength()¶
Return True if the tubes in the multi-walled nanotube are the same length, False otherwise.
- Return type
bool
- Returns
True if the tubes in the multi-walled nanotube are the same length, False otherwise
- getRadius()¶
Return the radius in Ang.
- Return type
float
- Returns
the radius in Ang.
- getTerminatingIdxs()¶
Return the indices of terminating atoms.
- Return type
list
- Returns
indices of terminating atoms
- getOuterChiralIndicies(wallindex, logger=None)¶
Get the chiral indicies for this outer tube.
- Parameters
wallindex (int) – index of this outer tube
logger (logging.getLogger) – output logger
- Return type
int, int
- Return type
nindex, mindex, chiral indicies for outer tube
- getOuterTubeVectors(nindex, mindex)¶
Return the tube vectors for the given (n, m).
- Parameters
nindex (int) – first chiral index
mindex (int) – second chiral index
- Return type
numpy.array, numpy.array
- Returns
chiral, translat, the tube vectors
- findLargestTranslat()¶
Return the length of the wall with the longest translation vector.
- Return type
float
- Returns
tmax, length of longest vector in Angstrom
- getNumUnitCells(translat)¶
Return the number of unit cells to use for the given wall.
- Parameters
translat (numpy.array) – translation vector of the given wall
- Return type
int
- Returns
ncells, the number of cells to use for the given wall
- alignCenterCollect()¶
Align and center the tubes and collect tubes into a single structure.
- getTubeSpacings()¶
Determine actual tube spacings in units of Ang.
- handleProps()¶
Handle the structure properties of the multi-walled tube.
- printProps(logger=None)¶
Print the properties of this multi-walled nanotube.
- Parameters
logger (logging.getLogger) – output logger
- buildMultiWallTube(use_finite_bos=True, logger=None)¶
Assemble the multi-walled tube.
- Parameters
use_finite_bos (bool) – use a bond order protocol meant for finite molecules
logger (logging.getLogger) – output logger
- class schrodinger.application.matsci.nano.tube.NanoTubes(element1='C', element2='C', bondlength=1.418, no_double_bonds=False, nindex=6, mindex=6, ncells=2, termfrag='hydrogen', min_term_frags=False, up_to_nindex=False, up_to_mindex=False, nwalls=1, wallsep=3.35, orient=False, logger=None, is_coarse_grain=False)¶
Bases:
object
Main class for making nanotubes.
- MSGWIDTH = 50¶
- __init__(element1='C', element2='C', bondlength=1.418, no_double_bonds=False, nindex=6, mindex=6, ncells=2, termfrag='hydrogen', min_term_frags=False, up_to_nindex=False, up_to_mindex=False, nwalls=1, wallsep=3.35, orient=False, logger=None, is_coarse_grain=False)¶
- Parameters
element1 (str) – elemental symbol of the first atom
element2 (str) – elemental symbol of the second atom
bondlength (float) – bond length between the first and second atoms in Angstrom
no_double_bonds (bool) – disable the formation of double bonds
nindex (int) – first chiral index
mindex (int) – second chiral index
ncells (int) – number of unit cells
termfrag (str) – terminate the lattice with a given fragment
min_term_frags (bool) – minimize the geometry of terminating fragments
up_to_nindex (bool) – enumerate nanotube structures on the n-index
up_to_mindex (bool) – enumerate nanotube structures on the m-index
nwalls (int) – number of walls in a multi-wall nanotube
wallsep (float) – wall separation in Angstrom in a multi-wall nanotube
orient (bool) – whether to orient the sheets for Maestro
logger (logging.getLogger) – output
is_coarse_grain (bool) – Whether a coarse grain structure is being created
- printJobParams(logger=None)¶
Print job parameters.
- Parameters
logger (logging.getLogger) – output logger
- makeSingleWalledTubes(use_finite_bos=True, logger=None)¶
Make single-walled nanotubes.
- Parameters
use_finite_bos (bool) – use a bond order protocol meant for finite molecules
logger (logging.getLogger) – output logger
- Return type
list of NanoTube
- Returns
singletubes, contains all created single-walled tubes
- printSingleWalledTubes(logger=None)¶
Formatted print of single-walled tubes.
- Parameters
logger (logging.getLogger) – output logger
- makeMultiWalledTubes(use_finite_bos=True, logger=None)¶
Make multi-walled nanotubes.
- Parameters
use_finite_bos (bool) – use a bond order protocol meant for finite molecules
logger (logging.getLogger) – output logger
- Return type
list of MultiWalledNanoTube
- Returns
multitubes, contains all created multi-walled tubes
- printMultiWalledTubes(logger=None)¶
Formatted print of multi-walled tubes.
- Parameters
logger (logging.getLogger) – output logger
- schrodinger.application.matsci.nano.tube.remove_pbc(astructure)¶
Remove the PBC definitions from the given structure.
- Parameters
astructure (schrodinger.structure.Structure) – the structure for which to remove the PBC
- schrodinger.application.matsci.nano.tube.translate_tube(tube, radius)¶
Translate the tube so that it is inside the box.
- Parameters
tube (schrodinger.structure.Structure) – the tube structure
radius (float) – the radius in Ang.
- schrodinger.application.matsci.nano.tube.get_tube_unit_cell(radius, length)¶
Get the a, b, and c vectors of the unit cell for a tube of given length and radius.
- Parameters
radius (float) – The radius of the tube in Angstroms
length (float) – The length of the tube in Angstroms
- Return tuple(numpy.array)
Three numpy arrays each of length 3, corresponding to the a, b, and c vectors of the unit cell (in Angstroms)
- schrodinger.application.matsci.nano.tube.get_tube_dimensions(chiral, translat)¶
Calculate the length and radius of a nanotube
- Parameters
chiral (numpy.array) – The chiral vector of the nanutube
translat (numpy.array) – The translat vector of the nanutube
- Return tuple(float, float)
The length and radius of the nanotube, respectively. Units are in Angstroms.
- schrodinger.application.matsci.nano.tube.get_tube_vectors(ncells, nindex, mindex, lattvec1, lattvec2)¶
Return chiral and translation vectors for a nanotube sheet.
- Parameters
ncells (int) – number of unit cells
nindex (int) – first chiral index
mindex (int) – second chiral index
lattvec1 (numpy.array) – first lattice vector
lattvec2 (numpy.array) – second lattice vector
- Return tuple(numpy.array, numpy.array)
The chiral and translat tube vectors, respectively