Igor

It is my understanding that it is not necessary to provide an explicit 
destructor for OBReaction because the compiler will generate a one 
automatically. It will be virtual because the base class OBBase has an 
explicit virtual destructor.

The test program below seems to work as expected for me in Visual Studio 
2008. The extra { and } mean the OBReaction object (on the stack) is 
destroyed before the return 0.

Could there be a problem with the destruction of the shared_ptr members?
Can you post your failing example?


#include <iostream>
#include <openbabel/mol.h>
#include <openbabel/obconversion.h>
#include <openbabel/reaction.h>

using namespace OpenBabel;

int main(int argc, char **argv)
{
   {
     OBConversion conv;
     if(!conv.SetInAndOutFormats("rsmi","rsmi"))
     {
       std::cout << "rsmi format not found" << std::endl;
       return 1;
     }
     OBReaction react;
     if(!conv.ReadFile(&react, "example.rsmi"))
     {
       std::cout << "File example.rsmi not found" << std::endl;
       return 2;
     }
     std::cout << "Reaction has " << react.NumProducts() << " products" 
<< std::endl;
     conv.Write(&react, &std::cout);
   }
   return 0;
}


example.rsmi

CCO>>C=C.O


Chris


On 03/05/2012 21:43, Igor Filippov [Contr] wrote:
> Chris,
>
> I'm finally picking up the thread with the reactions.
> A quick question for you - my first attempt to follow through on your
> example got me a seg fault - OBReaction does not seem to have a
> destructor, so when react goes out of scope my program crashes.
>
> I was able to work around this by allocating react on the heap and never
> deleting it but this is ugly and likely to lead to memory leaks.
> There is got to be a better way?!
>
> Igor
>
> On Tue, 2011-07-19 at 16:03 -0400, Chris Morley wrote:
>> On 19/07/2011 17:17, Igor Filippov wrote:
>>> Chris,
>>>
>>> Thank you. Simple approach - just pointers to OBMol's for reactans and
>>> products is just fine for now. I looked at OBReaction and it seems
>>> reasonably clear.
>>>
>>> At the moment I'm focusing on writing out reactions from assembled
>>> OBMols into a file or string and not on the reading of reactions or any
>>> fancy manipulation. How do I write out RSMI from OBReaction - do I use
>>> OBConversion the same way as I do for regular file formats? Perhaps you
>>> have a three line example?
>>
>> Yes it is entirely analogous:
>>
>>    OBConversion conv;
>>    conv.SetInAndOutFormats("rsmi","rsmi");
>>    OBReaction react;
>>    conv.ReadFile(&react, "example.rsmi");
>>    conv.Write(&react,&cout);
>>
>> Chris
>>
>>> Best regards,
>>> Igor
>>>
>>> On Tue, 2011-07-19 at 12:01 -0400, Chris Morley wrote:
>>>> Igor
>>>>
>>>> OpenBabel supports formats like, CMLreact, RXN Reaction SMILES, ChemKin,
>>>> which specify reactions. The internal structure is OBReaction which for
>>>> reaction formats is handled in the conversion routines like OBMol is for
>>>> molecule formats. Reading a file containing
>>>> c1ccccc1>>Nc1ccccc1
>>>> with rmsi format will make an OBReaction. OBReaction is fairly simple
>>>> and is really just a container to hold shared_ptrs to the molecules
>>>> which are the reactants, products, etc. OB doesn't have much for
>>>> constructing or modifying reactions.
>>>>
>>>> I've written a version of chemdrawCDX.cpp which reads reactions as well
>>>> as molecules. The code contains the construction of an OBReaction and
>>>> its transfer to OB's conversion system. The email describing it that I
>>>> sent to Abe Heifets (who may be who Geoff is referring to) is below. The
>>>> files are at:
>>>> http://gaseq.co.uk/OB/benzene-to-aniline-reaction.cdx
>>>> http://gaseq.co.uk/OB/chemdrawcdx.h
>>>> http://gaseq.co.uk/OB/chemdrawcdx.cpp
>>>>
>>>> This is stalled at the moment because of the need to add code to parse a
>>>> geometric layout and derive which molecules are reactants, products,
>>>> etc. I guess this is what you are doing, so I would be interested if you
>>>> have a method already.
>>>>
>>>> Chris
>>>>
>>>>
>>>>
>>>>
>>>> Abe
>>>> You might be interested in this OpenBabel format for reading CDX files.
>>>> It reads reactions as well as molecules, but only if they are single
>>>> reactions and completely described. The attached example works but most
>>>> of the examples from patents you sent me don't. The code needs some
>>>> extra heuristics to find incompletely described reactions, but I haven't
>>>> yet managed to write it in the past six months.
>>>>
>>>> The format generates OBReaction objects when it can, which can be output
>>>> by rsmi, rxn, etc. Excess molecules are output as OBMol objects as
>>>> normal. The option -am generates only molecules. Actually most molecule
>>>> output formats will output the reactants and products if given an
>>>> OBReaction.
>>>>
>>>> The parsing is separated from the interpretation to a greater extent
>>>> than before, which should make it easier to do an XML version.
>>>>
>>>> It is also possible (-ad) to output the CDX tree, in a similar way to
>>>> CDXHexDumper, except that it contains human-readable names.
>>>>
>>>> The attached file should replace the existing one, and I hope will
>>>> compile ok. A copy of chemdrawcdx.h should be put in the /data directory
>>>> so it can be parsed for the names.
>>>>
>>>>
>>>>
>>>> On 18/07/2011 16:33, Geoffrey Hutchison wrote:
>>>>> Dear Igor,
>>>>>
>>>>> Open Babel supports CML (react) and MDL Rxn formats for reactions. I'm 
>>>>> not sure if there's great support for polymers, but that would definitely 
>>>>> be a nice addition. I know someone who's working on ChemDraw reaction 
>>>>> support as well.
>>>>>
>>>>> Chris Morley should have an example of a reaction file example -- I'm not 
>>>>> seeing anything at the moment in the OBReaction documentation. If Chris 
>>>>> doesn't respond today, I'll dig around tomorrow.
>>>>>
>>>>> Thanks and best regards,
>>>>> -Geoff
>>>>>
>>>>> On Jul 18, 2011, at 11:25 AM, Igor Filippov [Contr] wrote:
>>>>>
>>>>>> Dear Geoff,
>>>>>>
>>>>>> Re: reaction recognition in OSRA -
>>>>>> Is there any format or formats which OpenBabel can write that have
>>>>>> support for reactions and/or polymers (brackets)? It doesn't have to be
>>>>>> the same format for both.
>>>>>> How would I go about creating a reaction file or a polymer in C++?
>>>>>>
>>>>>> Igor
>>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Magic Quadrant for Content-Aware Data Loss Prevention
>> Research study explores the data loss prevention market. Includes in-depth
>> analysis on the changes within the DLP market, and the criteria used to
>> evaluate the strengths and weaknesses of these DLP solutions.
>> http://www.accelacomm.com/jaw/sfnl/114/51385063/
>> _______________________________________________
>> OpenBabel-Devel mailing list
>> OpenBabel-Devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/openbabel-devel
>
>
>


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel

Reply via email to