1 #ifndef _ALIPARTICLEYIELD_H_
2 #define _ALIPARTICLEYIELD_H_
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
16 class AliParticleYield : public TObject
20 enum AliPYCSystem_t {kCSpp = 0,
24 static const char * kSystemString[];
26 enum AliPYStatusCode_t {
29 kSCFinalNotPublished = 2,
33 static const char * kStatusString[];
35 enum AliPYMeasurementType_t { // this is a bit mask: more than one bit can be one (be careful not to set mutually exclusive ones).
36 // Type of measurements (lowest nibble reserved for this)
37 kTypeLinearInterpolation = 0x1,
38 kTypeParticleRatio = 0x2, // If true, this is a ratio of 2 particles where the propagation of uncertainty was properly taken into account.
41 kTypeOnlyTotError = 0x10, // If on, only the total error is returned as "GetSystError". GetStatError should be set to 0;
45 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");
46 virtual ~AliParticleYield();
47 AliParticleYield(const AliParticleYield& part);
50 static TClonesArray * ReadFromASCIIFile(const char * fileName, const char * separators = " \t");
51 static TTree * ReadFromASCIIFileAsTree(const char * fileName, const char * separators = " \t");
52 static void SaveAsASCIIFile(TClonesArray * arr, const char * filename, const char * separator = " ", Int_t colWidth = 7);
53 static void WriteThermusFile(TClonesArray * arr, const char * filename, Int_t colWidth = 10);
54 static TClonesArray * GetEntriesMatchingSelection(TTree * tree, TString selection);
57 Bool_t CheckTypeConsistency() const;
58 Bool_t CheckForDuplicates(TClonesArray * arr) ;
59 virtual void Print (Option_t * opt = "") const;
60 static Float_t GetError(TString error, Float_t yield) ;
61 static const char * FormatCol(const char * text, Int_t width, const char * sep =" ") ;
62 static Double_t RoundToSignificantFigures(double num, int n) ;
63 Bool_t operator==(const AliParticleYield& rhs);
64 Bool_t IsTheSameMeasurement(AliParticleYield &rhs);
67 TString GetCentr() const{ return fCentr ;}
68 Int_t GetCollisionSystem() const{ return fCollisionSystem ;}
69 Int_t GetIsSum() const{ return fIsSum ;}
70 Int_t GetPdgCode() const{ return fPdgCode ;}
71 Int_t GetPdgCode2() const{ return fPdgCode2; }
72 Float_t GetSqrtS() const{ return fSqrtS ;}
73 Float_t GetYield() const{ return fYield ;}
74 Float_t GetNormError() const{ return fNormError ;}
75 TString GetPartName() const{ return fPartName ;}
76 Float_t GetStatError() const{ return fStatError ;}
77 Int_t GetStatus() const{ return fStatus ;}
78 Float_t GetSystError() const{ return fSystError ;}
79 Float_t GetYMax() const{ return fYMax ;}
80 Float_t GetYMin() const{ return fYMin ;}
81 UInt_t GetMeasurementType() const{ return fMeasurementType ;}
82 TString GetTag() const{ return fTag; }
84 const char * GetLatexName(Int_t pdg = 0) const;
85 Float_t GetTotalError(Bool_t includeNormalization = kFALSE) const;
87 Bool_t IsTypeMeasured() const{ CheckTypeConsistency(); return !(fMeasurementType & kTypeLinearInterpolation);}
88 Bool_t IsTypeRatio() const{ CheckTypeConsistency(); return (fMeasurementType & kTypeParticleRatio);}
89 Bool_t IsTypeLinearInterp() const{ CheckTypeConsistency(); return fMeasurementType & kTypeLinearInterpolation;}
90 Bool_t IsTypeOnlyTotErr() const{ CheckTypeConsistency(); return fMeasurementType & kTypeOnlyTotError; }
92 static Int_t GetSignificantDigits() { return fSignificantDigits; }
95 void SetCentr (TString var ) { fCentr = var ;}
96 void SetCollisionSystem (AliPYCSystem_t var ) { fCollisionSystem = var ;}
97 void SetIsSum (Int_t var ) { fIsSum = var ;}
98 void SetPdgCode (Int_t var ) { fPdgCode = var ; SetPartName(var);}
99 void SetPdgCode2 (Int_t var ) { fPdgCode2 = var; }
100 void SetSqrtS (Float_t var ) { fSqrtS = var ;}
101 void SetYield (Float_t var ) { fYield = var ;}
102 void SetNormError (Float_t var ) { fNormError = var ;}
103 void SetPartName (TString var ) { fPartName = var; SetPdgCode(var); }
104 void SetStatError (Float_t var ) { fStatError = var ;}
105 void SetStatus (AliPYStatusCode_t var ) { fStatus = var ;}
106 void SetSystError (Float_t var ) { fSystError = var ;}
107 void SetYMax (Float_t var ) { fYMax = var ;}
108 void SetYMin (Float_t var ) { fYMin = var ;}
109 void SetMeasurementType (UInt_t var ) { fMeasurementType = var ;}
110 void SetTag (TString var ) { fTag = var;}
111 //This 2 additional setters will ensure consistency between the pdg code and the name of the particle
112 void SetPartName(Int_t pdgCode);
113 void SetPdgCode (TString partName);
115 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
117 static void SetSignificantDigits (Int_t var) { fSignificantDigits = var;}
124 Bool_t Compare2Floats(Float_t a, Float_t b) ;
126 Int_t fPdgCode; // PdgCode
127 Int_t fPdgCode2; // The PdgCode of the second particle, only needed in case of a ratio
128 TString fPartName; // Particle name (redundant, we also have PDG code)
129 Int_t fCollisionSystem; // Collision System, see the AliPYCSystem_t enum for possible values
130 Float_t fSqrtS; // center of mass energy, in GeV
131 Float_t fYield; // The yield
132 Float_t fStatError; // StatError
133 Float_t fSystError; // SystError
134 Float_t fNormError; // Normalization error
135 Float_t fYMin; // min rapidity cut
136 Float_t fYMax; // max rapidity cut
137 Int_t fStatus; // Status code, to determine the quality of the measurement, see AliPYStatusCode_t for possible values
139 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
141 TString fCentr; // Centrality. The format is estimator 3-digits id, bin low-edge 2 digits, bin hi-edge 2 digits , e.g. V0A0005
142 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
143 TString fTag; // Generic text tag (to be used e.g. for the name of the experiment)
146 static Int_t fSignificantDigits; // Significant Digits to be used in values and errors
147 static Float_t fEpsilon; // Used for float conparisons
149 ClassDef(AliParticleYield,1)
153 #endif /* _ALIPARTICLEYIELD_H_ */