From reinert@VAX.MPIZ-KOELN.MPG.d400.de  Mon Jul  4 06:25:45 1994
Received: from ixgate02.dfnrelay.d400.de  for reinert@VAX.MPIZ-KOELN.MPG.d400.de
	by www.ccl.net (8.6.9/930601.1506) id FAA03396; Mon, 4 Jul 1994 05:52:56 -0400
From: <reinert@VAX.MPIZ-KOELN.MPG.d400.de>
X400-Received: by mta d400relay in /PRMD=dfnrelay/ADMD=d400/C=de/; Relayed;
               Mon, 4 Jul 1994 11:54:46 +0200
X400-Received: by /PRMD=MPG/ADMD=D400/C=DE/; Relayed;
               Mon, 4 Jul 1994 14:53:24 +0200
Date: Mon, 4 Jul 1994 14:53:24 +0200
X400-Originator: reinert@VAX.MPIZ-KOELN.MPG.d400.de
X400-Recipients: non-disclosure:;
X400-MTS-Identifier: [/PRMD=MPG/ADMD=D400/C=DE/;940704115324]
X400-Content-Type: P2-1984 (2)
Content-Identifier: 12
Conversion: Prohibited
Alternate-Recipient: Allowed
Message-ID: <12*/S=reinert/OU=VAX/O=MPIZ-KOELN/PRMD=MPG/ADMD=d400/C=de/@MHS>
To: chemistry@ccl.net
Subject: RE: Ribosomal RNA


>We would like to model the secondary structure of ribosomal
>RNA and would like to contact anybody who has done similar
>work or who can lead us to useful references. Are there any
>crystollographic structures  of ribosomal RNA available?

Here is a reference:

Malhotra, A.; Tan, R.K.-Z.; Harvey, S.C. " Modeling large RNAs and Ribonucleo-
protein Particles using Molecular Mechanics Techniques"; Biophysical journal;
Vol. 66; June 1994, pp 1777-1795.
For obtaining the software contact tan@neptune.cmc.uab.edu

Good luck!

			Peter Reinert

From S.R.Kilvington@soton.ac.uk  Mon Jul  4 10:25:47 1994
Received: from mail.soton.ac.uk  for S.R.Kilvington@soton.ac.uk
	by www.ccl.net (8.6.9/930601.1506) id JAA04700; Mon, 4 Jul 1994 09:42:51 -0400
Received: from localhost (srk@localhost) by mail.soton.ac.uk (8.6.4/2.12) id OAA01790 for CHEMISTRY@ccl.net; Mon, 4 Jul 1994 14:42:03 +0100
From: Simon Kilvington <S.R.Kilvington@soton.ac.uk>
Message-Id: <199407041342.OAA01790@mail.soton.ac.uk>
Date: Mon, 4 Jul 94 14:42:02 BST
To: CHEMISTRY@ccl.net
Subject: molecular superpositioning program
X-Mailer: ELM [version 2.3 PL11]


Dear net people,

        With the recent interest in molecular super-positioning I
thought I'd post a copy of my program that I sent to Mike Smith (who
originally wrote to the list wanting a program to overlay two
molecules).

	The program takes two PDB files and two lists of atom numbers
and produces a translated/rotated version of the second PDB file so the
specified atoms are overlayed as closely as possible.

        I'm sending the source with this message, hopefully it should
get through uncorrupted. If there are any problems due to more than 80
characters per line (my text editor is set up with about 150 columns)
I could ftp it to you or something.

        There are 3 source files, "overlay.c", "utils.c" and "utils.h".
After you've chopped them out of this file, make the program by doing

cc -o overlay overlay.c utils.c

	You'll also need a "-lm" flag on SGI's as for some reason the
maths part of the standard C library isn't automatically linked in.

        Then to overlay the two PDB files you do

overlay <pdb1> <atom_list1> <pdb2> <atom_list2>

        This will produce a file called "<pdb2>.super". And tell you
the RMS distance between the atoms you specified to be overlayed.

        The atom list files should have one atom id per line. The
atom id can be just its index number, or you can specify the chain
too. The format of each line is...

<atom index>[<white space><chain id>]

        where things in brackets [] are optional.

eg.
118
4560
etc

or

118     A
118     B
4560    B
etc


        Obviously there must be the same number of atoms in each list.

        I hope this is useful. If there are any problems or queries send me a
message.

        yours,

	Simon Kilvington (srk@uk.ac.soton)

The source...

=================================================================
=================================================================

