本文整理汇总了C++中KVDetector::SetEnergyLoss方法的典型用法代码示例。如果您正苦于以下问题:C++ KVDetector::SetEnergyLoss方法的具体用法?C++ KVDetector::SetEnergyLoss怎么用?C++ KVDetector::SetEnergyLoss使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KVDetector
的用法示例。
在下文中一共展示了KVDetector::SetEnergyLoss方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateParticleEnergy
void KVIDTelescope::CalculateParticleEnergy(KVReconstructedNucleus* nuc)
{
// The energy of each particle is calculated as follows:
//
// E = dE_1 + dE_2 + ... + dE_N
//
// dE_1, dE_2, ... = energy losses measured in each detector through which
// the particle has passed (or stopped, in the case of dE_N).
// These energy losses are corrected for (Z,A)-dependent effects
// such as pulse-heigth defect in silicon detectors, losses in
// windows of gas detectors, etc.
//
// Whenever possible, the energy loss for fired detectors which are uncalibrated
// or not functioning is calculated. In this case the status returned by GetCalibStatus()
// will be KVIDTelescope::kCalibStatus_Calculated.
// If none of the detectors is calibrated, the particle's energy cannot be calculated &
// the status will be KVIDTelescope::kCalibStatus_NoCalibrations.
// Otherwise, the status code will be KVIDTelescope::kCalibStatus_OK.
//status code
fCalibStatus = kCalibStatus_NoCalibrations;
UInt_t z = nuc->GetZ();
//uncharged particles
if (z == 0) return;
KVDetector* d1 = GetDetector(1);
KVDetector* d2 = (fDetectors->GetSize() > 1 ? GetDetector(2) : 0);
Bool_t d1_cal = d1->IsCalibrated();
Bool_t d2_cal = (d2 ? d2->IsCalibrated() : kFALSE);
//no calibrations
if (!d1_cal && !d2)
return;
if ((d1 && d2) && !d1_cal && !d2_cal)
return;
//status code
fCalibStatus = kCalibStatus_OK;
UInt_t a = nuc->GetA();
// particles stopped in first member of telescope
if (nuc->GetStatus() == 3) {
if (d1_cal) {
nuc->SetEnergy(d1->GetCorrectedEnergy(nuc, -1, kFALSE)); //N.B.: transmission=kFALSE because particle stop in d1
}
return;
}
Double_t e1, e2, einc;
e1 = e2 = einc = 0.0;
if (!d1_cal) {//1st detector not calibrated - calculate from residual energy in 2nd detector
//second detector must exist and have all acquisition parameters fired with above-pedestal value
if (d2 && d2->Fired("Pall")) e2 = d2->GetCorrectedEnergy(nuc, -1, kFALSE); //N.B.: transmission=kFALSE because particle stop in d2
if (e2 <= 0.0) {
// zero energy loss in 2nd detector ? can't do anything...
fCalibStatus = kCalibStatus_NoCalibrations;
return;
}
//calculate & set energy loss in dE detector
//N.B. using e2 for the residual energy after detector 1 means
//that we are assuming the particle stops in detector 2.
//if this is not true, we will underestimate the energy of the particle.
e1 = d1->GetDeltaEFromERes(z, a, e2);
if (e1 < 0.0) e1 = 0.0;
else {
d1->SetEnergyLoss(e1);
d1->SetEResAfterDetector(e2);
e1 = d1->GetCorrectedEnergy(nuc);
//status code
fCalibStatus = kCalibStatus_Calculated;
}
} else {//1st detector is calibrated too: get corrected energy loss
e1 = d1->GetCorrectedEnergy(nuc);
}
if (d2 && !d2_cal) {//2nd detector not calibrated - calculate from energy loss in 1st detector
e1 = d1->GetCorrectedEnergy(nuc);
if (e1 <= 0.0) {
// zero energy loss in 1st detector ? can't do anything...
fCalibStatus = kCalibStatus_NoCalibrations;
return;
}
//calculate & set energy loss in 2nd detector
e2 = d1->GetEResFromDeltaE(z, a);
if (e2 < 0.0) e2 = 0.0;
else {
e2 = d2->GetDeltaE(z, a, e2);
d2->SetEnergyLoss(e2);
e2 = d2->GetCorrectedEnergy(nuc);
//status code
fCalibStatus = kCalibStatus_Calculated;
}
} else if (d2) { //2nd detector is calibrated too: get corrected energy loss
//.........这里部分代码省略.........