class AliDCSArray;\r
class TString;\r
class TMap;\r
+class AliLHCReader;\r
\r
\r
class AliLHCData : public TObject\r
enum Collim_t {kTCTVB4L2, kTCTVB4R2, kTCLIA4R2, kNCollimators};\r
enum ColJaw_t {kGapDn,kGapUp,kLeftDn,kLeftUp,kRightDn,kRightUp,kNJaws};\r
enum {kMaxBSlots = 3564};\r
+ enum {kMarginSOR = 60*60*24*30, // use margin of 30 days for SOR, when looking for the 1st record\r
+ kMarginEOR = 60*15}; // use margin of 15 min for EOR, when looking for the last record\r
//\r
enum {kIntTot,kIntTotAv,kIntBunchAv,\r
kLumAcqMode,kLumTot,kLumTotErr,kLumBunch,kLumBunchErr,kLumCrossAng,kLumCrossAngErr,\r
//le\r
public:\r
//\r
- AliLHCData() : fTMin(0),fTMax(1e10),fFillNumber(0),fData(0) {Clear();}\r
- AliLHCData(const TMap* dcsMap, double tmin=0, double tmax=1.e10);\r
+ AliLHCData() : fTMin(0),fTMax(1e10),fFillNumber(0),fData(0),fFile2Process(0),fMap2Process(0) {Clear();}\r
+ AliLHCData(const TMap* dcsMap, double tmin=0, double tmax=1.e10);\r
+ AliLHCData(const Char_t* dcsFile, double tmin=0, double tmax=1.e10);\r
virtual ~AliLHCData() {}\r
//\r
- Bool_t FillData(const TMap* dcsMap, double tmin=0, double tmax=1.e20);\r
+ Bool_t FillData(const TMap* dcsMap, double tmin=0, double tmax=1.e20);\r
+ Bool_t FillData(const Char_t* dcsFile, double tmin=0, double tmax=1.e20);\r
Double_t GetTMin() const {return fTMin;}\r
Double_t GetTMax() const {return fTMax;}\r
Int_t GetFillNumber() const {return fFillNumber;}\r
void SetFillNumber(Int_t fill) {fFillNumber = fill;}\r
void SetTMin(Double_t t) {fTMin = t<0?0:(t>1e10?1e10:t);}\r
void SetTMax(Double_t t) {fTMax = t<0?0:(t>1e10?1e10:t);}\r
+ //\r
virtual void Print(const Option_t *opt="") const;\r
- virtual void Clear(const Option_t *opt="");\r
//\r
Int_t GetNBunchConfigMeasured(int bm) const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;}\r
Int_t GetNBunchConfigDeclared(int bm) const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;}\r
AliLHCDipValF* GetRCAngleV(int i=0) const; \r
AliLHCDipValF* GetCollimJawPos(int coll, int jaw, int i=0) const;\r
//\r
+ void FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2]);\r
TObject* FindRecValidFor(int start,int nrec, double tstamp) const;\r
AliLHCDipValI* GetBunchConfigMeasured(int beam,double tstamp) const;\r
AliLHCDipValI* GetBunchConfigDeclared(int beam,double tstamp) const;\r
//\r
const TObjArray& GetData() const {return fData;}\r
//\r
+ // analysis methods\r
+ Int_t GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding) const;\r
+ //\r
protected:\r
//\r
- void PrintAux(Bool_t full,const Int_t refs[2]) const;\r
- TObjArray* GetDCSEntry(const TMap* dcsMap,const char* key,int &entry,double tmin,double tmax) const;\r
- Int_t FillScalarRecord( const TMap* dcsMap, int refs[2], const char* rec, const char* recErr=0);\r
- Int_t FillBunchConfig( const TMap* dcsMap, int refs[2], const char* rec);\r
- Int_t FillStringRecord( const TMap* dcsMap, int refs[2], const char* rec);\r
- Int_t FillAcqMode( const TMap* dcsMap, int refs[2], const char* rec);\r
- Int_t FillBunchInfo( const TMap* dcsMap, int refs[2], const char* rec,int ibm, Bool_t inRealSlots);\r
- Int_t FillBCLuminosities(const TMap* dcsMap, int refs[2], const char* rec, const char* recErr, Bool_t opt);\r
+ Bool_t FillData(double tmin=0, double tmax=1.e20);\r
+ virtual void Clear(const Option_t *opt="");\r
+ void PrintAux(Bool_t full,const Int_t refs[2],const Option_t *opt="") const;\r
+ TObjArray* GetDCSEntry(const char* key,int &entry,int &last,double tmin,double tmax) const;\r
+ Int_t FillScalarRecord( int refs[2], const char* rec, const char* recErr=0);\r
+ Int_t FillBunchConfig( int refs[2], const char* rec);\r
+ Int_t FillStringRecord( int refs[2], const char* rec);\r
+ Int_t FillAcqMode( int refs[2], const char* rec);\r
+ Int_t FillBunchInfo( int refs[2], const char* rec,int ibm, Bool_t inRealSlots);\r
+ Int_t FillBCLuminosities(int refs[2], const char* rec, const char* recErr, Int_t useBeam);\r
//\r
Int_t ExtractInt(AliDCSArray* dcsArray,Int_t el) const;\r
Double_t ExtractDouble(AliDCSArray* dcsArray,Int_t el) const;\r
TString& ExtractString(AliDCSArray* dcsArray) const;\r
- AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0) { /*dummy*/ }\r
+ AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0),fFile2Process(0),fMap2Process(0) { /*dummy*/ }\r
AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;}\r
Int_t TimeDifference(double v1,double v2,double tol=0.9) const;\r
Bool_t IzZero(double val, double tol=1e-16) const {return TMath::Abs(val)<tol;}\r
static const Char_t *fgkDCSNames[]; // beam related DCS names to extract\r
static const Char_t *fgkDCSColNames[]; // collimators to extract\r
static const Char_t *fgkDCSColJaws[]; // names of collimator pieces\r
+ //\r
+ private:\r
+ // non-persistent objects used at the filling time\r
+ const Char_t* fFile2Process; //! name of DCS file\r
+ const TMap* fMap2Process; //! DCS map to process \r
\r
ClassDef(AliLHCData,1)\r
};\r
}\r
\r
inline AliLHCDipValI* AliLHCData::GetBunchConfigMeasured(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fBunchConfMeas[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfMeas[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fBunchConfMeas[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfMeas[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetBunchLengths(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fBunchLengths[bm][kNStor]) ? (AliLHCDipValF*)fData[fBunchLengths[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fBunchLengths[bm][kNStor]) ? (AliLHCDipValF*)fData[fBunchLengths[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValI* AliLHCData::GetBunchConfigDeclared(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fBunchConfDecl[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfDecl[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fBunchConfDecl[bm][kNStor]) ? (AliLHCDipValI*)fData[fBunchConfDecl[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetTotalIntensity(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fIntensTotal[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotal[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fIntensTotal[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotal[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetTotalIntensityAv(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fIntensTotalAv[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotalAv[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fIntensTotalAv[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensTotalAv[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetIntensityPerBunch(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fIntensPerBunch[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensPerBunch[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fIntensPerBunch[bm][kNStor]) ? (AliLHCDipValF*)fData[fIntensPerBunch[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetEmittanceH(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fEmittanceH[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceH[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fEmittanceH[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceH[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetEmittanceV(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fEmittanceV[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceV[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fEmittanceV[bm][kNStor]) ? (AliLHCDipValF*)fData[fEmittanceV[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetBeamSigmaH(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fBeamSigmaH[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaH[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fBeamSigmaH[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaH[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetBeamSigmaV(int bm, int i) const { // get record\r
- return (GoodPairID(bm) && i>=0 && i<fBeamSigmaV[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaV[bm][kStart+i]]:0;\r
+ return (GoodPairID(bm) && i>=0 && i<fBeamSigmaV[bm][kNStor]) ? (AliLHCDipValF*)fData[fBeamSigmaV[bm][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetLuminosityTotal(int lr, int i) const { // get record\r
- return (GoodPairID(lr) && i>=0 && i<fLuminTotal[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminTotal[lr][kStart+i]]:0;\r
+ return (GoodPairID(lr) && i>=0 && i<fLuminTotal[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminTotal[lr][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetLuminosityPerBunch(int lr, int i) const { // get record\r
- return (GoodPairID(lr) && i>=0 && i<fLuminPerBC[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminPerBC[lr][kStart+i]]:0;\r
+ return (GoodPairID(lr) && i>=0 && i<fLuminPerBC[lr][kNStor]) ? (AliLHCDipValF*)fData[fLuminPerBC[lr][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValI* AliLHCData::GetLuminosityAcqMode(int lr, int i) const { // get record\r
- return (GoodPairID(lr) && i>=0 && i<fLuminAcqMode[lr][kNStor]) ? (AliLHCDipValI*)fData[fLuminAcqMode[lr][kStart+i]]:0;\r
+ return (GoodPairID(lr) && i>=0 && i<fLuminAcqMode[lr][kNStor]) ? (AliLHCDipValI*)fData[fLuminAcqMode[lr][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetCrossAngle(int lr, int i) const { // get record\r
- return (GoodPairID(lr) && i>=0 && i<fCrossAngle[lr][kNStor]) ? (AliLHCDipValF*)fData[fCrossAngle[lr][kStart+i]]:0;\r
+ return (GoodPairID(lr) && i>=0 && i<fCrossAngle[lr][kNStor]) ? (AliLHCDipValF*)fData[fCrossAngle[lr][kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValC* AliLHCData::GetInjectionScheme(int i) const { // get record\r
- return (i>=0 && i<fRCInjScheme[kNStor]) ? (AliLHCDipValC*)fData[fRCInjScheme[kStart+i]]:0;\r
+ return (i>=0 && i<fRCInjScheme[kNStor]) ? (AliLHCDipValC*)fData[fRCInjScheme[kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetRCBetaStar(int i) const { // get record\r
- return (i>=0 && i<fRCBeta[kNStor]) ? (AliLHCDipValF*)fData[fRCBeta[kStart+i]]:0;\r
+ return (i>=0 && i<fRCBeta[kNStor]) ? (AliLHCDipValF*)fData[fRCBeta[kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetRCAngleH(int i) const { // get record\r
- return (i>=0 && i<fRCAngH[kNStor]) ? (AliLHCDipValF*)fData[fRCAngH[kStart+i]]:0;\r
+ return (i>=0 && i<fRCAngH[kNStor]) ? (AliLHCDipValF*)fData[fRCAngH[kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetRCAngleV(int i) const { // get record\r
- return (i>=0 && i<fRCAngV[kNStor]) ? (AliLHCDipValF*)fData[fRCAngV[kStart+i]]:0;\r
+ return (i>=0 && i<fRCAngV[kNStor]) ? (AliLHCDipValF*)fData[fRCAngV[kStart]+i]:0;\r
}\r
\r
inline AliLHCDipValF* AliLHCData::GetCollimJawPos(int coll, int jaw, int i) const { // get record\r
return (coll>=0 && coll<kNCollimators && jaw>=0 && jaw<kNJaws && \r
- i>=0 && i<fCollimators[coll][jaw][kNStor]) ? (AliLHCDipValF*)fData[fCollimators[coll][jaw][kStart+i]]:0;\r
+ i>=0 && i<fCollimators[coll][jaw][kNStor]) ? (AliLHCDipValF*)fData[fCollimators[coll][jaw][kStart]+i]:0;\r
}\r
\r
\r