25 fIDTelescope =
nullptr;
28 fTargetEnergyLoss = 0;
29 ResetBit(kIsIdentified);
30 ResetBit(kIsCalibrated);
54 :
KVNucleus(), fIDResults(
"KVIdentificationResult", 5)
58 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
72 void KVReconstructedNucleus::Streamer(
TBuffer& R__b)
83 KVNucleus::Streamer(R__b);
95 for (R__i = 0; R__i < 5; R__i++) {
96 id_array[R__i].Streamer(R__b);
102 R__b.
ReadClassBuffer(KVReconstructedNucleus::Class(),
this, R__v, R__s, R__c);
146 "Particle alone in group, or identification independently of other particles in group is directly possible." << endl;
151 "Particle reconstructed after identification of others in group and subtraction of their calculated energy losses in common detectors."
157 "Particle identification estimated after arbitrary sharing of energy lost in common detectors between several reconstructed particles."
163 "Particle stopped in first stage of telescope. Estimation of minimum Z."
169 "Undetectable pile-up in first member of identifying telesscope (apparent status=OK). Would lead to incorrect identification by DE-E method (Z and/or A overestimated)."
175 "Undetectable ghost particle in filtered simulation. Another particle passed through all of the same detectors (pile-up)."
220 for (
int i = ndets - 1; i >= 0; i--) {
222 if (det) det->
Print(
"data");
234 cout <<
" =======> ";
235 cout <<
" Z=" <<
GetZ() <<
" A=" <<
GetA();
237 else cout <<
" Zreal=" <<
GetRealZ();
240 cout <<
"(unidentified)" << endl;
247 cout <<
"(uncalibrated)" << endl;
249 cout <<
"RECONSTRUCTION STATUS : " << endl;
257 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
284 Int_t nidres = GetNumberOfIdentificationResults();
285 for (
int i = 1; i <= nidres; ++i) {
288 robj.
SetBit(kIsIdentified, TestBit(kIsIdentified));
289 robj.
SetBit(kIsCalibrated, TestBit(kIsCalibrated));
290 robj.
SetBit(kCoherency, TestBit(kCoherency));
291 robj.
SetBit(kZMeasured, TestBit(kZMeasured));
292 robj.
SetBit(kAMeasured, TestBit(kAMeasured));
315 d->GetHits()->Add(
this);
331 if (
GetGroup() && strncmp(opt,
"N", 1))
432 TIter next_aligned(aligned);
468 if (idt_list && idt_list->
GetSize() > 0) {
471 TIter next(idt_list);
473 Int_t n_success_id = 0;
483 if (IDR->
IDOK) n_success_id++;
488 if (n_success_id < 1 &&
534 ::Error(
"KVReconstructedNucleus::AnalyseParticlesInGroup",
"No particles in group ?");
615 Info(
"AnalyseGroups",
"OK after analysis of particles in groups");
656 double small_solid = 1.e+09;
660 if (
n->GetDetector()->GetSolidAngle() < small_solid) {
661 angle_det =
n->GetDetector();
662 small_solid =
n->GetDetector()->GetSolidAngle();
665 if (!strcmp(opt,
"random")) {
771 n->GetDetector()->AddHit(
this);
772 if (
IsIdentified())
n->GetDetector()->IncrementIdentifiedParticles();
773 else n->GetDetector()->IncrementUnidentifiedParticles();
804 n->GetDetector()->RemoveHit(
this);
805 if (
IsIdentified())
n->GetDetector()->IncrementIdentifiedParticles(-1);
806 else n->GetDetector()->IncrementUnidentifiedParticles(-1);
812 n->GetDetector()->AddHit(
this);
813 if (
IsIdentified())
n->GetDetector()->IncrementIdentifiedParticles();
814 else n->GetDetector()->IncrementUnidentifiedParticles();
872 if (Edet < 0.1) Edet = 0.;
875 if (Einc < 0.1)
break;
887 if (Edet < 0.1) Edet = 0.;
890 if (Einc < 0.1)
break;
910 if (
GetParameters()->IsValue(
"Coherent",
false)) printf(
"/not coherent/");
911 if (
GetParameters()->IsValue(
"Pileup",
true)) printf(
"/pileup/");
KVMultiDetArray * gMultiDetArray
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
const Bool_t kIterBackward
Base class for detector geometry description.
void IncrementIdentifiedParticles(Int_t n=1)
void IncrementUnidentifiedParticles(Int_t n=1)
virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc)
KVList * GetAlignedIDTelescopes()
KVGroup * GetGroup() const
virtual void SetEnergyLoss(Double_t e) const
virtual Double_t GetEnergy() const
const Char_t * GetNameOfArray() const
UShort_t GetSegment() const
virtual Bool_t IsDetecting() const
virtual TList * GetAlignedDetectors(UInt_t direction=1)
virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc)
void AddHit(KVNucleus *part)
TVector3 GetRandomDirection(Option_t *t="isotropic")
virtual void Print(Option_t *option="") const
KVGeoDetectorNode * GetNextNode() const
TString GetPathString() const
void AddUnidentifiedParticle(int modify_identified=-1) const
void IterateFrom(const KVGeoDetectorNode *node0=nullptr) const
void IterateBackFrom(const KVGeoDetectorNode *node0=nullptr) const
Information on relative positions of detectors & particle trajectories.
KVDetector * GetDetector() const
KVDetector * GetDetector(const Char_t *name) const
Return detector in this structure with given name.
Group of detectors which can be treated independently of all others in array.
void Reset(Option_t *opt="")
const KVGeoDNTrajectory * FindReconTraj(const KVString &path)
KVGeoStrucElement * GetArray() const
void AddHit(KVNucleus *kvd)
Base class for all detectors or associations of detectors in array which can identify charged particl...
virtual Bool_t IsReadyForID()
@ kCalibStatus_NoCalibrations
virtual Bool_t Identify(KVIdentificationResult *, Double_t x=-1., Double_t y=-1.)
virtual void CalculateParticleEnergy(KVReconstructedNucleus *nuc)
virtual Int_t GetCalibStatus() const
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 Print(Option_t *opt="") const
void Copy(TObject &) const
Copy this to obj.
Bool_t Aident
= kTRUE if A of particle established
Double_t PID
= "real" Z if Zident==kTRUE and Aident==kFALSE, "real" A if Zident==Aident==kTRUE
Int_t A
A of particle found (if Aident==kTRUE)
Int_t Z
Z of particle found (if Zident==kTRUE)
Int_t IDcode
a general identification code for this type of identification
Bool_t Zident
=kTRUE if Z of particle established
Extended TList class which owns its objects by default.
virtual Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *)
virtual void FillDetectorList(KVReconstructedNucleus *rnuc, KVHashList *DetList, const KVString &DetNames)
KVIDTelescope * GetIDTelescope(const Char_t *name) const
Return pointer to DeltaE-E ID Telescope with "name".
virtual void Print(Option_t *opt="") const
const Char_t * GetStringValue(const Char_t *name) const
Description of properties and kinematics of atomic nuclei.
virtual void Clear(Option_t *opt="")
void SetZ(Int_t z, Char_t mt=-1)
virtual void Copy(TObject &) const
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Int_t GetZ() const
Return the number of proton / atomic number.
KVNameValueList * GetParameters() const
Double_t GetTheta() const
void SetMomentum(const TVector3 &v)
const Char_t * GetName() const
return the field fName
Double_t GetEnergy() const
void SetParameter(const Char_t *name, ValType value) const
void SetEnergy(Double_t e)
Path through detector array used to reconstruct detected particle.
void ls(Option_t *="") const
Int_t GetNumberOfIndependentIdentifications() const
Nuclei reconstructed from data measured by a detector array .
virtual void Reconstruct(KVDetector *kvd)
KVDetector * GetDetector(const TString &label) const
void PrintStatusString() const
virtual Bool_t IsZMeasured() const
virtual void SetAMeasured(Bool_t yes=kTRUE)
Float_t fRealZ
Z returned by identification routine.
void SetReconstructionTrajectory(const KVReconNucTrajectory *t)
Method called in initial reconstruction of particle.
virtual Double_t GetTargetEnergyLoss() const
void CopyAndMoveReferences(const KVReconstructedNucleus *)
void SetNSegDet(Int_t seg)
Bool_t InArray(const TString &) const
Returns kTRUE if particle was detected in array with given name.
const KVReconNucTrajectory * fReconTraj
trajectory used to reconstruct particle
void ls(Option_t *="") const
Int_t GetNumberOfIdentificationResults() const
const KVSeqCollection * GetDetectorList() 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)
virtual void SubtractEnergyFromAllDetectors()
KVHashList fDetList
non-persistent list of pointers to detectors
const KVReconNucTrajectory * GetReconstructionTrajectory() const
Float_t fRealA
A returned by identification routine.
void SetIdentification(KVIdentificationResult *, KVIDTelescope *)
static UInt_t GetNUnidentifiedInGroup(KVGroup *grp)
KVReconstructedNucleus()
default ctor.
Bool_t IsIdentified() const
virtual Int_t GetIDCode() const
const KVSeqCollection * GetIDTelescopes() const
TClonesArray fIDResults
results of every identification attempt made for this nucleus, in order of the ID telescopes used
KVDetector * GetStoppingDetector() const
void SetDetector(int i, KVDetector *);
virtual void SetTargetEnergyLoss(Double_t e)
KVString fDetNames
list of names of detectors through which particle passed
void ModifyReconstructionTrajectory(const KVReconNucTrajectory *t)
virtual void GetAnglesFromReconstructionTrajectory(Option_t *opt="random")
void init()
default initialisation
KVString fIDTelName
name of identification telescope which identified this particle (if any)
TString GetArrayName() const
Returns name of array particle was detected in (if known)
void SetRealZ(Float_t zz)
virtual void SetZMeasured(Bool_t yes=kTRUE)
Int_t fNSegDet
number of segmented/independent detectors hit by particle
void ReplaceReconTraj(const TString &traj_name)
void AddDetector(KVDetector *)
Double_t fTargetEnergyLoss
calculated energy lost in target
virtual void Clear(Option_t *option="")
KVIDTelescope * GetIdentifyingTelescope() const
static void AnalyseParticlesInGroup(KVGroup *grp)
void SetIDCode(UShort_t s)
KVGroup * GetGroup() const
@ kStatusOKafterShare
of energy losses of other particles in the same group which have Status=0
@ kStatusStopFirstStage
(arbitrarily) between this and the other particle(s) with Status=2
@ kStatusPileupDE
telescope; a minimum Z could be estimated from the measured energy loss.
void SetIdentifyingTelescope(KVIDTelescope *i)
KVIDTelescope * fIDTelescope
non-persistent pointer to identification telescope
virtual Bool_t IsAMeasured() const
Int_t fAnalStatus
status of particle after analysis of reconstructed event
virtual void Clear(Option_t *option="")
virtual Int_t GetSize() const
virtual void Add(TObject *obj)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const char *classname)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual void Clear(Option_t *option="")
virtual const char * GetName() const
virtual const char * GetTitle() const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
TString & Remove(EStripType s, char c)
Double_t Max(Double_t a, Double_t b)