* Catherine Lloyd <c.ll...@auckland.ac.nz> [2010-02-23 22:50] writes:
> Dear Andrew
> 
> I am forwarding Lucian's questions onto you in case you feel you have  
> to file tracker items for any of them or need to get in touch with  
> Lucian again.
> 
> I am also opening it up to the discussion list in case anyone else  
> would like to comment.

I can at least put the answers I got; here they are:

> Begin forwarded message:
> 
> >From: Lucian Smith <lpsm...@spod-central.org>
> >
> >-Currently, I must run my program from the directory with the  
> >'components/'
> >subdirectory.  Is there a way I can set things up so I can run my  
> >program
> >from anywhere?

The short answer is 'yes'; the longer answer is 'look at the OpenCell 
Installer'.  I may need some help here, but it's at least a start.

> >-In the model bertram_satin_pedersen_luciani_sherman_2007.cellml,  
> >'lambda'
> >gets translated into infix with a '$' before it.  Is this because  
> >'lambda'
> >is also a function name?  Does this happen with any other variables?

Yes.  Any variable may be prepended with the '$'; it's *required* for any 
variable that is also a reserved word.  There may be a list of reserved 
words somewhere; someone said they'd look into forwarding me a copy.

> >-Is there documentation about how you define your infix?

Not externally, but it's inside the help in OpenCell.

> >-If I get a 'failed to load external entity' exception, it SIGABRTs  
> >me,
> >despite being supposedly wrapped in one of those 'nsresult'  
> >thingummies, and
> >try/catch doesn't seem to work.  What do I need to do to catch this?
> >
> >code:
> >bool Registry::LoadCellML(nsCOMPtr<cellml_apiIModel> model)
> >{
> > if (model == NULL) return true;
> > nsresult rv;
> > nsCOMPtr<cellml_servicesICeVASBootstrap>  
> >cevasboot(do_GetService(CEVAS_BOOTSTRAP_CONTRACTID, &rv));
> > NS_ENSURE_SUCCESS(rv, true);
> >
> > nsCOMPtr<cellml_servicesICeVAS> cevas;
> > try {
> >   rv = cevasboot->CreateCeVASForModel(model, getter_AddRefs(cevas));
> > }
> > catch (...){
> >   return true;
> > }
> >
> >
> >result:
> >I/O warning : failed to load external entity "/home/lpsmith/CellML/ 
> >models/.\ImportExample2.cellml"
> >terminate called after throwing an instance of  
> >'iface::cellml_api::CellMLException'
> > what():  std::exception
> >
> >Program received signal SIGABRT, Aborted.
> >0xb7f5b430 in __kernel_vsyscall ()
> >

Basically, this is a bug, so I submitted a tracker item for it.  Andrew 
had a workaround (I believe), but I don't remember what it was; it's a 
low enough priority item for me I think I'll just wait for the fix.

> >-Speaking of, the above problem was due to the imported file name  
> >being
> >called ".\ImportedExample2.cellml" instead of "./ 
> >ImportedExample2.cellml"
> >(and me running on a unix platform).  Is there a good cross-platform  
> >method
> >for fixing this problem?

This turned out to also be a bug in the example CellML file (the file in 
question was named 'CompletedImportExample.cellml').  I submitted a 
different tracker item for that.  Basically, the answer was 'use / and not 
\'.

> >-Can I get a zip file of all the cellml models on cellml.org from  
> >anywhere?

The short answer was "What?" and the long answer was "Um, maybe?"  There 
may be a script that uses mercurial that could work for this. I still 
think such a zip file would be very useful for anyone who wants to 
translate models or just test their own systems.  Biomodels does this 
(albeit with a lower number of models), and that's what I always grab when 
I'm testing things.  If in the future I wanted to provide Antimony 
versions of CellML models, it would be great if I could update those 
translations with the current versions at the repository.

One possibility would be to download the cellml files grouped by their 
curation status: cellml_threestar_models.tar.gz, etc.

> >-hypertrophy_or_deterioration_parent.cellml
> >-faville_model_2008:  This model is recursive.  When I loop over its
> >components, some components come up multiple times, every time under  
> >the
> >original name.  My code then sees the same thing again, and fails.   
> >How
> >would I get the *new* name for the component?  Here's the current  
> >code:
> >
> > while (component != NULL) {
> >   numcomps++;
> >   //Each CellML 'component' becomes its own Antimony 'module'
> >   nsString cellmltext;
> >   rv = component->GetName(cellmltext);
> >   string cellmlname = "cellmlmod_" + ToThinString(cellmltext.get());
> >   NewCurrentModule(&cellmlname);
> >   CurrentModule()->LoadCellMLComponent(component);
> >   RevertToPreviousModule();
> >   rv = cmpi->NextComponent(getter_AddRefs(component));
> > }

There are API calls you can use to get the number of times the current 
component has been imported--I think I can use this so I don't try to 
re-create the basic model again.  The trick then will be to make sure I 
implement the multiple instantiations needed for the full model.

This does bring up a different point that wasn't quite appropriate for the 
hackathon, but might be worth discussing here:  if a model like 
faville_model_2008 has shown that it is helpful to 'clone' components, I 
would propose that CellML should add a way to do this directly, without 
having to do the faville hack here of importing its own filename before 
being able to clone elements.  The syntax would be very similar; you'd 
just add a way to refer to 'this component of the current document' 
instead of 'this component of this file (which happens to be the current 
document'.

Thanks for answering all my questions, and I'll see you all tomorrow!

-Lucian
_______________________________________________
cellml-discussion mailing list
cellml-discussion@cellml.org
http://www.cellml.org/mailman/listinfo/cellml-discussion

Reply via email to