]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
update for AD from M.Broz, see ALIROOT-5766
authorshahoian <ruben.shahoyan@cern.ch>
Thu, 29 Jan 2015 11:40:18 +0000 (12:40 +0100)
committershahoian <ruben.shahoyan@cern.ch>
Thu, 29 Jan 2015 11:40:18 +0000 (12:40 +0100)
STEER/ESD/AliESDAD.cxx
STEER/ESD/AliESDAD.h
STEER/ESD/AliESDADfriend.cxx [new file with mode: 0644]
STEER/ESD/AliESDADfriend.h [new file with mode: 0644]
STEER/ESD/CMakeLists.txt
STEER/ESD/ESDLinkDef.h
STEER/STEERBase/AliVAD.cxx [new file with mode: 0644]
STEER/STEERBase/AliVAD.h [new file with mode: 0644]
STEER/STEERBase/CMakeLists.txt
STEER/STEERBase/STEERBaseLinkDef.h

index 0ad2fe316f4a91f3d9b8bd852ac0daadf569c566..228b2586b801d554ec42d1c9fdb15f8b92a946be 100644 (file)
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
 
-
-// Last update: Nov. 5th 2013 
+//-------------------------------------------------------------------------
+//     Container class for ESD AD data
+//     Author: Brigitte Cheynis & Cvetan Cheshkov
+//-------------------------------------------------------------------------
 
 #include "AliESDAD.h"
+#include "AliLog.h"
 
 ClassImp(AliESDAD)
 
