////////////////////////////////////////////////////////////////////////// // // // FBGeometry // // // // Set experiment geometry (red from .tab fila) // // // ////////////////////////////////////////////////////////////////////////// #ifndef FBGeometry_H #define FBGeometry_H #include #ifndef ROOT_TObject #include #endif typedef struct { Int_t n; // no. planes, Float_t d, r; // wire spacing, beam pipe radius Int_t *nw; // no. wires in plane Int_t *nHl, *nHh, *sH; // 1'st, last wire of "Hub", hub shift Float_t *x0, *y0, *z0; // planes center, z-axis is along the beam Float_t *rot; // measured coordinate angle } Chamber; typedef struct { Int_t n; // strip number Float_t *x0, *y0, *z0; // center coord. Float_t *dx, *dy, *dz; // half sizes UInt_t *mod, *chan; } Scint_dE; typedef struct { Int_t n; // strips number Float_t *x0, *y0, *z0; // center coord. Float_t *dx, *dy_ang, *dz; // half sizes UInt_t *mod, *chan; } Scint_E; typedef struct { Float_t x0, y0, z0, da, dz; // da - dx dy, dz - thickness } Degrader; typedef struct { Float_t x0, y0, z0, dr, dz; // dr - radius, height } Target; typedef struct { Int_t n; Float_t *e; Float_t *He; Float_t *My; Float_t *Mx; Float_t *Pb; Float_t *Pk; } EnLosses; class FBGeometry : public TObject{ private: FILE *fInfileID; //ID of input file returned from open Char_t *fInfile; //Inputfile containing description of exp FILE *fEnLossID; //ID of input file returned from open Char_t *fEnLoss; //Inputfile containing energy losses Float_t fMagField; //Magnetic field in T set in user.C Float_t WallShift; //Shift of middle plane started from 297mm Float_t dExShift; //Shift of dE det in x Chamber *fChamb; Scint_dE *fScint_dE; Scint_E *fScint_E; Degrader *fDegr; Target *fTarg; EnLosses *dEdX; public: FBGeometry(); virtual ~FBGeometry(); void Finish(); void Init(); Int_t Make(); Int_t ReadLine(FILE *fID, char *line); // Getters Chamber *GetChamb() {return fChamb;} Degrader *GetDegr() {return fDegr;} Scint_dE *GetScint_dE() {return fScint_dE;} Scint_E *GetScint_E() {return fScint_E;} Target *GetTarg() {return fTarg;} EnLosses *GetdEdX() {return dEdX;} // Setters void SetInfile(Char_t *filename) {fInfile = filename;} void SetEnLoss(Char_t *filename) {fEnLoss = filename;} void SetMagField(Float_t f) {fMagField = f;} Float_t GetMagField(void) {return fMagField;} void SetWallShift(Float_t t) {WallShift = t;} void SetdExShift(Float_t t) {dExShift = t;} ClassDef(FBGeometry, 0) }; #endif