| 1 | pam-fi | 1.1 | /* | 
| 2 |  |  | * TrkChi2DeflTimeCut.h | 
| 3 |  |  | * | 
| 4 |  |  | *  Created on: 6-oct-2009 | 
| 5 |  |  | *      Author: S. Ricciarini | 
| 6 |  |  | */ | 
| 7 |  |  |  | 
| 8 |  |  | /*! @file TrkChi2DeflTimeCut.h The TrkChi2DeflTimeCut class definition file */ | 
| 9 |  |  |  | 
| 10 |  |  | #ifndef TRKCHI2DEFLTIMECUT_H_ | 
| 11 |  |  | #define TRKCHI2DEFLTIMECUT_H_ | 
| 12 |  |  |  | 
| 13 |  |  | #include "../../PamCutBase/PamCutBase.h" | 
| 14 |  |  |  | 
| 15 |  |  | #include <TH2F.h> | 
| 16 |  |  | #include <TTimeStamp.h> | 
| 17 |  |  |  | 
| 18 | pam-fi | 1.3 | /*! @brief The tracker chi2 vs |deflection| cut. | 
| 19 | pam-fi | 1.1 | * | 
| 20 | pam-fi | 1.3 | * Events whose track has been fitted with a chi2 greater than Chi2(|eta|) are discarded. | 
| 21 | pam-fi | 1.4 | * Chi2(|eta|) is a function which gives the value of chi2 distribution, corresponding to a given quantile (depending on the calibration text file), as a function of |deflection| (|eta|); in current implementation it is parameterized as: | 
| 22 |  |  | * | 
| 23 |  |  | *   4 parameters p0...p3: | 
| 24 | pam-fi | 1.1 | * | 
| 25 | pam-fi | 1.3 | *   Chi2(|eta|) = p0 + ( p1 * |eta|^p2 * (1 + (p3 * |eta|)^2) ) | 
| 26 |  |  | *   with eta expressed in GV^-1 | 
| 27 | pam-fi | 1.1 | * | 
| 28 | pam-fi | 1.4 | *   5 parameters p0..p4 | 
| 29 |  |  | * | 
| 30 |  |  | *   Chi2(|eta|) = p0 + ( p1 * |eta|^p2 * (1 + (p3 * |eta|)^p4) ) | 
| 31 |  |  | *   with eta expressed in GV^-1 | 
| 32 |  |  | * | 
| 33 |  |  | * The parameters are read from a calibration text file (prepared for a given quantile, e.g. 95%), whose format must be: | 
| 34 | pam-fi | 1.3 | * ... | 
| 35 | pam-fi | 1.4 | * first_day    last_day        p0      p1      p2      ... | 
| 36 | pam-fi | 1.3 | * with first_day and last_day expressed in the format YYMMDD | 
| 37 |  |  | * ... | 
| 38 |  |  | * where each row corresponds to a given time interval (first_day,last_day) | 
| 39 |  |  | * | 
| 40 |  |  | * For a given event the associated day is determined; the FIRST (starting from first row) time interval of the calibration file, which contains the event day, gives the parameters to be inserted in the Chi2(|eta|) for the given event. | 
| 41 |  |  | * If the event day does not fall in any of the intervals of the calibration file, then the event is discarded. | 
| 42 | pam-fi | 1.1 | * | 
| 43 |  |  | */ | 
| 44 |  |  |  | 
| 45 |  |  | class TrkChi2DeflTimeCut: public PamCut { | 
| 46 |  |  |  | 
| 47 |  |  | public: | 
| 48 |  |  | /*! @brief Constructor. | 
| 49 |  |  | * | 
| 50 |  |  | * @param cutName The cut's name. | 
| 51 | pam-fi | 1.3 | * @param calibFile Path for the calibration text file. | 
| 52 | pam-fi | 1.4 | * @param nPar Number of parameters used for the Chi2 function. Maximum allowed: 5. Default: 4. | 
| 53 | pam-fi | 1.1 | */ | 
| 54 | pam-fi | 1.4 | TrkChi2DeflTimeCut(const char *cutName, const char *calibFile, int nPar=4) : | 
| 55 |  |  | PamCut(cutName), _calibFile(calibFile), _nPar(nPar) { | 
| 56 | pam-fi | 1.1 |  | 
| 57 |  |  | _chi2CutTable.open(_calibFile); | 
| 58 |  |  | while (! _chi2CutTable.eof()) { | 
| 59 |  |  |  | 
| 60 |  |  | _chi2CutTable >> _tstringtemp; | 
| 61 | pam-fi | 1.3 | _iDayFirst.push_back(_tstringtemp.Atoi()); | 
| 62 |  |  |  | 
| 63 | pam-fi | 1.1 | _chi2CutTable >> _tstringtemp; | 
| 64 | pam-fi | 1.3 | _iDayLast.push_back(_tstringtemp.Atoi()); | 
| 65 | pam-fi | 1.1 |  | 
| 66 | pam-fi | 1.4 | if (_nPar>=0 && _nPar<=5) { | 
| 67 |  |  | for (int iPar=0; iPar<_nPar; iPar++) { | 
| 68 | pam-fi | 1.1 |  | 
| 69 | pam-fi | 1.4 | _chi2CutTable >> _tstringtemp; | 
| 70 |  |  | _p[iPar].push_back(_tstringtemp.Atof()); | 
| 71 |  |  |  | 
| 72 |  |  | } | 
| 73 |  |  | } | 
| 74 |  |  |  | 
| 75 | pam-fi | 1.1 | } | 
| 76 |  |  | _chi2CutTable.close(); | 
| 77 |  |  |  | 
| 78 |  |  | } | 
| 79 |  |  |  | 
| 80 |  |  | /*! @brief Destructor. */ | 
| 81 |  |  | ~TrkChi2DeflTimeCut() { | 
| 82 |  |  |  | 
| 83 |  |  | } | 
| 84 |  |  |  | 
| 85 | pam-fi | 1.3 | /*! @brief The tracker chi2 vs |deflection| check. | 
| 86 | pam-fi | 1.1 | * | 
| 87 |  |  | * | 
| 88 |  |  | * @param event The event to analyze. | 
| 89 | pam-fi | 1.3 | * @return #CUTOK if chi2 < Chi2(|eta|). | 
| 90 | pam-fi | 1.1 | * @return 0 if not | 
| 91 |  |  | */ | 
| 92 |  |  | int Check(PamLevel2 *event); | 
| 93 |  |  |  | 
| 94 |  |  | private: | 
| 95 |  |  |  | 
| 96 | pam-fi | 1.2 | virtual double _GetChi2(PamLevel2 *event); | 
| 97 |  |  |  | 
| 98 | pam-fi | 1.1 | const char* _calibFile; | 
| 99 | pam-fi | 1.4 | int _nPar; | 
| 100 | pam-fi | 1.1 |  | 
| 101 |  |  | TString _tstringtemp; | 
| 102 |  |  |  | 
| 103 | pam-fi | 1.3 | std::vector<Int_t> _iDayFirst; | 
| 104 |  |  | std::vector<Int_t> _iDayLast; | 
| 105 | pam-fi | 1.4 | std::vector<Double_t> _p[5]; | 
| 106 | pam-fi | 1.1 |  | 
| 107 |  |  | ifstream _chi2CutTable; | 
| 108 |  |  |  | 
| 109 | pam-fi | 1.4 | Double_t _pSel[5]; | 
| 110 | pam-fi | 1.1 |  | 
| 111 |  |  | TTimeStamp _time; | 
| 112 |  |  |  | 
| 113 |  |  | }; | 
| 114 |  |  | #endif /* TRKCHI2DEFLTIMECUT_H_ */ |