4#include "KVINDRAEtalonGroupReconstructor.h"
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();
155 if (csi->IsCalibrated()) {
161 fECsI = csi->GetCorrectedEnergy(PART, -1.,
kFALSE);
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) {
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) {
242 if (stopped_in_chio) {
250 if (!stopped_in_chio && ERES > 0) {
256 if (!stopped_in_chio && ERES > 0) {
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;
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) {
334 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
340 else if (haveSiLiCsI) {
347 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
364 else if (haveChIoSi75) {
virtual Bool_t IsType(const Char_t *typ) const
virtual const Char_t * GetType() 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)
Path taken by particles through multidetector geometry.
const KVSeqCollection * GetIDTelescopes() const
Information on relative positions of detectors & particle trajectories.
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...
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.
KVDetector * GetSi75(KVReconstructedNucleus *n)
Bool_t CalculateSi75DEFromResidualEnergy(Double_t ERES, KVDetector *si75, KVReconstructedNucleus *n)
Bool_t CalculateSiLiDEFromResidualEnergy(Double_t ERES, KVDetector *sili, KVReconstructedNucleus *n)
KVDetector * GetSiLi(KVReconstructedNucleus *n)
bool DoCoherencyAnalysis(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)
KVReconstructedNucleus * ReconstructTrajectory(const KVGeoDNTrajectory *traj, const KVGeoDetectorNode *node)
KVDetector * theChio
the ChIo of the group
@ SOME_ENERGY_LOSSES_CALCULATED
particle calibration OK, with some detector energies calculated
@ ID_CI_SI_COHERENCY
particle identified in ChIo-Si telescope in coincidence with light particle identified in CsI
@ ID_CSI_PSA
particle identified in CsI detector by pulse shape analysis
@ ID_CI_COHERENCY
particle stopped in ChIo revealed by coherency tests (Zmin)
@ ID_CI_MULTIHIT
particles stopped in multiple Si (ring<10) or CsI (ring>9) behind same ChIo, bad identification
@ ID_GAMMA
'gamma' particle detected in CsI
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
void SetParameter(const Char_t *name, ValType value) const
KVNameValueList * GetParameters() const
void SetEnergy(Double_t e)
Nuclei reconstructed from data measured by a detector array .
KVIdentificationResult * GetIdentificationResult(Int_t i)
virtual Int_t GetECode() const
KVDetector * GetStoppingDetector() const
void SetDetector(int i, KVDetector *);
virtual Int_t GetIDCode() const
const KVReconNucTrajectory * GetReconstructionTrajectory() const
KaliVeda extensions to ROOT collection classes.
virtual TObject * FindObjectByType(const Char_t *) const