Bump - another patch.

On 20 July 2011 20:29, Izhar Wallach <izh...@cs.toronto.edu> wrote:
> I just noticed that my suggested code below has a bug...
> currConf should hold the index of the current conformation and not a pointer
> to it (because that memory address belongs to the source object).
> So, below is the corrected code. Hopefully no noticeable bugs this time ;-)
>
> Cheers,
> Izhar
>
> ----------------
> //Copy conformer
> information
> if (src.NumConformers() >
> 1)
> {
>       int
> k,l;
>       vector<double*>
> conf;
>       int currConf =
> -1;
>       double* xyz =
> NULL;
>       for (k=0 ; k<src.NumConformers() ; ++k)
> {
>         xyz = new double
> [3*src.NumAtoms()];
>         memcpy( xyz, src.GetConformer(k), sizeof( double )*3*src.NumAtoms()
> );
>
> conf.push_back(xyz);
>
>         if( src.GetConformer(k) == src._c )
> {
>           currConf =
> k;
>
> }
>       }
>
>
> SetConformers(conf);
>       if( currConf >= 0 && _vconf.size() )
> {
>         _c =
> _vconf[currConf];
>
> }
>     }
>
>
> On Wed, Jul 13, 2011 at 2:31 PM, Izhar Wallach <izh...@cs.toronto.edu>
> wrote:
>>
>> Hi all,
>>
>> I noticed that when a molecule has multiple conformations the assignment
>> operator in OBMol does not copy properly the active conformation  but rather
>> sets it to be the first one in the conformation set.
>> I guess this happens because the molecule object does not "remember" the
>> index of the currently active one but rather just points to it.
>>
>> It seems to me this is more of a bug than a feature because when copying a
>> molecule one expects to copy its full state and not resets it to some
>> arbitrary configuration.
>>
>> Below are my suggested small modifications to the code in mol.cpp (line
>> #~1300)  that solve this issue (given the right commit permissions I will
>> modify the code directly...).
>>
>> Thanks,
>> Izhar
>> --------------------------
>> //Copy conformer
>> information
>> if (src.NumConformers() > 1) {
>>         int k,l;
>>         vector<double*> conf;
>>         double* currConf = NULL;   // NEW
>>
>>         double* xyz = NULL;
>>         for (k=0 ; k<src.NumConformers() ; ++k) {
>>             xyz = new double [3*src.NumAtoms()];
>>             //for (l=0 ; l<(int) (3*src.NumAtoms()) ;
>> ++l)
>>             //  xyz[l] = src.GetConformer(k)[l];
>>             memcpy( xyz, src.GetConformer(k), sizeof( double
>> )*3*src.NumAtoms() ); // while we are here, this is more efficient than the
>> above loop
>>             conf.push_back(xyz);
>>
>>             if( src.GetConformer(k) == src._c ) { // NEW
>>
>>               currConf =
>> src._c;
>>
>> }
>>         }
>>
>> SetConformers(conf);
>>         if( currConf ) { // NEW
>>
>>           _c =
>> currConf;
>>
>> }
>>       }
>>
>
>
> ------------------------------------------------------------------------------
> 10 Tips for Better Web Security
> Learn 10 ways to better secure your business today. Topics covered include:
> Web security, SSL, hacker attacks & Denial of Service (DoS), private keys,
> security Microsoft Exchange, secure Instant Messaging, and much more.
> http://www.accelacomm.com/jaw/sfnl/114/51426210/
> _______________________________________________
> OpenBabel-Devel mailing list
> OpenBabel-Devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openbabel-devel
>
>

------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
http://p.sf.net/sfu/rim-devcon-copy2
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel

Reply via email to