6 #include <unordered_map>
51 if (!node->GetDetector()->IsAnalysed() &&
52 node->GetDetector()->Fired(GetPartSeedCond()) &&
53 node->GetDetector()->IsType(
"CSI") &&
54 node->GetNTrajForwards() > 1) {
57 TIter next_idt(idt_list);
59 bool with_etalon = (traj->GetN() == 4);
61 std::unordered_map<std::string, KVIdentificationResult> IDR;
81 GetEventFragment()->GetParameters()->IncrementValue(
"INDRA_GAMMA_MULT", 1);
82 GetEventFragment()->GetParameters()->IncrementValue(
"INDRA_GAMMA_DETS", node->GetName());
83 node->GetDetector()->SetAnalysed();
89 if (IDR[
"SILI_CSI"].IDattempted && IDR[
"SILI_CSI"].IDOK) {
91 return GetEventFragment()->AddParticle();
96 return GetEventFragment()->AddParticle();
119 if (!GetSi75(&PART) && !GetSiLi(&PART))
122 PART.
SetParameter(
"UseFullChIoEnergyForCalib", !(theChio && theChio->GetNHits() > 1));
123 bool ok = CoherencyEtalons(PART);
139 if (!GetSi75(PART) && !GetSiLi(PART))
146 if (PART->
GetIDCode() == KVINDRA::IDCodes::ID_CI_SI_COHERENCY
147 || PART->
GetIDCode() == KVINDRA::IDCodes::ID_CI_COHERENCY
148 || PART->
GetIDCode() == KVINDRA::IDCodes::ID_CI_MULTIHIT)
152 auto csi = GetCsI(PART);
155 if (csi->IsCalibrated()) {
158 fECsI = DoBeryllium8Calibration(PART);
161 fECsI = csi->GetCorrectedEnergy(PART, -1.,
kFALSE);
164 SetNoCalibrationStatus(PART);
167 if (fECsI <= 0 && (PART->
GetECode() != KVINDRA::ECodes::SOME_ENERGY_LOSSES_CALCULATED)) {
168 SetBadCalibrationStatus(PART);
173 auto sili = GetSiLi(PART);
179 if (stopped_in_sili) {
183 sili->SetEResAfterDetector(ERES);
185 fESiLi = sili->GetCorrectedEnergy(PART, -1., si_transmission);
187 if (!stopped_in_sili && ERES > 0.0) {
188 if (!CalculateSiLiDEFromResidualEnergy(ERES, sili, PART))
return;
191 SetBadCalibrationStatus(PART);
197 if (!CalculateSiLiDEFromResidualEnergy(ERES, sili, PART))
return;
200 auto si75 = GetSi75(PART);
206 && si75->IsCalibrated()) {
208 if (stopped_in_si75) {
212 si75->SetEResAfterDetector(ERES);
214 fESi75 = si75->GetCorrectedEnergy(PART, -1., si_transmission);
216 if (!stopped_in_si75 && ERES > 0.0) {
217 if (!CalculateSi75DEFromResidualEnergy(ERES, si75, PART))
return;
220 SetBadCalibrationStatus(PART);
226 if (!CalculateSi75DEFromResidualEnergy(ERES, si75, PART))
return;
239 && theChio->IsCalibrated()) {
242 if (stopped_in_chio) {
246 theChio->SetEResAfterDetector(ERES);
248 fEChIo = theChio->GetCorrectedEnergy(PART, -1., ci_transmission);
250 if (!stopped_in_chio && ERES > 0) {
251 if (!CalculateChIoDEFromResidualEnergy(PART, ERES))
return;
256 if (!stopped_in_chio && ERES > 0) {
257 if (!CalculateChIoDEFromResidualEnergy(PART, ERES))
return;
275 IDcsi = IDsilicsi = IDsi75sili = IDcisi75 = IDcicsi =
nullptr;
288 Bool_t haveSiLiCsI = IDsilicsi && IDsilicsi->
IDOK;
289 Bool_t haveSi75SiLi = IDsi75sili && IDsi75sili->
IDOK;
290 Bool_t haveChIoSi75 = IDcisi75 && IDcisi75->
IDOK;
292 KVIDTelescope* idt_csi, *idt_silicsi, *idt_si75sili, *idt_cisi75, *idt_cicsi;
293 idt_csi = idt_silicsi = idt_si75sili = idt_cisi75 = idt_cicsi =
nullptr;
310 identifying_telescope = idt_csi;
314 if (IDsi75sili->
Z > partID.Z) {
319 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
324 IDsi75sili->
SetComment(
"CsI identification with another particle stopped in SiLi");
330 else if (haveChIoSi75) {
332 if (IDcisi75->
Z > partID.Z) {
334 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
340 else if (haveSiLiCsI) {
342 identifying_telescope = idt_silicsi;
345 if (IDcisi75->
Z > partID.Z) {
347 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
356 partID = *IDsi75sili;
357 identifying_telescope = idt_si75sili;
364 else if (haveChIoSi75) {
366 identifying_telescope = idt_cisi75;
373 identifying_telescope = idt_cisi75;
396 SetBadCalibrationStatus(
n);
400 SetCalibrationStatus(*
n, KVINDRA::ECodes::SOME_ENERGY_LOSSES_CALCULATED);
419 SetBadCalibrationStatus(
n);
423 SetCalibrationStatus(*
n, KVINDRA::ECodes::SOME_ENERGY_LOSSES_CALCULATED);
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.
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)
Path taken by particles through multidetector geometry.
const KVSeqCollection * GetIDTelescopes() const
Information on relative positions of detectors & particle trajectories.
Base class for all detectors or associations of detectors in array which can identify charged particl...
virtual Bool_t IsReadyForID()
virtual Bool_t Identify(KVIdentificationResult *, Double_t x=-1., Double_t y=-1.)
void DoCalibration(KVReconstructedNucleus *PART)
bool DoCoherencyAnalysis(KVReconstructedNucleus &PART)
Coherency analysis for backward rings 10-17 of INDRA.
Reconstruct particles in INDRA groups with etalon telescopes.
Bool_t CoherencyEtalons(KVReconstructedNucleus &PART)
Called by Identify() for particles stopping in etalon modules of Rings 10-17.
void DoCalibration(KVReconstructedNucleus *PART)
Calibration of particle stopping in etalon modules.
Bool_t CalculateSi75DEFromResidualEnergy(Double_t ERES, KVDetector *si75, KVReconstructedNucleus *n)
Bool_t CalculateSiLiDEFromResidualEnergy(Double_t ERES, KVDetector *sili, KVReconstructedNucleus *n)
bool DoCoherencyAnalysis(KVReconstructedNucleus &PART)
KVReconstructedNucleus * ReconstructTrajectory(const KVGeoDNTrajectory *traj, const KVGeoDetectorNode *node)
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)
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 GetBoolValue(const Char_t *name) const
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 *);
KaliVeda extensions to ROOT collection classes.
virtual TObject * FindObjectByType(const Char_t *) const