--- /dev/null
+// $Id$
+/**
+ * @file print-RAW-HLTdecision.C
+ * @brief Print HLT decisions per event of RAW data
+ * The uses the RawReader interface for data access and can be used
+ * with different types of data as long as a RawReader is implemented.
+ *
+ * <pre>
+ * Usage: aliroot -b -q print-RAW-HLTdecision.C'(input, minEvent, maxEvent)'
+ *
+ * For help: aliroot -b -q print-RAW-HLTdecision.C
+ * </pre>
+ *
+ * @author Matthias.Richter@ift.uib.no
+ * @ingroup alihlt_programs
+ */
+void print_RAW_HLTdecision(const char* rawFileName,
+ int minEvent=0, int maxEvent=-1)
+{
+ AliHLTLogging log;
+ log.SetGlobalLoggingLevel(0x7c);
+
+ AliRawReader* rawReader=NULL;
+ if (rawFileName && rawFileName[0]!=0) rawReader=AliRawReader::Create(rawFileName);
+ if (!rawFileName || rawFileName[0]==0 || !rawReader) {
+ if (rawFileName && rawFileName[0]!=0)
+ cerr << "can not open raw reader " << rawFileName << endl;
+ else
+ cerr << "print-RAW-HLTdecision.C Print HLT decisions per event of RAW data" << endl;
+ cerr << "===============================================================" << endl;
+ cerr << "usage: aliroot -b -q -l print-RAW-HLTdecision.C'(rawFileName" << endl;
+ cerr << " minEvent, maxEvent)'" << endl << endl;
+ cerr << " Parameter:" << endl;
+ cerr << " rawFileName e.g \"raw.root\", \"./\"" << endl;
+ cerr << " minEvent first event (optional)" << endl;
+ cerr << " maxEvent last event (optional)" << endl;
+ cerr << "===============================================================" << endl;
+ return;
+ }
+
+ rawReader->RewindEvents();
+ int event=0;
+ if (!rawReader->NextEvent()) {
+ cout << "no events found in " << rawFileName << endl;
+ return;
+ }
+
+ AliHLTOUT* pHLTOUT=AliHLTOUT::New(rawReader);
+ if (!pHLTOUT) {
+ cerr << "can not create HLTOUT instance" << endl;
+ return;
+ }
+
+ do {
+ if (minEvent>=0 && event<minEvent) continue;
+ cout << "===================== event " << event << " ==========================" << endl;
+ if (pHLTOUT->Init()<0) {
+ cerr << "failed to initialize HLTOUT for event " << event << endl;
+ break;
+ }
+ bool found=false;
+ do {
+ TObject* decision=NULL;
+ // in the original implementation, the GlobalTriggerDecision has been
+ // sent with data type kAliHLTDataTypeTObject, thats why we check for
+ // both
+ if (pHLTOUT->SelectFirstDataBlock(kAliHLTDataTypeGlobalTrigger)>=0 ||
+ pHLTOUT->SelectFirstDataBlock(kAliHLTDataTypeTObject)>=0) {
+ decision=pHLTOUT->GetDataObject();
+ }
+ if (decision) {
+ if (decision->IsA() == AliHLTGlobalTriggerDecision::Class()) {
+ cout << "HLT Global Trigger: " << decision->GetOption() << " " << decision->GetTitle() << endl;
+ decision->Print();
+ found=true;
+ }
+ pHLTOUT->ReleaseDataObject(decision);
+ }
+ } while (!found && pHLTOUT->SelectNextDataBlock());
+
+ if (!found) {
+ cout << " no HLT decision found" << endl;
+ }
+ pHLTOUT->Reset();
+ } while (rawReader->NextEvent() && (maxEvent<0 || event<maxEvent));
+}
+
+void print_RAW_HLTdecision()
+{
+ // print usage
+ print_RAW_HLTdecision(NULL);
+}