/** * \file ToFLevel2.h * \author Gianfranca DeRosa / Wolfgang Menn / Rita Carbone with E. M. supervision */ #ifndef ToFLevel2_h #define ToFLevel2_h // #include #include #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 *); extern "C" int rdtofcal(const char *, int *); // // class which contains track related variables // #define ZTOF11 53.74 #define ZTOF12 53.04 #define ZTOF21 23.94 #define ZTOF22 23.44 #define ZTOF31 -23.49 #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; ///At(ipmt); } // 0-47 dEdx for each PMT for tracked events // ToFdEdx* GetToFdEdx(){return this;}; ClassDef(ToFdEdx,3); }; /** * \brief Class which contains the tracker related variables * * We can use the ToF standalone to find hitted paddles, calculate beta, etc.. * These results are then stored with the "trkseqno" = -1. * If we use the track from the tracker, then the penetration points in the * scintillators are calculated, which defines the hitted paddles. For these paddles * we calculate then all the output. * Note: The artificial ADC values are stored as dEdx in the output, the dEdx will be * by definition = 1. However, the artificial TDC values are just used internally * and not stored in the output. But one can see in both cases which PMT has artificial * values using "adcflag" and "tdcflag". * Look in the ToFLevel2Ex.cxx example in the repository how to read the tracker related * variables. */ class ToFTrkVar : public TObject { private: public: // Int_t trkseqno; ///< tracker sequ. number: -1=ToF standalone, 0=first Tracker track, ... // Int_t npmttdc; /// "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; /// bit 0 = discharging flag on at least one PMT (adc OR tdc), bit 1 = there is at least one PMT off (no tdc nor adc) which is included in the patterntrig, bit 2 = PMTs hit are not enough to match trigger configuration, bit 3 = pattern trig does not match trigger configuration Int_t default_calib; ///< one if the default calibration has been used to process the data, zero otherwise // Float_t GetdEdx(Int_t notrack, Int_t plane, Int_t adcfl); // gf Apr 07 Float_t GetdEdx(ToFTrkVar *trk, Int_t plane, Int_t adcfl); // gf Apr 07 Float_t CalcBeta(Int_t notrack, Float_t resmax, Float_t qualitycut, Float_t chi2cut); // wm feb 08 // // Float_t CalcBeta(Int_t notrack, Float_t resmax, Float_t chi2cut, Float_t qualitycut); // wm feb 08 // // methods to make life simplier during the analysis, returns a pointer to the ToFTrkVar class containing track related variables // Int_t ntrk(){return ToFTrk->GetEntries();}; Int_t npmt(){return PMT->GetEntries();}; // void GetLevel2Struct(cToFLevel2 *) const; // ToFTrkVar *GetToFTrkVar(Int_t notrack); ToFTrkVar* GetToFStoredTrack(Int_t seqno);///< returns pointer to the track set related to the seqno number ToFPMT *GetToFPMT(Int_t nohit); static Int_t GetPMTid(Int_t gg, Int_t hh); static TString GetPMTName(Int_t ind); static Int_t GetPlaneIndex(Int_t pmt_id); void GetMatrix(Int_t notrack, Float_t adc[4][12], Float_t tdc[4][12]); static 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 void GetdEdxPaddle(ToFTrkVar *trk, Int_t paddleid, Int_t adcfl, Float_t &PadEdx, Int_t &SatWarning); // gf Apr 07 static 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 //EMXX Int_t GetPaddleIdOfTrack(Float_t xtr, Float_t ytr, Int_t plane, Float_t margin); // wm jun 2008 static 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 // // bool bit(int decimal, char pos); bool checkPMT(TString givenpmt); bool checkPMTpatternPMThit(TrigLevel2 *trg, int &pmtpattern, int &pmtnosignal); bool checkPMTpmttrig(TrigLevel2 *trg); void printPMT(); // // 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; case 12: return ZTOF12; case 21: return ZTOF21; case 22: return ZTOF22; case 31: return ZTOF31; case 32: return ZTOF32; default: return 0.; }; }; // // Paddles position // /* S11 8 paddles 33.0 x 5.1 cm S12 6 paddles 40.8 x 5.5 cm S21 2 paddles 18.0 x 7.5 cm S22 2 paddles 15.0 x 9.0 cm 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); // EMXX Int_t GetNHitPaddles(Int_t plane); Int_t GetTrueNHitPaddles(Int_t plane); void Clear(Option_t *t=""); // TClonesArray *GetTrackArray(){return ToFTrk;} ///< returns a pointer to the track related variables array TClonesArray** GetPointerToTrackArray(){return &ToFTrk;}///< returns pointer to pointer to the track array void SetTrackArray(TClonesArray *track);///