/*
   overlay.c

   Simon Kilvington, 1994
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "utils.h"

#define MAXFILENAMELEN		256
#define PDBLINELEN		82		/* length of a line in a pdb file, inc space for "\n\0" terminator */
#define INDEXCOLUMN		6		/* position of atom number in ATOM records */
#define CHAINCOLUMN		21		/* position of chain id in ATOM records */
#define XPOSCOLUMN		30		/* position of x coord in ATOM records */
#define YPOSCOLUMN		38
#define ZPOSCOLUMN		46
#define COORDLEN		8		/* width of coord fields */
#define COORDDPS		3		/* number of decimal places for coords */
#define SUPERPOSTOLERANCE	0.000000175	/* when superpositioning give up when tan(rotation needed) is less than this, ~tan(0.00001degs) */
#define MAXSUPERPOSITS		100000		/* or we need more than this number of iterations */

typedef struct
{
   char   pdb[PDBLINELEN];
   int    index;				/* pdb atom number */
   char   chain;				/* chain id, resolves atom number clashes */
   vector pos;
} atomdetails;

typedef struct
{
   int         natoms;
   atomdetails atom[1];				/* array extends to atom[natoms-1] */
} fragdetails;

#define FRAGHDRSIZE	(sizeof(fragdetails) - sizeof(atomdetails))

fragdetails *readpdbdata(char *);
void writepdbdata(char *, fragdetails *);

int *readatomlist(char *, fragdetails *, int *);
int findatomindex(fragdetails *, int, char);

void superpositionfrags(int, fragdetails *, int *, fragdetails *, int *);
void calcsuperposmatrix(int, fragdetails *, int *, fragdetails *, int *, matrix *, vector *, vector *);

/*
   main
   params should be <pdb file1> <atom file1> <pdb file2> <atom file2>
   the <atom files> should be lists of atoms (and, optionally, chain id's) to be overlapped, there must be the same number in each file
   produces a pdb file called "<pdb file2>.super"
*/

int
main(int argc, char **argv)
{
   fragdetails *pdb1, *pdb2;
   int *atom1, *atom2, natoms1, natoms2, a;
   float rms;
   vector dr;
   char filename[MAXFILENAMELEN];

   if(argc != 5)
   {
      printf("Useage: overlay <pdb1> <atom list1> <pdb2> <atom list2>\n");
      return 1;
   }

/* read in the 	files */
   if((pdb1 = readpdbdata(argv[1])) == NULL)
      return 1;
   if((atom1 = readatomlist(argv[2], pdb1, &natoms1)) == NULL)
      return 1;
   if((pdb2 = readpdbdata(argv[3])) == NULL)
      return 1;
   if((atom2 = readatomlist(argv[4], pdb2, &natoms2)) == NULL)
      return 1;
   if(natoms1 != natoms2)
   {
      printf("Both atom lists must have the same number of atoms\n");
      return 1;
   }

   printf("Moving \"%s\"\n", argv[3]);
   superpositionfrags(natoms1, pdb1, atom1, pdb2, atom2);

   strcpy(filename, argv[3]);
   strcat(filename, ".super");
   writepdbdata(filename, pdb2);

/* report the rms distance between atom1[] and atom2[] */
   rms = 0.0;
   for(a=0; a<natoms1; a++)
      rms += vector_len2(vector_sub(&pdb1->atom[atom1[a]].pos, &pdb2->atom[atom2[a]].pos, &dr));
   rms = sqrt(rms / natoms1);
   printf("RMS distance between atoms to overlap: %.3f\n", rms);
   printf("Number of atom pairs: %d\n", natoms1);

   free(pdb1);
   free(atom1);
   free(pdb2);
   free(atom2);

   return 0;
}

fragdetails *
readpdbdata(char *filename)
{
   fragdetails *frag, *newptr;
   atomdetails *aptr;
   FILE *file;
   char buffer[PDBLINELEN];
   BOOL err;

   if((file = fopen(filename, "r")) == NULL)
   {
      printf("Unable to read \"%s\"\n", filename);
      return NULL;
   }

   printf("Reading \"%s\"\n", filename);

   frag = malloc(FRAGHDRSIZE);
   frag->natoms = 0;

   err = FALSE;
   while(!feof(file) && !err)
   {
   /* read in the line */
      fgets(buffer, PDBLINELEN, file);
   /* if this is an ATOM record add it to the growing fragment */
      if(strncmp(buffer, "ATOM  ", 6) != 0)
	 continue;
      frag->natoms++;
      newptr = realloc(frag, FRAGHDRSIZE + (frag->natoms * sizeof(atomdetails)));
      if(err = (newptr == NULL))
	 continue;
      frag = newptr;
      aptr = &frag->atom[frag->natoms-1];
      strncpy(aptr->pdb, buffer, PDBLINELEN);
      aptr->index = atoi(&buffer[INDEXCOLUMN]);
      aptr->chain = buffer[CHAINCOLUMN];
      aptr->pos.x = atof(&buffer[XPOSCOLUMN]);
      aptr->pos.y = atof(&buffer[YPOSCOLUMN]);
      aptr->pos.z = atof(&buffer[ZPOSCOLUMN]);
   }

   fclose(file);

   if(err)
   {
      printf("No memory to read \"%s\"\n", filename);
      free(frag);
   }

   return (err) ? NULL : frag;
}

