--- PamCut/TrkCuts/TrkNucleiZCut/TrkNucleiZCut.cpp 2009/05/27 13:30:08 1.1.1.1 +++ PamCut/TrkCuts/TrkNucleiZCut/TrkNucleiZCut.cpp 2009/05/29 10:10:18 1.2 @@ -10,7 +10,11 @@ #include "TrkNucleiZCut.h" -const float TrkNucleiZCut::_sigmaZ[] = { 0.09, 0.1, 0.17, 0.34, 0.44, 0.59 }; // the charge-width in a layer for Z=1..6 +const float TrkNucleiZCut::_meanRigMean[] = { .992, 1.99, 3., 4., 5., 6. }; // the charge distribution peak 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 + +const float TrkNucleiZCut::_meanBetaMean[] = { 1., 2., 3., 4., 5., 6. }; // the charge distribution peak 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 int TrkNucleiZCut::Check(PamLevel2 *event) { @@ -40,17 +44,21 @@ // ******** Check the mean charge value ******** if (_howToCheck == TRKNUCLEIZ_CHECKMEAN) { - Float_t charge; + Float_t charge, meanZ, sigmaZ; switch (_method) { - case TRKNUCLEIZ_DEFL: + case TRKNUCLEIZ_RIG: charge = _trkNuclei->GetZ_Rigidity(); + meanZ = _meanRigMean[_Z-1]; + sigmaZ = _sigmaRigMean[_Z-1]; break; case TRKNUCLEIZ_BETA: charge = _trkNuclei->GetZ_Beta(event->GetTrack(0)->GetToFTrack()->beta[12]); + meanZ = _meanBetaMean[_Z-1]; + sigmaZ = _sigmaBetaMean[_Z-1]; break; } - if ((charge > _Z + _upperLimit * _sigmaZ[_Z - 1]) || (charge < _Z - _lowerLimit * _sigmaZ[_Z - 1])) { + if ((charge > meanZ + _upperLimit * sigmaZ) || (charge < meanZ - _lowerLimit * sigmaZ)) { return TRKNUCLEIZ_OUTOFBOUNDS; } @@ -63,7 +71,7 @@ Float_t charge[6] = { 0., 0., 0., 0., 0., 0. }; nValid = 0; switch (_method) { - case TRKNUCLEIZ_DEFL: + case TRKNUCLEIZ_RIG: for (int ip = 0; ip < 6; ip++) { charge[ip] = _trkNuclei->GetZ_Rigidity(ip); if (charge[ip] > 0.) { @@ -83,7 +91,9 @@ for (int ip = 0; ip < 6; ip++) { if (charge[ip] > 0.) // Check only good layers - if ((charge[ip] > _Z + _upperLimit * _sigmaZ[_Z - 1]) || (charge[ip] < _Z - _lowerLimit * _sigmaZ[_Z - 1])) { + // Currently, no calibration for single layers is available. Z is used as a mean value, while for sigma + // we use the standard values use for mean dE/dx Vs. beta. + if ((charge[ip] > _Z + _upperLimit * _sigmaBetaMean[_Z - 1]) || (charge[ip] < _Z - _lowerLimit * _sigmaBetaMean[_Z - 1])) { return TRKNUCLEIZ_OUTOFBOUNDS; } }