6

I am starting a research project and need to nail down a programming language and 3D graphics API where I will be creating an environment in the field of molecular cell biology where I will be simulating a large range of experiments in silico. This will be an ongoing project which will keep expanding and growing in size. The experiments will be done in discrete time and will encompass a complex physics engine. Pretty graphics are not of importance nor is is audio. I run Ubuntu and this is the environment I will be developing in.

The pairs I have investigated thus far are:

java : flexible,scalable,lib/dependency organization (maven),oo

  • jogl: full control of graphics
  • jMonkeyEngine: full game library, includes jBullet, maybe a bit overkill for what I need.

c++ : High speed, low level, oo

  • opengl:full control of graphics
  • maya:built in physics engine, infrastructure already in place, proprietary, not free

matlab : Heavily math based, but difficult to maintain and scale

  • simulink : proprietary, not free

I am least familiar with Maya but it was suggested to me by a friend as a good approach. When would Maya be a good solution and would it be a good selection for this type of case? Just as thinking jMonkey would be overkill this is kinda my feeling on Maya.

Are there any other pairings I should investigate?

Also has anyone had any experience modifying an existing physics library and the flexibility or complexity of doing so (ie Bullet, JBullet, jinngine)? Unsure at this point if I should start from scratch or try and modify/expand an existing one.

Any thoughts, feedback, input or any other suggestions would be greatly appreciated.

Thanks

