]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliLHCData.h
For Pythia with tune don't switch off MI in ConfigHeavyFlavor
[u/mrichter/AliRoot.git] / STEER / AliLHCData.h
1 #ifndef ALILHCDATA_H\r
2 #define ALILHCDATA_H\r
3 \r
4 /********************************************************************************\r
5 *                                                                               *\r
6 *   AliLHCData: summary of the LHC related information from LHC DIP.            *\r
7 *   Created from the TMap provided by the AliLHCReader with optional beginning  *\r
8 *                                                                               *\r
9 *   The data are (wrapped in the AliLHCDipValT):                                *\r
10 *   made of TimeStamp (double) and array of values                              *\r
11 *                                                                               *\r
12 *   Multiple entries for each type of data are possible. To obtaine number of   *\r
13 *   records (with distinct timestamp) for give type od records use:             *\r
14 *   int GetNBunchConfigMeasured(int beam) (with beam=0,1) etc.                  *\r
15 *                                                                               *\r
16 *   To get i-th entry, use brec= AliLHCDipValI* GetBunchConfigMeasured(bm,i);   *\r
17 *   Note: exact type of templated AliLHCDipValT pointer depends on the record   *\r
18 *   type, concult getters to know it.                                           *\r
19 *                                                                               *\r
20 *   Then, once the pointer is obtained, details can be accessed:                *\r
21 *   int nBunches = brec->GetSize();                                             *\r
22 *   for (int i=0;i<nBunches;i++) printf("Bunch#%d: %d\n",i,(*brec)[i]);         *\r
23 *                                                                               *\r
24 *   ATTENTION: Bunch RFBucked is NEGATIVE for bunches interacting at IR2        *\r
25 *                                                                               *\r
26 *                                                                               *\r
27 *                                                                               *\r
28 *   Author: ruben.shahoyan@cern.ch                                              *\r
29 *                                                                               *\r
30 ********************************************************************************/\r
31 \r
32 #include "AliLHCDipValT.h"\r
33 #include "TObject.h"\r
34 class TObjArray;\r
35 //class AliLHCDipValT;\r
36 \r
37 class AliDCSArray;\r
38 class TString;\r
39 class TMap;\r
40 \r
41 \r
42 class AliLHCData : public TObject\r
43 {\r
44  public:\r
45   enum          {kStart,kNStor};\r
46   enum BeamID_t {kBeam1,kBeam2};\r
47   enum Proj_t   {kX,kY};\r
48   enum Side_t   {kLeft,kRight};\r
49   enum Collim_t {kTCTVB4L2, kTCTVB4R2, kTCLIA4R2, kNCollimators};\r
50   enum ColJaw_t {kGapDn,kGapUp,kLeftDn,kLeftUp,kRightDn,kRightUp,kNJaws};\r
51   enum          {kMaxBSlots = 3564};\r
52   //\r
53   enum {kIntTot,kIntTotAv,kIntBunchAv,\r
54         kLumAcqMode,kLumTot,kLumTotErr,kLumBunch,kLumBunchErr,kLumCrossAng,kLumCrossAngErr,\r
55         kBunchConf,kFillNum,kBunchLgtNB,kBunchLgt,kBunchLgtFillB,\r
56         kRCInjSch,kRCBeta,kRCCrossAng,kRCVang,\r
57         kBeamSzAcqMode,kBeamSzSigH,kBeamSzSigV,kBeamSzEmittH,kBeamSzEmittV,kBeamSzSigHErr,kBeamSzSigVErr,\r
58         kCollPos};\r
59   //\r
60   //le\r
61  public:\r
62   //\r
63  AliLHCData() : fTMin(0),fTMax(1e10),fFillNumber(0),fData(0) {Clear();}\r
64   AliLHCData(const TMap* dcsMap, double tmin=0, double tmax=1.e10);\r
65   virtual ~AliLHCData() {}\r
66   //\r
67   Bool_t                FillData(const TMap* dcsMap, double tmin=0, double tmax=1.e20);\r
68   Double_t              GetTMin()                                    const {return fTMin;}\r
69   Double_t              GetTMax()                                    const {return fTMax;}\r
70   Int_t                 GetFillNumber()                              const {return fFillNumber;}\r
71   void                  SetFillNumber(Int_t fill)                          {fFillNumber = fill;}\r
72   void                  SetTMin(Double_t t)                                {fTMin = t<0?0:(t>1e10?1e10:t);}\r
73   void                  SetTMax(Double_t t)                                {fTMax = t<0?0:(t>1e10?1e10:t);}\r
74   virtual void          Print(const Option_t *opt="")                const;\r
75   virtual void          Clear(const Option_t *opt="");\r
76   //\r
77   Int_t GetNBunchConfigMeasured(int bm)           const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;}\r
78   Int_t GetNBunchConfigDeclared(int bm)           const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;}\r
79   Int_t GetNBunchLengths(int bm)                  const {return GoodPairID(bm)?fBunchLengths[bm][kNStor]:-1;}\r
80   Int_t GetNTotalIntensity(int bm)                const {return GoodPairID(bm)?fIntensTotal[bm][kNStor]:-1;}\r
81   Int_t GetNTotalIntensityAv(int bm)              const {return GoodPairID(bm)?fIntensTotalAv[bm][kNStor]:-1;}\r
82   Int_t GetNIntensityPerBunch(int bm)             const {return GoodPairID(bm)?fIntensPerBunch[bm][kNStor]:-1;}\r
83   Int_t GetNEmittanceH(int bm)                    const {return GoodPairID(bm)?fEmittanceH[bm][kNStor]:-1;}\r
84   Int_t GetNEmittanceV(int bm)                    const {return GoodPairID(bm)?fEmittanceV[bm][kNStor]:-1;}\r
85   Int_t GetNBeamSigmaH(int bm)                    const {return GoodPairID(bm)?fBeamSigmaH[bm][kNStor]:-1;}\r
86   Int_t GetNBeamSigmaV(int bm)                    const {return GoodPairID(bm)?fBeamSigmaV[bm][kNStor]:-1;}\r
87   //\r
88   Int_t GetNLuminosityTotal(int lr)               const {return GoodPairID(lr)?fLuminTotal[lr][kNStor]:-1;}\r
89   Int_t GetNLuminosityPerBunch(int lr)            const {return GoodPairID(lr)?fLuminPerBC[lr][kNStor]:-1;}\r
90   Int_t GetNLuminosityAcqMode(int lr)             const {return GoodPairID(lr)?fLuminAcqMode[lr][kNStor]:-1;}\r
91   Int_t GetNCrossingAngle(int lr)                 const {return GoodPairID(lr)?fCrossAngle[lr][kNStor]:-1;}\r
92   //\r
93   Int_t GetNInjectionScheme()                     const {return fRCInjScheme[kNStor];}\r
94   Int_t GetNRCBetaStar()                          const {return fRCBeta[kNStor];}\r
95   Int_t GetNRCAngleH()                            const {return fRCAngH[kNStor];}\r
96   Int_t GetNRCAngleV()                            const {return fRCAngV[kNStor];}\r
97   //\r
98   Int_t GetNCollimatorJawPos(int coll,int jaw)    const;\r
99   //\r
100   AliLHCDipValI* GetBunchConfigMeasured(int bm, int i=0)  const;\r
101   AliLHCDipValF* GetBunchLengths(int bm, int i=0)         const;\r
102   AliLHCDipValI* GetBunchConfigDeclared(int bm, int i=0)  const;\r
103   AliLHCDipValF* GetTotalIntensity(int bm, int i=0)       const;\r
104   AliLHCDipValF* GetTotalIntensityAv(int bm, int i=0)     const;\r
105   AliLHCDipValF* GetIntensityPerBunch(int bm, int i=0)    const;\r
106   AliLHCDipValF* GetEmittanceH(int bm, int i=0)           const;\r
107   AliLHCDipValF* GetEmittanceV(int bm, int i=0)           const;\r
108   AliLHCDipValF* GetBeamSigmaH(int bm, int i=0)           const;\r
109   AliLHCDipValF* GetBeamSigmaV(int bm, int i=0)           const;\r
110   AliLHCDipValF* GetLuminosityTotal(int lr, int i=0)      const;\r
111   AliLHCDipValF* GetLuminosityPerBunch(int lr, int i=0)   const;\r
112   AliLHCDipValI* GetLuminosityAcqMode(int lr, int i=0)    const;\r
113   AliLHCDipValF* GetCrossAngle(int lr, int i=0)           const;\r
114   AliLHCDipValC* GetInjectionScheme(int i=0)              const;\r
115   AliLHCDipValF* GetRCBetaStar(int i=0)                   const;\r
116   AliLHCDipValF* GetRCAngleH(int i=0)                     const; \r
117   AliLHCDipValF* GetRCAngleV(int i=0)                     const; \r
118   AliLHCDipValF* GetCollimJawPos(int coll, int jaw, int i=0) const;\r
119   //\r
120   TObject*       FindRecValidFor(int start,int nrec, double tstamp) const;\r
121   AliLHCDipValI* GetBunchConfigMeasured(int beam,double tstamp)  const;\r
122   AliLHCDipValI* GetBunchConfigDeclared(int beam,double tstamp)  const;\r
123   Int_t          GetNInteractingBunchesMeasured(int i=0)         const;\r
124   Int_t          GetNInteractingBunchesDeclared(int i=0)         const;\r
125   Int_t          IsPilotPresent(int i=0)                         const;\r
126   //\r
127   // return array with beginning [0] and number of records for corresponding info (in the fData)\r
128   const Int_t* GetOffsBunchConfigMeasured(int bm)         const {return GoodPairID(bm)?fBunchConfMeas[bm]:0;}\r
129   const Int_t* GetOffsBunchConfigDeclared(int bm)         const {return GoodPairID(bm)?fBunchConfDecl[bm]:0;}\r
130   const Int_t* GetOffsBunchLengths(int bm)                const {return GoodPairID(bm)?fBunchLengths[bm]:0;}\r
131   const Int_t* GetOffsTotalIntensity(int bm)              const {return GoodPairID(bm)?fIntensTotal[bm]:0;}\r
132   const Int_t* GetOffsTotalIntensityAv(int bm)            const {return GoodPairID(bm)?fIntensTotalAv[bm]:0;}\r
133   const Int_t* GetOffsIntensityPerBunch(int bm)           const {return GoodPairID(bm)?fIntensPerBunch[bm]:0;}\r
134   const Int_t* GetOffsEmittanceH(int bm)                  const {return GoodPairID(bm)?fEmittanceH[bm]:0;}\r
135   const Int_t* GetOffsEmittanceV(int bm)                  const {return GoodPairID(bm)?fEmittanceV[bm]:0;}\r
136   const Int_t* GetOffsBeamSigmaH(int bm)                  const {return GoodPairID(bm)?fBeamSigmaH[bm]:0;}\r
137   const Int_t* GetOffsBeamSigmaV(int bm)                  const {return GoodPairID(bm)?fBeamSigmaV[bm]:0;}\r
138   //\r
139   const Int_t* GetOffsLuminosityTotal(int lr)             const {return GoodPairID(lr)?fLuminTotal[lr]:0;}\r
140   const Int_t* GetOffsLuminosityPerBunch(int lr)          const {return GoodPairID(lr)?fLuminPerBC[lr]:0;}\r
141   const Int_t* GetOffsLuminosityAcqMode(int lr)           const {return GoodPairID(lr)?fLuminAcqMode[lr]:0;}\r
142   const Int_t* GetOffsCrossingAngle(int lr)               const {return GoodPairID(lr)?fCrossAngle[lr]:0;}\r
143   //\r
144   const Int_t* GetOffsInjectionScheme()                   const {return fRCInjScheme;}\r
145   const Int_t* GetOffsRCBetaStar()                        const {return fRCBeta;}\r
146   const Int_t* GetOffsRCAngleH()                          const {return fRCAngH;}\r
147   const Int_t* GetOffsRCAngleV()                          const {return fRCAngV;}\r
148   //\r
149   const Int_t* GetOffsCollimatorJawPos(int coll,int jaw)  const;\r
150   //\r
151   const TObjArray&  GetData()                             const {return fData;}\r
152   //\r
153  protected:\r
154   //\r
155   void                  PrintAux(Bool_t full,const Int_t refs[2]) const;\r
156   TObjArray*            GetDCSEntry(const TMap* dcsMap,const char* key,int &entry,double tmin,double tmax) const;\r
157   Int_t                 FillScalarRecord(  const TMap* dcsMap, int refs[2], const char* rec, const char* recErr=0);\r
158   Int_t                 FillBunchConfig(   const TMap* dcsMap, int refs[2], const char* rec);\r
159   Int_t                 FillStringRecord(  const TMap* dcsMap, int refs[2], const char* rec);\r
160   Int_t                 FillAcqMode(       const TMap* dcsMap, int refs[2], const char* rec);\r
161   Int_t                 FillBunchInfo(     const TMap* dcsMap, int refs[2], const char* rec,int ibm, Bool_t inRealSlots);\r
162   Int_t                 FillBCLuminosities(const TMap* dcsMap, int refs[2], const char* rec, const char* recErr, Bool_t opt);\r
163   //\r
164   Int_t                 ExtractInt(AliDCSArray* dcsArray,Int_t el)    const;\r
165   Double_t              ExtractDouble(AliDCSArray* dcsArray,Int_t el) const;\r
166   TString&              ExtractString(AliDCSArray* dcsArray)          const;\r
167  AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0) { /*dummy*/ }\r
168   AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;}\r
169   Int_t                 TimeDifference(double v1,double v2,double tol=0.9) const;\r
170   Bool_t                IzZero(double val, double tol=1e-16)         const {return TMath::Abs(val)<tol;}\r
171   Bool_t                GoodPairID(int beam)                         const;\r
172   //\r
173  protected:\r
174   //\r
175   Double_t        fTMin;                              // selection timeMin\r
176   Double_t        fTMax;                              // selection timeMax\r
177   Int_t           fFillNumber;                        // fill number           : kFillNum\r
178   //\r
179   //---------------- Last index gives: 0 - beginning of the records in fData, 1 - number of records\r
180   //\r
181   //              infrormation from RunControl\r
182   Int_t           fRCInjScheme[2];                    // active injection scheme                       : String |kRCInjScheme\r
183   Int_t           fRCBeta[2];                         // target beta                                   : Float  |kRCBeta\r
184   Int_t           fRCAngH[2];                         // horisontal angle                              : Float  |kRCCrossAng\r
185   Int_t           fRCAngV[2];                         // vertical angle                                : Float  |kRCVang\r
186   Int_t           fBunchConfDecl[2][2];               // declared beam configuration                   : Float  |kBunchConf                \r
187   //\r
188   //              measured information\r
189   Int_t           fBunchConfMeas[2][2];               // measured beam configuration                   : Int    |kBunchLgtFillB\r
190   Int_t           fBunchLengths[2][2];                // measured beam lenghts                         : Float  |kBunchLgt\r
191   Int_t           fIntensTotal[2][2];                 // total beam intensities                        : Float  |kIntTot\r
192   Int_t           fIntensTotalAv[2][2];               // total beam intensities from bunch averages    : Float  |kIntTotAv\r
193   Int_t           fIntensPerBunch[2][2];              // bunch-by-bunch intensities                    : Float  |kIntBunchAv\r
194   //\r
195   Int_t           fCrossAngle[2][2];                  // crossing angle   at IP2 and its error         : Float  |kLimCrossAng, kLumCrossAngErr\r
196   Int_t           fEmittanceH[2][2];                  // beam H emittances                             : Float  |kBeamSzEmittH\r
197   Int_t           fEmittanceV[2][2];                  // beam V emittances                             : Float  |kBeamSzEmittV\r
198   Int_t           fBeamSigmaH[2][2];                  // beam H sigma and error                        : Float  |kBeamSzSigH,kBeamSzSigHErr\r
199   Int_t           fBeamSigmaV[2][2];                  // beam V sigma and error                        : Float  |kBeamSzSigV,kBeamSzSigVErr\r
200   //\r
201   Int_t           fLuminTotal[2][2];                  // total luminosity at IP2 and its error         : Float  |kLumTot, kLumTotErr\r
202   Int_t           fLuminPerBC[2][2];                  // luminosity at IP2 for each BC and its error   : Float  |kLumBunch,kLumBunchErr\r
203   Int_t           fLuminAcqMode[2][2];                // luminosity acquisition mode                   : Int    | kLumAcqMode\r
204   //\r
205   Int_t           fCollimators[kNCollimators][kNJaws][2];// collimator jaws positions                  : Float  |kCollPos\r
206   //\r
207   TObjArray       fData;                              // single storage for various records\r
208   //\r
209   static const Char_t *fgkDCSNames[];                 // beam related DCS names to extract\r
210   static const Char_t *fgkDCSColNames[];              // collimators to extract\r
211   static const Char_t *fgkDCSColJaws[];               // names of collimator pieces\r
212 \r
213   ClassDef(AliLHCData,1)\r
214 };\r
215 \r
216 \r
217 //_____________________________________________________________________________\r
218 inline Int_t AliLHCData::GetNCollimatorJawPos(int coll,int jaw) const {// get n records\r
219   return (coll>=0&&coll<kNCollimators&&jaw>=0&&jaw<kNJaws)? fCollimators[coll][jaw][kNStor]:0;\r
220 }\r
221 \r
222 inline const Int_t* AliLHCData::GetOffsCollimatorJawPos(int coll,int jaw)  const { // offset array\r
223   return (coll>=0&&coll<kNCollimators&&jaw>=0&&jaw<kNJaws)? fCollimators[coll][jaw]:0;\r
224 }\r
225 \r
226 inline AliLHCDipValI* AliLHCData::GetBunchConfigMeasured(int bm, int i) const { // get record\r
227   return (GoodPairID(bm) && i>=0 && i<fBunchConfMeas[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfMeas[bm][kStart+i]]:0;\r
228 }\r
229 \r
230 inline AliLHCDipValF* AliLHCData::GetBunchLengths(int bm, int i) const { // get record\r
231   return (GoodPairID(bm) && i>=0 && i<fBunchLengths[bm][kNStor]) ? (AliLHCDipValF*)fData[fBunchLengths[bm][kStart+i]]:0;\r
232 }\r
233 \r
234 inline AliLHCDipValI* AliLHCData::GetBunchConfigDeclared(int bm, int i) const { // get record\r
235   return (GoodPairID(bm) && i>=0 && i<fBunchConfDecl[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfDecl[bm][kStart+i]]:0;\r
236 }\r
237 \r
238 inline AliLHCDipValF* AliLHCData::GetTotalIntensity(int bm, int i) const { // get record\r
239   return (GoodPairID(bm) && i>=0 && i<fIntensTotal[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotal[bm][kStart+i]]:0;\r
240 }\r
241 \r
242 inline AliLHCDipValF* AliLHCData::GetTotalIntensityAv(int bm, int i) const { // get record\r
243   return (GoodPairID(bm) && i>=0 && i<fIntensTotalAv[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotalAv[bm][kStart+i]]:0;\r
244 }\r
245 \r
246 inline AliLHCDipValF* AliLHCData::GetIntensityPerBunch(int bm, int i) const { // get record\r
247   return (GoodPairID(bm) && i>=0 && i<fIntensPerBunch[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensPerBunch[bm][kStart+i]]:0;\r
248 }\r
249 \r
250 inline AliLHCDipValF* AliLHCData::GetEmittanceH(int bm, int i) const { // get record\r
251   return (GoodPairID(bm) && i>=0 && i<fEmittanceH[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceH[bm][kStart+i]]:0;\r
252 }\r
253 \r
254 inline AliLHCDipValF* AliLHCData::GetEmittanceV(int bm, int i) const { // get record\r
255   return (GoodPairID(bm) && i>=0 && i<fEmittanceV[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceV[bm][kStart+i]]:0;\r
256 }\r
257 \r
258 inline AliLHCDipValF* AliLHCData::GetBeamSigmaH(int bm, int i) const { // get record\r
259   return (GoodPairID(bm) && i>=0 && i<fBeamSigmaH[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaH[bm][kStart+i]]:0;\r
260 }\r
261 \r
262 inline AliLHCDipValF* AliLHCData::GetBeamSigmaV(int bm, int i) const { // get record\r
263   return (GoodPairID(bm) && i>=0 && i<fBeamSigmaV[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaV[bm][kStart+i]]:0;\r
264 }\r
265 \r
266 inline AliLHCDipValF* AliLHCData::GetLuminosityTotal(int lr, int i) const { // get record\r
267   return (GoodPairID(lr) && i>=0 && i<fLuminTotal[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminTotal[lr][kStart+i]]:0;\r
268 }\r
269 \r
270 inline AliLHCDipValF* AliLHCData::GetLuminosityPerBunch(int lr, int i) const { // get record\r
271   return (GoodPairID(lr) && i>=0 && i<fLuminPerBC[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminPerBC[lr][kStart+i]]:0;\r
272 }\r
273 \r
274 inline AliLHCDipValI* AliLHCData::GetLuminosityAcqMode(int lr, int i) const { // get record\r
275   return (GoodPairID(lr) && i>=0 && i<fLuminAcqMode[lr][kNStor]) ? (AliLHCDipValI*)fData[fLuminAcqMode[lr][kStart+i]]:0;\r
276 }\r
277 \r
278 inline AliLHCDipValF* AliLHCData::GetCrossAngle(int lr, int i) const { // get record\r
279   return (GoodPairID(lr) && i>=0 && i<fCrossAngle[lr][kNStor]) ? (AliLHCDipValF*)fData[fCrossAngle[lr][kStart+i]]:0;\r
280 }\r
281 \r
282 inline AliLHCDipValC* AliLHCData::GetInjectionScheme(int i) const { // get record\r
283   return (i>=0 && i<fRCInjScheme[kNStor]) ? (AliLHCDipValC*)fData[fRCInjScheme[kStart+i]]:0;\r
284 }\r
285 \r
286 inline AliLHCDipValF* AliLHCData::GetRCBetaStar(int i) const { // get record\r
287   return (i>=0 && i<fRCBeta[kNStor]) ? (AliLHCDipValF*)fData[fRCBeta[kStart+i]]:0;\r
288 }\r
289 \r
290 inline AliLHCDipValF* AliLHCData::GetRCAngleH(int i) const { // get record\r
291   return (i>=0 && i<fRCAngH[kNStor]) ? (AliLHCDipValF*)fData[fRCAngH[kStart+i]]:0;\r
292 }\r
293 \r
294 inline AliLHCDipValF* AliLHCData::GetRCAngleV(int i) const { // get record\r
295   return (i>=0 && i<fRCAngV[kNStor]) ? (AliLHCDipValF*)fData[fRCAngV[kStart+i]]:0;\r
296 }\r
297 \r
298 inline AliLHCDipValF* AliLHCData::GetCollimJawPos(int coll, int jaw, int i) const { // get record\r
299   return (coll>=0 && coll<kNCollimators && jaw>=0 && jaw<kNJaws && \r
300           i>=0 && i<fCollimators[coll][jaw][kNStor]) ? (AliLHCDipValF*)fData[fCollimators[coll][jaw][kStart+i]]:0;\r
301 }\r
302 \r
303 \r
304 #endif\r