57 fUseFullChIoEnergyForCalib =
kTRUE;
58 fECsI = fESi = fEChIo = fESi75 = fESiLi = 0.;
63 fIncludeEtalonsInCalibration =
kFALSE;
87 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
99 KVINDRAReconNuc::~KVINDRAReconNuc()
107 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
145 cout <<
"KVINDRAReconNuc: fRing=" <<
GetRingNumber() <<
" fModule=" <<
149 cout <<
" -- RESULTS OF COHERENCY TESTS (RINGS 1-9) -- " << endl;
150 if (
fCoherent) cout <<
" CsI-R/L & Si-CsI identifications COHERENT" << endl;
151 else cout <<
" CsI-R/L & Si-CsI identifications NOT COHERENT" << endl;
152 if (
fPileup) cout <<
" Si energy loss indicates PILEUP" << endl;
153 else cout <<
" Si energy loss indicates single particle" << endl;
156 else cout <<
" ChIo-Si identification indicates MULTIPLE CHIO CONTRIBUTIONS" << endl;
161 cout <<
" -- RESULTS OF COHERENCY TESTS (RINGS 10-17) -- " << endl;
163 else cout <<
" WITHOUT etalon telescopes included in particle trajectory" << endl;
165 cout <<
" Analysis indicates PILEUP in ChIo" << endl;
168 cout <<
" Analysis indicates PILEUP in Si75" << endl;
171 cout <<
" Analysis indicates PILEUP in SiLi" << endl;
174 else cout <<
" ChIo energy contribution calculated assuming MULTIPLE CHIO CONTRIBUTIONS" << endl;
176 cout <<
" =======> ";
180 else cout <<
" Zreal=" <<
GetRealZ();
181 cout << endl <<
" Identification code = " << ((
KVINDRAReconNuc*)
this)->
185 cout <<
"(unidentified)" << endl;
192 if (
fEChIo < 0) cout <<
" (calculated)";
196 if (
fESi < 0) cout <<
" (calculated)";
199 if (
fECsI < 0) cout <<
" (calculated)";
204 if (
fEChIo < 0) cout <<
" (calculated)";
208 if (
fESi75 < 0) cout <<
" (calculated)";
211 if (
fESiLi < 0) cout <<
" (calculated)";
215 if (
fECsI < 0) cout <<
" (calculated)";
223 cout <<
"(uncalibrated)" << endl;
226 cout <<
"Analysis : ";
230 "Particle alone in group, or identification independently of other"
232 cout <<
"particles in group is directly possible." << endl;
237 "Particle reconstructed after identification of others in group"
240 "and subtraction of their calculated energy losses in ChIo."
246 "Particle identification estimated after arbitrary sharing of"
249 "energy lost in ChIo between several reconstructed particles."
255 "Particle stopped in first stage of telescope. Estimation of minimum Z."
265 "-------------------------------------------------------------------------------"
523 if (strcmp(id_tel_type,
""))
524 return Form(
"No identification attempted in %s", id_tel_type);
527 Form(
"Particle unidentified. Identifying telescope not set.");
612 if (IDsicsi->
IDOK && !IDcsi->
IDOK) {
628 if ((IDcsi->
Z == 1 || IDcsi->
Z == 2) &&
GetSi()) {
641 if (dE_exp > ped + 5.) {
645 if (idt->
GetIDMapY() < (ped + factor * (dE_exp - ped))) {
703 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
707 if (IDsicsi->
Z < 2 || (IDsicsi->
Z == 2 && IDsicsi->
A < 7)) {
709 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
712 else if (IDsicsi->
Z == 2 && IDsicsi->
A > 6 && IDsicsi->
A < 10) {
717 else if ((IDsicsi->
Z == 2 && IDsicsi->
A > 9) || (IDsicsi->
Z == 3 && IDsicsi->
A < 6)) {
719 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
722 else if (IDsicsi->
Z == 3 && IDsicsi->
A > 5 && IDsicsi->
A < 9) {
726 else if ((IDsicsi->
Z == 3 && IDsicsi->
A > 8) || IDsicsi->
Z > 3) {
728 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
733 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref + 1))
739 if ((IDsicsi->
Z == Zref) && (IDsicsi->
A == (Aref - 1))
745 if (IDsicsi->
Z == Zref &&
TMath::Abs(IDsicsi->
A - Aref) < 2) {
748 else if (IDsicsi->
Z < Zref || (IDsicsi->
Z == Zref && IDsicsi->
A < (Aref - 1))) {
750 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
753 else if (IDsicsi->
Z > Zref || (IDsicsi->
Z == Zref && IDsicsi->
A > (Aref + 1))) {
755 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
760 if (IDcsi->
Z == 4 && IDcsi->
A == 8) {
764 if (IDsicsi->
Z < 3) {
766 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
769 else if (IDsicsi->
Z == 3) {
774 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
779 if (IDsicsi->
Z == Zref) {
782 else if (IDsicsi->
Z < Zref) {
784 IDsicsi->
SetComment(
"CsI-R/L & Si-CsI identifications not coherent");
790 IDsicsi->
SetComment(
"Second particle stopping in Si, identification ChIo-Si required");
832 if (IDcsi && !IDcsi->
IDOK) {
833 if (IDcicsi && IDcicsi->
IDOK) {
840 if (IDcsi && IDcsi->
IDOK) {
852 if (IDcicsi && IDcicsi->
IDOK) {
857 IDcicsi->
SetComment(
"Possible pile-up in ChIo");
878 IDcsi = IDsilicsi = IDsi75sili = IDcisi75 = IDcicsi = 0;
890 Bool_t haveSiLiCsI = IDsilicsi && IDsilicsi->
IDOK;
891 Bool_t haveChIoCsI = IDcicsi && IDcicsi->
IDOK;
892 Bool_t haveSi75SiLi = IDsi75sili && IDsi75sili->
IDOK;
893 Bool_t haveChIoSi75 = IDcisi75 && IDcisi75->
IDOK;
899 if (haveCsI && !haveSiLiCsI && !haveSi75SiLi)
923 if (IDsi75sili->
Z > theID.
Z) {
928 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
933 IDsi75sili->
SetComment(
"CsI identification with another particle stopped in SiLi");
939 else if (haveChIoSi75) {
941 if (IDcisi75->
Z > theID.
Z) {
943 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
949 else if (haveSiLiCsI) {
953 if (IDcisi75->
Z > theID.
Z) {
955 IDcisi75->
SetComment(
"CsI identification with another particle stopped in Si75");
961 else if (haveChIoCsI) {
979 else if (haveChIoSi75) {
1035 Obsolete(
"Identify",
"1.13",
"1.15");
1364 stopped_in_silicon =
kFALSE;
1393 if (stopped_in_silicon) {
1394 si_transmission =
kFALSE;
1413 if (!stopped_in_silicon) {
1546 stopped_in_chio =
kFALSE;
1565 si_transmission =
kFALSE;
1590 si_transmission =
kFALSE;
1621 if (stopped_in_chio) {
1622 ci_transmission =
kFALSE;
1629 if (!stopped_in_chio && ERES > 0) {
1635 if (!stopped_in_chio && ERES > 0) {
KVMultiDetArray * gMultiDetArray
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
char * Form(const char *fmt,...)
virtual const Char_t * GetType() const
Ionisation chamber detectors of the INDRA multidetector array.
CsI(Tl) scintillation detectors of the INDRA multidetector array.
Double_t GetCorrectedEnergy(KVNucleus *, Double_t lum=-1., Bool_t transmission=kTRUE)
void SetACQParams();
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Base class for detector geometry description.
virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A)
virtual Double_t GetEnergy() const
Double_t GetDetectorSignalValue(const KVString &type, const KVNameValueList ¶ms="") 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)
Base class for all detectors or associations of detectors in array which can identify charged particl...
virtual Double_t GetIDMapY(Option_t *opt="")
virtual Double_t GetPedestalY(Option_t *opt="")
virtual Double_t GetMeanDEFromID(Int_t &status, Int_t Z, Int_t A=-1, Double_t Eres=-1.0)
const Char_t * GetEStatus()
Give an explanation for the calibration code.
void Clear(Option_t *opt="")
resets all id subcodes.
const Char_t * GetIDStatus()
Give an explanation for the ID code.
Nuclei reconstructed from data measured in the INDRA array.
Bool_t StoppedInSi()
Returns kTRUE if particle stopped in Si detector.
Bool_t StoppedInChIo()
Returns kTRUE if particle stopped in ChIo detector.
void CalculateSi75DEFromResidualEnergy(Double_t ERES)
virtual Bool_t CoherencyEtalons(KVIdentificationResult &theID)
Called by Identify() for particles stopping in etalon modules of Rings 10-17.
Bool_t fCorrectCalib
set to kTRUE in Streamer if calibration needs correction
Bool_t fCoherentSi75SiLiCsI
coherency of Si75-SiLi and SiLi-CsI/CsI identifications
const Char_t * GetIDSubCodeString(const Char_t *id_tel_type="") const
Float_t fESi
si contribution to energy
Bool_t fPileupChIo
apparent pileup in ChIo, revealed by inconsistency between CsI & ChIo-CsI identifications
KVINDRACodes fCodes
VEDA6-style calibration and identification codes.
virtual Bool_t CoherencySiCsI(KVIdentificationResult &theID)
Bool_t fPileupSi75
apparent pileup in Si75, revealed by inconsistency between CsI/SiLi-CsI & ChIo-Si75 identifications
UInt_t GetRingNumber(void) const
void DoNeutronCalibration()
virtual void Clear(Option_t *t="")
reset nucleus' properties
virtual void Copy(TObject &) const
void DoGammaCalibration()
no calibration is performed for gammas
void SetBadCalibrationStatus()
void CalculateSiLiDEFromResidualEnergy(Double_t ERES)
Float_t fECsI
csi contribution to energy
Bool_t StoppedInCsI()
Returns kTRUE if particle stopped in CsI detector.
virtual Bool_t CoherencyChIoCsI(KVIdentificationResult &theID)
void init()
default initialisations
KVINDRACodes & GetCodes() const
Bool_t fPileupSiLi
apparent pileup in SiLi, revealed by inconsistency between CsI & Si75-SiLi identifications
Bool_t StoppedInSi75()
Returns kTRUE if particle stopped in Si75 detector.
void Print(Option_t *option="") const
Display nucleus parameters.
virtual void CalibrateRings1To9()
KVINDRAReconNuc()
default ctor
Bool_t CalculateSiliconDEFromResidualEnergy()
Bool_t fUseFullChIoEnergyForCalib
decided by coherency analysis
Int_t GetIDSubCode(const Char_t *id_tel_type="") const
Float_t fESiLi
sili contribution to energy
virtual void CalibrateRings10To17()
UInt_t GetModuleNumber(void) const
void DoBeryllium8Calibration()
void SetNoCalibrationStatus()
Bool_t fPileup
apparent pileup in Si, revealed by inconsistency between CsI & Si-CsI identifications
Float_t fEChIo
chio contribution to energy
virtual Bool_t CoherencyChIoSiCsI(KVIdentificationResult)
void CalculateChIoDEFromResidualEnergy(Double_t ERES)
calculate fEChIo from residual energy
Bool_t fIncludeEtalonsInCalibration
for etalon modules:particle passed through Si75/SiLi
Bool_t fCoherent
coherency of CsI & Si-CsI identifications
Float_t fESi75
si75 contribution to energy
Bool_t StoppedInSiLi()
Returns kTRUE if particle stopped in Si detector.
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
const Char_t * GetComment() const
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
virtual Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *)
Description of properties and kinematics of atomic nuclei.
Int_t GetZ() const
Return the number of proton / atomic number.
Double_t GetTheta() const
Double_t GetEnergy() const
void SetEnergy(Double_t e)
Nuclei reconstructed from data measured by a detector array .
KVDetector * GetDetector(const TString &label) const
virtual Double_t GetTargetEnergyLoss() const
virtual void Print(Option_t *option="") const
Display nucleus parameters.
virtual void Copy(TObject &) const
Bool_t IsCalibrated() const
KVIdentificationResult * GetIdentificationResult(Int_t i)
Bool_t IsIdentified() const
const KVSeqCollection * GetIDTelescopes() const
KVDetector * GetStoppingDetector() const
void SetDetector(int i, KVDetector *);
virtual void SetTargetEnergyLoss(Double_t e)
virtual void GetAnglesFromReconstructionTrajectory(Option_t *opt="random")
virtual void Clear(Option_t *option="")
KVIDTelescope * GetIdentifyingTelescope() const
virtual Bool_t IsAMeasured() const
virtual TObject * FindObjectByType(const Char_t *) const
80um silicon detector for INDRA etalon telescopes
2mm + 40um dead zone Si(Li) detector for INDRA etalon telescopes
Silicon detectors of the INDRA array.
virtual void Copy(TObject &object) const
void Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const
Type GetType(const std::string &Name)