KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVINDRAGroupReconstructor.cpp
1//Created by KVClassFactory on Wed Feb 21 13:42:47 2018
2//Author: John Frankland,,,
3
4#include "KVINDRAGroupReconstructor.h"
5#include "KVCalibratedSignal.h"
6#include <KVIDGCsI.h>
7#include <KVIDINDRACsI.h>
8#include <KVINDRADetector.h>
9
11
13
14
28
30{
31 // \param traj trajectory currently being scanned
32 // \param node current detector on trajectory to test
33 // \returns pointer to a new reconstructed particle added to this group's event; nullptr if nothing is to be done
34 //
35 // Specialised particle reconstruction for INDRA data.
36 //
37 // If the fired detector in question is a CsI we check, if identification is available, whether
38 // this corresponds to a 'gamma'. If so we count it (event parameter "INDRA_GAMMA_MULT")
39 // and add the name of the detector to the parameter "INDRA_GAMMA_DETS"
40 // but do not begin the reconstruction of a particle. This allows to continue along the trajectory and
41 // directly reconstruct any charged particle which may stop in the Si detector in coincidence with
42 // a 'gamma' in the CsI.
43
44 if (node->GetDetector()->IsType("CSI")) {
45
46 if (node->GetDetector()->Fired(GetPartSeedCond())) {
47
48 ++nfireddets;
50 if (idt) {
51
53 if (idt->IsReadyForID()) {
54
55 idt->Identify(&idr);
56 if (idr.IDOK && (idr.IDcode == KVINDRA::IDCodes::ID_GAMMA || idr.IDquality == KVIDGCsI::kICODE10)) { // gamma in CsI
57 GetEventFragment()->GetParameters()->IncrementValue("INDRA_GAMMA_MULT", 1);
58 GetEventFragment()->GetParameters()->IncrementValue("INDRA_GAMMA_DETS", node->GetName());
59 node->GetDetector()->SetAnalysed();
60 return nullptr;
61 }
62
63 // if we arrive here, CSI identification for the particle has been performed and
64 // the result is not a gamma (which are rejected; no particle is reconstructed).
65 // as the coordinates in the identification map are randomized (KVACQParamSignal),
66 // we do not want to perform a second identification attempt in KVINDRAGroupReconstructor::IdentifyParticle:
67 // the results may not be the same, and for particles close to the threshold a charged particle
68 // identified here may be subsequently identified as a gamma in a second identification attempt,
69 // leading to the incoherency that there are gamma particles (IDcode=KVINDRA::IDCodes::ID_GAMMA)
70 // in the final reconstructed event.
71 // therefore in this case we add a new particle to the event, and copy the results of this
72 // first identification into the particle, with IDR->IDattempted=true, so that in
73 // KVINDRAGroupReconstructor::IdentifyParticle the CSI identification will not be redone.
74
75 auto new_part = GetEventFragment()->AddParticle();
76 *(new_part->GetIdentificationResult(1)) = idr;
77 return new_part;
78 }
79 }
80 return GetEventFragment()->AddParticle();
81 }
82 return nullptr;
83 }
85}
86
87
88
90
92{
94 for (KVReconstructedEvent::Iterator it = GetEventFragment()->begin(); it != GetEventFragment()->end(); ++it) {
95
96 KVReconstructedNucleus* d = it.get_pointer();
97
98 if (!d->IsIdentified()) d->SetIDCode(KVINDRA::IDCodes::NO_IDENTIFICATION); // unidentifiable particle
99 else {
100 if (d->GetIDCode() == KVINDRA::IDCodes::ID_CSI_PSA && d->GetZ() == 0) {
101 std::cout << "\n\n";
102 std::cout << " GAMMA\n\n";
103 d->Print();
104 std::cout << "\n\n";
105 auto traj = (KVGeoDNTrajectory*)d->GetStoppingDetector()->GetNode()->GetTrajectories()->First();
106 KVIDINDRACsI* idt = (KVIDINDRACsI*)traj->GetIDTelescopes()->FindObjectByType(CSI_ID_TYPE);
107 std::cout << idt << std::endl;
108 std::cout << "Type: " << d->GetStoppingDetector()->GetType() << std::endl;
109 std::cout << "Fired: " << d->GetStoppingDetector()->Fired(GetPartSeedCond()) << std::endl;
110 std::cout << "ReadyforID: " << d->GetIdentifyingTelescope()->IsReadyForID() << std::endl;
111 std::cout << "\n\n";
112 exit(1);
113 }
114 }
115 }
116}
117
118
119
138
140{
141 // INDRA-specific particle identification.
142 // Here we attribute the Veda6-style general identification codes depending on the
143 // result of KVReconstructedNucleus::Identify and the subcodes from the different
144 // identification algorithms:
145 // If the particle's mass A was NOT measured, we make sure that it is calculated
146 // from the measured Z using the mass formula defined by default
147 //
148 //IDENTIFIED PARTICLES
149 //Identified particles with ID code = 2 with subcodes 4 & 5
150 //(masse hors limite superieure/inferieure) are relabelled
151 //with kIDCode10 (identification entre les lignes CsI)
152 //
153 //UNIDENTIFIED PARTICLES
154 //Unidentified particles receive the general ID code for non-identified particles (kIDCode14)
155 //EXCEPT if their identification in CsI gave subcodes 6 or 7
156 //(Zmin) then they are relabelled "Identified" with IDcode = 9 (ident. incomplete dans CsI ou Phoswich (Z.min))
157 //Their "identifying" telescope is set to the CsI ID telescope
158
160 // if a successful identification has occured, identifying_telescope & partID are now set
161 // and the particle has IsIdentified()=true
162
163 // INDRA coherency treatment
164 PART.SetParameter("Coherent", kTRUE);
165 PART.SetParameter("Pileup", kFALSE);
166 PART.SetParameter("UseFullChIoEnergyForCalib", kTRUE);
167 Bool_t ok = DoCoherencyAnalysis(PART);
168
169 if (ok) { // identification may change here due to coherency analysis
170 PART.SetIsIdentified();
172 } // if not ok, do we need to unset any previously identified particle?
173
174 if (PART.IsIdentified()) {
175
176 /******* IDENTIFIED PARTICLES *******/
177 if (partID.IsType(CSI_ID_TYPE)) { /**** CSI IDENTIFICATION ****/
178
179 //Identified particles with ID code = 2 with subcodes 4 & 5
180 //(masse hors limite superieure/inferieure) are relabelled
181 //with kIDCode10 (identification entre les lignes CsI)
182
183 Int_t grid_code = partID.IDquality;
184 if (grid_code == KVIDGCsI::kICODE4 || grid_code == KVIDGCsI::kICODE5) {
187 }
188
189 }
190
191 }
192 else {
193
194 /******* UNIDENTIFIED PARTICLES *******/
195
196 /*** general ID code for non-identified particles ***/
198 auto csirl = id_by_type.find(CSI_ID_TYPE.Data());
199 if (csirl != id_by_type.end()) {
200 //Particles remaining unidentified are checked:
201 // - if in CsI identification they were in a zone marked 'nomassid|Z=...', we label them as identified
202 // in Z only (no mass identification), with the usual CsI IDCODE. This was introduced for E818 to handle
203 // the effects of defects in CsI crystals leading to poor discrimination of (p,d,t) above a certain energy/light
204 // - if their identification in CsI gave subcodes 6 or 7 (Zmin) then they are relabelled "Identified" with IDcode = 9
205 // (ident. incomplete dans CsI ou Phoswich (Z.min))
206 // - subcodes 4 & 5 (masse hors limite superieure/inferieure) are relabelled with kIDCode10
207 // (identification entre les lignes CsI)
208 //In each case their "identifying" telescope is set to the CsI ID telescope
209 KVIdentificationResult* idr = csirl->second;
210 if (idr->IDattempted) {
211 if (idr->IdentifyingGridHasFlagWhichBegins("nomassid|Z=")) {
212 KVString flag = idr->IdentifyingGridGetFlagWhichBegins("nomassid|Z=");
213 flag.Begin("=");
214 flag.Next(); // split e.g. "nomassid|Z=1" into "nomassid|Z=" and "1"
215 auto z = flag.Next().Atoi();
216 PART.SetIsIdentified();
218 idr->Z = z;
219 idr->Zident = true;
220 idr->Aident = false;
221 idr->SetComment(Form("Z=%d identified without mass discrimination (due to CsI crystal defects)", z));
222 partID = *idr;
225 }
226 else if (idr->IDquality == KVIDGCsI::kICODE6 || idr->IDquality == KVIDGCsI::kICODE7) {
227 PART.SetIsIdentified();
229 partID = *idr;
232 }
233 else if (idr->IDquality == KVIDGCsI::kICODE4 || idr->IDquality == KVIDGCsI::kICODE5) {
234 PART.SetIsIdentified();
236 partID = *idr;
239 }
240 }
241 }
242
243 }
244}
245
246
247
254
256{
257 // calculate fEChIo from residual energy
258 //
259 // returns kFALSE if it doesn't work, and sets particle bad calibration status
260 //
261 // returns kTRUE if it works, and sets calib status to SOME_ENERGY_LOSSES_CALCULATED
262
263 Double_t e0 = theChio->GetDeltaEFromERes(n->GetZ(), n->GetA(), ERES);
266 if (fEChIo <= 0) {
268 fEChIo = 0;
269 return kFALSE;
270 }
273 return kTRUE;
274}
275
276
277
283
285{
286 // Calculate and set the energy of a (previously identified) reconstructed particle
287 //
288 // This is only possible for correctly identified particles.
289 // We exclude IDCODE9 particles (Zmin in CsI-RL)
290
291 fEChIo = fESi = fECsI = 0;
292
293 print_part = false;
294
296
298 // this status may be modified depending on what happens in DoCalibration
300 DoCalibration(PART);
301 }
302
303 PART->SetParameter("INDRA.ECHIO", fEChIo);
304 PART->SetParameter("INDRA.ESI", fESi);
305 PART->SetParameter("INDRA.ECSI", fECsI);
306 //add correction for target energy loss - moving charged particles only!
307 Double_t E_targ = 0.;
308 if (PART->GetZ() && PART->GetEnergy() > 0) {
309 E_targ = GetTargetEnergyLossCorrection(PART);
310 PART->SetTargetEnergyLoss(E_targ);
311 }
312 Double_t E_tot = PART->GetEnergy() + E_targ;
313 PART->SetEnergy(E_tot);
314 // set particle momentum from telescope dimensions (random)
316 CheckCsIEnergy(PART);
317
318 //if(print_part) PART->Print();
319}
320
321
322
328
330{
331 // Beryllium-8 = 2 alpha particles of same energy
332 // We halve the total light output of the CsI to calculate the energy of 1 alpha
333 // Then multiply resulting energy by 2
334 // Note: fECsI is -ve, because energy is calculated not measured
335
336 auto csi = GetCsI(n);
337 // energy is usually calculated from "TotLight", but it could be "ScaledTotLight", or something else...
338 auto input_signal = ((KVCalibratedSignal*)csi->GetDetectorSignal("Energy"))->GetInputSignal();
339 Double_t half_light = input_signal->GetValue(Form("Z=%d,A=%d", n->GetZ(), n->GetA())) * 0.5;
340 KVNucleus tmp(2, 4);
341 double ecsi = 2.*csi->GetCorrectedEnergy(&tmp, half_light, kFALSE);
342 if (ecsi > 0) {
344 // calculated energy returned as negative value
345 return -ecsi;
346 }
348 return 0;
349}
350
351
352
359
361{
362 // Check calculated CsI energy loss of particle:
363 // - If the particle was identified by the CsI but only in Z (case of particles falling in zones labelled "nomassid|Z=...")
364 // then we give it the (bad) calibration code KVINDRA::ECodes::WARNING_CSI_NO_MASS_ID
365 // - If it is greater than the maximum theoretical energy loss (depending on the length of CsI, the Z & A of the particle)
366 // we set the energy calibration code to KVINDRA::ECodes::WARNING_CSI_MAX_ENERGY (=3, historical VEDA code for particles with E_csi > E_max_csi)
367
368 if (n->GetIDCode() == KVINDRA::IDCodes::ID_CSI_PSA && !n->IsAMeasured()) {
370 return;
371 }
372 KVDetector* csi = GetCsI(n);
373 if (csi && (n->GetZ() > 0) && (n->GetZ() < 3) && (csi->GetDetectorSignalValue("Energy", Form("Z=%d,A=%d", n->GetZ(), n->GetA())) > csi->GetMaxDeltaE(n->GetZ(), n->GetA()))) {
375 }
376}
377
378
379/*
380 The following is a copy of the old
381void KVINDRAReconEvent::SecondaryAnalyseGroup(KVGroup* grp)
382 method from branch 1.10
383
384void KVINDRAGroupReconstructor:PerformSecondaryAnalysis()
385{
386 // Perform identifications and calibrations of particles not included
387 // in first round (methods IdentifyEvent() and CalibrateEvent()).
388 //
389 // Here we treat particles with GetStatus()==KVReconstructedNucleus::kStatusOKafterSub
390 // after subtracting the energy losses of all previously calibrated particles in group from the
391 // measured energy losses in the detectors they crossed.
392
393 // loop over al identified & calibrated particles in group and subtract calculated
394 // energy losses from all detectors
395 KVINDRAReconNuc* nuc;
396 TList sixparts;
397 TIter parts(grp->GetParticles());
398 while ((nuc = (KVINDRAReconNuc*)parts())) {
399 if (nuc->IsIdentified() && nuc->IsCalibrated()) {
400 nuc->SubtractEnergyFromAllDetectors();
401 // reconstruct particles from pile-up in silicon detectors revealed by coherency CsIR/L - SiCsI
402 if (nuc->IsSiPileup() && nuc->GetSi()->GetEnergy() > 0.1) {
403 KVINDRAReconNuc* SIX = AddParticle();
404 SIX->Reconstruct(nuc->GetSi());
405 sixparts.Add(SIX);
406 }
407 // reconstruct particles from pile-up in si75 detectors revealed by coherency
408 if (nuc->IsSi75Pileup()) {
409 KVINDRAReconNuc* SIX = AddParticle();
410 SIX->Reconstruct(nuc->GetSi75());
411 sixparts.Add(SIX);
412 }
413 // reconstruct particles from pile-up in sili detectors revealed by coherency
414 if (nuc->IsSiLiPileup()) {
415 KVINDRAReconNuc* SIX = AddParticle();
416 SIX->Reconstruct(nuc->GetSiLi());
417 sixparts.Add(SIX);
418 }
419
420 // reconstruct particles from pile-up in ChIo detectors revealed by coherency CsIR/L - ChIoCsI
421 if (nuc->IsChIoPileup() && nuc->GetChIo()->GetEnergy() > 1.0) {
422 KVINDRAReconNuc* SIX = AddParticle();
423 SIX->Reconstruct(nuc->GetChIo());
424 sixparts.Add(SIX);
425 }
426 }
427 }
428 // reanalyse group
429 KVReconstructedNucleus::AnalyseParticlesInGroup(grp);
430
431 Int_t nident = 0; //number of particles identified in each step
432 if (sixparts.GetEntries()) { // identify any particles added by coherency CsIR/L - SiCsI
433 KVINDRAReconNuc* SIX;
434 TIter nextsix(&sixparts);
435 while ((SIX = (KVINDRAReconNuc*)nextsix())) {
436 if (SIX->GetStatus() == KVReconstructedNucleus::kStatusOK) {
437 SIX->Identify();
438 if (SIX->IsIdentified()) {
439 nident++;
440 if (SIX->GetCodes().TestIDCode(kIDCode5)) SIX->SetIDCode(kIDCode7);
441 else SIX->SetIDCode(kIDCode6);
442 SIX->Calibrate();
443 if (SIX->IsCalibrated()) SIX->SubtractEnergyFromAllDetectors();
444 } else {
445 // failure of ChIo-Si identification: particle stopped in ChIo ?
446 // estimation of Z (minimum) from energy loss (if detector is calibrated)
447 UInt_t zmin = ((KVDetector*)SIX->GetDetectorList()->Last())->FindZmin(-1., SIX->GetMassFormula());
448 if (zmin) {
449 SIX->SetZ(zmin);
450 SIX->SetIsIdentified();
451 SIX->SetIDCode(kIDCode7);
452 // "Identifying" telescope is taken from list of ID telescopes
453 // to which stopping detector belongs
454 SIX->SetIdentifyingTelescope((KVIDTelescope*)SIX->GetStoppingDetector()->GetIDTelescopes()->Last());
455 SIX->Calibrate();
456 }
457 }
458 }
459 }
460 }
461 if (nident) { // newly-identified particles may change status of others in group
462 // reanalyse group
463 KVReconstructedNucleus::AnalyseParticlesInGroup(grp);
464 nident = 0;
465 }
466
467 TIter parts2(grp->GetParticles()); // list may have changed if we have added particles
468 // identify & calibrate any remaining particles with status=KVReconstructedNucleus::kStatusOK
469 while ((nuc = (KVINDRAReconNuc*)parts2())) {
470 if (!nuc->IsIdentified() && nuc->GetStatus() == KVReconstructedNucleus::kStatusOK) {
471 nuc->ResetNSegDet();
472 nuc->Identify();
473 if (nuc->IsIdentified()) {
474 nident++;
475 nuc->Calibrate();
476 if (nuc->IsCalibrated()) nuc->SubtractEnergyFromAllDetectors();
477 }
478 }
479 }
480 if (nident) { // newly-identified particles may change status of others in group
481 // reanalyse group
482 KVReconstructedNucleus::AnalyseParticlesInGroup(grp);
483 nident = 0;
484 }
485
486 // any kStatusOKafterShare particles ?
487 TList shareChIo;
488 parts2.Reset();
489 while ((nuc = (KVINDRAReconNuc*)parts2())) {
490 if (!nuc->IsIdentified() && nuc->GetStatus() == KVReconstructedNucleus::kStatusOKafterShare) {
491 shareChIo.Add(nuc);
492 }
493 }
494 Int_t nshares = shareChIo.GetEntries();
495 if (nshares) {
496 KVChIo* theChIo = ((KVINDRAReconNuc*)shareChIo.At(0))->GetChIo();
497 if (theChIo && nshares > 1) {
498 // divide chio energy equally
499 Double_t Eshare = theChIo->GetEnergyLoss() / nshares;
500 theChIo->SetEnergyLoss(Eshare);
501 // modify PG and GG of ChIo according to new energy loss
502 Double_t volts = theChIo->GetVoltsFromEnergy(Eshare);
503 Double_t GG = theChIo->GetCanalGGFromVolts(volts);
504 Double_t PG = theChIo->GetCanalPGFromVolts(volts);
505 theChIo->GetACQParam("PG")->SetData(TMath::Min(4095, (Int_t)PG));
506 theChIo->GetACQParam("GG")->SetData(TMath::Min(4095, (Int_t)GG));
507 }
508 // now try to identify
509 TIter nextSh(&shareChIo);
510 while ((nuc = (KVINDRAReconNuc*)nextSh())) {
511 nuc->SetNSegDet(10);
512 nuc->Identify();
513 if (nuc->IsIdentified()) {
514 nuc->SetIDCode(kIDCode8);
515 nuc->Calibrate();
516 }
517 }
518 }
519
520 // any remaining stopped in first stage particles ?
521 parts2.Reset();
522 while ((nuc = (KVINDRAReconNuc*)parts2())) {
523 if (!nuc->IsIdentified() && nuc->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) {
524 // estimation of Z (minimum) from energy loss (if detector is calibrated)
525 UInt_t zmin = ((KVDetector*)nuc->GetDetectorList()->Last())->FindZmin(-1., nuc->GetMassFormula());
526 if (zmin) {
527 nuc->SetZ(zmin);
528 nuc->SetIsIdentified();
529 nuc->SetIDCode(kIDCode5);
530 // "Identifying" telescope is taken from list of ID telescopes
531 // to which stopping detector belongs
532 nuc->SetIdentifyingTelescope((KVIDTelescope*)nuc->GetStoppingDetector()->GetIDTelescopes()->Last());
533 nuc->Calibrate();
534 }
535 }
536 }
537}
538*/
539
int Int_t
#define d(i)
bool Bool_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
char * Form(const char *fmt,...)
virtual Bool_t IsType(const Char_t *typ) const
Definition KVBase.h:185
Output signal from detector obtained by calibration.
Base class for detector geometry description.
Definition KVDetector.h:160
virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A)
virtual Bool_t Fired(Option_t *opt="any") const
Definition KVDetector.h:451
Double_t GetDetectorSignalValue(const KVString &type, const KVNameValueList &params="") const
Definition KVDetector.h:493
virtual void SetEResAfterDetector(Double_t e)
Definition KVDetector.h:630
virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres)
void SetAnalysed(Bool_t b=kTRUE)
Definition KVDetector.h:447
virtual Double_t GetCorrectedEnergy(KVNucleus *, Double_t e=-1., Bool_t transmission=kTRUE)
KVNameValueList * GetParameters() const
Definition KVEvent.h:179
Path taken by particles through multidetector geometry.
const KVSeqCollection * GetIDTelescopes() const
Information on relative positions of detectors & particle trajectories.
const Char_t * GetName() const
Name of node is same as name of associated detector.
KVDetector * GetDetector() const
virtual KVReconstructedNucleus * ReconstructTrajectory(const KVGeoDNTrajectory *traj, const KVGeoDetectorNode *node)
KVIDTelescope * identifying_telescope
telescope which identified current particle
std::unordered_map< std::string, KVIdentificationResult * > id_by_type
identification results by type for current particle
int nfireddets
number of fired detectors in group for current event
KVReconstructedEvent * GetEventFragment() const
Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *ion)
void SetCalibrationStatus(KVReconstructedNucleus &PART, UShort_t code)
virtual void IdentifyParticle(KVReconstructedNucleus &)
TString GetPartSeedCond() const
KVIdentificationResult partID
identification to be applied to current particle
virtual Bool_t Identify(KVIdentificationResult *, Double_t x=-1., Double_t y=-1.)
Base class for all detectors or associations of detectors in array which can identify charged particl...
virtual Bool_t IsReadyForID()
Reconstruct particles in INDRA groups.
void SetNoCalibrationStatus(KVReconstructedNucleus *n)
void IdentifyParticle(KVReconstructedNucleus &PART)
Bool_t CalculateChIoDEFromResidualEnergy(KVReconstructedNucleus *n, Double_t ERES)
double DoBeryllium8Calibration(KVReconstructedNucleus *n)
virtual bool DoCoherencyAnalysis(KVReconstructedNucleus &)=0
void CalibrateParticle(KVReconstructedNucleus *PART)
void CheckCsIEnergy(KVReconstructedNucleus *n)
KVDetector * GetCsI(KVReconstructedNucleus *n)
virtual void DoCalibration(KVReconstructedNucleus *)
void SetBadCalibrationStatus(KVReconstructedNucleus *n)
KVReconstructedNucleus * ReconstructTrajectory(const KVGeoDNTrajectory *traj, const KVGeoDetectorNode *node)
KVDetector * theChio
the ChIo of the group
@ NORMAL_CALIBRATION
normal well-calibrated particle with no problems
Definition KVINDRA.h:209
@ WARNING_CSI_MAX_ENERGY
particle calibration OK, although apparent energy would mean punching through the CsI
Definition KVINDRA.h:211
@ WARNING_CSI_NO_MASS_ID
particle identified in CsI only in Z, not in A, therefore calculated energy untrustworthy
Definition KVINDRA.h:212
@ SOME_ENERGY_LOSSES_CALCULATED
particle calibration OK, with some detector energies calculated
Definition KVINDRA.h:210
@ ID_CSI_PSA
particle identified in CsI detector by pulse shape analysis
Definition KVINDRA.h:165
@ NO_IDENTIFICATION
no identification either attempted or available for particle
Definition KVINDRA.h:160
@ ID_CSI_FRAGMENT
particle partially identified in CsI detector, with Z greater than identifiable
Definition KVINDRA.h:175
@ ID_GAMMA
'gamma' particle detected in CsI
Definition KVINDRA.h:162
@ ID_CSI_MASS_OUT_OF_RANGE
particle partially identified in CsI detector, mass out of range of apparent Z (pile-up?...
Definition KVINDRA.h:176
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 IdentifyingGridHasFlagWhichBegins(TString flag_beginning)
Bool_t Aident
= kTRUE if A of particle established
TString IdentifyingGridGetFlagWhichBegins(TString flag_beginning)
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
void IncrementValue(const Char_t *name, value_type value)
Description of properties and kinematics of atomic nuclei.
Definition KVNucleus.h:126
Int_t GetZ() const
Return the number of proton / atomic number.
Double_t GetEnergy() const
Definition KVParticle.h:621
void SetParameter(const Char_t *name, ValType value) const
Definition KVParticle.h:819
void SetEnergy(Double_t e)
Definition KVParticle.h:599
Nuclei reconstructed from data measured by a detector array .
virtual void SetIDCode(UShort_t s)
void SetIdentification(KVIdentificationResult *, KVIDTelescope *)
virtual Int_t GetIDCode() const
virtual void SetTargetEnergyLoss(Double_t e)
virtual void GetAnglesFromReconstructionTrajectory(Option_t *opt="random")
const KVReconNucTrajectory * GetReconstructionTrajectory() const
virtual TObject * FindObjectByType(const Char_t *) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition KVString.h:73
void Begin(TString delim) const
Definition KVString.cpp:565
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition KVString.cpp:695
Particle * AddParticle()
Iterator end() const
Int_t Atoi() const
const char * Data() const
const Int_t n
Double_t Abs(Double_t d)
ClassImp(TPyArg)