fragmentClass.cpp

Go to the documentation of this file.
00001 //
00002 // Utilitaires  pour manipuler les fichiers pdb
00003 //
00004 #include "fragmentClass.h"
00005 //
00006 //
00007 #include <iostream>
00008 #include <iomanip>
00009 #include <sstream>
00010 #include <algorithm>
00011 
00012 #include "newTools.h"
00013 
00014 FragmentElement::FragmentElement()  : _numberOfElectrons(0),_numberOfOA(0),_name("DefaultGroup"),_atoms(),_index(NULL)
00015 {
00016   _centre[0]  = _centre[1]  = _centre[2]  = 0.0 ;
00017   _coinMin[0] = _coinMin[1] = _coinMin[2] = 0.0 ;
00018   _coinMax[0] = _coinMax[1] = _coinMax[2] = 0.0 ;
00019 }
00020 FragmentElement::~FragmentElement() 
00021 {}
00022 void FragmentElement::setLoad(){
00023   _numberOfOA  = 0 ;
00024   for ( int i = 0 ; i< _atoms.getNumberOfAtoms() ; ++i){
00025     _numberOfOA    += giveNumberOfOA( _atoms.getName(i)) ;
00026   }
00027 }
00028 
00029 void FragmentElement::writeQCIFile(std::ofstream & out){
00030   //
00031   out <<"   "<<this->_name
00032       << std::setw(15) << this->_centre[0] 
00033       << std::setw(15) << this->_centre[1] 
00034       << std::setw(15) << this->_centre[2] 
00035       << "    "<< this->numberOfAtoms() << "  ";
00036   int val = 0 ;
00037   for (int i = 0 ; i <this->numberOfAtoms() ; ++i){
00038     val += giveNumberOfOA(_atoms.getName(i) ) ;
00039     //    std::cout << _atoms.getName(i) << "  " << val << std::endl;
00040   }
00041   out<< val  << std::endl;
00042   //  std::cout << std::endl;
00043 }
00044 void FragmentElement:: setAtoms(const int beginAtom, const int EndAtom, const setOfAtoms &atoms)
00045 {
00046   _atoms.copyFrom(beginAtom,EndAtom,atoms) ;
00047 }
00048 
00049 //
00050 // ====================== END of  FragmentElement
00051 //
00052 setOfFragments::setOfFragments() :  _numberOfFragments(0), _fragments(NULL)
00053 {}
00054 setOfFragments::setOfFragments(const int size)  :  _numberOfFragments(size), 
00055                                               _fragments(new FragmentElement[size])
00056 {}
00057 
00058 setOfFragments::~setOfFragments()
00059 {
00060   if(_fragments != NULL)
00061     {delete [] _fragments ; _fragments = NULL ;}
00062   _numberOfFragments = 0 ;
00063   
00064 }
00065 bool setOfFragments::buildFromAtoms(setOfAtoms &atoms) 
00066 {
00067   //
00068   this->_numberOfFragments = atoms.getNumberOfFragments();
00069   std ::cout << "_numberOfFragments " << _numberOfFragments << std::endl; 
00070   this->_fragments         = new FragmentElement[this->_numberOfFragments] ;
00071   //
00072   // remplissage
00073   //
00074   int          numberOfAtoms = atoms.getNumberOfAtoms() ;
00075   atomElement  currentAtoms ;
00076   std::string  frag  ;
00077   int          beginAtom, EndAtom ;
00078   //
00079   beginAtom = 0 ; 
00080   for ( int i = 0 ; i < this->_numberOfFragments ; ++i){
00081 
00082     EndAtom = beginAtom;
00083     frag    = atoms.getElement(beginAtom).getFragmentName();
00084     while( EndAtom < numberOfAtoms  && atoms.getElement(EndAtom).getFragmentName() == frag )
00085       {
00086         EndAtom++ ;
00087       }
00088     this->_fragments[i]._name.assign(frag) ;
00089     this->_fragments[i]._atoms.setNumberOfAtoms(EndAtom-beginAtom);
00090 
00091     this->_fragments[i].setAtoms( beginAtom, EndAtom,atoms);
00092     this->_fragments[i]._atoms.buildGravityCenter(this->_fragments[i]._centre  );
00093     this->_fragments[i]._atoms.findMinMax(this->_fragments[i]._coinMin, 
00094                                          this->_fragments[i]._coinMax  );
00095     int size = EndAtom - beginAtom  ;
00096     this->_fragments[i]._index = new int [ size ] ;
00097     for ( int j = 0 ; j < size ; ++j){
00098       (this->_fragments[i])._index[j] = beginAtom + j ;
00099     }
00100     beginAtom =  EndAtom ;
00101   }
00102   //
00103   int num = 0 ;
00104   for ( int i = 0 ; i < this->_numberOfFragments ; ++i){
00105     num +=  this->_fragments[i].numberOfAtoms() ;
00106     this->_fragments[i].setLoad() ;
00107   }
00108   //
00109   _numberOfAtomsInAllFragments = num ;
00110   return true;
00111 }
00112 void setOfFragments::writeQCIFile(std::ofstream & out){
00113   //
00114   // write header
00115   //
00116   out <<  this->_numberOfFragments <<std::endl 
00117       << "Generated by setOfFragments::writeQCIFile " <<std::endl;
00118   // write atoms
00119   for( int i = 0 ; i < this->_numberOfFragments ; ++i){
00120     this->_fragments[i].writeQCIFile(out) ;
00121    }
00122 }
00123 void setOfFragments::writeToFile(std::ofstream & out){
00124   //
00125   // write header
00126   //
00127   out <<  this->_numberOfFragments <<std::endl 
00128       << "Generated by setOfFragments::writeToFile " <<std::endl;
00129   // write atoms
00130   int nbAtoms ;
00131   for( int i = 0 ; i < this->_numberOfFragments ; ++i){
00132     FragmentElement & f = this->_fragments[i] ;
00133     nbAtoms = f.numberOfAtoms() ; 
00134     out << f._name  << "   " <<  nbAtoms <<"   " <<  f.load() << std::endl ;
00135     out << "             " << std::setw(12) << f._centre[0]  << std::setw(12) << f._centre[1] << std::setw(12) << f._centre[2]  <<std::endl
00136         << "             " << std::setw(12) << f._coinMin[0] << std::setw(12)<< f._coinMin[1] << std::setw(12) << f._coinMin[2] <<std::endl
00137         << "             " << std::setw(12) << f._coinMax[0] << std::setw(12)<< f._coinMax[1] << std::setw(12) << f._coinMax[2] <<std::endl
00138         << "             " ;
00139     for(int j = 0; j < nbAtoms ; ++j){
00140       out << f._atoms.getName(j) << "   ";
00141     }
00142     out <<std::endl;
00143     out << "             " ;
00144     for(int j = 0; j < nbAtoms ; ++j){
00145       out << f._index[j] << "  " ;
00146     }
00147     out <<std::endl;
00148   }
00149 }
00150 
00151 void setOfFragments::writeUCDFile(std::ofstream & out){
00152   //
00153   // write header
00154   //
00155   out <<  "#"<<std::endl
00156       <<  "# Fragment representation "<< std::endl 
00157       <<  "#" << std::endl << "1" <<std::endl<< "geom" <<std::endl <<"step1" << std::endl 
00158       << this->_numberOfFragments << "  " << this->_numberOfFragments -1<< std::endl ;
00159   //
00160   // Affichage coordonnes des points
00161   //
00162   for( int i = 0 ; i < this->_numberOfFragments ; ++i){
00163     FragmentElement & f = this->_fragments[i] ;
00164     out << "  "<< i+ 1 <<  std::setw(12) << f._centre[0] << std::setw(12) << f._centre[1] << std::setw(12) << f._centre[2]  <<std::endl ;
00165   }
00166   //
00167   // Affichage des connections
00168   //
00169    for( int i = 1 ; i <= this->_numberOfFragments -1; ++i){
00170      out << "  "<< i <<  " 1   line  " << i << "  "<< std::min(i+1,this->_numberOfFragments) << std::endl ;
00171   }
00172  //
00173   // Affichage coordonnes des points
00174   //
00175   out << " 1   0 " <<std::endl
00176       << " 1   1 "  << std::endl 
00177       << "Charge, nbAtoms" << std::endl;
00178   for(int i = 0; i < this->_numberOfFragments ; ++i){
00179     out << "   " <<i+1 << "  " <<this->_fragments[i].numberOfAtoms() << std::endl ;
00180     }
00181 }
00182 

Generated on Sat Jan 28 21:07:25 2006 for QC++ by  doxygen 1.4.4