-AliESDAD::AliESDAD():TObject()
-{
- //Default constructor
-       for(Int_t i=0;i<16;i++)
-       {
-               fADCellID[i] = 0;
-       }
+//__________________________________________________________________________
+AliESDAD::AliESDAD()
+  :AliVAD(),
+   fBBtriggerADA(0),
+   fBGtriggerADA(0),
+   fBBtriggerADC(0),
+   fBGtriggerADC(0),
+   fADATime(-1024),
+   fADCTime(-1024),
+   fADATimeError(0),
+   fADCTimeError(0),
+   fADADecision(kADInvalid),
+   fADCDecision(kADInvalid),
+   fTriggerChargeA(0),
+   fTriggerChargeC(0),
+   fTriggerBits(0)
+{   
+   // Default constructor 
+   for(Int_t j=0; j<16; j++){ 
+      fMultiplicity[j] = 0.0;   
+      fAdc[j]   = 0.0;   
+      fTime[j]  = 0.0; 
+      fWidth[j] = 0.0; 
+      fBBFlag[j]= kFALSE;
+      fBGFlag[j]= kFALSE;  
+   }
 }
 
-
+//__________________________________________________________________________
 AliESDAD::AliESDAD(const AliESDAD &o)
-  :TObject(o)
-
-{      
-       //Default constructor
-       for(Int_t i=0;i<16;i++)
-       {
-               fADCellID[i] = o.fADCellID[i];
-       }
+  :AliVAD(o),
+   fBBtriggerADA(o.fBBtriggerADA),
+   fBGtriggerADA(o.fBGtriggerADA),
+   fBBtriggerADC(o.fBBtriggerADC),
+   fBGtriggerADC(o.fBGtriggerADC),
+   fADATime(o.fADATime),
+   fADCTime(o.fADCTime),
+   fADATimeError(o.fADATimeError),
+   fADCTimeError(o.fADCTimeError),
+   fADADecision(o.fADADecision),
+   fADCDecision(o.fADCDecision),
+   fTriggerChargeA(o.fTriggerChargeA),
+   fTriggerChargeC(o.fTriggerChargeC),
+   fTriggerBits(o.fTriggerBits)
+{   
+   // Default constructor 
+   for(Int_t j=0; j<16; j++) {
+       fMultiplicity[j] = o.fMultiplicity[j];
+       fAdc[j]    = o.fAdc[j];
+       fTime[j]   = o.fTime[j];
+       fWidth[j]  = o.fWidth[j];
+       fBBFlag[j] = o.fBBFlag[j];
+       fBGFlag[j] = o.fBGFlag[j];
+   }
 }
 
-
-AliESDAD::AliESDAD(Bool_t* MADBitCell):TObject()
+//__________________________________________________________________________
+AliESDAD::AliESDAD(UInt_t BBtriggerADA, UInt_t BGtriggerADA,
+             UInt_t BBtriggerADC, UInt_t BGtriggerADC,
+             Float_t *Multiplicity, Float_t *Adc, 
+             Float_t *Time, Float_t *Width, Bool_t *BBFlag, Bool_t *BGFlag)
+  :AliVAD(),
+   fBBtriggerADA(BBtriggerADA),
+   fBGtriggerADA(BGtriggerADA),
+   fBBtriggerADC(BBtriggerADC),
+   fBGtriggerADC(BGtriggerADC),
+   fADATime(-1024),
+   fADCTime(-1024),
+   fADATimeError(0),
+   fADCTimeError(0),
+   fADADecision(kADInvalid),
+   fADCDecision(kADInvalid),
+   fTriggerChargeA(0),
+   fTriggerChargeC(0),
+   fTriggerBits(0)
 {
-
-       //Constructor
-
-       for(Int_t i=0;i<16;i++)
-       {
-               fADCellID[i] = MADBitCell[i];
-       }
+   // Constructor
+   for(Int_t j=0; j<16; j++) {
+       fMultiplicity[j] = Multiplicity[j];
+       fAdc[j]    = Adc[j];
+       fTime[j]   = Time[j];
+       fWidth[j]  = Width[j];
+       fBBFlag[j] = BBFlag[j];
+       fBGFlag[j] = BGFlag[j];
+   }
 }
 
+//__________________________________________________________________________
 AliESDAD& AliESDAD::operator=(const AliESDAD& o)
 {
-// Copy Constructor
-       if(this==&o)return *this;
-       TObject::operator=(o);
 
-       // Assignment operator
-       for(Int_t i=0; i<16; i++)
-       {
-               fADCellID[i] = o.fADCellID[i];
-       }
-       
-       return *this;
-}
+  if(this==&o) return *this;
+  AliVAD::operator=(o);
+  // Assignment operator
+  fBBtriggerADA=o.fBBtriggerADA;
+  fBGtriggerADA=o.fBGtriggerADA;
+  fBBtriggerADC=o.fBBtriggerADC;
+  fBGtriggerADC=o.fBGtriggerADC;
 
+  fADATime = o.fADATime;
+  fADCTime = o.fADCTime;
+  fADATimeError = o.fADATimeError;
+  fADCTimeError = o.fADCTimeError;
+  fADADecision = o.fADADecision;
+  fADCDecision = o.fADCDecision;
+  fTriggerChargeA = o.fTriggerChargeA;
+  fTriggerChargeC = o.fTriggerChargeC;
+  fTriggerBits = o.fTriggerBits;
 
-Bool_t AliESDAD::GetADCell(Int_t i) const
-{
-       return fADCellID[i];
+   for(Int_t j=0; j<16; j++) {
+       fMultiplicity[j] = o.fMultiplicity[j];
+       fAdc[j]    = o.fAdc[j];
+       fTime[j]   = o.fTime[j];
+       fWidth[j]  = o.fWidth[j];
+       fBBFlag[j] = o.fBBFlag[j];
+       fBGFlag[j] = o.fBGFlag[j];
+   }
+  return *this;
 }
 
+//______________________________________________________________________________
 void AliESDAD::Copy(TObject &obj) const {
   
   // this overwrites the virtual TOBject::Copy()
@@ -73,4 +157,227 @@ void AliESDAD::Copy(TObject &obj) const {
 
 }
 
+//__________________________________________________________________________
+Short_t AliESDAD::GetNbPMADA() const
+{
+  // Returns the number of
+  // fired PM in ADA
+  Short_t n=0;
+  for(Int_t i=8;i<16;i++) 
+    if (fMultiplicity[i]>0) n++;
+  return n;
+}
+
+//__________________________________________________________________________
+Short_t AliESDAD::GetNbPMADC() const
+{
+  // Returns the number of
+  // fired PM in ADC
+  Short_t n=0;
+  for(Int_t i=0;i<8;i++) 
+    if (fMultiplicity[i]>0) n++;
+  return n;
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetMTotADA() const
+{
+  // returns total multiplicity
+  // in ADA
+  Float_t mul=0.0;
+  for(Int_t i=8;i<16;i++) 
+    mul+=  fMultiplicity[i];
+  return mul;
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetMTotADC() const
+{
+  // returns total multiplicity
+  // in ADC
+  Float_t mul=0.0;
+  for(Int_t i=0;i<8;i++) 
+    mul+=  fMultiplicity[i];
+  return mul;
+}
+
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetMultiplicity(Int_t i) const
+
+{
+  // returns multiplicity in a
+  // given cell of AD
+  if (OutOfRange(i, "AliESDAD::GetMultiplicity:",16)) return -1;
+  return fMultiplicity[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetMultiplicityADA(Int_t i) const
+
+{
+  // returns multiplicity in a
+  // given cell of ADA
+  if (OutOfRange(i, "AliESDAD::GetMultiplicityADA:",8)) return -1;
+  return fMultiplicity[8+i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetMultiplicityADC(Int_t i) const
+
+{
+  // returns multiplicity in a
+  // given cell of ADC
+  if (OutOfRange(i, "AliESDAD::GetMultiplicityADC:",8)) return -1;
+  return fMultiplicity[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetAdc(Int_t i) const
+
+{
+  // returns ADC charge in a
+  // given cell of AD
+  if (OutOfRange(i, "AliESDAD::GetAdc:",16)) return -1;
+  return fAdc[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetAdcADA(Int_t i) const
+
+{
+  // returns ADC charge in a
+  // given cell of ADA
+  if (OutOfRange(i, "AliESDAD::GetAdcADA:",8)) return -1;
+  return fAdc[8+i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetAdcADC(Int_t i) const
+
+{
+  // returns ADC charge in a
+  // given cell of ADC
+  if (OutOfRange(i, "AliESDAD::GetAdcADC:",8)) return -1;
+  return fAdc[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetTime(Int_t i) const
+
+{
+  // returns leading time measured by TDC
+  // in a given cell of AD
+  if (OutOfRange(i, "AliESDAD::GetTime:",16)) return -1;
+  return fTime[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetTimeADA(Int_t i) const
+
+{
+  // returns leading time measured by TDC
+  // in a given cell of ADA
+  if (OutOfRange(i, "AliESDAD::GetTimeADA:",8)) return -1;
+  return fTime[8+i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetTimeADC(Int_t i) const
+
+{
+  // returns leading time measured by TDC
+  // in a given cell of ADC
+  if (OutOfRange(i, "AliESDAD::GetTimeADC:",8)) return -1;
+  return fTime[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetWidth(Int_t i) const
+
+{
+  // returns time signal width
+  // in a given cell of AD
+  if (OutOfRange(i, "AliESDAD::GetWidth:",16)) return -1;
+  return fWidth[i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetWidthADA(Int_t i) const
+
+{
+  // returns time signal width
+  // in a given cell of ADA
+  if (OutOfRange(i, "AliESDAD::GetWidthADA:",8)) return -1;
+  return fWidth[8+i];
+}
+
+//__________________________________________________________________________
+Float_t AliESDAD::GetWidthADC(Int_t i) const
 
+{
+  // returns time signal width
+  // in a given cell of ADC
+  if (OutOfRange(i, "AliESDAD::GetWidthADC:",8)) return -1;
+  return fWidth[i];
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::BBTriggerADA(Int_t i) const
+{
+  // returns offline beam-beam flags in ADA
+  // one bit per cell
+  if (OutOfRange(i, "AliESDAD:::BBTriggerADA",8)) return kFALSE;
+  UInt_t test = 1;
+  return ( fBBtriggerADA & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::BGTriggerADA(Int_t i) const
+{
+  // returns offline beam-gas flags in ADA
+  // one bit per cell
+  if (OutOfRange(i, "AliESDAD:::BGTriggerADA",8)) return kFALSE;
+  UInt_t test = 1;
+  return ( fBGtriggerADA & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::BBTriggerADC(Int_t i) const
+{
+  // returns offline beam-beam flags in ADC
+  // one bit per cell
+  if (OutOfRange(i, "AliESDAD:::BBTriggerADC",8)) return kFALSE;
+  UInt_t test = 1;
+  return ( fBBtriggerADC & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::BGTriggerADC(Int_t i) const
+{
+  // returns offline beam-gasflags in ADC
+  // one bit per cell
+  if (OutOfRange(i, "AliESDAD:::BGTriggerADC",8)) return kFALSE;
+  UInt_t test = 1;
+  return ( fBGtriggerADC & (test << i) ? kTRUE : kFALSE );
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::GetBBFlag(Int_t i) const
+
+{
+  // returns online beam-beam flag in AD
+  // one boolean per cell
+  if (OutOfRange(i, "AliESDAD::GetBBFlag:",16)) return kFALSE;
+  return fBBFlag[i];
+}
+
+//__________________________________________________________________________
+Bool_t AliESDAD::GetBGFlag(Int_t i) const
+
+{
+  // returns online beam-gas flag in AD
+  // one boolean per cell
+  if (OutOfRange(i, "AliESDAD::GetBGFlag:",16)) return kFALSE;
+  return fBGFlag[i];
+}
index a3303e109d27568b9088f5ebe8ef8872ab7a5080..369f8b4c997db75c5af23798d83d5f8c3c34006b 100644 (file)
-#ifndef AliESDAD_H
-#define AliESDAD_H
+#ifndef ALIESDAD_H
+#define ALIESDAD_H
 
-#include <TObject.h>
-// Send comments to:
-// Mario Rodriguez <mrodriguez@fis.cinvestav.mx>
+//-------------------------------------------------------------------------
+//     Container class for ESD AD data
+//     Author: Brigitte Cheynis & Cvetan Cheshkov
+//-------------------------------------------------------------------------
 
-class AliESDAD : public TObject
-{
+#include <AliVAD.h>
 
- public:
+class AliESDAD : public AliVAD 
+{
+public:
   AliESDAD();
-  AliESDAD(const AliESDAD&);
-  AliESDAD(Bool_t *ADBitCell); 
+  AliESDAD(const AliESDAD&o);
+  AliESDAD(UInt_t BBtriggerADA,   UInt_t BGtriggerADA,
+             UInt_t BBtriggerADC,   UInt_t BGtriggerADC,
+             Float_t *Multiplicity, Float_t *Adc, 
+             Float_t *Time, Float_t *Width, Bool_t *BBFlag, Bool_t *BGFlag);
+  void Copy(TObject &obj) const;
+
   virtual ~AliESDAD() {};
-  virtual void Copy(TObject &) const;
 
- // We define the "setters" for AD
-       // fake bit pattern, but enought to MC studies
-  void SetADBitCell(Bool_t ADBitCell[16]){for (Int_t i=0;i<16;i++){fADCellID[i]=ADBitCell[i];}}
+  // Setters
+  void SetBBtriggerADA(UInt_t BBtrigger) {fBBtriggerADA=BBtrigger;}
+  void SetBGtriggerADA(UInt_t BGtrigger) {fBGtriggerADA=BGtrigger;}
+  void SetBBtriggerADC(UInt_t BBtrigger) {fBBtriggerADC=BBtrigger;}
+  void SetBGtriggerADC(UInt_t BGtrigger) {fBGtriggerADC=BGtrigger;}
+  void SetMultiplicity(Float_t Multiplicity[16])
+    {for(Int_t i=0;i<16;i++) fMultiplicity[i]=Multiplicity[i];}
+  void SetADC(Float_t adc[16])
+    {for(Int_t i=0;i<16;i++) fAdc[i]=adc[i];}
+  void SetTime(Float_t time[16])
+    {for(Int_t i=0;i<16;i++) fTime[i]=time[i];}
+  void SetWidth(Float_t width[16])
+    {for(Int_t i=0;i<16;i++) fWidth[i]=width[i];}    
+  void SetBBFlag(Bool_t BBFlag[16])
+    {for(Int_t i=0;i<16;i++) fBBFlag[i]=BBFlag[i];} 
+  void SetBGFlag(Bool_t BGFlag[16])
+    {for(Int_t i=0;i<16;i++) fBGFlag[i]=BGFlag[i];}   
 
- // Getters    
-  Bool_t GetADCell(Int_t i) const;
-  AliESDAD &operator=(const AliESDAD& source);
+  void SetADATime(Float_t time) {fADATime = time;}
+  void SetADCTime(Float_t time) {fADCTime = time;}
+  void SetADATimeError(Float_t err) {fADATimeError = err;}
+  void SetADCTimeError(Float_t err) {fADCTimeError = err;}
+
+  void SetADADecision(Decision des) {fADADecision = des;}
+  void SetADCDecision(Decision des) {fADCDecision = des;}
+
+  void SetTriggerChargeA(UShort_t chargeA) {fTriggerChargeA = chargeA;}
+  void SetTriggerChargeC(UShort_t chargeC) {fTriggerChargeC = chargeC;}
+  void SetTriggerBits(UShort_t triggerBits) {fTriggerBits = triggerBits;}
+
+  // Getters  
+  virtual Short_t  GetNbPMADA() const;
+  virtual Short_t  GetNbPMADC() const;
+  virtual Float_t  GetMTotADA() const;
+  virtual Float_t  GetMTotADC() const; 
+
+  virtual Float_t  GetMultiplicity(Int_t i) const;
+  virtual Float_t  GetMultiplicityADA(Int_t i) const;
+  virtual Float_t  GetMultiplicityADC(Int_t i) const;    
+  virtual Float_t  GetAdc(Int_t i) const;
+  virtual Float_t  GetAdcADA(Int_t i) const; 
+  virtual Float_t  GetAdcADC(Int_t i) const;   
+  virtual Float_t  GetTime(Int_t i) const;
+  virtual Float_t  GetTimeADA(Int_t i) const;   
+  virtual Float_t  GetTimeADC(Int_t i) const;    
+  virtual Float_t  GetWidth(Int_t i) const;
+  virtual Float_t  GetWidthADA(Int_t i) const;
+  virtual Float_t  GetWidthADC(Int_t i) const;
+  virtual Bool_t   BBTriggerADA(Int_t i) const;
+  virtual Bool_t   BGTriggerADA(Int_t i) const;
+  virtual Bool_t   BBTriggerADC(Int_t i) const;
+  virtual Bool_t   BGTriggerADC(Int_t i) const;  
+  virtual Bool_t   GetBBFlag(Int_t i) const;
+  virtual Bool_t   GetBGFlag(Int_t i) const;
+
+  virtual Float_t  GetADATime() const { return fADATime; }
+  virtual Float_t  GetADCTime() const { return fADCTime; }
+  virtual Float_t  GetADATimeError() const { return fADATimeError; }
+  virtual Float_t  GetADCTimeError() const { return fADCTimeError; }
+
+  virtual Decision GetADADecision() const { return fADADecision; }
+  virtual Decision GetADCDecision() const { return fADCDecision; }
+
+  virtual UShort_t GetTriggerChargeA() const { return fTriggerChargeA; }
+  virtual UShort_t GetTriggerChargeC() const { return fTriggerChargeC; }
+  virtual UShort_t GetTriggerBits() const { return fTriggerBits; }
   
- protected:
+  AliESDAD &operator=(const AliESDAD& source);
+    
+protected:
+
+  UInt_t  fBBtriggerADA;     // bit mask for Beam-Beam trigger in ADA
+  UInt_t  fBGtriggerADA;     // bit mask for Beam-Gas trigger in ADA
+  UInt_t  fBBtriggerADC;     // bit mask for Beam-Beam trigger in ADC
+  UInt_t  fBGtriggerADC;     // bit mask for Beam-Gas trigger in ADC
+
+  Float_t fMultiplicity[16]; //  multiplicity for each channel
+  Float_t fAdc[16];          //  adc for each channel
+  Float_t fTime[16];         //  time for each channel
+  Float_t fWidth[16];        //  time width for each channel
+  Bool_t  fBBFlag[16];       //  BB Flags from Online AD Electronics
+  Bool_t  fBGFlag[16];       //  BG Flags from Online AD Electronics
+
+  Float_t fADATime;          // Average time in ADA
+  Float_t fADCTime;          // Average time in ADC
+  Float_t fADATimeError;     // Error in the average time in ADA
+  Float_t fADCTimeError;     // Error in the average time in ADC
 
-  Bool_t       fADCellID[16];  // Array with the AD's bitpattern
+  Decision fADADecision;     // ADA final decision based on average time of channels
+  Decision fADCDecision;     // ADC final decision based on average time of channels
 
-  ClassDef(AliESDAD, 1)
+  UShort_t fTriggerChargeA;  // Sum of the trigger (clock=10) charge on A side
+  UShort_t fTriggerChargeC;  // Sum of the trigger (clock=10) charge on C side
+  UShort_t fTriggerBits;     // AD trigger bits as defined in the firmware
 
+  ClassDef(AliESDAD,10)
 };
 
 #endif
diff --git a/STEER/ESD/AliESDADfriend.cxx b/STEER/ESD/AliESDADfriend.cxx
new file mode 100644 (file)
index 0000000..56deb4e
--- /dev/null
@@ -0,0 +1,136 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, 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.                  *
+ **************************************************************************/
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This is a class for containing all the AD DDL raw data
+/// It is written to the ESD-friend file
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#include "AliESDADfriend.h"
+
+ClassImp(AliESDADfriend)
+
+//_____________________________________________________________________________
+AliESDADfriend::AliESDADfriend():
+  TObject(),
+  fTrigger(0),
+  fTriggerMask(0)
+{
+  // default constructor
+  for (Int_t iScaler = 0; iScaler < kNScalers; iScaler++)
+    fScalers[iScaler] = 0;
+
+  for (Int_t iChannel = 0; iChannel < kNChannels; iChannel++) {
+    fBBScalers[iChannel] = 0;
+    fBGScalers[iChannel] = 0;
+    
+    for (Int_t iEv = 0; iEv < kNEvOfInt; iEv++) {
+      fADC[iChannel][iEv]   = 0.0;
+      fIsInt[iChannel][iEv] = kFALSE;
+      fIsBB[iChannel][iEv]  = kFALSE;
+      fIsBG[iChannel][iEv]  = kFALSE;
+    }
+    fTime[iChannel]  = 0.0;
+    fWidth[iChannel] = 0.0;
+  }
+}
+
+//_____________________________________________________________________________
+AliESDADfriend::~AliESDADfriend()
+{
+  // destructor
+}
+
+//_____________________________________________________________________________
+AliESDADfriend::AliESDADfriend(const AliESDADfriend& adfriend):
+  TObject(adfriend),
+  fTrigger(adfriend.fTrigger),
+  fTriggerMask(adfriend.fTriggerMask)
+{
+  // copy constructor
+  for (Int_t iScaler = 0; iScaler < kNScalers; iScaler++)
+    fScalers[iScaler] = adfriend.fScalers[iScaler];
+
+  for (Int_t iChannel = 0; iChannel < kNChannels; iChannel++) {
+    fBBScalers[iChannel] = adfriend.fBBScalers[iChannel];
+    fBGScalers[iChannel] = adfriend.fBGScalers[iChannel];
+    
+    for (Int_t iEv = 0; iEv < kNEvOfInt; iEv++) {
+      fADC[iChannel][iEv]   = adfriend.fADC[iChannel][iEv];
+      fIsInt[iChannel][iEv] = adfriend.fIsInt[iChannel][iEv];
+      fIsBB[iChannel][iEv]  = adfriend.fIsBB[iChannel][iEv];
+      fIsBG[iChannel][iEv]  = adfriend.fIsBG[iChannel][iEv];
+    }
+    fTime[iChannel]  = adfriend.fTime[iChannel];
+    fWidth[iChannel] = adfriend.fWidth[iChannel];
+  }
+}
+
+//_____________________________________________________________________________
+AliESDADfriend& AliESDADfriend::operator = (const AliESDADfriend& adfriend)
+{
+  // assignment operator
+  if(&adfriend == this) return *this;
+  TObject::operator=(adfriend);
+
+  fTrigger = adfriend.fTrigger;
+  fTriggerMask = adfriend.fTriggerMask;
+
+  for (Int_t iScaler = 0; iScaler < kNScalers; iScaler++)
+    fScalers[iScaler] = adfriend.fScalers[iScaler];
+
+  for (Int_t iChannel = 0; iChannel < kNChannels; iChannel++) {
+    fBBScalers[iChannel] = adfriend.fBBScalers[iChannel];
+    fBGScalers[iChannel] = adfriend.fBGScalers[iChannel];
+    
+    for (Int_t iEv = 0; iEv < kNEvOfInt; iEv++) {
+      fADC[iChannel][iEv]   = adfriend.fADC[iChannel][iEv];
+      fIsInt[iChannel][iEv] = adfriend.fIsInt[iChannel][iEv];
+      fIsBB[iChannel][iEv]  = adfriend.fIsBB[iChannel][iEv];
+      fIsBG[iChannel][iEv]  = adfriend.fIsBG[iChannel][iEv];
+    }
+    fTime[iChannel]  = adfriend.fTime[iChannel];
+    fWidth[iChannel] = adfriend.fWidth[iChannel];
+  }
+
+  return *this;
+}
+
+void AliESDADfriend::Reset()
+{
+  // Reset the contents of the object
+  fTrigger = 0;
+  fTriggerMask = 0;
+
+  for (Int_t iScaler = 0; iScaler < kNScalers; iScaler++)
+    fScalers[iScaler] = 0;
+
+  for (Int_t iChannel = 0; iChannel < kNChannels; iChannel++) {
+    fBBScalers[iChannel] = 0;
+    fBGScalers[iChannel] = 0;
+    
+    for (Int_t iEv = 0; iEv < kNEvOfInt; iEv++) {
+      fADC[iChannel][iEv]   = 0.0;
+      fIsInt[iChannel][iEv] = kFALSE;
+      fIsBB[iChannel][iEv]  = kFALSE;
+      fIsBG[iChannel][iEv]  = kFALSE;
+    }
+    fTime[iChannel]  = 0.0;
+    fWidth[iChannel] = 0.0;
+  }
+  
+}
diff --git a/STEER/ESD/AliESDADfriend.h b/STEER/ESD/AliESDADfriend.h
new file mode 100644 (file)
index 0000000..d9dbc46
--- /dev/null
@@ -0,0 +1,107 @@
+#ifndef ALIESDADFRIEND_H
+#define ALIESDADFRIEND_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This is a class for containing all the AD DDL raw data
+/// It is written to the ESD-friend file
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#include <TObject.h>
+
+class AliESDADfriend: public TObject {
+  public :
+    AliESDADfriend();
+    virtual ~AliESDADfriend();
+
+    AliESDADfriend(const AliESDADfriend& adfriend);
+    AliESDADfriend& operator = (const AliESDADfriend& adfriend);
+
+    void Reset();
+
+// Getters of various scalers and Minimum Bias flags :
+
+   ULong64_t          GetBBScalers(Int_t channel) const  
+      { return        fBBScalers[channel]; }
+   ULong64_t          GetBGScalers(Int_t channel) const  
+      { return        fBGScalers[channel]; }
+   UInt_t             GetTriggerScalers(Int_t num_scaler) const 
+      { return        fScalers[num_scaler]; }
+   
+       
+// Getters of ADC signals, ADC pedestals, time information and corresponding flags :
+
+    Float_t           GetADC(Int_t channel) const
+      { return fADC[channel][kNEvOfInt/2]; }
+    Float_t           GetPedestal(Int_t channel, Int_t event) const
+      { return fADC[channel][event]; }
+    Bool_t            GetIntegratorFlag(Int_t channel, Int_t event) const
+      { return fIsInt[channel][event]; }
+    Bool_t            GetBBFlag(Int_t channel, Int_t event) const
+      { return fIsBB[channel][event]; } 
+    Bool_t            GetBGFlag(Int_t channel, Int_t event) const
+      { return fIsBG[channel][event]; }   
+    Float_t            GetTime(Int_t channel) const
+      { return fTime[channel]; }
+    Float_t            GetWidth(Int_t channel) const
+      { return fWidth[channel]; }
+
+    // Setters
+    void              SetBBScalers(Int_t channel, ULong64_t scalers)
+      { fBBScalers[channel] = scalers; }
+    void              SetBGScalers(Int_t channel, ULong64_t scalers)
+      { fBGScalers[channel] = scalers; }
+    void              SetTriggerScalers(Int_t num_scaler, UInt_t scaler)
+      { fScalers[num_scaler] = scaler; }
+
+    void              SetPedestal(Int_t channel, Int_t event, Float_t adc)
+      { fADC[channel][event] = adc; }
+    void              SetIntegratorFlag(Int_t channel, Int_t event, Bool_t flag)
+      { fIsInt[channel][event] = flag; }
+    void              SetBBFlag(Int_t channel, Int_t event, Bool_t flag)
+      { fIsBB[channel][event] = flag; }
+    void              SetBGFlag(Int_t channel, Int_t event, Bool_t flag)
+      { fIsBG[channel][event] = flag; }
+    void              SetTime(Int_t channel, Float_t time)
+      { fTime[channel] = time; }
+    void              SetWidth(Int_t channel, Float_t width)
+      { fWidth[channel] = width; }
+
+    UShort_t          GetTriggerInputs() const
+      { return fTrigger; }
+    UShort_t          GetTriggerInputsMask() const
+      { return fTriggerMask; }
+    void              SetTriggerInputs(UShort_t inputs)
+      { fTrigger = inputs; }
+    void              SetTriggerInputsMask(UShort_t mask)
+      { fTriggerMask = mask; }
+
+    enum EESDADfriendParams {
+      kNChannels = 16, // number of electronic channels in AD (FEE numbering)
+      kNEvOfInt  = 21, // number of events of interest
+      kNScalers  = 16, // number of scalers
+    };
+
+  private:
+
+    ULong64_t     fBBScalers[kNChannels];        // 'Beam-Beam' scalers for all channels
+    ULong64_t     fBGScalers[kNChannels];        // 'Beam-Gas' scalers for all channels
+    UInt_t        fScalers[kNScalers];           // Trigger scalers
+
+    Float_t       fADC[kNChannels][kNEvOfInt];   // ADC counts for all channels and all events of interest
+    Bool_t        fIsInt[kNChannels][kNEvOfInt]; // 'Integrator' flag for all channels 
+    Bool_t        fIsBB[kNChannels][kNEvOfInt];  // 'Beam-Beam' flag for all channels
+    Bool_t        fIsBG[kNChannels][kNEvOfInt];  // 'Beam-Gas' flag for all channels
+    Float_t       fTime[kNChannels];             // leading time for all channels - from HPTDC - in nanoseconds
+    Float_t       fWidth[kNChannels];            // pulse width for all channels - from HPTDC - in nanoseconds
+
+    UShort_t      fTrigger;        // AD trigger inputs
+    UShort_t      fTriggerMask;    // AD trigger inputs mask
+
+    ClassDef(AliESDADfriend, 2) // container class for AD DDL raw data
+};
+
+#endif
index 175ecb15830667723cd8233e44ba520bc4e9f692..150cc3d8348612c114b8b2938e1a4667e7b8c69d 100644 (file)
@@ -28,6 +28,7 @@ set(SRCS
     AliCascadeVertexer.cxx
     AliESDACORDE.cxx
     AliESDAD.cxx
+    AliESDADfriend.cxx
     AliESDCaloCells.cxx
     AliESDCaloCluster.cxx
     AliESDCaloTrigger.cxx
index 89eba4ac0183a9beda5ef704a84cf73840bb2f1e..06f4893c02b1978b47c75e0b48800b4754e6523e 100644 (file)
@@ -131,6 +131,7 @@ code="{fTrackTime = new Double32_t[AliPID::kSPECIESC];for(Int_t isp=AliPID::kSPE
 
 #pragma link C++ class  AliESDVZEROfriend+;
 #pragma link C++ class  AliESDTZEROfriend+;
+#pragma link C++ class  AliESDADfriend+;
 
 #pragma link C++ class  AliESDHandler+;
 #pragma link C++ class  AliTrackerBase+;
diff --git a/STEER/STEERBase/AliVAD.cxx b/STEER/STEERBase/AliVAD.cxx
new file mode 100644 (file)
index 0000000..3cd4d0a
--- /dev/null
@@ -0,0 +1,54 @@
+/**************************************************************************
+ * 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 AD data
+//     Author: Michal Broz
+//     michal.broz@cern.ch
+//-------------------------------------------------------------------------
+
+#include "AliVAD.h"
+#include "AliLog.h"
+
+ClassImp(AliVAD)
+
+//__________________________________________________________________________
+AliVAD::AliVAD(const AliVAD& source) :
+  TObject(source) { } // Copy constructor
+
+//__________________________________________________________________________
+AliVAD& AliVAD::operator=(const AliVAD& source)
+{
+  // Assignment operator
+  //
+  if (this!=&source) { 
+    TObject::operator=(source); 
+  }
+  
+  return *this; 
+}
+
+//__________________________________________________________________________
+Bool_t AliVAD::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;
+}
+
diff --git a/STEER/STEERBase/AliVAD.h b/STEER/STEERBase/AliVAD.h
new file mode 100644 (file)
index 0000000..c5490a7
--- /dev/null
@@ -0,0 +1,84 @@
+#ifndef ALIVAD_H
+#define ALIVAD_H
+
+//-------------------------------------------------------------------------
+//     Base class for ESD and AOD AD data
+//     Author: Michal Broz
+//     Michal.Broz@cern.ch 
+//-------------------------------------------------------------------------
+
+#include "TObject.h"
+#include "TMath.h"
+
+class AliVAD : public TObject 
+{
+public:
+  AliVAD() { }
+  AliVAD(const AliVAD& source);
+  AliVAD &operator=(const AliVAD& source);
+
+  virtual ~AliVAD() { }
+
+  enum {
+    kCorrectedLeadingTime = BIT(14),
+    kTriggerBitsFilled = BIT(15),
+    kDecisionFilled = BIT(16),
+    kOnlineBitsFilled = BIT(17),
+    kCorrectedForSaturation = BIT(18),
+    kRobustMeanTime = BIT(19),
+    kTriggerChargeBitsFilled = BIT(20)
+  };
+  enum Decision { kADInvalid = -1, kADEmpty = 0, kADBB, kADBG, kADFake };
+  enum TriggerBits {
+    kBBAandBBC = 0,
+    kBBAorBBC = 1,
+    kBGAandBBC = 2,
+    kBGA = 3,
+    kBGCandBBA = 4,
+    kBGC = 5,
+    kCTA1andCTC1 = 6,
+    kCTA1orCTC1 = 7,
+    kCTA2andCTC2 = 8,
+    kCTA2orCTC2 = 9,
+    kMTAandMTC = 10,
+    kMTAorMTC = 11,
+    kBBA = 12,
+    kBBC = 13,
+    kBGAorBGC = 14,
+    kBGAandBBCorBGCandBBA = 15
+  };
+
+  virtual Short_t  GetNbPMADA() const = 0;
+  virtual Short_t  GetNbPMADC() const = 0;
+  virtual Float_t  GetMTotADA() const = 0;
+  virtual Float_t  GetMTotADC() const = 0; 
+
+  virtual Float_t  GetMultiplicity(Int_t i) const = 0;
+  virtual Float_t  GetMultiplicityADA(Int_t i) const = 0;
+  virtual Float_t  GetMultiplicityADC(Int_t i) const = 0;    
+
+  virtual Bool_t   BBTriggerADA(Int_t i) const = 0;
+  virtual Bool_t   BGTriggerADA(Int_t i) const = 0;
+  virtual Bool_t   BBTriggerADC(Int_t i) const = 0;
+  virtual Bool_t   BGTriggerADC(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  GetADATime() const = 0;
+  virtual Float_t  GetADCTime() const = 0;
+
+  virtual Decision GetADADecision() const = 0;
+  virtual Decision GetADCDecision() const = 0;
+
+  virtual UShort_t GetTriggerChargeA() const = 0;
+  virtual UShort_t GetTriggerChargeC() const = 0;
+  virtual UShort_t GetTriggerBits() const = 0;
+
+protected:  
+
+  Bool_t OutOfRange(Int_t i, const char *s, Int_t upper) const;
+    
+  ClassDef(AliVAD,2)
+};
+
+#endif
index c7263738440de215fe6dacd1ad91fef5ab8eb3f4..995dabf57005e55b33baba2074536c12a3bcc53f 100644 (file)
@@ -104,6 +104,7 @@ set(SRCS
     AliTRDTKDInterpolator.cxx
     AliTriggerScalers.cxx
     AliTriggerScalersRecord.cxx
+    AliVAD.cxx
     AliVAODHeader.cxx
     AliVCaloCells.cxx
     AliVCaloTrigger.cxx
index f7000405e137afaf107701a362b53fcf3c2dea4d..51a22467f968265de872badef3de47d7279849b5 100644 (file)
@@ -25,6 +25,7 @@
 #pragma link C++ class AliVCuts+;
 #pragma link C++ class AliVVZERO+;
 #pragma link C++ class AliVZDC+;
+#pragma link C++ class AliVAD+;
 #pragma link C++ class AliCentrality+;
 #pragma link C++ class AliEventplane+;