/[PAMELA software]/PamCut/TrkCuts/TrkNucleiZCut/TrkNucleiZCut.cpp
ViewVC logotype

Diff of /PamCut/TrkCuts/TrkNucleiZCut/TrkNucleiZCut.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by pam-fi, Wed Aug 5 14:06:14 2009 UTC revision 1.4 by pam-fi, Wed Aug 5 17:04:49 2009 UTC
# Line 10  Line 10 
10    
11  #include "TrkNucleiZCut.h"  #include "TrkNucleiZCut.h"
12    
13  const float TrkNucleiZCut::_meanRigMean[] = {.992, 1.99, 3., 4., 5., 6.}; // the charge distribution peak for Z=1..6  const float TrkNucleiZCut::_meanRigMean[] = { .992, 1.99, 3., 4., 5., 6. }; // the charge distribution peak for Z=1..6
14  const float TrkNucleiZCut::_sigmaRigMean[] = {0.06, 0.1, 0.17, 0.34, 0.44, 0.59}; // the charge-width for Z=1..6  const float TrkNucleiZCut::_sigmaRigMean[] = { 0.06, 0.1, 0.17, 0.34, 0.44, 0.59 }; // the charge-width for Z=1..6
15    
16  const float TrkNucleiZCut::_meanBetaMean[] = {1., 2., 3., 4., 5., 6.}; // the charge distribution peak for Z=1..6  const float TrkNucleiZCut::_meanBetaMean[] = { 1., 2., 3., 4., 5., 6. }; // the charge distribution peak for Z=1..6
17  const float TrkNucleiZCut::_sigmaBetaMean[] = {0.09, 0.1, 0.17, 0.34, 0.44, 0.59}; // the charge-width for Z=1..6  const float TrkNucleiZCut::_sigmaBetaMean[] = { 0.09, 0.1, 0.17, 0.34, 0.44, 0.59 }; // the charge-width for Z=1..6
18    
19    
20  int TrkNucleiZCut::Check(PamLevel2 *event) {  int TrkNucleiZCut::Check(PamLevel2 *event) {
# Line 22  int TrkNucleiZCut::Check(PamLevel2 *even Line 22  int TrkNucleiZCut::Check(PamLevel2 *even
22    if (_lowZ < 1 || _lowZ > 6) {    if (_lowZ < 1 || _lowZ > 6) {
23      return TRKNUCLEIZ_ILLEGALLOWZ;      return TRKNUCLEIZ_ILLEGALLOWZ;
24    }    }
25    if ((_highZ < _lowZ && _highZ != -1) || _highZ > 6) {    if ((_highZ < (int) _lowZ && _highZ != -1) || _highZ > 6) {
26      return TRKNUCLEIZ_ILLEGALLOWZ;      return TRKNUCLEIZ_ILLEGALLOWZ;
27    }    }
28    
29    /* Check if we must perform a range selection */    /* Check if we must perform a range selection */
30    bool range = false;    bool range = false;
31    if (_highZ 1= -1)    if (_highZ != -1)
32    range = true;      range = true;
33    
34    // ******** Check if TrkNuclei has already been initialized ********    // ******** Check if TrkNuclei has already been initialized ********
35    if (_trkNuclei == NULL)    if (_trkNuclei == NULL)
36    _trkNuclei = new TrkNuclei();      _trkNuclei = new TrkNuclei();
37    _trkNuclei->Set(event->GetTrack(0)->GetTrkTrack());    _trkNuclei->Set(event->GetTrack(0)->GetTrkTrack());
38    
39    // ******** First of all, check if the minimum number of planes is matched. ********    // ******** First of all, check if the minimum number of planes is matched. ********
# Line 45  int TrkNucleiZCut::Check(PamLevel2 *even Line 45  int TrkNucleiZCut::Check(PamLevel2 *even
45    unsigned int nValid = 0;    unsigned int nValid = 0;
46    for (unsigned int ip = 0; ip < 6; ip++) {    for (unsigned int ip = 0; ip < 6; ip++) {
47      if (_trkNuclei->GetTrkTrack()->XGood(ip) && _trkNuclei->GetTrkTrack()->XGood(ip))      if (_trkNuclei->GetTrkTrack()->XGood(ip) && _trkNuclei->GetTrkTrack()->XGood(ip))
48      nValid++;        nValid++;
49    }    }
50    if (nValid < _minLayers)    if (nValid < _minLayers)
51    return TRKNUCLEIZ_TOOFEWLAYERS;      return TRKNUCLEIZ_TOOFEWLAYERS;
52    
53    // ******** Check the mean charge value ********    // ******** Check the mean charge value ********
54    if (_howToCheck == TRKNUCLEIZ_CHECKMEAN) {    if (_howToCheck == TRKNUCLEIZ_CHECKMEAN) {
55    
56      Float_t charge = 0., meanLowZ = 0., sigmaLowZ = 0., meanHighZ = 0., sigmaHighZ = 0.;;      Float_t charge = 0., meanLowZ = 0., sigmaLowZ = 0., meanHighZ = 0., sigmaHighZ = 0.;
57        ;
58      switch (_method) {      switch (_method) {
59        case TRKNUCLEIZ_RIG:      case TRKNUCLEIZ_RIG:
60        charge = _trkNuclei->GetZ_Rigidity();        charge = _trkNuclei->GetZ_Rigidity();
61        meanLowZ = _meanRigMean[_lowZ-1];        meanLowZ = _meanRigMean[_lowZ - 1];
62        sigmaLowZ = _sigmaRigMean[_lowZ-1];        sigmaLowZ = _sigmaRigMean[_lowZ - 1];
63        if(range) {        if (range) {
64          meanHighZ = _meanRigMean[_highZ-1];          meanHighZ = _meanRigMean[_highZ - 1];
65          sigmaHighZ = _sigmaRigMean[_highZ-1];          sigmaHighZ = _sigmaRigMean[_highZ - 1];
66        }        }
67        break;        break;
68        case TRKNUCLEIZ_BETA:      case TRKNUCLEIZ_BETA:
69        charge = _trkNuclei->GetZ_Beta(event->GetTrack(0)->GetToFTrack()->beta[12]);        charge = _trkNuclei->GetZ_Beta(event->GetTrack(0)->GetToFTrack()->beta[12]);
70        meanLowZ = _meanBetaMean[_Z-1];        meanLowZ = _meanBetaMean[_lowZ - 1];
71        sigmaLowZ = _sigmaBetaMean[_Z-1];        sigmaLowZ = _sigmaBetaMean[_lowZ - 1];
72        if(range) {        if (range) {
73          meanHighZ = _meanBetaMean[_highZ-1];          meanHighZ = _meanBetaMean[_highZ - 1];
74          sigmaHighZ = _sigmaBetaMean[_highZ-1];          sigmaHighZ = _sigmaBetaMean[_highZ - 1];
75        }        }
76    
77        break;        break;
78      }      }
79    
80      if(!range) {      if (!range) {
81        if ((charge > meanLowZ + _upperLimit * sigmaLowZ) || (charge < meanLowZ - _lowerLimit * sigmaLowZ)) {        if ((charge > meanLowZ + _upperLimit * sigmaLowZ) || (charge < meanLowZ - _lowerLimit * sigmaLowZ)) {
82          return TRKNUCLEIZ_OUTOFBOUNDS;          return TRKNUCLEIZ_OUTOFBOUNDS;
83        }        }
# Line 92  int TrkNucleiZCut::Check(PamLevel2 *even Line 93  int TrkNucleiZCut::Check(PamLevel2 *even
93    //     is sufficient. Implement an "if" cascade or a "switch" if another check method is necessary.    //     is sufficient. Implement an "if" cascade or a "switch" if another check method is necessary.
94    
95    else {    else {
96      Float_t charge[6] = {0., 0., 0., 0., 0., 0.};      Float_t charge[6] = { 0., 0., 0., 0., 0., 0. };
97      nValid = 0;      nValid = 0;
98      switch (_method) {      switch (_method) {
99        case TRKNUCLEIZ_RIG:      case TRKNUCLEIZ_RIG:
100        for (int ip = 0; ip < 6; ip++) {        for (int ip = 0; ip < 6; ip++) {
101          charge[ip] = _trkNuclei->GetZ_Rigidity(ip);          charge[ip] = _trkNuclei->GetZ_Rigidity(ip);
102          if (charge[ip] > 0.) {          if (charge[ip] > 0.) {
# Line 103  int TrkNucleiZCut::Check(PamLevel2 *even Line 104  int TrkNucleiZCut::Check(PamLevel2 *even
104          }          }
105        }        }
106        break;        break;
107        case TRKNUCLEIZ_BETA:      case TRKNUCLEIZ_BETA:
108        for (int ip = 0; ip < 6; ip++) {        for (int ip = 0; ip < 6; ip++) {
109          charge[ip] = _trkNuclei->GetZ_Beta(ip, event->GetTrack(0)->GetToFTrack()->beta[12]);          charge[ip] = _trkNuclei->GetZ_Beta(ip, event->GetTrack(0)->GetToFTrack()->beta[12]);
110          if (charge[ip] > 0.) {          if (charge[ip] > 0.) {
# Line 114  int TrkNucleiZCut::Check(PamLevel2 *even Line 115  int TrkNucleiZCut::Check(PamLevel2 *even
115      }      }
116    
117      for (int ip = 0; ip < 6; ip++) {      for (int ip = 0; ip < 6; ip++) {
118        if (charge[ip] > 0.) // Check only good layers        if (charge[ip] > 0.) { // Check only good layers
119        // Currently, no calibration for single layers is available. Z is used as a mean value, while for sigma          // Currently, no calibration for single layers is available. Z is used as a mean value, while for sigma
120        // we use the standard values use for mean dE/dx Vs. beta.          // we use the standard values use for mean dE/dx Vs. beta.
121        if(!range) {          if (!range) {
122          if ((charge[ip] > _lowZ + _upperLimit * _sigmaBetaMean[_lowZ - 1]) || (charge[ip] < _lowZ - _lowerLimit * _sigmaBetaMean[_lowZ - 1])) {            if ((charge[ip] > _lowZ + _upperLimit * _sigmaBetaMean[_lowZ - 1]) || (charge[ip] < _lowZ - _lowerLimit
123            return TRKNUCLEIZ_OUTOFBOUNDS;                * _sigmaBetaMean[_lowZ - 1])) {
124                return TRKNUCLEIZ_OUTOFBOUNDS;
125              }
126          }          }
127        }          else {
128        else {            if ((charge[ip] > _highZ + _upperLimit * _sigmaBetaMean[_highZ - 1]) || (charge[ip] < _lowZ - _lowerLimit
129          if ((charge[ip] > _highZ + _upperLimit * _sigmaBetaMean[_highZ - 1]) || (charge[ip] < _lowZ - _lowerLimit * _sigmaBetaMean[_lowZ - 1])) {                * _sigmaBetaMean[_lowZ - 1])) {
130            return TRKNUCLEIZ_OUTOFBOUNDS;              return TRKNUCLEIZ_OUTOFBOUNDS;
131              }
132          }          }
133        }        }
134      }      }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.23