* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+#include <TNamed.h>
#include "AliESDRun.h"
#include "AliESDVertex.h"
+#include "AliLog.h"
//-------------------------------------------------------------------------
// Implementation Class AliESDRun
fMagneticField(0),
fPeriodNumber(0),
fRunNumber(0),
- fRecoVersion(0)
+ fRecoVersion(0),
+ fTriggerClasses(kNTriggerClasses)
{
for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=0.;
+ fTriggerClasses.SetOwner(kTRUE);
}
//______________________________________________________________________________
fMagneticField(esd.fMagneticField),
fPeriodNumber(esd.fPeriodNumber),
fRunNumber(esd.fRunNumber),
- fRecoVersion(esd.fRecoVersion)
+ fRecoVersion(esd.fRecoVersion),
+ fTriggerClasses(TObjArray(kNTriggerClasses))
{
// Copy constructor
for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=esd.fDiamondCovXY[i];
+
+ for(Int_t i = 0; i < kNTriggerClasses; i++) {
+ TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
+ if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
+ }
}
//______________________________________________________________________________
fMagneticField=esd.fMagneticField;
for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=esd.fDiamondCovXY[i];
+ fTriggerClasses.Clear();
+ for(Int_t i = 0; i < kNTriggerClasses; i++) {
+ TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
+ if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
+ }
}
return *this;
}
printf("Magnetic field = %f T\n",
GetMagneticField());
printf("Event from reconstruction version %d \n",fRecoVersion);
+
+ printf("List of active trigger classes: ");
+ for(Int_t i = 0; i < kNTriggerClasses; i++) {
+ TNamed *str = (TNamed *)((fTriggerClasses).At(i));
+ printf("%s ",str->GetName());
+ }
+ printf("\n");
}
void AliESDRun::Reset()
fMagneticField = 0;
for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=0.;
+ fTriggerClasses.Clear();
+}
+
+//______________________________________________________________________________
+void AliESDRun::SetTriggerClass(const char*name, Int_t index)
+{
+ // Fill the trigger class name
+ // into the corresponding array
+ if (index >= kNTriggerClasses || index < 0) {
+ AliError(Form("Index (%d) is outside the allowed range (0,49)!",index));
+ return;
+ }
+
+ fTriggerClasses.AddAt(new TNamed(name,NULL),index);
+}
+
+//______________________________________________________________________________
+const char* AliESDRun::GetTriggerClass(Int_t index) const
+{
+ // Get the trigger class name at
+ // specified position in the trigger mask
+ TNamed *trclass = (TNamed *)fTriggerClasses.At(index);
+ if (trclass)
+ return trclass->GetName();
+ else
+ return "";
+}
+
+//______________________________________________________________________________
+TString AliESDRun::GetActiveTriggerClasses() const
+{
+ // Construct and return
+ // the list of trigger classes
+ // which are present in the run
+ TString trclasses;
+ for(Int_t i = 0; i < kNTriggerClasses; i++) {
+ TNamed *str = (TNamed *)((fTriggerClasses).At(i));
+ if (str) {
+ trclasses += " ";
+ trclasses += str->GetName();
+ trclasses += " ";
+ }
+ }
+
+ return trclasses;
+}
+
+//______________________________________________________________________________
+TString AliESDRun::GetFiredTriggerClasses(ULong64_t mask) const
+{
+ // Constructs and returns the
+ // list of trigger classes that
+ // have been fired. Uses the trigger
+ // class mask as an argument.
+ TString trclasses;
+ for(Int_t i = 0; i < kNTriggerClasses; i++) {
+ if (mask && (1 << i)) {
+ TNamed *str = (TNamed *)((fTriggerClasses).At(i));
+ if (str) {
+ trclasses += " ";
+ trclasses += str->GetName();
+ trclasses += " ";
+ }
+ }
+ }
+
+ return trclasses;
}
+//______________________________________________________________________________
+Bool_t AliESDRun::IsTriggerClassFired(ULong64_t mask, const char *name) const
+{
+ // Checks if the trigger class
+ // identified by 'name' has been
+ // fired. Uses the trigger class mask.
+
+ TNamed *trclass = (TNamed *)fTriggerClasses.FindObject(name);
+ if (!trclass) return kFALSE;
+
+ Int_t iclass = fTriggerClasses.IndexOf(trclass);
+ if (iclass < 0) return kFALSE;
+
+ if (mask && (1 << iclass))
+ return kTRUE;
+ else
+ return kFALSE;
+}
//-------------------------------------------------------------------------
#include <TObject.h>
+#include <TObjArray.h>
+#include <TString.h>
class AliESDVertex;
void Reset();
void Print(const Option_t *opt=0) const;
void SetDiamond(const AliESDVertex *vertex);
-
+ void SetTriggerClass(const char*name, Int_t index);
Double_t GetDiamondX() const {return fDiamondXY[0];}
Double_t GetDiamondY() const {return fDiamondXY[1];}
void GetDiamondCovXY(Float_t cov[3]) const {
for(Int_t i=0;i<3;i++) cov[i]=fDiamondCovXY[i]; return;
}
+ const char* GetTriggerClass(Int_t index) const;
+ TString GetActiveTriggerClasses() const;
+ TString GetFiredTriggerClasses(ULong64_t mask) const;
+ Bool_t IsTriggerClassFired(ULong64_t mask, const char *name) const;
+
+ enum {kNTriggerClasses = 50};
+
private:
Double32_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF
Double32_t fDiamondXY[2]; // Interaction diamond (x,y) in RUN
UInt_t fPeriodNumber; // PeriodNumber
Int_t fRunNumber; // Run Number
Int_t fRecoVersion; // Version of reconstruction
+ TObjArray fTriggerClasses; // array of TNamed containing the names of the active trigger classes
- ClassDef(AliESDRun,2)
+ ClassDef(AliESDRun,3)
};
#endif