void
writepdbdata(char *filename, fragdetails *frag)
{
   FILE *file;
   int a;
   atomdetails *aptr;

   if((file = fopen(filename, "w")) == NULL)
   {
      printf("Unable to write to \"%s\"\n", filename);
      return;
   }

   printf("Writing \"%s\"\n", filename);

   for(a=0; a<frag->natoms; a++)
   {
      aptr = &frag->atom[a];
      sprintf(&aptr->pdb[XPOSCOLUMN], "%*.*f", COORDLEN, COORDDPS, aptr->pos.x);
      sprintf(&aptr->pdb[YPOSCOLUMN], "%*.*f", COORDLEN, COORDDPS, aptr->pos.y);
      sprintf(&aptr->pdb[ZPOSCOLUMN], "%*.*f", COORDLEN, COORDDPS, aptr->pos.z);
      fprintf(file, "%s\n", aptr->pdb);
   }

   fclose(file);

   return;
}

int *
readatomlist(char *filename, fragdetails *frag, int *natoms)
{
   int *list, *newptr, index, bpos;
   char chain, buffer[PDBLINELEN];
   FILE *file;
   BOOL err;

   *natoms = 0;

   if((file = fopen(filename, "r")) == NULL)
   {
      printf("Unable to read \"%s\"\n", filename);
      return NULL;
   }

   printf("Reading \"%s\"\n", filename);

   list = malloc(sizeof(int));	/* so we can use realloc from the start */

   err = FALSE;
   while(!feof(file) && !err)
   {
      (*natoms)++;
      newptr = realloc(list, (*natoms) * sizeof(int));
      if(err = (newptr == NULL))
      {
	 printf("No memory read \"%s\"\n", filename);
	 continue;
      }
      list = newptr;
      fgets(buffer, PDBLINELEN, file);
      sscanf(buffer, "%d%n", &index, &bpos);
      while(buffer[bpos] != '\0' && isspace(buffer[bpos]))
	  bpos++;
      chain = (buffer[bpos] == '\0') ? ' ' : buffer[bpos];
      if(err = ((list[(*natoms)-1] = findatomindex(frag, index, chain)) == -1))
	 printf("Error while reading \"%s\"; PDB atom with index %d%c does not exist\n", filename, index, chain);
   }

   fclose(file);

   if(err)
      free(list);

   return (err) ? NULL : list;
}

int
findatomindex(fragdetails *frag, int index, char chain)
{
   int atom;
   BOOL match;

   atom = 0;
   match = FALSE;
   while(!match && atom < frag->natoms)
   {
      match = (frag->atom[atom].index == index && frag->atom[atom].chain == chain);
      if(!match)
         atom++;
   }

   return (atom == frag->natoms) ? -1 : atom;
}

/*
   superpositionfrags
   this moves yfrag so the specified atoms in it and xfrag overlap as closely as possible
   the xatom and yatom arrays should be natoms long and hold the numbers of the atoms that are required to be overlappped
   uses the Ferro-Hermans algorithm, Acta Cryst. 33 (1977) p345-347
*/

void
superpositionfrags(int natoms, fragdetails *xfrag, int *xatom, fragdetails *yfrag, int *yatom)
{
   matrix spos, ypos, result;
   vector cgx, cgy;
   int a;
   atomdetails *aptr;

   matrix_alloc(&spos, 3, 3, TRUE);
   matrix_alloc(&ypos, 3, 1, TRUE);

   calcsuperposmatrix(natoms, xfrag, xatom, yfrag, yatom, &spos, &cgx, &cgy);

   for(a=0; a<yfrag->natoms; a++)
   {
      aptr = &yfrag->atom[a];
      matrix_setelement(&ypos, 0, 0, aptr->pos.x - cgy.x);
      matrix_setelement(&ypos, 1, 0, aptr->pos.y - cgy.y);
      matrix_setelement(&ypos, 2, 0, aptr->pos.z - cgy.z);
      matrix_mult(&spos, &ypos, &result);
      aptr->pos.x = cgx.x + matrix_getelement(&result, 0, 0);
      aptr->pos.y = cgx.y + matrix_getelement(&result, 1, 0);
      aptr->pos.z = cgx.z + matrix_getelement(&result, 2, 0);
      matrix_forget(&result);
   }

   matrix_forget(&ypos);
   matrix_forget(&spos);

   return;
}

/*
   calcsuperposmatrix
   as superpositionfrags, but yfrag is unmoved by the experience
   on entry spos should be a matrix_alloc'd 3x3 matrix
   on exit spos is the superposition matrix, cgx is the centre of gravity of xatom, and cgy is the centre of gravity of yatom
   to superposition the two frags yfrag should be moved to "cgx + spos(y - cgy)" where y are the original coords of yfrag
   !!! this routine depends on the fact that a "vector" is composed of 3 consecutive floats that represent x, y and z coords !!!
*/

