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));
126 if (PART->
GetIDCode() == KVINDRA::IDCodes::ID_NEUTRON) {
135 stopped_in_silicon =
kFALSE;
136 if (csi->IsCalibrated() && csi->GetDetectorSignalValue(
"TotLight") > 0) {
142 fECsI = csi->GetCorrectedEnergy(PART, -1.,
kFALSE);
148 if (
fECsI <= 0 && (PART->
GetECode() != KVINDRA::ECodes::SOME_ENERGY_LOSSES_CALCULATED)) {
153 auto si =
GetSi(PART);
161 if (PART->
GetIDCode() == KVINDRA::IDCodes::ID_STOPPED_IN_FIRST_STAGE && stopped_in_silicon) {
164 if (si->IsCalibrated())
171 if (!fPileup && fCoherent && si->IsCalibrated()) {
174 if (stopped_in_silicon) {
180 fESi = si->GetCorrectedEnergy(PART, -1., si_transmission);
255 if (csi && csi->IsCalibrated()) {
256 fECsI = csi->GetCorrectedEnergy(&tmp, -1.,
kFALSE);
346 bool fCoherent =
kTRUE;
351 if (IDsicsi->
IDOK && !IDcsi->
IDOK) {
368 if ((IDcsi->
Z == 1 || IDcsi->
Z == 2) && IDsicsi->
IDattempted) {
415 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
419 if (IDsicsi->
Z < 2 || (IDsicsi->
Z == 2 && IDsicsi->
A < 7)) {
421 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
426 else if (IDsicsi->
Z == 2 && IDsicsi->
A > 6 && IDsicsi->
A < 10) {
434 else if ((IDsicsi->
Z == 2 && IDsicsi->
A > 9) || (IDsicsi->
Z == 3 && IDsicsi->
A < 6)) {
436 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
441 else if (IDsicsi->
Z == 3 && IDsicsi->
A > 5 && IDsicsi->
A < 9) {
447 else if ((IDsicsi->
Z == 3 && IDsicsi->
A > 8) || IDsicsi->
Z > 3) {
449 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
456 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref + 1))
465 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref - 1))
474 if (IDsicsi->
Z == Zref &&
TMath::Abs(IDsicsi->
A - Aref) < 2) {
479 else if (IDsicsi->
Z < Zref || (IDsicsi->
Z == Zref && IDsicsi->
A < (Aref - 1))) {
481 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
486 else if (IDsicsi->
Z > Zref || (IDsicsi->
Z == Zref && IDsicsi->
A > (Aref + 1))) {
488 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
495 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
499 if (IDsicsi->
Z < 3) {
501 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
506 else if (IDsicsi->
Z == 3) {
513 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
520 if (IDsicsi->
Z == Zref) {
525 else if (IDsicsi->
Z < Zref) {
527 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
535 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
545 if (IDsicsi->
Z < Zref) fCoherent =
kFALSE;
546 else fPileup =
kTRUE;
552 if (IDsicsi->
Z > Zref) fPileup =
kTRUE;
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
virtual const Char_t * GetType() const
virtual Bool_t IsType(const Char_t *typ) const
Base class for detector geometry description.
Int_t GetNHits() const
Return the number of particles hitting this detector in an event.
Bool_t IsCalibrated() const
virtual void SetEResAfterDetector(Double_t e)
virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres)
virtual Double_t GetCorrectedEnergy(KVNucleus *, Double_t e=-1., Bool_t transmission=kTRUE)
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)
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
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
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