ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libBASS/MoleculeStamp.cpp
(Generate patch)

Comparing trunk/OOPSE/libBASS/MoleculeStamp.cpp (file contents):
Revision 828 by gezelter, Tue Oct 28 16:03:06 2003 UTC vs.
Revision 1113 by tim, Thu Apr 15 16:18:26 2004 UTC

# Line 13 | Line 13 | MoleculeStamp::MoleculeStamp(){
13    n_bonds = 0;
14    n_bends = 0;
15    n_torsions = 0;
16 +  n_rigidbodies = 0;
17 +  n_integrable = 0;
18  
19    unhandled = NULL;
20    atoms = NULL;
21    bonds = NULL;
22    bends = NULL;
23    torsions = NULL;
24 +  rigidBodies = NULL;
25  
26    have_name = 0;
27    have_atoms = 0;
28    have_bonds = 0;
29    have_bends = 0;
30    have_torsions = 0;
31 +  have_rigidbodies = 0;
32  
33   }
34  
# Line 32 | Line 36 | MoleculeStamp::~MoleculeStamp(){
36    int i;
37    
38    if( unhandled != NULL) delete unhandled;
39 <
39 >  
40 >  if( rigidBodies != NULL ) {
41 >    for( i=0; i<n_rigidbodies; i++ ) delete rigidBodies[i];
42 >  }
43 >  
44    if( atoms != NULL ){
45      for( i=0; i<n_atoms; i++ ) delete atoms[i];
46    }
# Line 74 | Line 82 | char* MoleculeStamp::assignDouble( char* lhs, double r
82      if( have_atoms ){
83        sprintf( errMsg,
84                 "MoleculeStamp error, n_atoms already declared"
85 <               "for molecule: %s\n",
85 >               " for molecule: %s\n",
86                 name);
87        return strdup( errMsg );
88      }
# Line 127 | Line 135 | char* MoleculeStamp::assignDouble( char* lhs, double r
135      torsions = new TorsionStamp*[n_torsions];
136      for( i=0; i<n_torsions; i++ ) torsions[i] = NULL;
137    }
138 +
139 +  else if( !strcmp( lhs, "nRigidBodies" ) ){
140 +    n_rigidbodies = (int)rhs;
141 +
142 +    if( have_rigidbodies ){
143 +      sprintf( errMsg,
144 +               "MoleculeStamp error, n_rigidbodies already declared for"
145 +               " molecule: %s\n",
146 +               name );
147 +      return strdup( errMsg );
148 +    }
149 +    have_rigidbodies = 1;
150 +    rigidBodies = new RigidBodyStamp*[n_rigidbodies];
151 +    for( i=0; i<n_rigidbodies; i++ ) rigidBodies[i] = NULL;
152 +  }
153 +
154    else{
155      if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
156      else unhandled->add( lhs, rhs );
# Line 197 | Line 221 | char*  MoleculeStamp::assignInt( char* lhs, int rhs ){
221      torsions = new TorsionStamp*[n_torsions];
222      for( i=0; i<n_torsions; i++ ) torsions[i] = NULL;
223    }
224 +
225 +  else if( !strcmp( lhs, "nRigidBodies" ) ){
226 +    n_rigidbodies = rhs;
227 +
228 +    if( have_rigidbodies ){
229 +      sprintf( errMsg,
230 +               "RigidBodyStamp error, n_rigidbodies already declared for"
231 +               " molecule: %s\n",
232 +               name);
233 +      return strdup( errMsg );
234 +    }
235 +    have_rigidbodies = 1;
236 +    rigidBodies = new RigidBodyStamp*[n_rigidbodies];
237 +    for( i=0; i<n_rigidbodies; i++ ) rigidBodies[i] = NULL;
238 +  }
239    else{
240      if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
241      else unhandled->add( lhs, rhs );
# Line 208 | Line 247 | char* MoleculeStamp::addAtom( AtomStamp* the_atom, int
247   char* MoleculeStamp::addAtom( AtomStamp* the_atom, int atomIndex ){
248    
249    if( have_atoms && atomIndex < n_atoms ) atoms[atomIndex] = the_atom;
250 <  else{
250 >  else {
251      if( have_atoms ){
252        sprintf( errMsg, "MoleculeStamp error, %d out of nAtoms range",
253                 atomIndex );
254        return strdup( errMsg );
255      }
256      else return strdup("MoleculeStamp error, nAtoms not given before"
257 <                       "first atom declaration." );
257 >                       " first atom declaration." );
258    }
259  
260 +  return NULL;
261 + }
262 +
263 + char* MoleculeStamp::addRigidBody( RigidBodyStamp* the_rigidbody,
264 +                                   int rigidBodyIndex ){
265 +  
266 +  if( have_rigidbodies && rigidBodyIndex < n_rigidbodies )
267 +    rigidBodies[rigidBodyIndex] = the_rigidbody;
268 +  else {
269 +    if( have_rigidbodies ){
270 +      sprintf( errMsg, "MoleculeStamp error, %d out of nRigidBodies range",
271 +               rigidBodyIndex );
272 +      return strdup( errMsg );
273 +    }
274 +    else return strdup("MoleculeStamp error, nRigidBodies not given before"
275 +                       " first rigidBody declaration." );
276 +  }
277 +  
278    return NULL;
279   }
280  
# Line 276 | Line 333 | char* MoleculeStamp::checkMe( void ){
333   char* MoleculeStamp::checkMe( void ){
334    
335    int i;
336 <  short int no_atom;
336 >  short int no_atom, no_rigidbody;
337 >
338 >  if( !have_name ) return strdup( "MoleculeStamp error. Molecule's name"
339 >                                  " was not given.\n" );
340    
341 <  if( !have_name || !have_atoms ){
342 <    if( !have_name ) return strdup( "MoleculeStamp error. Molecule's name"
283 <                                    " was not given.\n" );
284 <    else return strdup( "MoleculeStamp error. Molecule contains no atoms." );
341 >  if( !have_atoms ){
342 >    return strdup( "MoleculeStamp error. Molecule contains no atoms." );
343    }
344    
345 +  no_rigidbody = 0;
346 +  for( i=0; i<n_rigidbodies; i++ ){
347 +    if( rigidBodies[i] == NULL ) no_rigidbody = 1;
348 +  }
349 +
350 +  if( no_rigidbody ){
351 +    sprintf( errMsg,
352 +             "MoleculeStamp error. Not all of the RigidBodies were"
353 +             " declared in molecule \"%s\".\n", name );
354 +    return strdup( errMsg );
355 +  }
356 +
357    no_atom = 0;
358    for( i=0; i<n_atoms; i++ ){
359      if( atoms[i] == NULL ) no_atom = 1;
# Line 296 | Line 366 | char* MoleculeStamp::checkMe( void ){
366      return strdup( errMsg );
367    }
368  
369 +
370 +  n_integrable = n_atoms;
371 +  for (i = 0; i < n_rigidbodies; i++)
372 +    n_integrable = n_integrable - rigidBodies[i]->getNMembers() + 1; //rigidbody is an integrable object
373 +  
374 +  if (n_integrable <= 0 || n_integrable > n_atoms) {
375 +    sprintf( errMsg,
376 +             "MoleculeStamp error. n_integrable is either <= 0 or"
377 +             " greater than n_atoms in molecule \"%s\".\n", name );
378 +    return strdup( errMsg );
379 +  }
380 +
381    return NULL;
382 < }
382 > }  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines