]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/ThermalFits/AliParticleYield.h
First version of a class to process particle yields file
[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 TClonesArray * GetEntriesMatchingSelection(TTree * tree, TString selection); 
54
55   // Misc helpers
56   Bool_t CheckTypeConsistency() const;
57   virtual void Print (Option_t *) const;
58   static Float_t GetError(TString error, Float_t yield) ;
59   static const char * FormatCol(const char * text, Int_t width,  const char * sep) ;
60   static Double_t RoundToSignificantFigures(double num, int n) ;  
61
62
63   // Getters
64   TString GetCentr()           const{ return fCentr           ;}
65   Int_t   GetCollisionSystem() const{ return fCollisionSystem ;}
66   Int_t   GetIsSum()           const{ return fIsSum           ;}
67   Int_t   GetPdgCode()         const{ return fPdgCode         ;}
68   Int_t   GetPdgCode2()        const{ return fPdgCode2; }
69   Float_t GetSqrtS()           const{ return fSqrtS           ;}
70   Float_t GetYield()           const{ return fYield           ;}
71   Float_t GetNormError()       const{ return fNormError       ;}
72   TString GetPartName()        const{ return fPartName        ;}
73   Float_t GetStatError()       const{ return fStatError       ;}
74   Int_t   GetStatus()          const{ return fStatus          ;}
75   Float_t GetSystError()       const{ return fSystError       ;}
76   Float_t GetYMax()            const{ return fYMax            ;}
77   Float_t GetYMin()            const{ return fYMin            ;}
78   UInt_t  GetMeasurementType() const{ return fMeasurementType ;}
79   TString GetTag()             const{ return fTag; }
80
81   const char * GetLatexName(Int_t pdg = 0)  const;
82   Float_t GetTotalError(Bool_t includeNormalization = kFALSE) const;
83
84   Bool_t  IsTypeMeasured()     const{ CheckTypeConsistency(); return !(fMeasurementType & kTypeLinearInterpolation);}
85   Bool_t  IsTypeRatio()        const{ CheckTypeConsistency(); return (fMeasurementType & kTypeParticleRatio);}
86   Bool_t  IsTypeLinearInterp() const{ CheckTypeConsistency(); return fMeasurementType & kTypeLinearInterpolation;}
87   Bool_t  IsTypeOnlyTotErr()   const{ CheckTypeConsistency(); return fMeasurementType & kTypeOnlyTotError;       }
88
89   static Int_t   GetSignificantDigits()  { return fSignificantDigits; }
90
91   // Setters
92   void SetCentr           (TString var           ) { fCentr = var           ;}
93   void SetCollisionSystem (AliPYCSystem_t var    ) { fCollisionSystem = var ;}
94   void SetIsSum           (Int_t var             ) { fIsSum = var           ;}
95   void SetPdgCode         (Int_t var             ) { fPdgCode = var ; SetPartName(var);}
96   void SetPdgCode2        (Int_t var             ) { fPdgCode2 = var;        }  
97   void SetSqrtS           (Float_t var           ) { fSqrtS = var           ;}
98   void SetYield           (Float_t var           ) { fYield = var           ;}
99   void SetNormError       (Float_t var           ) { fNormError = var       ;}
100   void SetPartName        (TString var           ) { fPartName = var; SetPdgCode(var); }
101   void SetStatError       (Float_t var           ) { fStatError = var       ;}
102   void SetStatus          (AliPYStatusCode_t var ) { fStatus = var          ;}
103   void SetSystError       (Float_t var           ) { fSystError = var       ;}
104   void SetYMax            (Float_t var           ) { fYMax = var            ;}
105   void SetYMin            (Float_t var           ) { fYMin = var            ;}
106   void SetMeasurementType (UInt_t var            ) { fMeasurementType = var ;}
107   void SetTag             (TString var           ) { fTag = var;}
108   //This 2 additional setters will ensure consistency between the pdg code and the name of the particle
109   void SetPartName(Int_t pdgCode);
110   void SetPdgCode (TString partName);
111
112   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
113
114   static void SetSignificantDigits (Int_t var) { fSignificantDigits = var;}
115
116
117
118
119 private:
120
121   Int_t   fPdgCode;         // PdgCode
122   Int_t   fPdgCode2;        // The PdgCode of the second particle, only needed in case of a ratio
123   TString fPartName;        // Particle name (redundant, we also have PDG code)
124   Int_t   fCollisionSystem; // Collision System, see the AliPYCSystem_t enum for possible values
125   Float_t fSqrtS;           // center of mass energy, in GeV
126   Float_t fYield;           // The yield
127   Float_t fStatError;       // StatError
128   Float_t fSystError;       // SystError
129   Float_t fNormError;       // Normalization error
130   Float_t fYMin;            // min rapidity cut
131   Float_t fYMax;            // max rapidity cut
132   Int_t   fStatus;          // Status code, to determine the quality of the measurement, see AliPYStatusCode_t for possible values
133
134   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
135
136   TString fCentr;           // Centrality. The format is estimator 3-digits id, bin low-edge 2 digits, bin hi-edge 2 digits , e.g. V0A0005
137   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
138   TString fTag;             // Generic text tag (to be used e.g. for the name of the experiment)
139
140
141   static Int_t fSignificantDigits; // Significant Digits to be used in values and errors
142
143
144   ClassDef(AliParticleYield,1)
145 };
146
147
148 #endif /* _ALIPARTICLEYIELD_H_ */