#define veccoord(VEC, AXIS)	(*(((float *) (VEC)) + AXIS))
#define xcoord(ATOM, AXIS)	veccoord(&(xfrag->atom[xatom[ATOM]].pos), AXIS)
#define ycoord(ATOM, AXIS)	veccoord(&(yfrag->atom[yatom[ATOM]].pos), AXIS)

enum {XAXIS, YAXIS, ZAXIS};

void
calcsuperposmatrix(int natoms, fragdetails *xfrag, int *xatom, fragdetails *yfrag, int *yatom, matrix *spos, vector *cgx, vector *cgy)
{
   matrix corr;
   int i, j, k, p, q, r, itno;
   float oneovern, sum, sigma, gamma, dist, qk, rk;
   BOOL rotated;

   if(natoms < 3)
   {
      printf("Not enough atoms (%d) to superposition molecules\n", natoms);
      return;
   }

   matrix_alloc(&corr, 3, 3, TRUE);

/* calc cgx and cgy */
   cgx->x = cgx->y = cgx->z = 0.0;
   cgy->x = cgy->y = cgy->z = 0.0;
   for(i=0; i<natoms; i++)
   {
      vector_add(cgx, &xfrag->atom[xatom[i]].pos, cgx);
      vector_add(cgy, &yfrag->atom[yatom[i]].pos, cgy);
   }
   oneovern = 1.0 / (float) natoms;
   vector_scale(cgx, oneovern);
   vector_scale(cgy, oneovern);

/* initialise the correlation matrix, c'' in the paper */
   for(j=XAXIS; j<=ZAXIS; j++)
   {
      for(k=XAXIS; k<=ZAXIS; k++)
      {
	 sum = 0.0;
	 for(i=0; i<natoms; i++)
	    sum += (xcoord(i, j) - veccoord(cgx, j)) * (ycoord(i, k) - veccoord(cgy, k));
	 matrix_setelement(&corr, k, j, sum);
      }
   }
/* spos is a bit easier to do, this is M in the paper */
   matrix_makeunit(spos);

   itno = 0;
   do
   {
   /* calc the rotation needed about each axis */
      rotated = FALSE;
      for(p=XAXIS; p<=ZAXIS; p++)
      {
	 q = (p+1 <= ZAXIS) ? p+1 : XAXIS;
	 r = (q+1 <= ZAXIS) ? q+1 : XAXIS;
      /* calc the rotation needed, angle = arctan(sigma/gamma) */
	 sigma = matrix_getelement(&corr, r, q) - matrix_getelement(&corr, q, r);
	 gamma = matrix_getelement(&corr, q, q) + matrix_getelement(&corr, r, r);
      /* if the angle is not too small update the two matrices */
	 if(fabs(sigma / gamma) > SUPERPOSTOLERANCE)
	 {
	    dist = (float) sqrt(gamma*gamma + sigma*sigma);
	    if(dist != 0.0)
	    {
	       for(k=XAXIS; k<=ZAXIS; k++)
	       {
	       /* the superposition matrix */
		  qk = matrix_getelement(spos, q, k);
		  rk = matrix_getelement(spos, r, k);
		  matrix_setelement(spos, q, k, (gamma*qk + sigma*rk) / dist);
		  matrix_setelement(spos, r, k, (-sigma*qk + gamma*rk) / dist);
	       /* and the correlation matrix */
		  qk = matrix_getelement(&corr, q, k);
		  rk = matrix_getelement(&corr, r, k);
		  matrix_setelement(&corr, q, k, (gamma*qk + sigma*rk) / dist);
		  matrix_setelement(&corr, r, k, (-sigma*qk + gamma*rk) / dist);
	       }
	    }
	    rotated = TRUE;			/* make a note of the fact that a rotation was still needed */
	 }
      }
      itno++;
   }
   while(rotated && itno < MAXSUPERPOSITS);	/* until we didnt rotate about any axis, or we give up */

   matrix_forget(&corr);

   return;
}

#undef veccoord
#undef xcoord
#undef ycoord

=================================================================
=================================================================

/*
   utils.c

   Simon Kilvington, 1994
*/

#include "utils.h"

float
vector_len2(vector *vp)
{
   return (vp->x * vp->x) + (vp->y * vp->y) + (vp->z * vp->z);
}

vector *
vector_add(vector *vp1, vector *vp2, vector *vp3)
{
   vp3->x = vp1->x + vp2->x;
   vp3->y = vp1->y + vp2->y;
   vp3->z = vp1->z + vp2->z;

   return vp3;
}

vector *
vector_sub(vector *vp1, vector *vp2, vector *vp3)
{
   vp3->x =vp1->x - vp2->x;
   vp3->y =vp1->y - vp2->y;
   vp3->z =vp1->z - vp2->z;

   return vp3;
}

