Thursday, December 29, 2011

A solution to "error: qobject.h: No such file or directory" in compiling a Geant4 application

If you want to use Qt GUI in your Geant4 application, you should put the qt related codes in your application.
When you make a Geant4.9.5 application using the traditional "make" method, not cmake, probably you will meet this error message:

error: qobject.h: No such file or directory

Here I will give two solutions to it.

First,

add below lines in your GNUmakefile:
INCPATH := -I/usr/include/qt4/Qt -I/usr/include/qt4
CPPFLAGS+= $(INCPATH)

to tell the compiler where the qt headers are.
But this is not a good method, because you have to add them for every application.

Second,
add below lines in your .bashrc file. (for .cshrc, it's similar, but not exactly the same)

export QTMOC="/usr/bin/moc-qt4"
export QTFLAGS="-I/usr/include/qt4 -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL"
export QTLIBS="-L/usr/lib -lQtCore -lQtGui"
export GLQTLIBS="-L/usr/lib -lQtCore -lQtGui -lQtOpenGL"



After setting this, you will not see the error message when using qt gui in your application.

Thursday, December 1, 2011

Make random number seeds different in different runs in Geant4 simulation

Add below headers in main file.

#include "Randomize.hh"
#include "time.h"

Add below lines in main() function.

//choose the Random engine
CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine());
//set random seed with system time
G4long seed = time(NULL);
CLHEP::HepRandom::setTheSeed(seed);

The running results will be different though you use the same number of events in different runs.

happy time