]>
Commit | Line | Data |
---|---|---|
2f86df33 | 1 | #ifndef _ALIPARTICLEYIELD_H_ |
2 | #define _ALIPARTICLEYIELD_H_ | |
3 | ||
4 | // AliParticleYield | |
5 | // This class implements a container for particle yields results, to | |
6 | // be used e.g. in thermal model fits, with utility methods to | |
7 | // read/write to ASCII files or root trees | |
8 | // Author: Michele FLoris, michele.floris@cern.ch | |
9 | ||
10 | #include "TObject.h" | |
11 | #include "TString.h" | |
589e4fb0 | 12 | #include "TCut.h" |
2f86df33 | 13 | |
14 | class TClonesArray; | |
15 | class TTree; | |
2f86df33 | 16 | class AliParticleYield : public TObject |
17 | { | |
18 | public: | |
19 | ||
20 | enum AliPYCSystem_t {kCSpp = 0, | |
21 | kCSpPb = 1, | |
22 | kCSPbPb = 2 } ; | |
23 | ||
24 | static const char * kSystemString[]; | |
25 | ||
26 | enum AliPYStatusCode_t { | |
27 | kSCPublished = 0, | |
28 | kSCPreliminary = 1, | |
29 | kSCFinalNotPublished = 2, | |
30 | kSCMayChange = 3, | |
31 | }; | |
32 | ||
33 | static const char * kStatusString[]; | |
34 | ||
35 | enum AliPYMeasurementType_t { // this is a bit mask: more than one bit can be one (be careful not to set mutually exclusive ones). | |
f10825a3 | 36 | // Type of measurements |
2f86df33 | 37 | kTypeLinearInterpolation = 0x1, |
f10825a3 | 38 | kTypeParticleRatio = 0x2, // If true, this is a ratio of 2 particles where the propagation of uncertainty was properly taken into account. |
39 | kTypeAverageAndRefit = 0x4, // this means that the measurement has been obtained summing several spectra in smaller centality bins (weihgted by the width of the centrality bin) and refitting them | |
40 | kTypeExtrPionRatio = 0x8, // Extrapolated from a different centrality bin, assumin the ratio to pions is constant | |
41 | kTypeExtrFit = 0x20, // Extrapolated fitting the centrality dependence vs npart | |
a573732b | 42 | |
2f86df33 | 43 | // Type of errors |
44 | kTypeOnlyTotError = 0x10, // If on, only the total error is returned as "GetSystError". GetStatError should be set to 0; | |
45 | }; | |
46 | ||
47 | AliParticleYield(); | |
48 | AliParticleYield(Int_t pdg, Int_t system, Float_t sqrts, Float_t value, Float_t stat, Float_t syst, Float_t norm, Float_t ymin, Float_t ymax, Int_t status, Int_t type, TString centr, Int_t isSum = 0, TString tag = "ALICE"); | |
3e8c4dd8 | 49 | AliParticleYield(Int_t pdg, Int_t system, Float_t sqrts, Float_t value, Float_t stat, Float_t syst, Float_t normPos, Float_t normNeg, Float_t ymin, Float_t ymax, Int_t status, Int_t type, TString centr, Int_t isSum = 0, TString tag = "ALICE"); |
2f86df33 | 50 | virtual ~AliParticleYield(); |
51 | AliParticleYield(const AliParticleYield& part); | |
52 | ||
53 | // IO | |
54 | static TClonesArray * ReadFromASCIIFile(const char * fileName, const char * separators = " \t"); | |
55 | static TTree * ReadFromASCIIFileAsTree(const char * fileName, const char * separators = " \t"); | |
56 | static void SaveAsASCIIFile(TClonesArray * arr, const char * filename, const char * separator = " ", Int_t colWidth = 7); | |
5a633e19 | 57 | static void WriteThermusFile(TClonesArray * arr, const char * filename, Int_t colWidth = 10); |
589e4fb0 | 58 | static TClonesArray * GetEntriesMatchingSelection(TTree * tree, TCut selection); |
59 | static TTree * GetTreeFromArray(TClonesArray * arr) ; | |
2f86df33 | 60 | |
61 | // Misc helpers | |
62 | Bool_t CheckTypeConsistency() const; | |
16163c99 | 63 | Bool_t CheckForDuplicates(TClonesArray * arr) ; |
64 | virtual void Print (Option_t * opt = "") const; | |
2f86df33 | 65 | static Float_t GetError(TString error, Float_t yield) ; |
5a633e19 | 66 | static const char * FormatCol(const char * text, Int_t width, const char * sep =" ") ; |
2f86df33 | 67 | static Double_t RoundToSignificantFigures(double num, int n) ; |
90132fab | 68 | static AliParticleYield * FindParticle(TClonesArray * arr, Int_t pdg, Int_t system, Float_t sqrts, TString centrality = "", Int_t isSum = -1, Int_t status = -1, Int_t pdg2 = 0); |
69 | static AliParticleYield * FindRatio (TClonesArray * arr, Int_t pdg, Int_t pdg2, Int_t system, Float_t sqrts, TString centrality="", Int_t isSum = -1, Int_t status = -1) { return FindParticle(arr, pdg, system, sqrts, centrality, isSum, status, pdg2); } | |
16163c99 | 70 | Bool_t operator==(const AliParticleYield& rhs); |
71 | Bool_t IsTheSameMeasurement(AliParticleYield &rhs); | |
90132fab | 72 | static AliParticleYield * Divide(AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError = 0, Option_t * opt=""); |
73 | static AliParticleYield * Add (AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError = 0, Option_t * opt=""); | |
74 | void Scale(Float_t scale) ; | |
2f86df33 | 75 | |
76 | // Getters | |
77 | TString GetCentr() const{ return fCentr ;} | |
78 | Int_t GetCollisionSystem() const{ return fCollisionSystem ;} | |
79 | Int_t GetIsSum() const{ return fIsSum ;} | |
80 | Int_t GetPdgCode() const{ return fPdgCode ;} | |
81 | Int_t GetPdgCode2() const{ return fPdgCode2; } | |
82 | Float_t GetSqrtS() const{ return fSqrtS ;} | |
83 | Float_t GetYield() const{ return fYield ;} | |
3e8c4dd8 | 84 | Float_t GetNormError() const; |
85 | Float_t GetNormErrorNeg() const{ return fNormErrorNeg; } | |
86 | Float_t GetNormErrorPos() const{ return fNormErrorPos; } | |
87 | ||
2f86df33 | 88 | TString GetPartName() const{ return fPartName ;} |
89 | Float_t GetStatError() const{ return fStatError ;} | |
90 | Int_t GetStatus() const{ return fStatus ;} | |
91 | Float_t GetSystError() const{ return fSystError ;} | |
92 | Float_t GetYMax() const{ return fYMax ;} | |
93 | Float_t GetYMin() const{ return fYMin ;} | |
94 | UInt_t GetMeasurementType() const{ return fMeasurementType ;} | |
95 | TString GetTag() const{ return fTag; } | |
96 | ||
97 | const char * GetLatexName(Int_t pdg = 0) const; | |
98 | Float_t GetTotalError(Bool_t includeNormalization = kFALSE) const; | |
99 | ||
87381af7 | 100 | Bool_t IsTypeMeasured() const{ CheckTypeConsistency(); return (!(fMeasurementType & kTypeLinearInterpolation) && !(fMeasurementType & kTypeExtrPionRatio));} |
2f86df33 | 101 | Bool_t IsTypeRatio() const{ CheckTypeConsistency(); return (fMeasurementType & kTypeParticleRatio);} |
87381af7 | 102 | Bool_t IsTypeExtrapolatedWithPionRatio() const { CheckTypeConsistency(); return (fMeasurementType & kTypeExtrPionRatio);} |
2f86df33 | 103 | Bool_t IsTypeLinearInterp() const{ CheckTypeConsistency(); return fMeasurementType & kTypeLinearInterpolation;} |
104 | Bool_t IsTypeOnlyTotErr() const{ CheckTypeConsistency(); return fMeasurementType & kTypeOnlyTotError; } | |
105 | ||
106 | static Int_t GetSignificantDigits() { return fSignificantDigits; } | |
107 | ||
108 | // Setters | |
109 | void SetCentr (TString var ) { fCentr = var ;} | |
110 | void SetCollisionSystem (AliPYCSystem_t var ) { fCollisionSystem = var ;} | |
111 | void SetIsSum (Int_t var ) { fIsSum = var ;} | |
112 | void SetPdgCode (Int_t var ) { fPdgCode = var ; SetPartName(var);} | |
113 | void SetPdgCode2 (Int_t var ) { fPdgCode2 = var; } | |
114 | void SetSqrtS (Float_t var ) { fSqrtS = var ;} | |
115 | void SetYield (Float_t var ) { fYield = var ;} | |
3e8c4dd8 | 116 | void SetNormError (Float_t var ) { fNormErrorPos = var ; fNormErrorNeg=0;}; |
117 | void SetNormErrorNeg (Float_t var ) { fNormErrorNeg = var;} | |
118 | void SetNormErrorPos (Float_t var ) { fNormErrorPos = var;} | |
2f86df33 | 119 | void SetPartName (TString var ) { fPartName = var; SetPdgCode(var); } |
120 | void SetStatError (Float_t var ) { fStatError = var ;} | |
121 | void SetStatus (AliPYStatusCode_t var ) { fStatus = var ;} | |
122 | void SetSystError (Float_t var ) { fSystError = var ;} | |
123 | void SetYMax (Float_t var ) { fYMax = var ;} | |
124 | void SetYMin (Float_t var ) { fYMin = var ;} | |
125 | void SetMeasurementType (UInt_t var ) { fMeasurementType = var ;} | |
126 | void SetTag (TString var ) { fTag = var;} | |
127 | //This 2 additional setters will ensure consistency between the pdg code and the name of the particle | |
128 | void SetPartName(Int_t pdgCode); | |
129 | void SetPdgCode (TString partName); | |
130 | ||
131 | void SetTypeBits(UInt_t mask) { fMeasurementType |= mask; } // This switches on the bits passed. Does not affect the others! If you want to set the Whole mask, use SetMeasurementType | |
132 | ||
133 | static void SetSignificantDigits (Int_t var) { fSignificantDigits = var;} | |
90132fab | 134 | |
2f86df33 | 135 | |
136 | ||
137 | ||
138 | private: | |
139 | ||
90132fab | 140 | static Bool_t Compare2Floats(Float_t a, Float_t b) ; |
141 | static Double_t SumErrors(AliParticleYield * part1, AliParticleYield * part2, Int_t error, Option_t * opt) ; | |
87381af7 | 142 | void CombineMetadata(AliParticleYield *part1, AliParticleYield*part2, const char * pdgSep) ; |
90132fab | 143 | |
16163c99 | 144 | |
2f86df33 | 145 | Int_t fPdgCode; // PdgCode |
146 | Int_t fPdgCode2; // The PdgCode of the second particle, only needed in case of a ratio | |
147 | TString fPartName; // Particle name (redundant, we also have PDG code) | |
148 | Int_t fCollisionSystem; // Collision System, see the AliPYCSystem_t enum for possible values | |
149 | Float_t fSqrtS; // center of mass energy, in GeV | |
150 | Float_t fYield; // The yield | |
151 | Float_t fStatError; // StatError | |
152 | Float_t fSystError; // SystError | |
3e8c4dd8 | 153 | Float_t fNormErrorPos; // Normalization error, if the error is simmetric, this is used as the symmetric error. Otherwise it is just the positive one |
154 | Float_t fNormErrorNeg; // Normalization error (negative) | |
2f86df33 | 155 | Float_t fYMin; // min rapidity cut |
156 | Float_t fYMax; // max rapidity cut | |
157 | Int_t fStatus; // Status code, to determine the quality of the measurement, see AliPYStatusCode_t for possible values | |
158 | ||
3e8c4dd8 | 159 | |
160 | ||
2f86df33 | 161 | UInt_t fMeasurementType; // Measurement Type, e.g. actually measured, interpolated from 2 centrality bins or only total error given, etc. THIS IS A BIT MASK see AliPYMeasurementType_t for possible values and the IsType* Methods for easy access. Be carefull not to set mutually exclusive values |
162 | ||
163 | TString fCentr; // Centrality. The format is estimator 3-digits id, bin low-edge 2 digits, bin hi-edge 2 digits , e.g. V0A0005 | |
164 | Int_t fIsSum; // A flag which indicates if the yield is for a single charge or for the sum. 0 = single charge, 1 = particle + antiparticle | |
165 | TString fTag; // Generic text tag (to be used e.g. for the name of the experiment) | |
166 | ||
167 | ||
168 | static Int_t fSignificantDigits; // Significant Digits to be used in values and errors | |
16163c99 | 169 | static Float_t fEpsilon; // Used for float conparisons |
2f86df33 | 170 | |
87381af7 | 171 | ClassDef(AliParticleYield,2) |
2f86df33 | 172 | }; |
173 | ||
174 | ||
175 | #endif /* _ALIPARTICLEYIELD_H_ */ |