vector *
vector_scale(vector *v, float scalar)
{
   v->x *= scalar;
   v->y *= scalar;
   v->z *= scalar;

   return v;
}

BOOL
matrix_alloc(matrix *m, int rows, int cols, BOOL quit)
{
   if(!(m->element = (matrix_element_t *) malloc(rows * cols * sizeof(matrix_element_t))))
   {
      printf("Out of memory in matrix_alloc\n");
      if(quit)
	 exit(1);
      return FALSE;
   }

   m->rows = rows;
   m->cols = cols;

   return TRUE;
}

matrix *
matrix_makeunit(matrix *m)
{
   int i, j;

   for(i=0; i<m->rows; i++)
      for(j=0; j<m->cols; j++)
	 matrix_setelement(m, i, j, (i==j) ? 1.0 : 0.0);

   return m;
}

matrix *
matrix_mult(matrix *m1, matrix *m2, matrix *r)
{
   int i, j, k;
   matrix_element_t e;

   if(m1->cols != m2->rows)
   {
      printf("Matrices are of incompatible sizes in matrix_mult\n");
      exit(1);
   }

   matrix_alloc(r, m1->rows, m2->cols, TRUE);

   for(i=0; i<m1->rows; i++)
   {
      for(j=0; j<m2->cols; j++)
      {
         e=0;
         for(k=0; k<m1->cols; k++)
            e += matrix_getelement(m1, i, k) * matrix_getelement(m2, k, j);
         matrix_setelement(r, i, j, e);
      }
   }

   return r;
}

=================================================================
=================================================================

/*
   utils.h

   Simon Kilvington, 1994
*/

#include <math.h>
#include <stdio.h>

typedef enum {FALSE, TRUE} BOOL;

typedef struct
{
   float x, y, z;
} vector;

float vector_len2(vector *);
#define vector_len(VP)		sqrt(vector_len2(VP))

vector *vector_add(vector *, vector *, vector *);
vector *vector_sub(vector *, vector *, vector *);

vector *vector_scale(vector *, float);

typedef float matrix_element_t;

/* a matrix is just a dope vector and a ptr to an array of elements */
typedef struct
{
   int rows, cols;
   matrix_element_t *element;
} matrix;

#define matrix_elementptr(mat, i, j)		(((mat)->element) + ((j) * (mat)->rows) + (i))
#define matrix_setelement(mat, i, j, val)	(*(matrix_elementptr(mat, i, j)) = (val))
#define matrix_getelement(mat, i, j)		(*(matrix_elementptr(mat, i, j)))

BOOL matrix_alloc(matrix *, int, int, BOOL);
#define matrix_forget(mat)			(free((mat)->element), (mat)->rows = (mat)->cols = 0)

matrix *matrix_makeunit(matrix *);

matrix *matrix_mult(matrix *, matrix *, matrix *);

=================================================================
=================================================================

Here endeth todays source.


From CHEM8@vax.york.ac.uk  Mon Jul  4 14:25:49 1994
Received: from leeman.york.ac.uk  for CHEM8@vax.york.ac.uk
	by www.ccl.net (8.6.9/930601.1506) id OAA06183; Mon, 4 Jul 1994 14:21:25 -0400
Via: uk.ac.york.vax; Mon, 4 Jul 1994 19:17:05 +0100
Date: Mon, 4 Jul 94 19:22 BST
From: "John Waite, Tel 1-7238958, N.H.R.F., Vas. Konstantinou 48, Athens 116-35" 
      <CHEM8@vax.york.ac.uk>
To: CHEMISTRY <CHEMISTRY@ccl.net>
Subject: Summary: Extended Huckel availability
Message-ID: <"leeman.yor.831:04.06.94.18.17.08"@york.ac.uk>


  
   Hi CC's,
     My original request was: 
 
>    Does anyone have a 3-D Extended Huckel code, in C or Fortran, available
>  for free, or know where such a program can be obtained?
>     Hopefully,
>       John Waite
> 
>    CHEM8@VAX.YORK.AC.UK
 
   Below are the responses I received, plus some comments from me:
 
An extended-Hueckel package including FORTRAN sources and manual is available
at QCPE (QCMP #116). It is called ICONC&INPUTC.
 
With kind regards 
 
Martin Braendle
 
--------------------------------------------------------------------------------
Martin Braendle, Institute for Inorganic and Physical Chemistry, University of
Berne, Freiestr. 3, CH-3012 Berne, Tel. ~41 31 631 42 25, Fax ~41 31 631 39 94,
Email braendle@solar.iac.unibe.ch (or braendle@iac.unibe.ch)
 
*****************************************************************************
 
 From JOHN.SIMMIE@UCG.IE
 
Mealli and Proserpio's CACAO package includes an excellent extended Huckel
based on a mojor revision of Hoffmann's programme
 
ftp from stinch0.csmtbo.mi.cnr.it
 
  I could not find CACAO at this address, so asked John for their e-mail
 addresses:
 
Carlo Mealli is at mealli@cacao.issecc.fi.cnr.it
and
Davide Proserpio at davide@stinch0.csmtbo.mi.cnr.it
 
OK?
 
************************************************************************
 
From: boehm@edu.msu.cem.mulliken (Randy Boehm)
Yes,
1) There is a code available through QCPE by Whangbo, Hoffman etc.
2) Also, I have such a code developed in house but I'm not sure
   I can distribute it freely.  I will check for you.
 
               Next day
 
