--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+//-------------------------------------------------------------------------
+// Container class for AOD VZERO data
+// Author: Cvetan Cheshkov
+// cvetan.cheshkov@cern.ch 2/02/2011
+//-------------------------------------------------------------------------
+
+#include "AliAODVZERO.h"
+#include "AliLog.h"
+
+ClassImp(AliAODVZERO)
+
+//__________________________________________________________________________
+AliAODVZERO::AliAODVZERO()
+ :AliVVZERO(),
+ fBBtriggerV0A(0),
+ fBGtriggerV0A(0),
+ fBBtriggerV0C(0),
+ fBGtriggerV0C(0),
+ fV0ATime(-1024),
+ fV0CTime(-1024),
+ fV0ADecision(kV0Invalid),
+ fV0CDecision(kV0Invalid)
+{
+ // Default constructor
+ for(Int_t j=0; j<64; j++){
+ fMultiplicity[j] = 0.0;
+ fBBFlag[j]= kFALSE;
+ fBGFlag[j]= kFALSE;
+ }
+}
+
+//__________________________________________________________________________
+AliAODVZERO::AliAODVZERO(const AliAODVZERO &source)
+ :AliVVZERO(source),
+ fBBtriggerV0A(source.fBBtriggerV0A),
+ fBGtriggerV0A(source.fBGtriggerV0A),
+ fBBtriggerV0C(source.fBBtriggerV0C),
+ fBGtriggerV0C(source.fBGtriggerV0C),
+ fV0ATime(source.fV0ATime),
+ fV0CTime(source.fV0CTime),
+ fV0ADecision(source.fV0ADecision),
+ fV0CDecision(source.fV0CDecision)
+{
+ // Default constructor
+ for(Int_t j=0; j<64; j++) {
+ fMultiplicity[j] = source.fMultiplicity[j];
+ fBBFlag[j] = source.fBBFlag[j];
+ fBGFlag[j] = source.fBGFlag[j];
+ }
+}
+
+//__________________________________________________________________________
+AliAODVZERO::AliAODVZERO(const AliVVZERO &source)
+ :AliVVZERO(source),
+ fBBtriggerV0A(0),
+ fBGtriggerV0A(0),
+ fBBtriggerV0C(0),
+ fBGtriggerV0C(0),
+ fV0ATime(source.GetV0ATime()),
+ fV0CTime(source.GetV0CTime()),
+ fV0ADecision(source.GetV0ADecision()),
+ fV0CDecision(source.GetV0CDecision())
+{
+ // Default constructor
+ for(Int_t j=0; j<64; j++) {
+ fMultiplicity[j] = source.GetMultiplicity(j);
+ fBBFlag[j] = source.GetBBFlag(j);
+ fBGFlag[j] = source.GetBGFlag(j);
+ }
+
+ for(Int_t j=0; j<32; j++) {
+ if (source.BBTriggerV0A(j)) fBBtriggerV0A |= (1 << j);
+ if (source.BGTriggerV0A(j)) fBGtriggerV0A |= (1 << j);
+ if (source.BBTriggerV0C(j)) fBBtriggerV0C |= (1 << j);
+ if (source.BGTriggerV0C(j)) fBGtriggerV0C |= (1 << j);
+ }
+}
+
+//__________________________________________________________________________
+AliAODVZERO& AliAODVZERO::operator=(const AliAODVZERO& source)
+{
+ // Assignment operator
+ //
+ if(this==&source) return *this;
+ AliVVZERO::operator=(source);
+ // Assignment operator
+ fBBtriggerV0A=source.fBBtriggerV0A;
+ fBGtriggerV0A=source.fBGtriggerV0A;
+ fBBtriggerV0C=source.fBBtriggerV0C;
+ fBGtriggerV0C=source.fBGtriggerV0C;
+
+ fV0ATime = source.fV0ATime;
+ fV0CTime = source.fV0CTime;
+ fV0ADecision = source.fV0ADecision;
+ fV0CDecision = source.fV0CDecision;
+
+ for(Int_t j=0; j<64; j++) {
+ fMultiplicity[j] = source.fMultiplicity[j];
+ fBBFlag[j] = source.fBBFlag[j];
+ fBGFlag[j] = source.fBGFlag[j];
+ }
+ return *this;
+}
+
+//__________________________________________________________________________
+Short_t AliAODVZERO::GetNbPMV0A() const
+{
+ // Returns the number of
+ // fired PM in V0A
+ Short_t n=0;
+ for(Int_t i=32;i<64;i++)
+ if (fMultiplicity[i]>0) n++;
+ return n;
+}
+
+//__________________________________________________________________________
+Short_t AliAODVZERO::GetNbPMV0C() const
+{
+ // Returns the number of
+ // fired PM in V0C
+ Short_t n=0;
+ for(Int_t i=0;i<32;i++)
+ if (fMultiplicity[i]>0) n++;
+ return n;
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMTotV0A() const
+{
+ // returns total multiplicity
+ // in V0A
+ Float_t mul=0.0;
+ for(Int_t i=32;i<64;i++)
+ mul+= fMultiplicity[i];
+ return mul;
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMTotV0C() const
+{
+ // returns total multiplicity
+ // in V0C
+ Float_t mul=0.0;
+ for(Int_t i=0;i<32;i++)
+ mul+= fMultiplicity[i];
+ return mul;
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMRingV0A(Int_t ring) const
+{
+ // returns multiplicity in a
+ // given ring of V0A
+ if (OutOfRange(ring, "AliAODVZERO:::GetMRingV0A",4)) return -1;
+ Float_t mul =0.0;
+
+ if (ring == 0) for(Int_t i=32;i<40;i++) mul += fMultiplicity[i];
+ if (ring == 1) for(Int_t i=40;i<48;i++) mul += fMultiplicity[i];
+ if (ring == 2) for(Int_t i=48;i<56;i++) mul += fMultiplicity[i];
+ if (ring == 3) for(Int_t i=56;i<64;i++) mul += fMultiplicity[i];
+ return mul ;
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMRingV0C(Int_t ring) const
+{
+ // returns multiplicity in a
+ // given ring of V0C
+ if (OutOfRange(ring, "AliAODVZERO:::GetMRingV0C",4)) return -1;
+ Float_t mul =0.0;
+
+ if (ring == 0) for(Int_t i=0;i<8;i++) mul += fMultiplicity[i];
+ if (ring == 1) for(Int_t i=8;i<16;i++) mul += fMultiplicity[i];
+ if (ring == 2) for(Int_t i=16;i<24;i++) mul += fMultiplicity[i];
+ if (ring == 3) for(Int_t i=24;i<32;i++) mul += fMultiplicity[i];
+ return mul ;
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMultiplicity(Int_t i) const
+
+{
+ // returns multiplicity in a
+ // given cell of V0
+ if (OutOfRange(i, "AliAODVZERO::GetMultiplicity:",64)) return -1;
+ return fMultiplicity[i];
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMultiplicityV0A(Int_t i) const
+
+{
+ // returns multiplicity in a
+ // given cell of V0A
+ if (OutOfRange(i, "AliAODVZERO::GetMultiplicityV0A:",32)) return -1;
+ return fMultiplicity[32+i];
+}
+
+//__________________________________________________________________________
+Float_t AliAODVZERO::GetMultiplicityV0C(Int_t i) const
+
+{
+ // returns multiplicity in a
+ // given cell of V0C
+ if (OutOfRange(i, "AliAODVZERO::GetMultiplicityV0C:",32)) return -1;
+ return fMultiplicity[i];
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::BBTriggerV0A(Int_t i) const
+{
+ // returns offline beam-beam flags in V0A
+ // one bit per cell
+ if (OutOfRange(i, "AliAODVZERO:::BBTriggerV0A",32)) return kFALSE;
+ UInt_t test = 1;
+ return ( fBBtriggerV0A & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::BGTriggerV0A(Int_t i) const
+{
+ // returns offline beam-gas flags in V0A
+ // one bit per cell
+ if (OutOfRange(i, "AliAODVZERO:::BGTriggerV0A",32)) return kFALSE;
+ UInt_t test = 1;
+ return ( fBGtriggerV0A & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::BBTriggerV0C(Int_t i) const
+{
+ // returns offline beam-beam flags in V0C
+ // one bit per cell
+ if (OutOfRange(i, "AliAODVZERO:::BBTriggerV0C",32)) return kFALSE;
+ UInt_t test = 1;
+ return ( fBBtriggerV0C & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::BGTriggerV0C(Int_t i) const
+{
+ // returns offline beam-gasflags in V0C
+ // one bit per cell
+ if (OutOfRange(i, "AliAODVZERO:::BGTriggerV0C",32)) return kFALSE;
+ UInt_t test = 1;
+ return ( fBGtriggerV0C & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::GetBBFlag(Int_t i) const
+
+{
+ // returns online beam-beam flag in V0
+ // one boolean per cell
+ if (OutOfRange(i, "AliAODVZERO::GetBBFlag:",64)) return kFALSE;
+ return fBBFlag[i];
+}
+
+//__________________________________________________________________________
+Bool_t AliAODVZERO::GetBGFlag(Int_t i) const
+
+{
+ // returns online beam-gas flag in V0
+ // one boolean per cell
+ if (OutOfRange(i, "AliAODVZERO::GetBGFlag:",64)) return kFALSE;
+ return fBGFlag[i];
+}
--- /dev/null
+#ifndef ALIAODVZERO_H
+#define ALIAODVZERO_H
+
+//-------------------------------------------------------------------------
+// Container class for AOD VZERO data
+// Author: Cvetan Cheshkov
+// cvetan.cheshkov@cern.ch 2/02/2011
+//-------------------------------------------------------------------------
+
+#include "AliVVZERO.h"
+
+class AliAODVZERO : public AliVVZERO
+{
+public:
+ AliAODVZERO();
+ AliAODVZERO(const AliAODVZERO& source);
+ AliAODVZERO(const AliVVZERO& source);
+ AliAODVZERO &operator=(const AliAODVZERO& source);
+
+ virtual ~AliAODVZERO() {};
+
+ void SetMultiplicity(Float_t Multiplicity[64])
+ {for(Int_t i=0;i<64;i++) fMultiplicity[i]=Multiplicity[i];}
+
+ // Getters
+ virtual Short_t GetNbPMV0A() const;
+ virtual Short_t GetNbPMV0C() const;
+ virtual Float_t GetMTotV0A() const;
+ virtual Float_t GetMTotV0C() const;
+ virtual Float_t GetMRingV0A(Int_t ring) const;
+ virtual Float_t GetMRingV0C(Int_t ring) const;
+
+ virtual Float_t GetMultiplicity(Int_t i) const;
+ virtual Float_t GetMultiplicityV0A(Int_t i) const;
+ virtual Float_t GetMultiplicityV0C(Int_t i) const;
+
+ virtual Bool_t BBTriggerV0A(Int_t i) const;
+ virtual Bool_t BGTriggerV0A(Int_t i) const;
+ virtual Bool_t BBTriggerV0C(Int_t i) const;
+ virtual Bool_t BGTriggerV0C(Int_t i) const;
+ virtual Bool_t GetBBFlag(Int_t i) const;
+ virtual Bool_t GetBGFlag(Int_t i) const;
+
+ virtual Float_t GetV0ATime() const { return fV0ATime; }
+ virtual Float_t GetV0CTime() const { return fV0CTime; }
+
+ virtual Decision GetV0ADecision() const { return fV0ADecision; }
+ virtual Decision GetV0CDecision() const { return fV0CDecision; }
+
+protected:
+
+ UInt_t fBBtriggerV0A; // bit mask for Beam-Beam trigger in V0A
+ UInt_t fBGtriggerV0A; // bit mask for Beam-Gas trigger in V0A
+ UInt_t fBBtriggerV0C; // bit mask for Beam-Beam trigger in V0C
+ UInt_t fBGtriggerV0C; // bit mask for Beam-Gas trigger in V0C
+
+ Float_t fMultiplicity[64]; // multiplicity for each channel
+
+ Bool_t fBBFlag[64]; // BB Flags from Online V0 Electronics
+ Bool_t fBGFlag[64]; // BG Flags from Online V0 Electronics
+
+ Float_t fV0ATime; // Average time in V0A
+ Float_t fV0CTime; // Average time in V0C
+
+ Decision fV0ADecision; // V0A final decision based on average time of channels
+ Decision fV0CDecision; // V0C final decision based on average time of channels
+
+ ClassDef(AliAODVZERO,1)
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+//-------------------------------------------------------------------------
+// Base class for ESD and AOD VZERO data
+// Author: Cvetan Cheshkov
+// cvetan.cheshkov@cern.ch 2/02/2011
+//-------------------------------------------------------------------------
+
+#include "AliVVZERO.h"
+#include "AliLog.h"
+
+ClassImp(AliVVZERO)
+
+//__________________________________________________________________________
+AliVVZERO::AliVVZERO(const AliVVZERO& source) :
+ TObject(source) { } // Copy constructor
+
+//__________________________________________________________________________
+AliVVZERO& AliVVZERO::operator=(const AliVVZERO& source)
+{
+ // Assignment operator
+ //
+ if (this!=&source) {
+ TObject::operator=(source);
+ }
+
+ return *this;
+}
+
+//__________________________________________________________________________
+Bool_t AliVVZERO::OutOfRange(Int_t i, const char* s, Int_t upper) const
+{
+ // checks if i is a valid index.
+ // s = name of calling method
+ if (i > upper || i < 0) {
+ AliInfo(Form("%s: Index %d out of range",s,i));
+ return kTRUE;
+ }
+ return kFALSE;
+}
--- /dev/null
+#ifndef ALIVVZERO_H
+#define ALIVVZERO_H
+
+//-------------------------------------------------------------------------
+// Base class for ESD and AOD VZERO data
+// Author: Cvetan Cheshkov
+// cvetan.cheshkov@cern.ch 2/02/2011
+//-------------------------------------------------------------------------
+
+#include "TObject.h"
+
+class AliVVZERO : public TObject
+{
+public:
+ AliVVZERO() { }
+ AliVVZERO(const AliVVZERO& source);
+ AliVVZERO &operator=(const AliVVZERO& source);
+
+ virtual ~AliVVZERO() { }
+
+ enum {
+ kCorrectedLeadingTime = BIT(14),
+ kTriggerBitsFilled = BIT(15),
+ kDecisionFilled = BIT(16),
+ kOnlineBitsFilled = BIT(17),
+ kCorrectedForSaturation = BIT(18)
+ };
+ enum Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG, kV0Fake };
+
+ virtual Short_t GetNbPMV0A() const = 0;
+ virtual Short_t GetNbPMV0C() const = 0;
+ virtual Float_t GetMTotV0A() const = 0;
+ virtual Float_t GetMTotV0C() const = 0;
+ virtual Float_t GetMRingV0A(Int_t ring) const = 0;
+ virtual Float_t GetMRingV0C(Int_t ring) const = 0;
+
+ virtual Float_t GetMultiplicity(Int_t i) const = 0;
+ virtual Float_t GetMultiplicityV0A(Int_t i) const = 0;
+ virtual Float_t GetMultiplicityV0C(Int_t i) const = 0;
+
+ virtual Bool_t BBTriggerV0A(Int_t i) const = 0;
+ virtual Bool_t BGTriggerV0A(Int_t i) const = 0;
+ virtual Bool_t BBTriggerV0C(Int_t i) const = 0;
+ virtual Bool_t BGTriggerV0C(Int_t i) const = 0;
+ virtual Bool_t GetBBFlag(Int_t i) const = 0;
+ virtual Bool_t GetBGFlag(Int_t i) const = 0;
+
+ virtual Float_t GetV0ATime() const = 0;
+ virtual Float_t GetV0CTime() const = 0;
+
+ virtual Decision GetV0ADecision() const = 0;
+ virtual Decision GetV0CDecision() const = 0;
+
+ Bool_t OutOfRange(Int_t i, const char *s, Int_t upper) const;
+
+ ClassDef(AliVVZERO,1)
+};
+
+#endif