From: P.Canepa <pc...@ke...> - 2010-02-13 13:07:18
|
Dear Bob So far with the code I worked out I can correctly see my atom within Jmol. What I miss are cell parameters on the top -left corner and the cell box as well! Should I call another function somewhere which print them? Further CRYSTAL uses to remove the periodicy in SLAB or POLYMER. the former keep periodic just 2 dimensions while the latter just 1, which in nutshell means having the Z (for slab) and Y and Z (for polymer) expresses as Cartesian coordinates since the periodicity is reduced! Does Jmol has already implemented this type of sytem, should I work out a way to tackle it ? Crystal can also calculate vibrational frequency in Gamma as Gaussian03/09! Do you have some hint as to let Jmol plot them? Thanks a lot and have a Good Weekend, Piero public class CrystalReader extends AtomSetCollectionReader{ float a; float b; float c; float alpha; float beta ; float gamma; public void readAtomSetCollection(BufferedReader reader) { atomSetCollection = new AtomSetCollection("Crystal0X_output", this); try{ this.reader = reader; atomSetCollection.setCollectionName(readLine()); readSystem(); }catch (Exception e) { setError(e); } } private void readSystem() throws Exception{ do{ readLine(); if(line.startsWith("MOLECULE")){ setFractionalCoordinates(false); readAtomCoords(); break; } if (line.startsWith("CRYSTAL")|| line.startsWith("SLAB")|| line.startsWith("POLYMER") || line.startsWith("EXTERNAL") ){ setFractionalCoordinates(true); readCellParams(); readAtomCoords(); break; } }while(line != null); } private void readCellParams() throws Exception{ do{ readLine(); if(line.startsWith(" PRIMITIVE CELL")){ readLine(); readLine(); a = parseFloat(line.substring(2,17)) ; b = parseFloat(line.substring(18,33)) ; c = parseFloat(line.substring(34,42)) ; alpha = parseFloat(line.substring(43,60)) ; beta = parseFloat(line.substring(61,71)) ; gamma = parseFloat(line.substring(72,80)) ; //this method works fine so far setFractionalCoordinates(true); setUnitCell(a, b, c, alpha, beta, gamma); break; } }while (line != null); } private void readAtomCoords() throws Exception{ setFractionalCoordinates(true); do{ readLine(); if(line.startsWith(" ATOMS IN THE ASYMMETRIC")){ int numberAtoms = parseInt(line.substring(61,65)); readLine(); readLine(); int j=0; for(int i=0; i<numberAtoms ; i++){ readLine(); addNewatom(); String atomName = line.substring(8,11); String sym =atomName.substring(0,2).trim(); int atomicnumber = parseInt(sym); Atom atom = atomSetCollection.getAtom(i); sym =getElementSymbol(atomicnumber); atom.elementSymbol=sym ; atom.atomName= atomName + "_" + (j++); } break; } }while (line != null); } private void addNewatom(){ float x = parseFloat(line.substring(15,35)); float y = parseFloat(line.substring(36,55)); float z = parseFloat(line.substring(56,75)); Atom atom=atomSetCollection.addNewAtom(); setAtomCoord(atom, x, y,z); } } -- Pieremanuele Canepa Room 104 Functional Material Group School of Physical Sciences, Ingram Building, University of Kent, Canterbury, Kent, CT2 7NH United Kingdom e-mail: pc...@ke... mobile: +44 (0) 7772-9756456 ----------------------------------------------------------- |