Dear John,
 
 The good news is that I can send you my code.  The bad news is that, in
its current form, it is so unfriendly that even I do not like using it.
Plans are in the works for a slick interface.
 
You should be recieving two files from me: solid7.f and test.f
solid7.f is the main code.  test.f is a routine which generates all of the
input files used by solid7.f  I hope test.f will be fairly easy to figure
out as all of the variable names are obvious.
 
Two important points you need to be aware of: 1) the normalization factor
which is often kept separate from the expansion coefficient is folded into
the expansion coefficients here.  2) The primitives must be ordered as
follows: all s-type primitives, all p-type primitives (x,y,z), all d-type
(X2-Y2,XY,XZ,YZ,2Z2-X2-Y2), etc and the sum of ns+np+nd must equal nprim
and mprim.  I guess I should send you a copy of the routine I use to do
this sorting-- That will come later.
 
Please do not distribute this code.
 
 
No doubt you will have questions. I'll be happy to answer any questions you
have.
 
boehm@slater.cem.msu.edu
Randall C. Boehm  
Michigan State University and Quantum Improvements
 
                 Next day
John,
  
 To follow I am sending two programs I have used to sort the primitives
that are to be used in my band structure package.  The initial values
are taken from a previous run on an isolated cluster, and the flags
asis=.true. and aobasis=.false. can be set.  If you plan on setting
aobasis=.true. then it may be just as easy to modify "test.f" to give
you what is needed.
  Anyway, feel free to browse.
 
 I recived all these codes - extremely helpful,
  Thank you
 
*****************************************************************************
 
From: liang <liang@edu.ncsu.chem.chvxmw>
 
You may get the source code in FORTRAN from QCPE. The name of the program is
EHMACC (Extended Huckel Molecular and Crystal Calculations), and the principal
author is Professor M.-H. Whangbo at North Carolina State University, USA.
A PC version (executable) of that program and other related programs which
manipulate and optimize molecular and crystal structures and calculate solid 
properties such as DOS, Fermi surface will be available soon from the author 
for a minimal cost. The email of Dr. Whangbo is WHANGBO@CHVZMW.CHEM.NCSU.EDU. 
Hope this helps.
 
*****************************************************************************
 
From: De la Mora y Palomar Askinasy Pablo -FC <delamora@mx.unam.dgsca.redvax1>
 
I have a version of the Extended Huckel program, the one developed by 
Roald Hoffmann. You could also get it from him.
                Yours
                        Pablo de la Mora
 
 On requesting a copy of Pablo's code, I received it by return,
 Thanks again, Pablo
 
****************************************************************************

    Thank you all who replied and to the List that made it possible.

      John Waite

From KZHANG@MIAMIU.ACS.MUOHIO.EDU  Mon Jul  4 15:25:50 1994
Received: from MIAMIU.ACS.MUOHIO.EDU  for KZHANG@MIAMIU.ACS.MUOHIO.EDU
	by www.ccl.net (8.6.9/930601.1506) id PAA06494; Mon, 4 Jul 1994 15:15:00 -0400
Message-Id: <199407041915.PAA06494@www.ccl.net>
Received: from MIAMIU by MIAMIU.ACS.MUOHIO.EDU (IBM VM SMTP V2R2)
   with BSMTP id 9827; Mon, 04 Jul 94 15:16:15 EST
Received: from MIAMIU (KZHANG) by MIAMIU (Mailer R2.08) with BSMTP id 6573;
 Mon, 04 Jul 94 15:16:14 EST
Date:         Mon, 04 Jul 94 15:06:38 EST
From: Kui Zhang <KZHANG@MIAMIU.ACS.MUOHIO.EDU>
Subject:      A Summary of Responses to my Ques about Calcs of Ln's & Ac's
To: chemistry@ccl.net


     The follewing is a summary of the reponses that I received to my
recent question about the calculations of the Ln's and Ac's elements.
I would like to sincerely thank everyone who helped me.

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Hi,
An all-electron fully relativistic ab initio calculation on EuO6 has been
reported by O. Visser et al in J. Chem. Phys.96 (1992) 2910. For possible
other ab initio work you might contact Bert de Jong <bert@chem.rug.nl>.
Wim Nieuwpoort.

