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