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) {
447 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
451 if (IDsicsi->
Z < 2 || (IDsicsi->
Z == 2 && IDsicsi->
A < 7)) {
453 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
458 else if (IDsicsi->
Z == 2 && IDsicsi->
A > 6 && IDsicsi->
A < 10) {
466 else if ((IDsicsi->
Z == 2 && IDsicsi->
A > 9) || (IDsicsi->
Z == 3 && IDsicsi->
A < 6)) {
468 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
473 else if (IDsicsi->
Z == 3 && IDsicsi->
A > 5 && IDsicsi->
A < 9) {
479 else if ((IDsicsi->
Z == 3 && IDsicsi->
A > 8) || IDsicsi->
Z > 3) {
481 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
488 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref + 1))
497 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref - 1))
506 if (IDsicsi->
Z == Zref &&
TMath::Abs(IDsicsi->
A - Aref) < 2) {
511 else if (IDsicsi->
Z < Zref || (IDsicsi->
Z == Zref && IDsicsi->
A < (Aref - 1))) {
513 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
518 else if (IDsicsi->
Z > Zref || (IDsicsi->
Z == Zref && IDsicsi->
A > (Aref + 1))) {
520 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
527 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
531 if (IDsicsi->
Z < 3) {
533 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
538 else if (IDsicsi->
Z == 3) {
545 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
552 if (IDsicsi->
Z == Zref) {
557 else if (IDsicsi->
Z < Zref) {
559 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
567 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
577 if (IDsicsi->
Z < Zref) fCoherent =
kFALSE;
578 else fPileup =
kTRUE;
584 if (IDsicsi->
Z > Zref) fPileup =
kTRUE;
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
virtual Bool_t IsType(const Char_t *typ) const
const Char_t * GetType() const
Base class for detector geometry description, interface to energy-loss calculations.
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