W.C. Nieuwpoort
Laboratory of Chemical Physics and Materials Science Centre
University of Groningen
Nijenborgh 4
9747 AG Groningen, The Netherlands
ph.+31 50 634372, 634440 (secr), 634441 (fax)
e-mail nieuwpoort@chem.rug.nl
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Russ Pitzer's group at Ohio State University has done a lot of work on
effective core potentials for heavy elements.  Dr. Pitzer's email address
is pitzer@mps.ohio-state.edu.  Or look up R. Ross and R. Pitzer.

Hope this helps.

Dave Ewing
John Carroll University
ewing@jcvaxa.jcu.edu

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Hi,
An all-electron fully relativistic ab initio calculation on EuO6 has been
reported by O. Visser et al in J. Chem. Phys.96 (1992) 2910. For possible
other ab initio work you might contact Bert de Jong <bert@chem.rug.nl>.
Wim Nieuwpoort.

W.C. Nieuwpoort
Laboratory of Chemical Physics and Materials Science Centre
University of Groningen
Nijenborgh 4
9747 AG Groningen, The Netherlands
ph.+31 50 634372, 634440 (secr), 634441 (fax)
e-mail nieuwpoort@chem.rug.nl
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Howdy,
	Our group in collaboration with Walt Stevens developed an ECP
scheme for the lanthanides that is consistent with those developed
by Walt et al. for the TMs.  The ref. is J Chem Phys, 1993, 98, 5555.
Dolg and associates have developed ECPs for the lanthanides
(Theor Chim Acta 1989, 75, 369 and J Chem Phys 1989, 90, 1730 are the
refs, I believe).  Ross et al. have a lanthanide ECP scheme, but I do not
know if that has been published yet.
	The Dolg group has used their Ln's and as I recall seen good
agreement between calcd and exptl energetic data.  We have just finished
testing our Ln ECPs out for prediction of the geometries of the 56 LnX3
compounds (Ln = Ce to Lu; X = F, Cl, Br, I) and see agreement with electron
diffraction data to within 2% for the Ln-X bond lengths.
	Off the top of my head, I can't recall ever seeing all-electron
calcs on lanthanide complexes.  Pyykko may have done some relativistic,
one-center expansion (OCE) calcs on lanthanide hydrides. The exact ref should
be in his recent Chem Rev paper on relativistic effects in chemistry.
	Zerner and co-workers have performed INDO calcs on lanthanide
complexes.  The ref is Theor Chim Acta 1987, 71, 21 and there is a more recent
one which I believe is in TCA.  Jing-Qing et al. have done some INDO calcs.
on Ln organometallics.  One ref I have is Int. J. Quantum Chem 1986, 29, 1017.
	As for actinide calcs the best source is the recent Chem Rev article
by Bursten.  It has appeared within the past three years or so.  Jeff
Hay has also done some ECP calcs for An(CH3)3 complexes, this was a JACS
communication with Ortiz and Martin.  Sorry no ref, it's at home!

	Hope this helps.  Let me know if there are more Ln calcs out there!

Tom
------------------------------------------------------------------------------
Thomas R. Cundari                         Address until the end of August
Asst. Professor of Chemistry              Tom Cundari
Computational Inorganic Chemistry Lab     Visiting Scientist
University of Memphis                     CST-3, C346
Memphis, TN 38152                         Los Alamos National Lab
phone: 901-678-2629                       Los Alamos, NM 87545
fax:   901-678-3447
e-mail: cundarit@memstvx1.memst.edu
http://www.memst.edu/chemistry/umchem.html
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Hi Kui Zhang:

The only reasonably accessible ab initio way of calculating Ln's and Ac's is
to use relativistic pseudopotentials (apart from relativistically
corrected DFT methods). The most accurate ECPs at present are those of
Dolg et al.. Depending on the types of applications you are looking for,
you may consider either Ln ECP's a) with or b) without f-electrons as part of
the core (ref. a) M.DOLG ET AL., THEOR.CHIM.ACTA 75, 173 (1989),
b) e.g. M.DOLG ET AL., J. CHEM. PHYS. 90, 1730 (1989).
Note that the latter calculations (e.g. for spectroscopic applications)
are very demanding and far from trivial to
do. Even more demanding are the actinides (ECP's: Kuechle, Dolg, Preuss
J. Chem. Phys. 1994, 100, 7535).
Hope this helps you a little.

Regards, Martin

************************************************************
*   Dr. Martin Kaupp                                       *
*   Departement de chimie                                  *
*   Universite de Montreal                                 *
*   C.P. 6128, Succ. A                                     *
*   Montreal, Quebec  H3C 3J7                              *
*   Canada                                                 *
*                  email kauppm@chims1.chimcn.umontreal.ca *
************************************************************
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

I haven't actually done any such calculations myself, but I can think of
at least two methods.

