1 |
/* |
2 |
* CaloNucleiZCut.h |
3 |
* |
4 |
* Created on: 30-apr-2009 |
5 |
* Author: Nicola Mori |
6 |
*/ |
7 |
|
8 |
/*! @file CaloNucleiZCut.h The TofNucleiZCut class definition file */ |
9 |
|
10 |
#ifndef NO_CALONUCLEI |
11 |
|
12 |
#ifndef CALONUCLEIZCUT_H_ |
13 |
#define CALONUCLEIZCUT_H_ |
14 |
|
15 |
#include "../../PamCutBase/PamCutBase.h" |
16 |
#include <CaloNuclei.h> |
17 |
|
18 |
#include <TH2F.h> |
19 |
|
20 |
/*! @enum CaloNucleiZ_Return Return values for rejected events */ |
21 |
enum CaloNucleiZ_Return { |
22 |
CALONUCLEIZ_OUTOFBOUNDS, ///< Discarded because charge is out of bounds |
23 |
CALONUCLEIZ_ILLEGALZ |
24 |
///< Discarded because charge is not between 1 and 8 |
25 |
}; |
26 |
|
27 |
/*! @enum CaloNucleiZ_method Method to use to measure Z. */ |
28 |
enum CaloNucleiZ_method { |
29 |
CALONUCLEIZ_SIEGEN, ///< Siegen method: stdedx vs. beta from ToF |
30 |
CALONUCLEIZ_DEDXBETA, ///< dE/dx in the first calorimeter plane vs. beta from ToF |
31 |
CALONUCLEIZ_DEDXDEFL, |
32 |
///< dE/dx in the first calorimeter plane vs. deflection from Tracker |
33 |
}; |
34 |
|
35 |
/*! @brief The CaloNuclei charge cut. |
36 |
* |
37 |
* This cut uses the CaloNuclei library to cut events depending on particle's charge value. |
38 |
* |
39 |
*/ |
40 |
|
41 |
class CaloNucleiZCut: public PamCut { |
42 |
|
43 |
public: |
44 |
/*! @brief Constructor. |
45 |
* |
46 |
* The charge to look for is passed to the CaloNucleiZCut object as Z. For each charge, there is an associated distribution of |
47 |
* events, with mean Zmean and standard deviation sigmaZ. These values will be used to check the events. |
48 |
* |
49 |
* @param cutName The cut's name. |
50 |
* @param Z The charge value. |
51 |
* @param lowerLimit The lower bound (in units of sigma_Z) of the desired charge range, defined as Zmean - lowerBound*sigmaZ. |
52 |
* @param upperLimit The upper bound (in units of sigma_Z) of the desired charge range, defined as Zmean + upperBound*sigmaZ. |
53 |
* @param method The method to use to measure the particle's charge (see #CaloNucleiZ_method). |
54 |
* @return |
55 |
*/ |
56 |
CaloNucleiZCut(const char *cutName, unsigned int Z, float lowerLimit, float upperLimit, unsigned int method = |
57 |
CALONUCLEIZ_SIEGEN) : |
58 |
PamCut(cutName), _Z(Z), _lowerLimit(lowerLimit), _upperLimit(upperLimit), _caloNuclei(NULL), _method(method) { |
59 |
|
60 |
} |
61 |
/*! @brief Destructor. */ |
62 |
~CaloNucleiZCut() { |
63 |
delete _caloNuclei; |
64 |
|
65 |
} |
66 |
|
67 |
/*! @brief The CaloNucleiZ check. |
68 |
* |
69 |
* The routine selects events whose value of Zmean obtained from the CaloNuclei Class is in the range [Zmean - sigma*lowerBound, Zmean + sigma*upperBound]. |
70 |
* Zmean and sigma are defined respectively as the mean and the standard deviation of the charge distributions obtained using CaloNuclei. |
71 |
* In current implementation, means are taken to be equal to the charge value (Zmean = Z) and sigmas are: |
72 |
* |
73 |
* Z | sigma |
74 |
* ----------- |
75 |
* 1 | 0.11 |
76 |
* 2 | 0.14 |
77 |
* 3 | 0.21 |
78 |
* 4 | 0.28 |
79 |
* 5 | 0.28 |
80 |
* 6 | 0.31 |
81 |
* 7 | 0.32 |
82 |
* 8 | 0.32 |
83 |
* |
84 |
* independent of the method used. |
85 |
* |
86 |
*/ |
87 |
int Check(PamLevel2 *event); |
88 |
|
89 |
private: |
90 |
|
91 |
unsigned int _Z; |
92 |
static const float _sigmaZ[]; |
93 |
|
94 |
float _lowerLimit; |
95 |
float _upperLimit; |
96 |
CaloNuclei *_caloNuclei; |
97 |
|
98 |
unsigned int _method; |
99 |
}; |
100 |
#endif /* CALONUCLEIZCUT_H_ */ |
101 |
|
102 |
#endif /* NO_CALONUCLEI */ |