]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding macro to dump global HLT output objects.
authoraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 16 Aug 2010 17:23:44 +0000 (17:23 +0000)
committeraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 16 Aug 2010 17:23:44 +0000 (17:23 +0000)
HLT/trigger/macros/DumpGlobalTrigger.C [new file with mode: 0644]

diff --git a/HLT/trigger/macros/DumpGlobalTrigger.C b/HLT/trigger/macros/DumpGlobalTrigger.C
new file mode 100644 (file)
index 0000000..d5f2049
--- /dev/null
@@ -0,0 +1,190 @@
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        *
+ * All rights reserved.                                                   *
+ *                                                                        *
+ * Primary Authors:                                                       *
+ *   Artur Szostak <artursz@iafrica.com>                                  *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+// $Id: $
+
+/**
+ * \ingroup macros
+ * \file DumpGlobalTrigger.C
+ * \brief Macro for dumping HLT global trigger decisions.
+ *
+ * This macro is used to dump to screen the HLT global trigger decisions encoded
+ * in AliHLTGlobalTriggerDecision objects found in the HLT raw data. The raw data
+ * should be packed in a ROOT or DATE file, or in DDL data files in raw*
+ * directories. An appropriate AliRawReader is created to read the data.
+ *
+ * The simplest way to run this macro with defaults is to run the following
+ * command from a terminal shell:
+ * \code
+ *   > aliroot -b -q $ALICE_ROOT/HLT/trigger/macros/DumpGlobalTrigger.C
+ * \endcode
+ *
+ * \author Artur Szostak <artursz@iafrica.com>
+ */
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include "AliRawReader.h"
+#include "AliHLTPluginBase.h"
+#include "AliHLTOUT.h"
+#include "AliHLTSystem.h"
+#include "AliHLTComponent.h"
+#include "AliLog.h"
+#include "TSystem.h"
+#include "TFile.h"
+#include "Riostream.h"
+#endif
+
+/**
+ * Dumps the AliHLTGlobalTriggerDecision objects found in HLT output data.
+ *
+ * \param dataSource  This is the path to the raw data or the ROOT/DATE file
+ *     contining the raw data. (default is the current directory).
+ * \param firstEvent  The event number of the first event to process. (default = 0)
+ * \param lastEvent  The event number of the last event to process. If this is
+ *     less than firstEvent then it is set to maximum events available
+ *     automatically. (default = -1)
+ * \param output  Specifies the name of a ROOT output file. This file will be
+ *     generated and the objects written to it. If the value is NULL then
+ *     no output is written to file. (default = NULL)
+ * \param debug  Specifies if full debug messages should be printed.
+ */
+void DumpGlobalTrigger(
+               const char* dataSource = "./",
+               Int_t firstEvent = 0,
+               Int_t lastEvent = -1,
+               const char* output = NULL,
+               bool debug = false
+       )
+{
+       if (debug)
+       {
+               AliLog::SetModuleDebugLevel("HLT", AliLog::kMaxType);
+               AliHLTSystem* sys = AliHLTPluginBase::GetInstance();
+               sys->SetGlobalLoggingLevel(kHLTLogAll);
+       }
+       
+       gSystem->Load("libHLTrec.so");
+       TFile* file = NULL;
+       if (output != NULL)
+       {
+               file = new TFile(output, "RECREATE");
+               if (file == NULL)
+               {
+                       cerr << "ERROR: Could not create file '" << output << "'." << endl;
+                       return;
+               }
+       }
+       
+       // Setup the raw reader and HLTOUT handler.
+       AliRawReader* rawReader = AliRawReader::Create(dataSource);
+       if (rawReader == NULL)
+       {
+               cerr << "ERROR: Could not create raw reader for '" << dataSource << "'." << endl;
+               if (file != NULL) delete file;
+               return;
+       }
+       if (! rawReader->IsRawReaderValid())
+       {
+               cerr << "ERROR: Raw reader is not valid for '" << dataSource << "'." << endl;
+               delete rawReader;
+               if (file != NULL) delete file;
+               return;
+       }
+       AliHLTOUT* hltout = AliHLTOUT::New(rawReader);
+       if (hltout == NULL)
+       {
+               cerr << "ERROR: Could not create an AliHLTOUT object for '" << dataSource << "'." << endl;
+               delete rawReader;
+               if (file != NULL) delete file;
+               return;
+       }
+       
+       // Make sure that the lastEvent is greater than firstEvent.
+       if (lastEvent < firstEvent) lastEvent = rawReader->GetNumberOfEvents();
+       if (lastEvent < firstEvent) lastEvent = firstEvent;
+       
+       // Need to call NextEvent once here or we will start at the wrong event.
+       if (! rawReader->NextEvent())
+       {
+               cout << "No events found in '" << dataSource << "'." << endl;
+               AliHLTOUT::Delete(hltout);
+               delete rawReader;
+               if (file != NULL) delete file;
+               return;
+       }
+       
+       // Now step through the events.
+       for (int i = 0; i < firstEvent; i++) rawReader->NextEvent();
+       for (int i = firstEvent; i <= lastEvent; i++)
+       {
+               int result = hltout->Init();
+               if (result != 0)
+               {
+                       cerr << "ERROR: could not initialise HLTOUT." << endl;
+                       hltout->Reset();
+                       continue;
+               }
+               cout << "#################### Event " << i << " in " << dataSource
+                       << " has event ID = " << hltout->EventId()
+                       << " (0x" << hex << hltout->EventId() << dec << ")"
+                       << " ####################" << endl;
+               
+               for (result = hltout->SelectFirstDataBlock();
+                    result >= 0;
+                    result = hltout->SelectNextDataBlock()
+                   )
+               {
+                       AliHLTComponentDataType dt;
+                       AliHLTUInt32_t spec = 0;
+                       hltout->GetDataBlockDescription(dt, spec);
+                       TObject* obj = hltout->GetDataObject();
+                       if (obj == NULL) continue;
+                       if (obj->IsA()->GetBaseClass("AliHLTGlobalTriggerDecision") != NULL)
+                       {
+                               if (dt != kAliHLTDataTypeGlobalTrigger)
+                               {
+                                       cerr << "WARNING: Found an AliHLTGlobalTriggerDecision object in a data block of type '"
+                                               << AliHLTComponent::DataType2Text(dt).c_str()
+                                               << "' but expected '"
+                                               << AliHLTComponent::DataType2Text(kAliHLTDataTypeGlobalTrigger).c_str()
+                                               << "'." << endl;
+                               }
+                               if (file != NULL)
+                               {
+                                       obj->Write(
+                                               Form("HLTGlobalDecision_event_0x%llX", hltout->EventId()),
+                                               TObject::kOverwrite
+                                       );
+                               }
+                               obj->Print();
+                       }
+                       hltout->ReleaseDataObject(obj);
+               }
+               
+               result = hltout->Reset();
+               if (result != 0)
+               {
+                       cerr << "ERROR: could not reset HLTOUT." << endl;
+                       hltout->Reset();
+                       continue;
+               }
+               rawReader->NextEvent();
+       }
+       
+       AliHLTOUT::Delete(hltout);
+       delete rawReader;
+       if (file != NULL) delete file;
+}