KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVFAZIAIDSiPSA.cpp
1//Created by KVClassFactory on Mon Feb 17 13:52:51 2014
2//Author: John Frankland,,,
3
4#include "KVFAZIAIDSiPSA.h"
5#include "KVDataSet.h"
6
8
9
10// BEGIN_HTML <!--
11/* -->
12<h2>KVFAZIAIDSiPSA</h2>
13<h4>PSA identification in first silicon of FAZIA telescopes</h4>
14<!-- */
15// --> END_HTML
17
20
21
24
26{
27 // Default constructor
28
29 if (!fZThreshold) {
30 // Threshold for Z identification by PSA
31 // Data from NIM A ?, ? (2017)
32// Double_t Z[] = {3,6,9,12,15,18,21,24,27,30};
33// Double_t E[] = {10,30,65,105,155,220,310,420,520,590};
34// Double_t dE = 5;// +/- 5 MeV for all points
35// fZThreshold = new TGraphErrors(10,Z,E);
36// for(int i=0;i<10;++i) fZThreshold->SetPointError(i,0,dE);
37 fZThreshold = new TF1("FAZIAIDSiPSA-ZSEUIL", "pol2", 0, 100);
38// fZThreshold->SetParameters(12.261900, -1.767320, 0.765392); // Previous implementation
39 fZThreshold->SetParameters(1.71777, -0.760697, 0.752485) ; // New implementation after thresholds determination with FAZIACOR experiment
40 }
41
42 if (!fAThreshold) {
43 // Threshold for A identification by PSA
44 // Data from NIM A ?, ? (2017)
45// int i=0; fZmaxAID=3;
46// Double_t E[] = {15,22.5,37.5,67.5,97.5,112.5,140,172.5,202.5,247.5,277.5,322.5,375,410,487.5,530,612.5};
47// Double_t Z[17]; for(int i=0;i<17;++i) Z[i] = i+3;
48// Double_t dE[17]; for(int i=0;i<11;++i) dE[i] = 15; for(int i=11;i<17;++i) dE[i] = 25;
49// fAThreshold = new TGraphErrors(17,Z,E,0,dE);
50 fAThreshold = new TF1("FAZIAIDSiPSA-ASEUIL", "pol2", 0, 100);
51 fAThreshold->SetParameters(-5.14823, 2.03461, 1.55798);
52 }
53 SetType("SiPSA");
54 SetLabel("FAZIA.Si");
55 fMaxZ = 18.5;
56 fSigmaZ = .4;
57
58}
59
60
61
62
69
71{
72 // Initialisation of telescope before identification.
73 // This method MUST be called once before any identification is attempted.
74 // Initialisation of grid is performed here.
75 // IsReadyForID() will return kTRUE if a grid is associated to this telescope for the current run.
76//printf("Initializing SiPSA\n");
77
79 if (!gDataSet->HasCalibIdentInfos()) { // for filtering simulations
80 SetBit(kReadyForID, GetDetector(1)->IsLabelled("SI1"));// only activate PSA for SI1
81 // if not, no particles are identified in SI1-SI2
82 }
83}
84
85
86
93
95{
96 // Return kTRUE if energy of ION is > minimum incident energy required for identification
97 // in charge (Z) given by figure 9 of "Comparison of charged particle identification
98 // using pulse shape discrimination and DeltaE-E methods between front and rear injection in
99 // silicon detector" NIM A 701, 145 (2013) (FAZIA collaboration).
100 // Thresholds used are those for rear-injection (red curve, lowest values).
101
102 Double_t seuil = fZThreshold->Eval(ION->GetZ());
103 return (ION->GetEnergy() >= seuil);
104}
105
106
107
120
122{
123 // For filtering simulations
124 // If n->GetEnergy() is above threshold for mass identification, we set
125 // n->IsAMeasured(kTRUE) (and n->IsZMeasured(kTRUE)).
126 // Otherwise, we just set n->IsZMeasured(kTRUE) and use the A given by
127 // the mass formula for the particle
128 //
129 // Z-dependence of A identification:
130 // all ok above threshold if Z<=16, decreasing probability for 17<=Z<=21
131 // no A identification for Z>21
132 //
133 // If A is not measured, we make sure the KE of the particle corresponds to the simulated one
134
135 n->SetZMeasured();
137 Bool_t okmass = (n->GetZ() < 17) || (n->GetZ() < 22 && gRandom->Uniform() < fMassIDProb->Eval(n->GetZ()));
138 okmass = okmass && (n->GetEnergy() >= fAThreshold->Eval(n->GetZ()));
139
140// Info("SetIdentificationStatus","%s : %lf %lf",ClassName(),fMassIDProb->GetParameter(0),fMassIDProb->GetParameter(1));
141
142 if (okmass) {
143 if (n->GetParameters()->HasParameter("OriginalMass")) n->SetA(n->GetParameters()->GetIntValue("OriginalMass"));
144 n->SetAMeasured();
145 }
146 else {
147 n->GetParameters()->SetValue("OriginalMass", n->GetA());
148 double e = n->GetE();
149 n->SetZ(n->GetZ());
150 n->SetE(e);
151 }
152}
153
154
#define e(i)
bool Bool_t
double Double_t
R__EXTERN TRandom * gRandom
void SetLabel(const Char_t *lab)
Definition KVBase.h:195
Bool_t IsLabelled(const Char_t *l) const
Definition KVBase.h:207
virtual void SetType(const Char_t *str)
Definition KVBase.h:173
Bool_t HasCalibIdentInfos() const
Definition KVDataSet.h:232
void SetIdentificationStatus(KVReconstructedNucleus *)
static TF1 * fZThreshold
empirical threshold for Z identification
static TF1 * fAThreshold
empirical threshold for A identification
KVFAZIAIDSiPSA()
Default constructor.
virtual void Initialize()
Bool_t CheckTheoreticalIdentificationThreshold(KVNucleus *, Double_t=0.0)
KVDetector * GetDetector(UInt_t n) const
virtual void Initialize(void)
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
Nuclei reconstructed from data measured by a detector array .
virtual void SetParameters(const Double_t *params)
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
void SetBit(UInt_t f)
virtual Double_t Uniform(Double_t x1, Double_t x2)
const Int_t n
ClassImp(TPyArg)