(1) Pekka Pykko had a Relativistic Extended Huckel program which would
    run on PCs a few years ago.  It was free I believe, but you'd have
    to contact him to get a copy.  I don't know an e-mail address for
    him, but Leif Laaksonen probably would, and he has posted to the
    CCL in the past.  You could either try ordinary mail to Finland, or
    search the CCL archives for Laaksonen.

(2) Density functional theory can be used on such many-electron
    systems, but is considerably more expensive than extended Huckel
    theory of course.  The Amsterdam code (ADF) includes some
    relativistic effects.  Contact Bert TeVelde if you wish to pursue
    this course (tevelde@chem.vu.nl).  ADF costs a small amount of
    money -- like a few hundred dollars, or so.


Cheers,
Ross Dickson  (dickson@zinc.chem.ucalgary.ca)
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Dear Kui Zhang,

Prof. Michael C. Zerner in collaboration with Prof. Noetker
Roesch have enhanced the semiempirical quantum mechanics program
'ZINDO' to handle the Lanthanide and Actinide elements although
I don't think the necessary parameters and spin-orbit Hamiltonian
are available in any commercial implementation yet.

Max Muir


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Hi!

I could only suggest that you  look into the  DFT literature.
Regarding semi-empirical methods, CUNDARI recently performed
computations on a Gadolinium compound. I think the reference
is in INORGANIC CHEMISTRY, a letter within the last year.

I would be interested in the summary of responses.

gus mercier
mercie@cumc.cornell.edu

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

From hooft@EMBL-Heidelberg.DE  Mon Jul  4 19:25:53 1994
Received: from hawk.EMBL-Heidelberg.DE  for hooft@EMBL-Heidelberg.DE
	by www.ccl.net (8.6.9/930601.1506) id SAA07264; Mon, 4 Jul 1994 18:37:27 -0400
From: <hooft@EMBL-Heidelberg.DE>
Received: from nu.EMBL-Heidelberg.DE by hawk.EMBL-Heidelberg.DE via SMTP (931110.SGI/930901.SGI)
	for chemistry@ccl.net id AA11236; Tue, 5 Jul 94 00:40:00 +0100
Received: by nu (8.6.8.1) id AAA16546; Tue, 5 Jul 1994 00:37:26 +0200
Date: Tue, 5 Jul 1994 00:37:26 +0200
Message-Id: <199407042237.AAA16546@nu>
To: chemistry@ccl.net
Subject: molecular superpositioning program


A followup to the posting of a molecular superposition program to this
forum:

Except in trivial cases it can be quite cumbersome to create a list of
atom pairs to be superposed! An alternative is using the superposition
option in WHAT IF, that automatically creates these lists. WHAT IF is
available for a nominal distribution fee. If you're interested in more
information about WHAT IF you can get that from WWW:
http://www.sander.embl-heidelberg.de/whatif/

Rob Hooft.


From J0LIU001@ULKYVX.LOUISVILLE.EDU  Mon Jul  4 22:25:55 1994
Received: from ulkyvx.louisville.edu  for J0LIU001@ULKYVX.LOUISVILLE.EDU
	by www.ccl.net (8.6.9/930601.1506) id VAA07879; Mon, 4 Jul 1994 21:36:22 -0400
Received: from ULKYVX.LOUISVILLE.EDU by ULKYVX.LOUISVILLE.EDU (PMDF V4.2-11
 #6403) id <01HEBMYHPPOW8WWFWV@ULKYVX.LOUISVILLE.EDU>; Mon,
 4 Jul 1994 21:36:08 EST
Date: Mon, 04 Jul 1994 21:36:08 -0500 (EST)
From: "jianling liu-->DERBY HORSE" <J0LIU001@ULKYVX.LOUISVILLE.EDU>
Subject: inorganic chemistry
To: chemistry@ccl.net
Message-id: <01HEBMYHQIMQ8WWFWV@ULKYVX.LOUISVILLE.EDU>
X-VMS-To: IN%"chemistry@ccl.net"
X-VMS-Cc: J0LIU001
MIME-version: 1.0
Content-type: TEXT/PLAIN; CHARSET=US-ASCII
Content-transfer-encoding: 7BIT


Happy holiday, netters:

 Inorganic chemistry is a fascinating area, but those promising
 inorganic chemists --- (future Ph.Ds with major of Inorg. Chem.)
 are facing even more problems in this BAD job market, comparing to their
 organic or analytical fellows.

 I got this impression from C&E NEWS, various newspapers and the FACTs that
 are happening in many(?) universities:people(students) are moving out of
 inorganic chemistry area to Organic,Biochemistry,Analytical etc...OR they
 just don't consider INORGANIC when they first choose their research group.
 While organic MS and Ph.Ds have MULTIPLE choices during job searching,
 INORGANIC people are not so lucky --- they have little hope!
  
 In one word,job chances are the incentives. This really make inorganic 
 students feel frustrated and it HURTS science.

 I want to hear  your opinion.
 Please direct e-mail to me.I will summarize on the net.

 BEST WISHES

