4 #include "KVINDRAForwardGroupReconstructor.h"
5 #include "KVINDRACodeMask.h"
6 #include "KVIDGChIoSi.h"
10 #include <KVSilicon.h>
23 if (PART.GetStoppingDetector()->IsType(
"CSI")) {
26 ok = CoherencySiCsI(PART);
30 PART.SetParameter(
"UseFullChIoEnergyForCalib", CoherencyChIoSiCsI(PART));
34 ok = PART.IsIdentified() && identifying_telescope;
35 PART.SetParameter(
"UseFullChIoEnergyForCalib", !(theChio && theChio->GetNHits() > 1));
124 if (PART->
GetIDCode() == KVINDRA::IDCodes::ID_NEUTRON) {
131 auto si =
GetSi(PART);
134 stopped_in_silicon =
kFALSE;
135 if (csi->IsCalibrated() && csi->GetDetectorSignalValue(
"TotLight") > 0) {
141 fECsI = csi->GetCorrectedEnergy(PART, -1.,
kFALSE);
143 else if (si && !fPileup && fCoherent && si->IsCalibrated()) {
145 fESi = si->GetCorrectedEnergy(PART);
153 auto de_max = csi->GetMaxDeltaE(PART->
GetZ(), PART->
GetA());
164 if (
fECsI <= 0 && (PART->
GetECode() != KVINDRA::ECodes::SOME_ENERGY_LOSSES_CALCULATED)) {
176 if (PART->
GetIDCode() == KVINDRA::IDCodes::ID_STOPPED_IN_FIRST_STAGE && stopped_in_silicon) {
179 if (si->IsCalibrated())
186 if (!fPileup && fCoherent && si->IsCalibrated()) {
189 if (stopped_in_silicon) {
195 fESi = si->GetCorrectedEnergy(PART, -1., si_transmission);
225 if (fUseFullChIoEnergyForCalib &&
theChio->IsCalibrated()) {
228 theChio->SetEResAfterDetector(ERES);
270 if (csi && csi->IsCalibrated()) {
271 fECsI = csi->GetCorrectedEnergy(&tmp, -1.,
kFALSE);
361 bool fCoherent =
kTRUE;
366 if (IDsicsi->
IDOK && !IDcsi->
IDOK) {
383 if ((IDcsi->
Z == 1 || IDcsi->
Z == 2) && IDsicsi->
IDattempted) {
430 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
434 if (IDsicsi->
Z < 2 || (IDsicsi->
Z == 2 && IDsicsi->
A < 7)) {
436 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
441 else if (IDsicsi->
Z == 2 && IDsicsi->
A > 6 && IDsicsi->
A < 10) {
449 else if ((IDsicsi->
Z == 2 && IDsicsi->
A > 9) || (IDsicsi->
Z == 3 && IDsicsi->
A < 6)) {
451 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
456 else if (IDsicsi->
Z == 3 && IDsicsi->
A > 5 && IDsicsi->
A < 9) {
462 else if ((IDsicsi->
Z == 3 && IDsicsi->
A > 8) || IDsicsi->
Z > 3) {
464 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
471 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref + 1))
480 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref - 1))
489 if (IDsicsi->
Z == Zref &&
TMath::Abs(IDsicsi->
A - Aref) < 2) {
494 else if (IDsicsi->
Z < Zref || (IDsicsi->
Z == Zref && IDsicsi->
A < (Aref - 1))) {
496 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
501 else if (IDsicsi->
Z > Zref || (IDsicsi->
Z == Zref && IDsicsi->
A > (Aref + 1))) {
503 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
510 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
514 if (IDsicsi->
Z < 3) {
516 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
521 else if (IDsicsi->
Z == 3) {
528 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
535 if (IDsicsi->
Z == Zref) {
540 else if (IDsicsi->
Z < Zref) {
542 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
550 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
560 if (IDsicsi->
Z < Zref) fCoherent =
kFALSE;
561 else fPileup =
kTRUE;
567 if (IDsicsi->
Z > Zref) fPileup =
kTRUE;
603 fESi = si->GetCorrectedEnergy(
n, e0);
virtual const Char_t * GetType() const
const KVSeqCollection * GetIDTelescopes() const
KVIDTelescope * identifying_telescope
telescope which identified current particle
void SetCalibrationStatus(KVReconstructedNucleus &PART, UShort_t code)
KVIdentificationResult partID
identification to be applied to current particle
Base class for all detectors or associations of detectors in array which can identify charged particl...
Reconstruct data in rings 1-9 of INDRA.
Bool_t CalculateSiliconDEFromResidualEnergy(KVReconstructedNucleus *n, KVDetector *si)
void DoNeutronCalibration(KVReconstructedNucleus *PART)
Bool_t CoherencyChIoSiCsI(KVReconstructedNucleus &PART)
void DoCalibration(KVReconstructedNucleus *PART) override
KVDetector * GetSi(KVReconstructedNucleus *n)
Bool_t CoherencySiCsI(KVReconstructedNucleus &PART)
void SetNoCalibrationStatus(KVReconstructedNucleus *n)
Bool_t CalculateChIoDEFromResidualEnergy(KVReconstructedNucleus *n, Double_t ERES)
double DoBeryllium8Calibration(KVReconstructedNucleus *n)
KVDetector * GetCsI(KVReconstructedNucleus *n)
void SetBadCalibrationStatus(KVReconstructedNucleus *n)
KVDetector * theChio
the ChIo of the group
@ WARNING_CSI_MAX_ENERGY
particle calibration OK, although apparent energy would mean punching through the CsI
@ SOME_ENERGY_LOSSES_CALCULATED
particle calibration OK, with some detector energies calculated
Full result of one attempted particle identification.
Bool_t IDattempted
=kTRUE if identification was attempted
Bool_t IDOK
general quality of identification, =kTRUE if acceptable identification made
void SetComment(const Char_t *c)
Bool_t Aident
= kTRUE if A of particle established
Int_t deltaEpedestal
special code for handling particles which give no signal in deltaE
Int_t A
A of particle found (if Aident==kTRUE)
Int_t Z
Z of particle found (if Zident==kTRUE)
Int_t IDquality
specific quality code returned by identification procedure
Int_t IDcode
a general identification code for this type of identification
Bool_t Zident
=kTRUE if Z of particle established
Bool_t GetBoolValue(const Char_t *name) const
Description of properties and kinematics of atomic nuclei.
Bool_t IsIsotope(Int_t Z, Int_t A) const
Int_t GetZ() const
Return the number of proton / atomic number.
KVNameValueList * GetParameters() const
void SetParameter(const Char_t *name, ValType value) const
void SetEnergy(Double_t e)
Nuclei reconstructed from data measured by a detector array .
virtual Int_t GetECode() const
KVIdentificationResult * GetIdentificationResult(Int_t i)
const KVReconNucTrajectory * GetReconstructionTrajectory() const
virtual Int_t GetIDCode() const
KVDetector * GetStoppingDetector() const
void SetDetector(int i, KVDetector *);
virtual TObject * FindObjectByType(const Char_t *) const