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 |
|
|
} |