| 1 | pam-fi | 1.1 | /* | 
| 2 |  |  | * TrkDedxHCut.cpp | 
| 3 |  |  | * | 
| 4 |  |  | *  Created on: 26-mar-2009 | 
| 5 |  |  | *      Author: Nico De Simone, S. Ricciarini | 
| 6 |  |  | */ | 
| 7 |  |  |  | 
| 8 |  |  | /*! @file TrkDedxHCut.cpp The TrkDedxHCut class implementation file */ | 
| 9 |  |  |  | 
| 10 |  |  | #include "TrkDedxHCut.h" | 
| 11 |  |  |  | 
| 12 |  |  | const Double_t TrkDedxHCut::_xLow[] = { 0.126414, 0.140142, 0.152714, 0.165854, 0.178357, 0.194244, 0.211669, 0.242859, | 
| 13 |  |  | 0.264646, 0.293385, 0.314258, 0.360565, 0.392911, 0.450807, 0.508423, 0.603735, 0.680897, 0.754838, 0.851312, | 
| 14 |  |  | 1.00032, 1.36201, 1.37, 1000. }; // _nLow=23 elements | 
| 15 |  |  |  | 
| 16 |  |  | const Double_t TrkDedxHCut::_yLow[] = { 18.9221, 16.0752, 14.2214, 12.6324, 11.2421, 9.71928, 8.1965, 6.93856, 6.14407, | 
| 17 |  |  | 5.15095, 4.6875, 3.8268, 3.49576, 2.89989, 2.56886, 2.17161, 1.90678, 1.70816, 1.50953, 1.27754, 0.715042, 0, 0 }; // _nLow=23 elements | 
| 18 |  |  |  | 
| 19 |  |  | const Double_t TrkDedxHCut::_xHigh[] = { 0.126414, 0.392911, 0.474654, 0.508423, 0.563635, 0.680897, 0.76792, 0.851312, | 
| 20 |  |  | 0.960115, 1.12068, 1.22122, 1.50085, 1.69267, 1.87649, 2.1903, 2.65934, 3.75055, 6.21589, 11.0139, 24.2773, 1000. }; // _nHigh=21 elements | 
| 21 |  |  |  | 
| 22 |  |  | const Double_t TrkDedxHCut::_yHigh[] = { 24.3512, 22.696, 21.107, 20.0477, 18.5249, 15.8766, 13.6917, 11.5731, 10.1827, | 
| 23 |  |  | 8.26271, 7.2696, 5.5482, 5.01854, 4.6875, 4.15784, 3.83697, 3.59789, 3.42119, 3.36335, 3.36335, 3.36335 }; // _nHigh=21 elements | 
| 24 |  |  |  | 
| 25 |  |  |  | 
| 26 |  |  | int TrkDedxHCut::Check(PamLevel2 *event) { | 
| 27 |  |  |  | 
| 28 |  |  | TrkTrack *trkTrack = event->GetTrack(0)->GetTrkTrack(); | 
| 29 |  |  |  | 
| 30 |  |  | Float_t rigMod = trkTrack->GetRigidity(); | 
| 31 |  |  | Float_t dedx = trkTrack->GetDEDX(); | 
| 32 |  |  |  | 
| 33 |  |  | #ifdef DEBUGPAMCUT | 
| 34 |  |  |  | 
| 35 |  |  | h_trk_he_dedx_rigmod[0]->Fill(rigMod, dedx); | 
| 36 |  |  | h_trk_le_dedx_rigmod[0]->Fill(rigMod, dedx); | 
| 37 |  |  |  | 
| 38 |  |  | #endif | 
| 39 |  |  |  | 
| 40 |  |  | if (rigMod < _xHigh[0]) | 
| 41 |  |  | return 0; // a proton below 126.414 MV is rejected | 
| 42 |  |  |  | 
| 43 |  |  | // interpolation of _xLow | 
| 44 |  |  | for (int i = 0; i < _nLow - 1; i++) { | 
| 45 |  |  | if (_xLow[i] <= rigMod && rigMod < _xLow[i + 1]) { | 
| 46 |  |  | double slope = (_yLow[i + 1] - _yLow[i]) / (_xLow[i + 1] - _xLow[i]); | 
| 47 |  |  | double y = _yLow[i] + slope * (rigMod - _xLow[i]); | 
| 48 |  |  |  | 
| 49 |  |  | if (dedx < y) | 
| 50 |  |  | return 0; | 
| 51 |  |  | } | 
| 52 |  |  | } | 
| 53 |  |  |  | 
| 54 |  |  | // interpolation of _xHigh | 
| 55 |  |  | for (int i = 0; i < _nHigh - 1; i++) { | 
| 56 |  |  | if (_xHigh[i] <= rigMod && rigMod < _xHigh[i + 1]) { | 
| 57 |  |  | double slope = (_yHigh[i + 1] - _yHigh[i]) / (_xHigh[i + 1] - _xHigh[i]); | 
| 58 |  |  | double y = _yHigh[i] + slope * (rigMod - _xHigh[i]); | 
| 59 |  |  |  | 
| 60 |  |  | if (dedx > y) | 
| 61 |  |  | return 0; | 
| 62 |  |  | } | 
| 63 |  |  | } | 
| 64 |  |  |  | 
| 65 |  |  | // extrapolation above 1 TV | 
| 66 |  |  | if (rigMod >= _xHigh[_nHigh - 1]) { | 
| 67 |  |  | double slope = (_yHigh[_nHigh - 1] - _yHigh[_nHigh - 2]) / (_xHigh[_nHigh - 1] - _xHigh[_nHigh - 2]); | 
| 68 |  |  | double y = _yHigh[_nHigh - 1] + slope * (rigMod - _xHigh[_nHigh - 1]); | 
| 69 |  |  |  | 
| 70 |  |  | if (dedx > y) | 
| 71 |  |  | return 0; | 
| 72 |  |  | } | 
| 73 |  |  |  | 
| 74 |  |  | #ifdef DEBUGPAMCUT | 
| 75 |  |  |  | 
| 76 |  |  | h_trk_he_dedx_rigmod[1]->Fill(rigMod, dedx); | 
| 77 |  |  | h_trk_le_dedx_rigmod[1]->Fill(rigMod, dedx); | 
| 78 |  |  |  | 
| 79 |  |  | #endif | 
| 80 |  |  |  | 
| 81 |  |  | return CUTOK; | 
| 82 |  |  |  | 
| 83 |  |  | } |