Trigger input names added to ESD (Plamen)
authorlietava <lietava@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 23 Feb 2010 10:20:45 +0000 (10:20 +0000)
committerlietava <lietava@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 23 Feb 2010 10:20:45 +0000 (10:20 +0000)
STEER/AliESDHeader.cxx
STEER/AliESDHeader.h
STEER/AliReconstruction.cxx

index 2ab32df..6d90086 100644 (file)
@@ -43,13 +43,14 @@ AliESDHeader::AliESDHeader() :
   fL0TriggerInputs(0),
   fL1TriggerInputs(0),
   fL2TriggerInputs(0),
-  fTriggerScalers()
+  fTriggerScalers(),
+  fTriggerInputsNames(kNTriggerInputs)
 {
   // default constructor
 
   SetName("AliESDHeader");
   for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
-
+  fTriggerInputsNames.SetOwner(kTRUE);
 }
 AliESDHeader::~AliESDHeader() 
 {
@@ -72,7 +73,9 @@ AliESDHeader::AliESDHeader(const AliESDHeader &header) :
   fL0TriggerInputs(header.fL0TriggerInputs),
   fL1TriggerInputs(header.fL1TriggerInputs),
   fL2TriggerInputs(header.fL2TriggerInputs),
-  fTriggerScalers(header.fTriggerScalers)
+  fTriggerScalers(header.fTriggerScalers),
+  fTriggerInputsNames(TObjArray(kNTriggerInputs))
+  
 {
   // copy constructor
   SetName(header.fName);
@@ -81,6 +84,10 @@ AliESDHeader::AliESDHeader(const AliESDHeader &header) :
     if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
     else fIRArray[i]=0;
   }
+  for(Int_t i = 0; i < kNTriggerInputs; i++) {
+    TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
+    if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
+  }
 }
 
 AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
@@ -101,6 +108,13 @@ AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
     fL1TriggerInputs = header.fL1TriggerInputs;
     fL2TriggerInputs = header.fL2TriggerInputs;
     fTriggerScalers = header.fTriggerScalers;
+    
+    fTriggerInputsNames.Clear();
+    for(Int_t i = 0; i < kNTriggerInputs; i++) {
+      TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
+      if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
+    }
+
     for(Int_t i = 0; i<kNMaxIR ; i++) {
        if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
        else fIRArray[i]=0;
@@ -141,6 +155,7 @@ void AliESDHeader::Reset()
   fL1TriggerInputs   = 0;
   fL2TriggerInputs   = 0;
   fTriggerScalers.Reset();
+  fTriggerInputsNames.Clear();
   for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
    delete fIRArray[i];
    fIRArray[i]=0;
@@ -168,5 +183,101 @@ void AliESDHeader::Print(const Option_t *) const
         GetBunchCrossNumber(),
         GetOrbitNumber(),
         GetTriggerMask());
+         printf("List of the active trigger inputs: ");
+        for(Int_t i = 0; i < kNTriggerInputs; i++) {
+          TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
+          if (str) printf("%s ",str->GetName());
+         }
+         printf("\n");
+}
+
+
+//______________________________________________________________________________
+void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
+{
+  // Fill the active trigger inputs names
+  // into the corresponding fTriggerInputsNames (TObjArray of TNamed)
+  if (index >= kNTriggerInputs || index < 0) {
+    AliError(Form("Index (%d) is outside the allowed range (0,59)!",index));
+    return;
+  }
+
+  fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
+}
+//______________________________________________________________________________
+const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
+{
+  // Get the trigger input name
+  // at the specified position in the trigger mask and trigger level (0,1,2)
+  TNamed *trginput = 0;
+  if (trglevel == 0) trginput = (TNamed *)fTriggerInputsNames.At(index);
+  if (trglevel == 1) trginput = (TNamed *)fTriggerInputsNames.At(index+24);  
+  if (trglevel == 2) trginput = (TNamed *)fTriggerInputsNames.At(index+48); 
+  if (trginput) return trginput->GetName();
+  else return "";
 }
