implementing the short info option which includes a TNames array instead of input...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Nov 2009 00:12:08 +0000 (00:12 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Nov 2009 00:12:08 +0000 (00:12 +0000)
adding the option -include-input=both to include both the objects and short info
bugfix in the parsing of the -include-input option

There is currently a problem in the streaming of the arrays of the GlobalTriggerDecision which causes the
short info not to show up in the extracted object when there are no trigger decisions. Furthermore only the
the fisrt object of the input object array is there after extracting (in mode 'both'). The second one which
is the CTPData object is missing. Under investigation.

HLT/trigger/AliHLTGlobalTriggerComponent.cxx
HLT/trigger/AliHLTGlobalTriggerComponent.h

index 938c442..8fcc9de 100644 (file)
@@ -42,6 +42,7 @@
 #include "TInterpreter.h"
 #include "TDatime.h"
 #include "TClass.h"
+#include "TNamed.h"
 #include <fstream>
 #include <cerrno>
 #include <cassert>
@@ -232,7 +233,7 @@ Int_t AliHLTGlobalTriggerComponent::DoInit(int argc, const char** argv)
       continue;
     }
 
-    if (strcmp(argv[i], "-include-input") == 0)
+    if (strstr(argv[i], "-include-input") == argv[i])
     {
       SetBit(kForwardInput,false);
       TString param=argv[i];
@@ -245,11 +246,16 @@ Int_t AliHLTGlobalTriggerComponent::DoInit(int argc, const char** argv)
       }
       else if (param.CompareTo("=short")==0) 
       {
-        HLTWarning("short info on objects and trigger decisions not yet implemented");
-        //HLTInfo("including short info on objects and trigger decisions");
+        HLTInfo("including short info on objects and trigger decisions");
         SetBit(kIncludeShort);
         SetBit(kIncludeInput, false);
       }
+      else if (param.CompareTo("=both")==0) 
+      {
+        HLTInfo("including input objects, trigger decisions and short info");
+        SetBit(kIncludeShort);
+        SetBit(kIncludeInput);
+      }
       else if (param.CompareTo("=objects")==0 || param.IsNull())
       {
         HLTInfo("including input objects and trigger decisions");
@@ -446,8 +452,9 @@ int AliHLTGlobalTriggerComponent::DoTrigger()
   }
   
   // Add the input objects used to the global decision.
+  TClonesArray* pShortInfo=NULL;
   if (TestBit(kIncludeShort)) {
-    // short info to be implemented
+    pShortInfo=new TClonesArray(TNamed::Class(), GetNumberOfInputBlocks());
   }
   obj = GetFirstInputObject();
   while (obj != NULL)
@@ -465,8 +472,24 @@ int AliHLTGlobalTriggerComponent::DoTrigger()
       decision.AddInputObject(obj);
     }
     }
+
+    if (TestBit(kIncludeShort)) {
+      int entries=pShortInfo->GetEntriesFast();
+      new ((*pShortInfo)[entries]) TNamed(obj->GetName(), obj->GetTitle());
+      if (obj->IsA() == AliHLTTriggerDecision::Class()) {
+       (*pShortInfo)[entries]->SetBit(BIT(16)); // indicate that this is a trigger decision
+       (*pShortInfo)[entries]->SetBit(BIT(15), ((AliHLTTriggerDecision*)obj)->Result());
+      }
+    }
+
     obj = GetNextInputObject();
   }
+  if (pShortInfo) {
+    decision.AddInputObject(pShortInfo);
+    pShortInfo->Delete();
+    delete pShortInfo;
+    pShortInfo=NULL;
+  }
 
   if (!TestBit(kSkipCTP) && CTPData()) decision.AddInputObject(CTPData());
 
index c8d8cfb..d1dfb83 100644 (file)
@@ -63,10 +63,11 @@ class AliHLTGlobalTrigger;
  *      This will also add a short info on the input objects and decisions, like
  *      -include-input=short, to switch off -include-input=none can be placed after the
  *      parameter
- * \li -include-input[=none,short,objects] <br>
+ * \li -include-input[=none,short,objects,both] <br>
  *      Steer adding of input objects to the global HLT trigger decision.
  *      Options: none - include nothing, short - include a short TNames array,
  *               objects - include objects, by default on
+ *               both - include both objects and short info
  * \li -process-all-events <br>
  *      Indicates that all events should be processed with the global trigger logic and
  *      not just the data events. The default is not to process just the data events.