///////////////////////////////////////////////////////////////////////////// // //*-- Author : Romain Holzmann //*-- Modified : 23/03/2005 by R. Holzmann // // HGeantClass // // GEANT interface class // /////////////////////////////////////////////////////////////////////////////// #include "hgeantclass.h" #include "cfortran.h" #define gpawup gpawup_ #define gpawdown gpawdown_ extern "C" { // function prototypes for Fortran calls void gpawup(const int*, const char*, const int*); void gpawdown(); } ClassImp(HGeantClass) HGeantClass::HGeantClass(const char* name, const char* title, const int batch, const char* inputfile) : TNamed(name,title) { // // constructor // int nchar = strlen(inputfile); if(batch == 2) rememberBatch = kTRUE; else rememberBatch = kFALSE; gpawup(&batch, inputfile, &nchar); // initialize GEANT/PAW if(batch < 2) { printf("\n Entering Root mode...\n\n"); } } HGeantClass::~HGeantClass() { // // destructor // if(rememberBatch) return; // we are in batch mode, i.e. nothing to do gpawdown(); // shut down GEANT/PAW printf("\n Leaving Root mode...\n\n"); } PROTOCCALLSFSUB1(KUEXEC,kuexec,STRING) #define KUEXEC(COMMAND) CCALLSFSUB1(KUEXEC,kuexec,STRING,COMMAND) int doGeant(char* command) { KUEXEC(command); // pass it on to KUIP return 1; } PROTOCCALLSFSUB12(PASSEVENT,passevent,FLOAT,FLOAT,FLOAT,INT,INTV,INTV,INTV,INTV,FLOATV,FLOATV,FLOATV,FLOATV) #define PASSEVENT(EB,BP,PH,N,ID,IDS,IDP,IXP,PX,PY,PZ,W) CCALLSFSUB12(PASSEVENT,passevent,FLOAT,FLOAT,FLOAT,INT,INTV,INTV,INTV,INTV,FLOATV,FLOATV,FLOATV,FLOATV,EB,BP,PH,N,ID,IDS,IDP,IXP,PX,PY,PZ,W) int passEvent(float eb, float bp, float ph, int n, int* id, int* ids, int* idp, int* ixp, float* px, float* py, float* pz, float* w) { PASSEVENT(eb,bp,ph,n,id,ids,idp,ixp,px,py,pz,w); return 1; } PROTOCCALLSFSUB0(KUWHAG,kuwhag) #define KUWHAG() CCALLSFSUB0(KUWHAG,kuwhag) int goKuip() { KUWHAG(); // start up KUIP return 1; }