wi1
  • 256
  • 1
  • 7
  • You should always clarify what OS(s) the program must run on. – GrandmasterB Feb 15 '12 at 19:04
  • Have you considered Mathematica? In an academic setting a site license may be available. –  Feb 15 '12 at 21:14
  • Maya (assuming you mean the program from Autodesk) is primarily a 3D modelling and animating package; it _has_ a physics engine in it for dynamics, but I'm not aware if that piece can be used seperately. I like maya, but I'd look for a dedicated simulation engine if graphics wasn't the primary concern; as it is, you'd end up with way too many features that you wouldn't even need. – Clockwork-Muse Feb 15 '12 at 22:26
  • @ThorbjørnRavnAndersen Thank you for the suggestion. I looked into it and although it has powerful analytical characteristics the built in laungauge itself would hold much of the same issues as coding in Matlab. Although they have an interface to call Java in there language and also have a Java API I think isn't elegant or as efficient as just using OpenGL. For example in the Java API you just call a .waitForAnswer() which blocks until a response is received from Mathematica. – wi1 Feb 16 '12 at 20:20
  • @X-Zero, Yea Autodesk Maya. I agree with you. There would probably be way to much extra that I would not need. However I wanted to investigate every possibility and I have friends trying to convince me that it is great for simulating. Just wanted to make sure I wasn't leaving something out that Maya does that may make everything much easier. – wi1 Feb 16 '12 at 20:23
  • NEVER EVER even consider using matlab or mathematica for anything, they are the worst languages in the entire universe. –  Feb 16 '12 at 21:16
  • @wi1 depends on how much time you have and where you want to spend your efforts. –  Feb 16 '12 at 21:19
  • @TheMouthofaCow They are widely used in research and scientific community for proving complex mathematical algorithms and theorems quickly. Are there any specific issues you have with them, it would help me more. Thanks! – wi1 Feb 18 '12 at 22:45
  • @wi1 - yes, they are widely used and I should qualify that. If you want to do something that they are perfectly suited to (i.e. getting a numerical solution to some integral equation) then use them, but they are more of an extension of a pencil and paper for doing mathematical manipulations than being programming languages. They are very useful for doing symbolic manipulations of equations, but you just cannot write software in them. The language features are minimal and they are very, very slow. Also the "friendly" graphical interface is buggy and frustrating. –  Feb 19 '12 at 11:07
  • @wi1 - by the way, the reason that they are widely used is that most scientists are not programmers and are not interested in programming, they like the science. They generally see the programming part as an inconvenient, but necessary aspect of their work (like most programmers do documentation). As such these languages are designed for people who need to do some programming, but don't want to program. If you like programming I can guarantee that you will find no worse languages out there (I got suckered into a Mathematica job for a month and the memories still haunt me). –  Feb 19 '12 at 11:12
  • @TheMouthofaCow, sorry for delayed response forgot to enable email notification. Thank you for the clarification. It really helped. I think I am going to do just that, use Matlab for working out the math portion and then use java/jogl for the actual modelling. Thanks again! – wi1 Feb 26 '12 at 23:30
  • @wi1 - np. That sounds like the right approach. Back when I was a mathematician that was how I worked. I used Mathematica and other tools (GP/PARI http://pari.math.u-bordeaux.fr/ was geared towards the kind of math I did) as a better pencil and paper to help me verify large algebraic manipulations and to calculate expected results for unit tests and then I took the math bit and converted it to C++. –  Feb 27 '12 at 11:51

2 Answers2

2

First, what you are doing sounds as though it matches up VERY closely with Chandrajit Bajaj's (bajaj@cs.utexas.edu) research work in computational biology and molecular visualization. Bounce an email off of him and see what suggestions he has. (I suspect he will say C++ and OpenGL.) (Full Disclosure: During a period of refresher work while between jobs, I took the undergrad computer graphics class from him. I learned quite a bit and had a great time.)

Also, Jim Browne (browne@cs.utexas.edu) did his very early work in computational physics, and might have some valuable insights. I think Jim is retired now, and he may not answer the email. (Full Disclosure: I took a graduate operating systems class from him, and learned a LOT. He is, PERSONALLY, the reason UT Austin first built their Computer Science department. It was establish the department or lose him to Queen's University of Belfast.)

Second, whenever some describes something as "expensive", you should ALWAYS ask "Compared to what?" MATLAB is dirt-cheap compared to what it would cost you to develop and debug all their code from scratch.

Third, if interactivity is not a big deal, it is not that hard to rig a C++ program to write a file that can then be fed to MATLAB for intense number-crunching. During the aforementioned refresher work, I repeated the undergrad introductory numerical methods class. We crunched numbers in C++ and plotted results with MATLAB. (I had a LOT of fun in that class!) That was with Todd Arbogast (arbogast@ma.utexas.edu, I think). He is SHARP, and he might have some suggestions as well.

John R. Strohm
  • 18,043
  • 5
  • 46
  • 56
  • Oh man, thanks for the connections! I will definitely reached out to them.Mind if I reference that I obtained there email from you?Yes I agree that C++/OpenGL is probably the best option due to speed,control, flexibility, scalability but since I am a stronger Java programmer I was leaning towards Java/JOGL which I believe will be similar maybe just not as fast but I am not about to get into the batter of what language is better. Valid point about the cost of Matlab, I will update my post. However, user interaction will eventually need to be integrated so it probably isnt best for my app. – wi1 Feb 16 '12 at 20:31
  • Absolutely you can use my name! They're both great people, who genuinely enjoy passing knowledge along. – John R. Strohm Feb 20 '12 at 17:37
0

I am not a regular practitioner on this, but has been involved in development that begins with research (in Image/Video processing and related areas) and goes on towards deployment.

I would suggest don't rush into pro/cons analysis. There are two fundamental questions that will set your priorities straight.

1. How much likely (and you are willing) to throw away code?
If there is a sizable research involved, you will have tough time dealing with lower level language problems just to throw away every Monday morning. However, if there is already is a PoC (proof of concept) or prototypical in fornt, than your path is rather straight forward; you should avoid duplicate work.

2. What other elements you depend on?
You want be developing everything straight forward from scratch. Are there specific tool kits, APIs, frameworks you are going to use as dependency? If so, your choices are limited right here in

Dipan Mehta
  • 10,542
  • 2
  • 33
  • 67