+//______________________________________________________________________________
+TString AliESDHeader::GetActiveTriggerInputs() const
+{
+  // Returns the list with the names of the active trigger inputs
+  TString trginputs;
+  for(Int_t i = 0; i < kNTriggerInputs; i++) {
+    TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
+    if (str) {
+      trginputs += " ";
+      trginputs += str->GetName();
+      trginputs += " ";
+    }
+  }
+
+  return trginputs;
+}
+//______________________________________________________________________________
+TString AliESDHeader::GetFiredTriggerInputs() const
+{
+  // Returns the list with the names of the fired trigger inputs
+  TString trginputs;
+  for(Int_t i = 0; i < kNTriggerInputs; i++) {
+      TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
+      if (i < 24 && (fL0TriggerInputs & (1 << i))) {
+        if (str) {
+         trginputs += " ";
+         trginputs += str->GetName();
+          trginputs += " ";
+        }
+      }
+      if (i >= 24 && i < 48 && (fL1TriggerInputs & (1 << i-24))) {
+        if (str) {
+         trginputs += " ";
+         trginputs += str->GetName();
+          trginputs += " ";
+        }
+      }
+      if (i >= 48 && (fL2TriggerInputs & (1 << i-48))) {
+        if (str) {
+         trginputs += " ";
+         trginputs += str->GetName();
+          trginputs += " ";
+        }
+      }
 
+  }
+  return trginputs;
+}
+//______________________________________________________________________________
+Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
+{
+  // Checks if the trigger input is fired 
+  TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
+  if (!trginput) return kFALSE;
+
+  Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
+  if (inputIndex < 0) return kFALSE;
+  
+  if (fL0TriggerInputs & (1 << inputIndex)) return kTRUE;
+  else if (fL1TriggerInputs & (1 << (inputIndex-24))) return kTRUE;
+  else if (fL2TriggerInputs & (1 << (inputIndex-48))) return kTRUE;
+  else return kFALSE;
+}
+//_______________________________________________________________________________
index cec73d2..5f71506 100644 (file)
@@ -50,6 +50,11 @@ public:
   void SetTriggerScalersRecord(AliTriggerScalersESD *scalerRun) {fTriggerScalers.AddTriggerScalers(scalerRun); }
   const AliTriggerScalersRecordESD* GetTriggerScalersRecord() const {return &fTriggerScalers; }
   const AliTriggerIR* GetTriggerIR(Int_t i) const { return fIRArray[i]; }
+  void  SetActiveTriggerInputs(const char*name, Int_t index);
+  const char* GetTriggerInputName(Int_t index, Int_t trglevel) const;
+  TString     GetActiveTriggerInputs() const;
+  TString     GetFiredTriggerInputs() const;
+  Bool_t      IsTriggerInputFired(const char *name) const;
 //**************************************************************************
 
   ULong64_t GetTriggerMask() const {return fTriggerMask;}
@@ -64,6 +69,8 @@ public:
 
   void      Reset();
   void      Print(const Option_t *opt=0) const;
+
+  enum {kNTriggerInputs = 60};  //24 L0, 24 L1 and 12 L2 inputs
 private:
 
   // Event Identification
@@ -76,14 +83,14 @@ private:
   Int_t        fEventNumberInFile; // Running Event count in the file
   UShort_t     fBunchCrossNumber;  // Bunch Crossing Number
   UChar_t      fTriggerCluster;    // Trigger cluster (mask)
-  UInt_t       fL0TriggerInputs;   //L0 Trigger Inputs 
-  UInt_t       fL1TriggerInputs;   //L1 Trigger Inputs
-  UShort_t     fL2TriggerInputs;   //L2 Trigger Inputs
+  UInt_t       fL0TriggerInputs;   //L0 Trigger Inputs (mask)
+  UInt_t       fL1TriggerInputs;   //L1 Trigger Inputs (mask)
+  UShort_t     fL2TriggerInputs;   //L2 Trigger Inputs (mask)
   AliTriggerScalersRecordESD fTriggerScalers;  //Trigger counters of triggered classes in event
   enum {kNMaxIR = 3};              // Max number of interaction records (IR)
   AliTriggerIR*  fIRArray[kNMaxIR];// Array with trigger IRs 
-
-  ClassDef(AliESDHeader,7)
+  TObjArray    fTriggerInputsNames;// Array of TNamed of the active trigger inputs (L0,L1 and L2)
+  ClassDef(AliESDHeader,8)
 };
 
 #endif
index 16df87c..5089983 100644 (file)
 #include "AliTriggerRunScalers.h"
 #include "AliCTPTimeParams.h" 
 #include "AliESDHLTDecision.h"
-
+#include "AliTriggerInput.h"
 ClassImp(AliReconstruction)
 
 //_____________________________________________________________________________
@@ -3482,6 +3482,21 @@ Bool_t AliReconstruction::GetEventInfo()
   }
   fEventInfo.SetTriggerClasses(trclasses);
 
+  // Write names of active trigger inputs in ESD Header
+  const TObjArray& inputsArray = config->GetInputs(); 
+  Int_t ninputs = inputsArray.GetEntriesFast();
+  for( Int_t iinput=0; iinput < ninputs; iinput++ ) {
+    AliTriggerInput* trginput = (AliTriggerInput*)inputsArray.At(iinput);
+    if (trginput) {
+      Int_t inputIndex = (Int_t)TMath::Nint(TMath::Log2(trginput->GetMask()));
+      AliESDHeader* headeresd = fesd->GetHeader();
+      Int_t trglevel = (Int_t)trginput->GetLevel();
+      if (trglevel == 0) headeresd->SetActiveTriggerInputs(trginput->GetInputName(), inputIndex);
+      if (trglevel == 1) headeresd->SetActiveTriggerInputs(trginput->GetInputName(), inputIndex+24);
+      if (trglevel == 2) headeresd->SetActiveTriggerInputs(trginput->GetInputName(), inputIndex+48);
+    }
+  }
+
   // Set the information in ESD
   fesd->SetTriggerMask(trmask);
   fesd->SetTriggerCluster(clustmask);