]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/ThermalFits/AliParticleYield.h
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[u/mrichter/AliRoot.git] / PWGLF / ThermalFits / AliParticleYield.h
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"
12
13 class TClonesArray;
14 class TTree;
15
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).
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. 
39     
40     // Type of errors
41     kTypeOnlyTotError        = 0x10, // If on, only the total error is returned as "GetSystError". GetStatError should be set to 0;
42   };
43   
44   AliParticleYield();
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); 
48   
49   // IO
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); 
55
56   // Misc helpers
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);
65
66   // Getters
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; }
83
84   const char * GetLatexName(Int_t pdg = 0)  const;
85   Float_t GetTotalError(Bool_t includeNormalization = kFALSE) const;
86
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;       }
91
92   static Int_t   GetSignificantDigits()  { return fSignificantDigits; }
93
94   // Setters
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);
114
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
116
117   static void SetSignificantDigits (Int_t var) { fSignificantDigits = var;}
118
119
120
121
122 private:
123
124   Bool_t Compare2Floats(Float_t a, Float_t b) ;
125
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
138
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
140
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)
144
145
146   static Int_t fSignificantDigits; // Significant Digits to be used in values and errors
147   static Float_t fEpsilon; // Used for float conparisons
148
149   ClassDef(AliParticleYield,1)
150 };
151
152
153 #endif /* _ALIPARTICLEYIELD_H_ */