KaliVeda
Toolkit for HIC analysis
KVDetector.h
1 /***************************************************************************
2  kvdetector.h - description
3  -------------------
4  begin : Thu May 16 2002
5  copyright : (C) 2002 by J.D. Frankland
6  email : frankland@ganil.fr
7 
8 $Id: KVDetector.h,v 1.71 2009/05/22 14:45:40 ebonnet Exp $
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
20 #ifndef KVDETECTOR_H
21 #define KVDETECTOR_H
22 
23 #ifndef KVD_RECPRC_CNXN
24 #define KVD_RECPRC_CNXN 1
25 #endif
26 #ifndef KVD_NORECPRC_CNXN
27 #define KVD_NORECPRC_CNXN 0
28 #endif
29 
30 #include "KVMaterial.h"
31 #include "KVPosition.h"
32 #include "KVList.h"
33 #include "KVUnownedList.h"
34 #include "KVNucleus.h"
35 #include "KVGeoDetectorNode.h"
36 #include "KVUniqueNameList.h"
37 #include "KVDetectorSignal.h"
38 #include "KVEvent.h"
39 
40 class KVGeoStrucElement;
41 class KVGroup;
42 class KVCalibrator;
43 class TGeoVolume;
44 class TTree;
45 class TGraph;
46 
159 class KVDetector: public KVMaterial, public KVPosition {
160 
161 private:
168 
169  enum {
170  kIsAnalysed = BIT(14), //for reconstruction of particles
171  kActiveSet = BIT(15), //internal - flag set true when SetActiveLayer called
172  kUnidentifiedParticle = BIT(16), //set if detector is in an unidentified particle's list
173  kIdentifiedParticle = BIT(17), //set if detector is in an identified particle's list
174  };
175 
178 
182  void SetMatrix(const TGeoHMatrix* m) override
183  {
185  }
186  void SetShape(TGeoBBox* s) override
187  {
189  }
190  TGeoHMatrix* GetMatrix() const override
191  {
192  return KVPosition::GetMatrix();
193  }
194  TGeoBBox* GetShape() const override
195  {
196  return KVPosition::GetShape();
197  }
199  {
201  }
202  TVector3 GetSurfaceCentre() const override
203  {
205  }
206  TVector3 GetVolumeCentre() const override
207  {
209  }
210  TVector3 GetSurfaceNormal() const override
211  {
213  }
214  Double_t GetSurfaceArea(int npoints = 100000) const override
215  {
216  return KVPosition::GetSurfaceArea(npoints);
217  }
219  {
221  }
222 
225 
227 
228  template<typename AbsorberStack>
229  Double_t get_corrected_energy(AbsorberStack* stack, KVNucleus* nuc, Double_t e, Bool_t transmission)
230  {
231  auto z = nuc->GetZ();
232  auto a = nuc->GetA();
233  enum SolType solution = kEmax;
234  if (!transmission) solution = kEmin;
235  Double_t EINC, ERES = GetEResAfterDetector();
236  if (transmission && ERES > 0.) { // if residual energy is known we use it to calculate EINC.
237 
238  EINC = stack->GetIncidentEnergyFromERes(z, a, ERES);
239  if (EINC < stack->GetEIncOfMaxDeltaE(z, a)) {// if EINC < max of dE curve, we change solution
240  solution = kEmin;
241  } // we could keep the EINC value calculated using ERES, but then the corrected dE of this detector would not depend on the measured dE !
242  }
243  EINC = stack->GetIncidentEnergy(z, a, e, solution);
244  if (EINC < 0) {
246  return EINC;
247  }
248  ERES = stack->GetERes(z, a, EINC);
249 
251  return (EINC - ERES);
252  }
253 
254 protected:
255 
260 
262  Double_t EResDet(Double_t* x, Double_t* par);
264 
268 
270 
274 
276 
278  {
282  ds->SetDetector(this);
283  fDetSignals.Add(ds);
285  }
287  {
288  return true;
289  }
290 
291 public:
292  KVDetector();
293  KVDetector(const Char_t* type, const Float_t thick = 0.0);
294  KVDetector(const Char_t* gas, const Double_t thick, const Double_t pressure, const Double_t temperature = 19.0);
295  KVDetector(const KVDetector&);
296  void init();
297  virtual ~ KVDetector();
298 
299  void Copy(TObject& obj) const override;
300 
301  void SetMaterial(const Char_t* type) override;
302  void AddAbsorber(KVMaterial*);
304  {
305  fActiveLayer = actif;
307  }
309  {
311  if (auto mat = GetAbsorber(i)) SetActiveLayer(mat);
312  }
313  KVMaterial* GetActiveLayer() const override
314  {
316  return fActiveLayer;
317  }
318  KVMaterial* GetAbsorber(Int_t i) const;
319  KVMaterial* GetAbsorber(const Char_t* name) const
320  {
323  }
324  const KVList* GetListOfAbsorbers() const
325  {
326  return &fAbsorbers;
327  }
329  {
330  return fAbsorbers.GetEntries();
331  }
332  void RemoveAllAbsorbers();
333 
335  {
338 
339  double fTotThickness = 0;
340  TIter next(&fAbsorbers);
341  KVMaterial* mat;
342  while ((mat = (KVMaterial*)next())) fTotThickness += mat->GetThickness();
343  return fTotThickness;
344  }
346  {
347  return &fNode;
348  }
349 
350  const Char_t* GetMaterialName() const
351  {
352  if (GetActiveLayer())
353  return GetActiveLayer()->GetName();
354  return KVMaterial::GetName();
355  }
356  void DetectParticle(KVNucleus*, TVector3* norm = 0) override;
357  Double_t GetELostByParticle(KVNucleus*, TVector3* norm = 0) override;
358  Double_t GetParticleEIncFromERes(KVNucleus*, TVector3* norm = 0) override;
359 
361  {
363  return GetDetectorSignalValue("Energy");
364  }
365  virtual Double_t GetEnergy() const
366  {
370  if (IsSimMode()) return ELoss; // in simulation mode, return calculated energy loss in active layer
371  if (ELoss > 0) return ELoss;
372  ELoss = GetCalibratedEnergy();
373  if (ELoss < 0) ELoss = 0;
374  SetEnergy(ELoss);
375  return ELoss;
376  }
377  virtual void SetEnergy(Double_t e) const
378  {
384  }
385  Double_t GetEnergyLoss() const override
386  {
387  return GetEnergy();
388  }
389  void SetEnergyLoss(Double_t e) const override
390  {
391  SetEnergy(e);
392  }
394  -1., Bool_t transmission = kTRUE);
395  virtual Int_t FindZmin(Double_t ELOSS = -1., Char_t mass_formula = -1);
396 
397  Bool_t AddCalibrator(KVCalibrator* cal, const KVNameValueList& opts = "");
398  Bool_t ReplaceCalibrator(const Char_t* type, KVCalibrator* cal, const KVNameValueList& opts = "");
399  KVCalibrator* GetCalibrator(const Char_t* name,
400  const Char_t* type) const;
401  KVCalibrator* GetCalibrator(const Char_t* type) const;
403  {
404  return fCalibrators;
405  }
407  {
409  return (IsSimMode() && IsDetecting()) || (HasDetectorSignal("Energy") && IsOK());
410  }
411  Bool_t IsCalibrated(const KVNameValueList& params) const;
412 
413  void Clear(Option_t* opt = "") override;
414  virtual void Reset(Option_t* opt = "")
415  {
416  Clear(opt);
417  }
418  void Print(Option_t* option = "") const override;
419 
420  void AddHit(KVNucleus* part)
421  {
423 
424  if (!fParticles) {
427  }
428  fParticles->Add(part);
429  }
430 
431  void RemoveHit(KVNucleus* part)
432  {
434 
435  fParticles->Remove(part);
437  }
438 
441  {
442  return fParticles;
443  }
444  void ClearHits()
445  {
447  if (fParticles) fParticles->Clear();
448  }
450  Int_t GetNHits() const
451  {
452  return (fParticles ? fParticles->GetEntries() : 0);
453  }
454 
456  {
457  return TestBit(kIsAnalysed);
458  }
459  void SetAnalysed(Bool_t b = kTRUE)
460  {
461  SetBit(kIsAnalysed, b);
462  }
463  virtual Bool_t Fired(Option_t* opt = "any") const
464  {
479 
480  if (!IsDetecting()) return kFALSE; //detector not working, no answer at all
481  if (IsSimMode()) return (GetActiveLayer() ? GetActiveLayer()->GetEnergyLoss() > 0. : KVMaterial::GetEnergyLoss() > 0.); // simulation mode: detector fired if energy lost in active layer
482 
483  TString OPT(opt);
484  OPT.ToLower();
485  Bool_t all = (OPT == "all");
486 
487  TIter raw_it(&GetListOfDetectorSignals());
488  KVDetectorSignal* ds;
489  int count_raw = 0;
490  while ((ds = (KVDetectorSignal*)raw_it())) {
491  if (ds->IsRaw()) {
492  ++count_raw;
493  if (ds->IsFired()) {
494  if (!all) return kTRUE;
495  }
496  else {
497  if (all) return kFALSE;
498  }
499  }
500  }
501  return all && count_raw;
502  }
503  virtual void RemoveCalibrators();
504 
505  Double_t GetDetectorSignalValue(const KVString& type, const KVNameValueList& params = "") const
506  {
514 
516  return (s ? s->GetValue(params) : 0);
517  }
518  void SetDetectorSignalValue(const KVString& type, Double_t val) const
519  {
525 
527  if (s) s->SetValue(val);
528  }
529  Double_t GetInverseDetectorSignalValue(const KVString& output, Double_t value, const KVString& input, const KVNameValueList& params = "") const
530  {
541 
542  KVDetectorSignal* s = GetDetectorSignal(output);
543  return (s ? s->GetInverseValue(value, input, params) : 0);
544  }
545  virtual KVDetectorSignal* GetDetectorSignal(const KVString& type) const
546  {
551 
553  }
554  Bool_t HasDetectorSignal(const KVString& type) const
555  {
558  return (GetDetectorSignal(type) != nullptr);
559  }
560 
562  {
563  fUnidentP += n;
564  fUnidentP = (fUnidentP > 0) * fUnidentP;
566  }
568  {
569  fIdentP += n;
570  fIdentP = (fIdentP > 0) * fIdentP;
572  }
574  {
576  }
578  {
580  }
581 
582  static KVDetector* MakeDetector(const Char_t* name, Float_t thick);
583 
586  {
589  return GetSurfaceCentre();
590  }
592  {
595  }
597  {
599  return GetShape();
600  }
602  {
604  return GetMatrix();
605  }
606 
607  Double_t GetMaxDeltaE(Int_t Z, Int_t A) override;
608  Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A) override;
609  Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t = 0.) override;
610  virtual Double_t GetTotalDeltaE(Int_t Z, Int_t A, Double_t Einc);
611  Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t = 0.) override;
613  -1.0, enum SolType type = kEmax) override;
614  /*virtual Double_t GetEResFromDeltaE(...) - DON'T IMPLEMENT, CALLS GETINCIDENTENERGY*/
615  Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres) override;
617  Double_t GetRange(Int_t Z, Int_t A, Double_t Einc) override;
618  Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc) override;
619  Double_t GetPunchThroughEnergy(Int_t Z, Int_t A) override;
622 
623  virtual TF1* GetEResFunction(Int_t Z, Int_t A);
624  virtual TF1* GetELossFunction(Int_t Z, Int_t A);
625  virtual TF1* GetRangeFunction(Int_t Z, Int_t A);
626 
627  virtual Double_t GetSmallestEmaxValid(Int_t Z, Int_t A) const;
628 
630  {
631  fEResforEinc = e;
632  }
634  {
635  return fEResforEinc;
636  }
637 
638  virtual void ReadDefinitionFromFile(const Char_t*);
639 
640  virtual void SetSimMode(Bool_t on = kTRUE)
641  {
647  fSimMode = on;
648  }
649  virtual Bool_t IsSimMode() const
650  {
656  return fSimMode;
657  }
658 
659  virtual Bool_t IsPresent() const
660  {
662  return fPresent;
663  }
664  void SetPresent(Bool_t yes = kTRUE)
665  {
666  fPresent = yes;
667  }
668  virtual Bool_t IsDetecting() const
669  {
671  return fDetecting;
672  }
673  void SetDetecting(Bool_t yes = kTRUE)
674  {
675  fDetecting = yes;
676  }
677 
678  virtual Bool_t IsOK() const
679  {
681  return (fPresent && fDetecting);
682  }
683 
684  KVGroup* GetGroup() const;
686 
689  KVGeoStrucElement* GetParentStructure(const Char_t* type, const Char_t* name = "") const;
690 
691  void SetActiveLayerMatrix(const TGeoHMatrix*);
696  {
699  return fEWPosition;
700  }
702  {
707  }
708  Double_t GetSolidAngle() const override
709  {
711  if (ROOTGeo()) return fEWPosition.GetSolidAngle();
712  return KVPosition::GetSolidAngle();
713  }
714  TVector3 GetRandomDirection(Option_t* t = "isotropic") override
715  {
717  if (ROOTGeo()) return fEWPosition.GetRandomDirection(t);
719  }
720  void GetRandomAngles(Double_t& th, Double_t& ph, Option_t* t = "isotropic") override
721  {
723  if (ROOTGeo()) fEWPosition.GetRandomAngles(th, ph, t);
724  else KVPosition::GetRandomAngles(th, ph, t);
725  }
727  {
729  if (ROOTGeo()) return fEWPosition.GetDirection();
730  return KVPosition::GetDirection();
731  }
732  Double_t GetDistance() const override
733  {
735  if (ROOTGeo()) return fEWPosition.GetDistance();
736  return KVPosition::GetDistance();
737  }
738  Double_t GetTheta() const override
739  {
741  if (ROOTGeo()) return fEWPosition.GetTheta();
742  return KVPosition::GetTheta();
743  }
744  Double_t GetSinTheta() const override
745  {
747  if (ROOTGeo()) return fEWPosition.GetSinTheta();
748  return KVPosition::GetSinTheta();
749  }
750  Double_t GetCosTheta() const override
751  {
753  if (ROOTGeo()) return fEWPosition.GetCosTheta();
754  return KVPosition::GetCosTheta();
755  }
756  Double_t GetPhi() const override
757  {
759  if (ROOTGeo()) return fEWPosition.GetPhi();
760  return KVPosition::GetPhi();
761  }
762 
763  void SetThickness(Double_t thick) override;
765  {
767  return fSingleLayer;
768  }
770  {
772  return !IsSingleLayer();
773  }
775  {
777  return IsGas();
778  }
779  Bool_t HasSameStructureAs(const KVDetector*) const;
780  void SetNameOfArray(const TString& n)
781  {
782  fNameOfArray = n;
783  }
784  const Char_t* GetNameOfArray() const
785  {
787  return fNameOfArray;
788  }
789 
791  {
792  return fDetSignals;
793  }
795  {
796  return fDetSignalsForRawTree;
797  }
799  {
804 
805  auto signal = new KVDetectorSignal(type, this);
806  fDetSignals.Add(signal);
808  return signal;
809  }
810  Bool_t AddDetectorSignalExpression(const KVString& type, const KVString& _expr);
811 
812  virtual Int_t GetIndex() const
813  {
817 
818  return 0;
819  }
820 
821  void SetPressure(Double_t P) override;
822  void SetTemperature(Double_t T) override;
823 
824  virtual Bool_t IsSegmented() const
825  {
826  return kFALSE;
827  }
828  virtual void AddEnergyLossInSubDetector(int, double) {}
829 
830  ClassDefOverride(KVDetector, 10) //Base class for the description of detectors in multidetector arrays
831 };
832 
834  const Char_t* type) const
835 {
836  if (fCalibrators)
838  return 0;
839 }
840 
842 {
843  if (fCalibrators)
845  return 0;
846 }
847 #endif
int Int_t
unsigned int UInt_t
#define OPT
#define e(i)
bool Bool_t
char Char_t
float Float_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
#define BIT(n)
#define ClassDefOverride(name, id)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
Base class for all detector calibrations.
Definition: KVCalibrator.h:99
Base class for output signal data produced by a detector.
virtual Bool_t IsFired() const
const Char_t * GetType() const override
virtual Bool_t IsRaw() const
void SetDetector(const KVDetector *d)
Base class for detector geometry description, interface to energy-loss calculations.
Definition: KVDetector.h:159
void SetDetectorSignalValue(const KVString &type, Double_t val) const
Definition: KVDetector.h:518
void SetNameOfArray(const TString &n)
Definition: KVDetector.h:780
KVMaterial * GetAbsorber(const Char_t *name) const
Definition: KVDetector.h:319
Double_t GetInverseDetectorSignalValue(const KVString &output, Double_t value, const KVString &input, const KVNameValueList &params="") const
Definition: KVDetector.h:529
static KVDetector * MakeDetector(const Char_t *name, Float_t thick)
TGeoHMatrix * GetActiveLayerMatrix() const
Definition: KVDetector.h:601
void SetThickness(Double_t thick) override
void IncrementIdentifiedParticles(Int_t n=1)
Definition: KVDetector.h:567
virtual Bool_t IsSimMode() const
Definition: KVDetector.h:649
virtual Bool_t IsOK() const
Definition: KVDetector.h:678
virtual Bool_t use_signal_for_raw_data_tree(const TString &) const
Definition: KVDetector.h:286
KVPosition fEWPosition
position of entrance window i.e. first volume in detector geometry
Definition: KVDetector.h:162
virtual void SetSimMode(Bool_t on=kTRUE)
Definition: KVDetector.h:640
Double_t GetMisalignmentAngle() const override
Definition: KVDetector.h:218
const Char_t * GetMaterialName() const
Definition: KVDetector.h:350
KVMaterial * GetActiveLayer() const override
Definition: KVDetector.h:313
KVUniqueNameList fParentStrucList
list of geometry structures which directly contain this detector
Definition: KVDetector.h:163
Int_t GetNumberOfAbsorberLayers() const
Definition: KVDetector.h:328
void IncrementUnidentifiedParticles(Int_t n=1)
Definition: KVDetector.h:561
Double_t GetSurfaceArea(int npoints=100000) const override
Definition: KVDetector.h:214
virtual void AddEnergyLossInSubDetector(int, double)
Definition: KVDetector.h:828
void SetMaterial(const Char_t *type) override
Definition: KVDetector.cpp:169
Double_t ELossActive(Double_t *x, Double_t *par)
Definition: KVDetector.cpp:919
void SetTemperature(Double_t T) override
KVList * fCalibrators
list of associated calibrator objects
Definition: KVDetector.h:257
KVGeoStrucElement * GetParentStructure(const Char_t *type, const Char_t *name="") const
KVGroup * GetGroup() const
void AddDetectorSignal(KVDetectorSignal *ds)
Definition: KVDetector.h:277
Double_t GetRange(Int_t Z, Int_t A, Double_t Einc) override
Double_t GetIncidentEnergyFromERes(Int_t Z, Int_t A, Double_t Eres) override
virtual ~ KVDetector()
Bool_t fDetecting
=kTRUE if detector is "detecting", =kFALSE if not
Definition: KVDetector.h:273
Bool_t ReplaceCalibrator(const Char_t *type, KVCalibrator *cal, const KVNameValueList &opts="")
Definition: KVDetector.cpp:517
virtual Double_t GetTotalDeltaE(Int_t Z, Int_t A, Double_t Einc)
virtual Double_t GetEnergy() const
Definition: KVDetector.h:365
Int_t GetNHits() const
Return the number of particles hitting this detector in an event.
Definition: KVDetector.h:450
virtual TF1 * GetEResFunction(Int_t Z, Int_t A)
KVList * GetListOfCalibrators() const
Definition: KVDetector.h:402
void RemoveHit(KVNucleus *part)
Definition: KVDetector.h:431
virtual TGraph * DrawPunchThroughEsurAVsZ(Int_t massform=KVNucleus::kBetaMass)
const KVSeqCollection & GetListOfDetectorSignalsForRawTree() const
Definition: KVDetector.h:794
static Int_t fDetCounter
Definition: KVDetector.h:165
void AddAbsorber(KVMaterial *)
Definition: KVDetector.cpp:607
virtual Double_t GetEResAfterDetector() const
Definition: KVDetector.h:633
TVector3 GetSurfaceCentre() const override
Definition: KVDetector.h:202
Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e=-1.0, enum SolType type=kEmax) override
Double_t GetPunchThroughEnergy(Int_t Z, Int_t A) override
Bool_t IsMultiLayer() const
Definition: KVDetector.h:769
void AddParentStructure(KVGeoStrucElement *elem)
Bool_t IsSingleLayer() const
Definition: KVDetector.h:764
Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t=0.) override
Double_t fEResforEinc
used by GetIncidentEnergy & GetCorrectedEnergy
Definition: KVDetector.h:269
void Print(Option_t *option="") const override
Definition: KVDetector.cpp:356
TVector3 GetSurfaceNormal() const override
Definition: KVDetector.h:210
TVector3 GetVolumeCentre() const override
Definition: KVDetector.h:206
virtual Int_t GetIndex() const
Definition: KVDetector.h:812
virtual Int_t FindZmin(Double_t ELOSS=-1., Char_t mass_formula=-1)
Definition: KVDetector.cpp:850
Double_t GetSinTheta() const override
Definition: KVDetector.h:744
TF1 * fELossF
parametric function dE in active layer vs. incident energy
Definition: KVDetector.h:265
Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc) override
const KVPosition & GetEntranceWindow() const
Definition: KVDetector.h:695
Bool_t HasDetectorSignal(const KVString &type) const
Definition: KVDetector.h:554
KVMaterial * GetAbsorber(Int_t i) const
Returns pointer to the i-th absorber in the detector (i=0 first absorber, i=1 second,...
Definition: KVDetector.cpp:623
@ kIdentifiedParticle
Definition: KVDetector.h:173
@ kUnidentifiedParticle
Definition: KVDetector.h:172
void ClearHits()
Definition: KVDetector.h:444
void SetEnergyLoss(Double_t e) const override
Definition: KVDetector.h:389
KVUnownedList * fParticles
list of particles hitting detector in an event
Definition: KVDetector.h:258
void remove_signal_for_calibrator(KVCalibrator *K)
Definition: KVDetector.cpp:679
TF1 * fEResF
parametric function Eres residual energy after all layers of detector
Definition: KVDetector.h:266
KVDetectorSignal * AddDetectorSignal(const KVString &type)
Definition: KVDetector.h:798
TVector3 GetActiveLayerSurfaceCentre() const
Definition: KVDetector.h:585
Bool_t HasSameStructureAs(const KVDetector *) const
virtual Bool_t Fired(Option_t *opt="any") const
Definition: KVDetector.h:463
UInt_t GetGroupNumber()
Double_t GetPhi() const override
Definition: KVDetector.h:756
virtual KVDetectorSignal * GetDetectorSignal(const KVString &type) const
Definition: KVDetector.h:545
virtual void ReadDefinitionFromFile(const Char_t *)
Bool_t IsCalibrated() const
Definition: KVDetector.h:406
Double_t GetEnergyLoss() const override
Definition: KVDetector.h:385
void SetShape(TGeoBBox *s) override
Definition: KVDetector.h:186
void Copy(TObject &obj) const override
Definition: KVDetector.cpp:129
void SetDetecting(Bool_t yes=kTRUE)
Definition: KVDetector.h:673
virtual TF1 * GetELossFunction(Int_t Z, Int_t A)
void SetActiveLayer(KVMaterial *actif)
Definition: KVDetector.h:303
KVDetector()
default ctor
Definition: KVDetector.cpp:58
TGeoHMatrix * GetMatrix() const override
Definition: KVDetector.h:190
Double_t GetSolidAngle() const override
Definition: KVDetector.h:708
Bool_t BelongsToUnidentifiedParticle() const
Definition: KVDetector.h:573
void DetectParticle(KVNucleus *, TVector3 *norm=0) override
Definition: KVDetector.cpp:195
Double_t RangeDet(Double_t *x, Double_t *par)
Definition: KVDetector.cpp:957
const Char_t * GetNameOfArray() const
Definition: KVDetector.h:784
Double_t GetParticleEIncFromERes(KVNucleus *, TVector3 *norm=0) override
Definition: KVDetector.cpp:320
virtual void RemoveCalibrators()
Definition: KVDetector.cpp:701
virtual Double_t GetEntranceWindowSurfaceArea()
Return surface area of first layer of detector in cm2.
TGeoBBox * GetShape() const override
Definition: KVDetector.h:194
virtual TGraph * DrawPunchThroughEnergyVsZ(Int_t massform=KVNucleus::kBetaMass)
const KVList * GetListOfAbsorbers() const
Definition: KVDetector.h:324
KVUniqueNameList fDetSignals
list of signals associated with detector
Definition: KVDetector.h:223
Bool_t IsGasDetector() const
Definition: KVDetector.h:774
Double_t get_corrected_energy(AbsorberStack *stack, KVNucleus *nuc, Double_t e, Bool_t transmission)
Definition: KVDetector.h:229
Int_t fUnidentP
temporary counters, determine state of identified/unidentified particle flags
Definition: KVDetector.h:177
TF1 * fRangeF
parametric function range of particles in detector
Definition: KVDetector.h:267
Bool_t AddDetectorSignalExpression(const KVString &type, const KVString &_expr)
Double_t GetDetectorSignalValue(const KVString &type, const KVNameValueList &params="") const
Definition: KVDetector.h:505
virtual void SetEnergy(Double_t e) const
Definition: KVDetector.h:377
virtual void SetEResAfterDetector(Double_t e)
Definition: KVDetector.h:629
virtual Double_t GetCalibratedEnergy() const
Definition: KVDetector.h:360
KVGeoDetectorNode fNode
positioning information relative to other detectors
Definition: KVDetector.h:164
void SetActiveLayerMatrix(const TGeoHMatrix *)
Set ROOT geometry global matrix transformation to coordinate frame of active layer volume.
Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t=0.) override
virtual Bool_t IsDetecting() const
Definition: KVDetector.h:668
virtual Bool_t IsSegmented() const
Definition: KVDetector.h:824
void SetActiveLayer(Int_t i)
Definition: KVDetector.h:308
Double_t GetMaxDeltaE(Int_t Z, Int_t A) override
Bool_t IsAnalysed()
Definition: KVDetector.h:455
TVector3 GetRandomDirection(Option_t *t="isotropic") override
Definition: KVDetector.h:714
void RemoveParentStructure(KVGeoStrucElement *elem)
virtual Double_t GetSmallestEmaxValid(Int_t Z, Int_t A) const
const KVSeqCollection & GetListOfDetectorSignals() const
Definition: KVDetector.h:790
KVUniqueNameList fDetSignalsForRawTree
list of signals used for raw data TTree
Definition: KVDetector.h:224
KVGeoDetectorNode * GetNode()
Definition: KVDetector.h:345
TVector3 GetRandomPointOnSurface() const override
Definition: KVDetector.h:198
Bool_t fSimMode
=kTRUE when using to simulate detector response, =kFALSE when analysing data
Definition: KVDetector.h:271
Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres) override
TString fNameOfArray
name of multidetector array this detector is part of
Definition: KVDetector.h:167
Bool_t BelongsToIdentifiedParticle() const
Definition: KVDetector.h:577
void SetMatrix(const TGeoHMatrix *m) override
Definition: KVDetector.h:182
void SetEntranceWindowMatrix(const TGeoHMatrix *)
Set ROOT geometry global matrix transformation to coordinate frame of entrance window.
Double_t EResDet(Double_t *x, Double_t *par)
TGeoBBox * GetActiveLayerShape() const
Definition: KVDetector.h:596
virtual void Reset(Option_t *opt="")
Definition: KVDetector.h:414
TVector3 GetActiveLayerVolumeCentre() const
Definition: KVDetector.h:591
const TVector3 GetCentreOfEntranceWindow() const
Definition: KVDetector.h:701
KVMaterial * fActiveLayer
The active absorber in the detector.
Definition: KVDetector.h:166
void AddHit(KVNucleus *part)
Definition: KVDetector.h:420
void RemoveAllAbsorbers()
Definition: KVDetector.cpp:646
Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A) override
Double_t GetTotalThicknessInCM() const
Definition: KVDetector.h:334
KVCalibrator * GetCalibrator(const Char_t *name, const Char_t *type) const
Definition: KVDetector.h:833
Int_t fIdentP
temporary counters, determine state of identified/unidentified particle flags
Definition: KVDetector.h:176
KVSeqCollection * GetHits() const
Return the list of particles hitting this detector in an event.
Definition: KVDetector.h:440
void SetPressure(Double_t P) override
Double_t GetELostByParticle(KVNucleus *, TVector3 *norm=0) override
Definition: KVDetector.cpp:268
virtual Bool_t IsPresent() const
Definition: KVDetector.h:659
void SetEntranceWindowShape(TGeoBBox *)
Set ROOT geometry shape of entrance window.
Bool_t fPresent
=kTRUE if detector is present, =kFALSE if it has been removed
Definition: KVDetector.h:272
void GetRandomAngles(Double_t &th, Double_t &ph, Option_t *t="isotropic") override
Definition: KVDetector.h:720
void SetActiveLayerShape(TGeoBBox *)
Set ROOT geometry shape of active layer volume.
TVector3 GetDirection() override
Definition: KVDetector.h:726
void SetAnalysed(Bool_t b=kTRUE)
Definition: KVDetector.h:459
TString fFName
dynamically generated full name of detector
Definition: KVDetector.h:256
Bool_t fSingleLayer
=kTRUE if detector has a single absorber layer
Definition: KVDetector.h:275
virtual TF1 * GetRangeFunction(Int_t Z, Int_t A)
Double_t GetDistance() const override
Definition: KVDetector.h:732
virtual Double_t GetCorrectedEnergy(KVNucleus *, Double_t e=-1., Bool_t transmission=kTRUE)
Definition: KVDetector.cpp:751
void init()
default initialisations
Definition: KVDetector.cpp:31
void Clear(Option_t *opt="") override
Definition: KVDetector.cpp:565
KVList fAbsorbers
list of absorbers making up the detector
Definition: KVDetector.h:259
Bool_t AddCalibrator(KVCalibrator *cal, const KVNameValueList &opts="")
Definition: KVDetector.cpp:439
Double_t GetCosTheta() const override
Definition: KVDetector.h:750
void SetPresent(Bool_t yes=kTRUE)
Definition: KVDetector.h:664
Double_t GetTheta() const override
Definition: KVDetector.h:738
Information on relative positions of detectors & particle trajectories.
Base class describing elements of array geometry.
Group of detectors which can be treated independently of all others in array.
Definition: KVGroup.h:20
Extended TList class which owns its objects by default.
Definition: KVList.h:22
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition: KVMaterial.h:89
virtual void SetEnergyLoss(Double_t e) const
Definition: KVMaterial.h:149
virtual Double_t GetThickness() const
Definition: KVMaterial.cpp:484
Bool_t IsGas() const
Definition: KVMaterial.cpp:371
virtual Double_t GetEnergyLoss() const
Definition: KVMaterial.h:139
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
Int_t GetA() const
Definition: KVNucleus.cpp:792
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:763
Base class used for handling geometry in a multidetector array.
Definition: KVPosition.h:91
virtual void GetRandomAngles(Double_t &th, Double_t &ph, Option_t *t="isotropic")
Definition: KVPosition.cpp:280
virtual TVector3 GetRandomDirection(Option_t *t="isotropic")
Definition: KVPosition.cpp:242
virtual void SetShape(TGeoBBox *)
Definition: KVPosition.cpp:743
virtual Double_t GetSolidAngle(void) const
Definition: KVPosition.cpp:567
virtual Double_t GetTheta() const
Definition: KVPosition.h:160
virtual Bool_t ROOTGeo() const
Returns kTRUE if ROOT geometry is used, kFALSE if not.
Definition: KVPosition.cpp:598
virtual TVector3 GetSurfaceCentre() const
Definition: KVPosition.cpp:886
virtual TGeoHMatrix * GetMatrix() const
Definition: KVPosition.cpp:777
virtual Double_t GetPhi() const
Definition: KVPosition.h:172
virtual Double_t GetDistance(void) const
Definition: KVPosition.h:190
virtual TVector3 GetVolumeCentre() const
Definition: KVPosition.cpp:915
virtual Double_t GetSurfaceArea(int npoints=100000) const
Definition: KVPosition.cpp:974
virtual Double_t GetSinTheta() const
Definition: KVPosition.h:164
virtual TVector3 GetSurfaceNormal() const
Definition: KVPosition.cpp:945
virtual Double_t GetMisalignmentAngle() const
virtual void SetMatrix(const TGeoHMatrix *)
Definition: KVPosition.cpp:702
virtual TGeoBBox * GetShape() const
Definition: KVPosition.cpp:790
virtual Double_t GetCosTheta() const
Definition: KVPosition.h:168
virtual TVector3 GetDirection()
Definition: KVPosition.cpp:463
virtual TVector3 GetRandomPointOnSurface() const
Definition: KVPosition.cpp:813
KaliVeda extensions to ROOT collection classes.
T * get_object(const TString &name) const
TObject * Remove(TObject *obj) override
Remove object from list.
void Add(TObject *obj) override
TObject * FindObject(const char *name) const override
void Clear(Option_t *option="") override
virtual void SetCleanup(Bool_t enable=kTRUE)
virtual TObject * FindObjectByType(const Char_t *) const
virtual TObject * FindObjectWithNameAndType(const Char_t *name, const Char_t *type) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
Optimised list in which named objects can only be placed once.
void Add(TObject *obj) override
Extended TList class which does not own its objects by default.
Definition: KVUnownedList.h:20
virtual Int_t GetEntries() const
const char * GetName() const override
void SetBit(UInt_t f)
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
const Int_t n
TMarker m
TArc a