// @(#)root/vmc:$Name: $:$Id: TVirtualMCGeometry.h,v 1.4 2004/10/12 07:45:53 brun Exp $
// Authors: ... 25/06/2002
#ifndef ROOT_TVirtualMCGeometry
#define ROOT_TVirtualMCGeometry
//
// Class TVirtualMCGeometry
// -------------------------
// Interface to Monte Carlo geometry construction
// (separated from VirtualMC)
#include "TNamed.h"
class TVirtualMCGeometry : public TNamed {
public:
TVirtualMCGeometry(const char *name, const char *title);
TVirtualMCGeometry();
virtual ~TVirtualMCGeometry();
// static access method
static TVirtualMCGeometry* Instance() { return fgInstance; }
// detector composition
virtual void Material(Int_t& kmat, const char* name, Double_t a,
Double_t z, Double_t dens, Double_t radl, Double_t absl,
Float_t* buf, Int_t nwbuf) = 0;
virtual void Material(Int_t& kmat, const char* name, Double_t a,
Double_t z, Double_t dens, Double_t radl, Double_t absl,
Double_t* buf, Int_t nwbuf) = 0;
virtual void Mixture(Int_t& kmat, const char *name, Float_t *a,
Float_t *z, Double_t dens, Int_t nlmat, Float_t *wmat) = 0;
virtual void Mixture(Int_t& kmat, const char *name, Double_t *a,
Double_t *z, Double_t dens, Int_t nlmat, Double_t *wmat) = 0;
virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
Double_t stemax, Double_t deemax, Double_t epsil,
Double_t stmin, Float_t* ubuf, Int_t nbuf) = 0;
virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
Double_t stemax, Double_t deemax, Double_t epsil,
Double_t stmin, Double_t* ubuf, Int_t nbuf) = 0;
virtual void Matrix(Int_t& krot, Double_t thetaX, Double_t phiX,
Double_t thetaY, Double_t phiY, Double_t thetaZ,
Double_t phiZ) = 0;
// functions from GGEOM
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
Float_t *upar, Int_t np) = 0;
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
Double_t *upar, Int_t np) = 0;
virtual void Gsdvn(const char *name, const char *mother, Int_t ndiv,
Int_t iaxis) = 0;
virtual void Gsdvn2(const char *name, const char *mother, Int_t ndiv,
Int_t iaxis, Double_t c0i, Int_t numed) = 0;
virtual void Gsdvt(const char *name, const char *mother, Double_t step,
Int_t iaxis, Int_t numed, Int_t ndvmx) = 0;
virtual void Gsdvt2(const char *name, const char *mother, Double_t step,
Int_t iaxis, Double_t c0, Int_t numed, Int_t ndvmx) = 0;
virtual void Gsord(const char *name, Int_t iax) = 0;
virtual void Gspos(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly="ONLY") = 0;
virtual void Gsposp(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly, Float_t *upar, Int_t np) = 0;
virtual void Gsposp(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly, Double_t *upar, Int_t np) = 0;
virtual void Gsbool(const char* onlyVolName, const char* manyVolName) = 0;
// functions for drawing
//virtual void DrawOneSpec(const char* name) = 0;
//virtual void Gsatt(const char* name, const char* att, Int_t val) = 0;
//virtual void Gdraw(const char*,Double_t theta = 30, Double_t phi = 30,
// Double_t psi = 0, Double_t u0 = 10, Double_t v0 = 10,
// Double_t ul = 0.01, Double_t vl = 0.01) = 0;
// Euclid
// virtual void WriteEuclid(const char*, const char*, Int_t, Int_t) = 0;
// get methods
virtual Int_t VolId(const Text_t* volName) const = 0;
virtual const char* VolName(Int_t id) const = 0;
virtual Int_t NofVolumes() const = 0;
virtual Int_t NofVolDaughters(const char* volName) const;
virtual const char* VolDaughterName(const char* volName, Int_t i) const;
virtual Int_t VolDaughterCopyNo(const char* volName, Int_t i) const;
// New functions
// Make them = 0 with the next release
virtual Int_t VolId2Mate(Int_t id) const = 0;
protected:
TVirtualMCGeometry(const TVirtualMCGeometry &mc) : TNamed(mc) {}
TVirtualMCGeometry & operator=(const TVirtualMCGeometry &) {return (*this);}
static TVirtualMCGeometry* fgInstance; // singleton instance
ClassDef(TVirtualMCGeometry,1) //Interface to Monte Carlo geometry construction
};
// inline fuctions
// Temporary implementation of new functions
// To be removed with the next release
inline Int_t TVirtualMCGeometry::NofVolDaughters(const char* /*volName*/) const {
Warning("NofVolDaughters", "New function - not yet implemented.");
return 0;
}
inline const char* TVirtualMCGeometry::VolDaughterName(const char* /*volName*/, Int_t /*i*/) const {
Warning("VolDaughterName", "New function - not yet implemented.");
return "";
}
inline Int_t TVirtualMCGeometry::VolDaughterCopyNo(const char* /*volName*/, Int_t /*i*/) const {
Warning("VolDaughterCopyNo", "New function - not yet implemented.");
return 0;
}
#endif //ROOT_TVirtualMCGeometry
syntax highlighted by Code2HTML, v. 0.9.1