--- DarthVader/ToFLevel2/inc/ToFLevel2.h 2007/01/22 10:45:21 1.12 +++ DarthVader/ToFLevel2/inc/ToFLevel2.h 2010/02/05 12:51:41 1.26 @@ -1,3 +1,8 @@ +/** + * \file ToFLevel2.h + * \author Gianfranca DeRosa / Wolfgang Menn / Rita Carbone with E. M. supervision + */ + #ifndef ToFLevel2_h #define ToFLevel2_h // @@ -6,7 +11,32 @@ #include #include +#include // EMILIANO +#include // from ToFLevel2.cpp +#include // Emiliano +#include // Emiliano +#include // Emiliano + + #include + +#include // Emiliano +#include // Emiliano +#include // Emiliano +#include // Emiliano +#include // Emiliano +#include + +// +// Declaration of the core fortran routines +// +#define tofl2com tofl2com_ +extern "C" int tofl2com(); +#define toftrk toftrk_ +extern "C" int toftrk(); +#define rdtofcal rdtofcal_ +extern "C" int rdtofcal(char [], int *); + // // class which contains track related variables // @@ -18,90 +48,271 @@ #define ZTOF32 -24.34 +class ToFGeom : public TObject { + +private: + TArrayI ePlane, eXY; + +public: + ToFGeom() { + int plane[24] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, + 2, 2, + 3, 3, + 4, 4, 4, + 5, 5, 5 + }; + int plXY[6]= { 2, 1, 1, 2, 2, 1 }; // X==1, Y==2 */ + ePlane.Set(24,plane); + eXY.Set(6,plXY); + } + + int GetPad( int idpmt) { return (int)((idpmt+0.5)/2.); } + int GetPlane( int idpmt) { return ePlane[ GetPad(idpmt) ]; } + int GetXY( int idpmt) { return eXY[ GetPlane(idpmt) ]; } + + ClassDef(ToFGeom,1); + +}; + + +/** + * \brief Class which contains the PMT data + * + * If there is a valid ADC or a TDC value (value<4095) for a PMT, both ADC and TDC data + * are stored in the PMT class. + * Look in the ToFLevel2Ex.cxx example in the repository how to read the PMT class. + */ class ToFPMT : public TObject { - + private: public: - Int_t pmt_id; - Float_t adc; - Float_t tdc_tw; + Int_t pmt_id; /// "x"-sigma. A chi2 value is + * calculated, furthermore a "quality" value by adding the weights which + * are finally used. If all measurements are taken, "quality" will be = 505. + * A chi2 cut around 3-4 and a quality-cut > 400 is needed for clean beta + * The Level2 beta[12] which is derived in the fortran routines uses: 10.,200.,20. + * This is not a very high quality measurement. One can re-calculate a new beta[13] + * using the L2-method "CalcBeta" + */ + Float_t beta[13]; + // + Int_t npmtadc; ///GetEntries();}; Int_t npmt(){return PMT->GetEntries();}; - + // void GetLevel2Struct(cToFLevel2 *) const; // - ToFTrkVar *GetToFTrkVar(Int_t notrack); - ToFPMT *GetToFPMT(Int_t nohit); + ToFTrkVar *GetToFTrkVar(Int_t notrack); + ToFPMT *GetToFPMT(Int_t nohit); Int_t GetPMTid(Int_t gg, Int_t hh); TString GetPMTName(Int_t ind); + Int_t GetPlaneIndex(Int_t pmt_id); void GetMatrix(Int_t notrack, Float_t adc[4][12], Float_t tdc[4][12]); void GetPMTIndex(Int_t pmt_id, Int_t &gg, Int_t &hh); + + // gf Apr 07 + void GetdEdxPaddle(Int_t notrack, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning); // gf Apr 07 + TString GetPMTName(Int_t ind, Int_t &iplane, Int_t &ipaddle,Int_t &ipmt); + Int_t GetPaddleIdOfTrack(Float_t xtr, Float_t ytr, Int_t plane); // gf Apr 07 + Int_t GetPaddleIdOfTrack(Float_t xtr, Float_t ytr, Int_t plane, Float_t margin); // wm jun 2008 + void GetPMTPaddle(Int_t pmt_id, Int_t &plane, Int_t &paddle); // gf Apr 07 + void GetPaddlePMT(Int_t paddle, Int_t &pmtleft, Int_t &pmtright); // gf Apr 07 + void GetPaddleGeometry(Int_t plane, Int_t paddle, Float_t &xleft, Float_t &xright, Float_t &yleft, Float_t &yright); // gf Apr 07 + Int_t GetPaddleid(Int_t plane, Int_t paddle); + void GetPaddlePlane(Int_t padid, Int_t &plane, Int_t &paddle); + Int_t GetNPaddle(Int_t plane); + // + // + // + Int_t Process(TrkLevel2 *trk, TrigLevel2 *trg, GL_RUN *run, OrbitalInfo *orb, Bool_t force); // Emiliano + // // constructor // ToFLevel2(); + ~ToFLevel2(){Delete();}; //ELENA + void Delete(Option_t *t=""); //ELENA + void Set();//ELENA // // ToFLevel2* GetToFLevel2(){return this;}; + +/** + * Method to get the z-position of the 6 TOF layers from the plane ID + * @param plane_id Plane ID (11 12 21 22 31 32) + */ Float_t GetZTOF(Int_t plane_id){ switch(plane_id){ case 11: return ZTOF11; @@ -113,7 +324,7 @@ default: return 0.; }; }; - + // // Paddles position // @@ -125,14 +336,15 @@ S31 3 paddles 15.0 x 6.0 cm S32 3 paddles 18.0 x 5.0 cm */ - + Int_t GetToFPlaneID(Int_t ip); Int_t GetToFPlaneIndex(Int_t plane_id); Bool_t HitPaddle(Int_t ,Int_t); Int_t GetNHitPaddles(Int_t plane); - void Clear(); + void Clear(Option_t *t=""); // - ClassDef(ToFLevel2,2); + ClassDef(ToFLevel2,4); }; #endif +