Modifications required for marking that the 'Original Data Present' bit should be...
authoraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 Oct 2011 07:52:42 +0000 (07:52 +0000)
committeraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 11 Oct 2011 07:52:42 +0000 (07:52 +0000)
HLT/trigger/AliHLTGlobalTriggerComponent.cxx
HLT/trigger/AliHLTTrigger.cxx
HLT/trigger/AliHLTTrigger.h

index eb8d1a9..2b1725f 100644 (file)
@@ -648,23 +648,40 @@ int AliHLTGlobalTriggerComponent::DoTrigger()
   // If we are dealing with a software trigger on the other hand then
   // mask with the participating detector list.
   // In both cases we must make sure that HLT is part of the readout mask.
+  AliHLTReadoutList readoutlist = decision.ReadoutList();
+  AliHLTReadoutList readoutMask;
   if (CTPData() != NULL and CTPData()->Mask() != 0x0)
   {
-    AliHLTReadoutList readoutlist = decision.ReadoutList();
-    AliHLTReadoutList ctpreadout = CTPData()->ReadoutList(*GetTriggerData());
-    ctpreadout.Enable(AliHLTReadoutList::kHLT);
-    readoutlist.AndEq(ctpreadout);
-    decision.ReadoutList(readoutlist); // override the readout list with the masked one.
+    readoutMask = CTPData()->ReadoutList(*GetTriggerData());
+    readoutMask.Enable(AliHLTReadoutList::kHLT);
   }
   else if (softwareTriggerIsValid)
   {
     assert(fCDH != NULL);
-    AliHLTReadoutList readoutlist = decision.ReadoutList();
     UInt_t detectors = fCDH->GetSubDetectors();
-    AliHLTReadoutList softwareReadout(Int_t(detectors | AliHLTReadoutList::kHLT));
-    readoutlist.AndEq(softwareReadout);
-    decision.ReadoutList(readoutlist); // override the readout list with the masked one.
+    readoutMask = AliHLTReadoutList(Int_t(detectors | AliHLTReadoutList::kHLT));
   }
+  readoutlist.AndEq(readoutMask);
+  decision.ReadoutList(readoutlist); // override the readout list with the masked one.
+    
+  // Also check whether the final readout list equals a full readout of detectors
+  // irrespective of HLT.
+  // Calculate the difference between the input and output list (xor)
+  // and check if any bits are set (ignoring HLT).
+  AliHLTReadoutList::EDetectorId minDetector = ( readoutlist ^ readoutMask ).GetFirstUsedDetector();
+  // Create the readout list specification word:
+  // Bit 0:    Original Data Present (bit 15 of CDH status & error bit to be set)
+  // Bit 1-31: Reserved for future use
+  AliHLTUInt32_t spec = 0x0;
+  if ( AliHLTReadoutList::kNoDetector == minDetector || AliHLTReadoutList::kHLT == minDetector )  // Any bits set after XOR?
+  {
+    spec |=  (AliHLTUInt32_t) 0x1;
+  }
+  else
+  {
+    spec &= ~((AliHLTUInt32_t) 0x1);
+  }
+  SetReadoutListSpecBits(spec);
 
   if (TriggerEvent(&decision, kAliHLTDataTypeGlobalTrigger) == -ENOSPC)
   {
index 57f80a8..0d3b7c8 100644 (file)
@@ -42,7 +42,8 @@ AliHLTTrigger::AliHLTTrigger() :
        fTriggerEventResult(0),
        fDescription(),
        fReadoutList(),
-       fTriggerDomain()
+       fTriggerDomain(),
+       fReadoutListSpecBits(kAliHLTVoidDataSpec)
 {
   // Default constructor sets pointers to NULL.
 }
@@ -142,7 +143,7 @@ int AliHLTTrigger::TriggerEvent(
   
   fTriggerEventResult = PushBack(result, type, spec);
   if (fTriggerEventResult == 0) {
-    fTriggerEventResult = PushBack(readoutlist.Buffer(), readoutlist.BufferSize(), kAliHLTDataTypeReadoutList);
+    fTriggerEventResult = PushBack(readoutlist.Buffer(), readoutlist.BufferSize(), kAliHLTDataTypeReadoutList, fReadoutListSpecBits);
   }
   
   if (fTriggerEventResult == 0) fDecisionMade = true;
index 04ce11f..cb1c798 100644 (file)
@@ -235,6 +235,16 @@ class AliHLTTrigger : public AliHLTProcessor
   void SetReadoutList(const AliHLTReadoutList& value) { fReadoutList = value; }
   
   /**
+   * Returns the DDL readout list block specification bits to be used.
+   */
+  AliHLTUInt32_t GetReadoutListSpecBits() const { return fReadoutListSpecBits; }
+
+  /**
+   * Sets the DDL readout list block specification bits to be used.
+   */
+  void SetReadoutListSpecBits(AliHLTUInt32_t spec) { fReadoutListSpecBits = spec; }
+  
+  /**
    * Returns the trigger domain object.
    */
   const AliHLTTriggerDomain& GetTriggerDomain() const { return fTriggerDomain; }
@@ -327,6 +337,7 @@ class AliHLTTrigger : public AliHLTProcessor
   TString fDescription;   //! The description to use for the trigger decision.
   AliHLTReadoutList fReadoutList; //! The DDL readout list object for the current event being processed.
   AliHLTTriggerDomain fTriggerDomain; //! The trigger domain object for the current event being processed.
+  AliHLTUInt32_t fReadoutListSpecBits;  //! Readout list data block specification bits used when generating the data block.
   
   ClassDef(AliHLTTrigger, 0) // Base class for HLT triggers.