/**************************************************************************
* 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 FindHLTTriggeredEvents.C
* \brief Macro for finding event numbers of HLT triggered events.
*
* This macro is used to generate or print a list of event numbers which had
* a positive HLT trigger decision.
*
* The simplest way to run this macro with defaults (which will process any raw
* data in the current directory) is to run the following command from a terminal
* shell:
* \code
* > aliroot -b -q $ALICE_ROOT/HLT/trigger/macros/FindHLTTriggeredEvents.C
* \endcode
*
* It is also possible to use as input a file or a chunk sitting on the GRID.
* \code
* > aliroot -b -q $ALICE_ROOT/HLT/trigger/macros/FindHLTTriggeredEvents.C'("alien:///alice/data/2010/LHC10h/000137124/raw/10000137124054.10.root")'
* > aliroot -b -q $ALICE_ROOT/HLT/trigger/macros/FindHLTTriggeredEvents.C'("raw://run137124")'
* \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 "AliHLTGlobalTriggerDecision.h"
#include "AliLog.h"
#include "TSystem.h"
#include "TString.h"
#include "TFile.h"
#include "Riostream.h"
#endif
/**
* Finds all the events in raw data that contains a positive HLT decision.
*
* \param [in] dataSource This is the path to the raw data or the ROOT/DATE file
* contining the raw data.
* \param [out] events The output list that will be filled with event numbers of
* the events that were triggered by HLT for the given data source.
* \param [in] triggerCode The HLT trigger code to search for. These must be the same as
* the codes defined in the HLT trigger menu used for producing the data source. If
* this parameter is set to NULL then all HLT triggered events are marked. (default NULL)
* \param [in] firstEvent The event number of the first event to process. (default = 0)
* \param [in] lastEvent The event number of the last event to process. If this is
* less than firstEvent then the maximum events available in the data are
* processed automatically. (default = -1)
* \param [in] print Indicates if the found event information should be printed or not.
* \returns true if there were no problems accessing the data and false otherwise.
*/
bool FindHLTTriggeredEvents(
const char* dataSource,
TArrayI& events,
const char* triggerCode = NULL,
Int_t firstEvent = 0,
Int_t lastEvent = -1,
bool print = true
)
{
gSystem->Load("libHLTrec.so");
// FIXME: Loading the following libraries is a workaround to get rid of warnings from AliHLTOUT.
gSystem->Load("libANALYSIS.so");
gSystem->Load("libANALYSISalice.so");
gSystem->Load("libAliHLTUtil.so");
gSystem->Load("libAliHLTTRD.so");
gSystem->Load("libAliHLTMUON.so");
gSystem->Load("libAliHLTTrigger.so");
TString strfile = dataSource;
if(strfile.BeginsWith("alien://") || strfile.BeginsWith("raw://")) TGrid::Connect("alien");
// 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;
return false;
}
if (! rawReader->IsRawReaderValid())
{
cerr << "ERROR: Raw reader is not valid for '" << dataSource << "'." << endl;
delete rawReader;
return false;
}
AliHLTOUT* hltout = AliHLTOUT::New(rawReader);
if (hltout == NULL)
{
cerr << "ERROR: Could not create an AliHLTOUT object for '" << dataSource << "'." << endl;
delete rawReader;
return false;
}
// Check if we need to process all events or not.
if (lastEvent < firstEvent) lastEvent = 0x7FFFFFFF;
bool decodingOK = true;
// Now step through the events.
for (Int_t currentEvent = firstEvent, eventLoopResult = rawReader->GotoEvent(firstEvent);
currentEvent <= lastEvent && eventLoopResult == kTRUE;
++currentEvent, eventLoopResult = rawReader->NextEvent()
)
{
int result = hltout->Init();
if (result != 0)
{
cerr << "ERROR: could not initialise HLTOUT. Moving to next event." << endl;
hltout->Reset();
decodingOK = false;
continue;
}
// Go through all the data blocks, looking for the HLT global trigger object.
for (result = hltout->SelectFirstDataBlock(kAliHLTDataTypeGlobalTrigger);
result >= 0;
result = hltout->SelectNextDataBlock()
)
{
TObject* obj = hltout->GetDataObject();
if (obj == NULL) continue;
if (obj->IsA()->GetBaseClass("AliHLTGlobalTriggerDecision") != NULL)
{
AliHLTGlobalTriggerDecision* decision = (AliHLTGlobalTriggerDecision*)obj;
bool hltTriggered = false;
if (triggerCode != NULL)
{
hltTriggered = TString(decision->Description()).Contains(triggerCode);
}
else
{
hltTriggered = decision->Result();
}
if (hltTriggered)
{
if (print)
{
cout << "Event " << currentEvent << " in " << dataSource
<< " with event ID = " << hltout->EventId()
<< " (0x" << hex << hltout->EventId() << dec << ")"
<< " was triggered by HLT with \""
<< (triggerCode != NULL ? triggerCode : decision->Description())
<< "\"." << endl;
}
events.Set(events.GetSize()+1);
events[events.GetSize()-1] = currentEvent;
}
}
hltout->ReleaseDataObject(obj);
}
result = hltout->Reset();
if (result != 0)
{
cerr << "ERROR: could not reset HLTOUT properly." << endl;
decodingOK = false;
continue;
}
}
AliHLTOUT::Delete(hltout);
delete rawReader;
return decodingOK;
}
bool FindHLTTriggeredEvents(const char* dataSource = "./")
{
TArrayI events;
return FindHLTTriggeredEvents(dataSource, events, NULL, 0, -1, true);
}
FindHLTTriggeredEvents.C:1 FindHLTTriggeredEvents.C:2 FindHLTTriggeredEvents.C:3 FindHLTTriggeredEvents.C:4 FindHLTTriggeredEvents.C:5 FindHLTTriggeredEvents.C:6 FindHLTTriggeredEvents.C:7 FindHLTTriggeredEvents.C:8 FindHLTTriggeredEvents.C:9 FindHLTTriggeredEvents.C:10 FindHLTTriggeredEvents.C:11 FindHLTTriggeredEvents.C:12 FindHLTTriggeredEvents.C:13 FindHLTTriggeredEvents.C:14 FindHLTTriggeredEvents.C:15 FindHLTTriggeredEvents.C:16 FindHLTTriggeredEvents.C:17 FindHLTTriggeredEvents.C:18 FindHLTTriggeredEvents.C:19 FindHLTTriggeredEvents.C:20 FindHLTTriggeredEvents.C:21 FindHLTTriggeredEvents.C:22 FindHLTTriggeredEvents.C:23 FindHLTTriggeredEvents.C:24 FindHLTTriggeredEvents.C:25 FindHLTTriggeredEvents.C:26 FindHLTTriggeredEvents.C:27 FindHLTTriggeredEvents.C:28 FindHLTTriggeredEvents.C:29 FindHLTTriggeredEvents.C:30 FindHLTTriggeredEvents.C:31 FindHLTTriggeredEvents.C:32 FindHLTTriggeredEvents.C:33 FindHLTTriggeredEvents.C:34 FindHLTTriggeredEvents.C:35 FindHLTTriggeredEvents.C:36 FindHLTTriggeredEvents.C:37 FindHLTTriggeredEvents.C:38 FindHLTTriggeredEvents.C:39 FindHLTTriggeredEvents.C:40 FindHLTTriggeredEvents.C:41 FindHLTTriggeredEvents.C:42 FindHLTTriggeredEvents.C:43 FindHLTTriggeredEvents.C:44 FindHLTTriggeredEvents.C:45 FindHLTTriggeredEvents.C:46 FindHLTTriggeredEvents.C:47 FindHLTTriggeredEvents.C:48 FindHLTTriggeredEvents.C:49 FindHLTTriggeredEvents.C:50 FindHLTTriggeredEvents.C:51 FindHLTTriggeredEvents.C:52 FindHLTTriggeredEvents.C:53 FindHLTTriggeredEvents.C:54 FindHLTTriggeredEvents.C:55 FindHLTTriggeredEvents.C:56 FindHLTTriggeredEvents.C:57 FindHLTTriggeredEvents.C:58 FindHLTTriggeredEvents.C:59 FindHLTTriggeredEvents.C:60 FindHLTTriggeredEvents.C:61 FindHLTTriggeredEvents.C:62 FindHLTTriggeredEvents.C:63 FindHLTTriggeredEvents.C:64 FindHLTTriggeredEvents.C:65 FindHLTTriggeredEvents.C:66 FindHLTTriggeredEvents.C:67 FindHLTTriggeredEvents.C:68 FindHLTTriggeredEvents.C:69 FindHLTTriggeredEvents.C:70 FindHLTTriggeredEvents.C:71 FindHLTTriggeredEvents.C:72 FindHLTTriggeredEvents.C:73 FindHLTTriggeredEvents.C:74 FindHLTTriggeredEvents.C:75 FindHLTTriggeredEvents.C:76 FindHLTTriggeredEvents.C:77 FindHLTTriggeredEvents.C:78 FindHLTTriggeredEvents.C:79 FindHLTTriggeredEvents.C:80 FindHLTTriggeredEvents.C:81 FindHLTTriggeredEvents.C:82 FindHLTTriggeredEvents.C:83 FindHLTTriggeredEvents.C:84 FindHLTTriggeredEvents.C:85 FindHLTTriggeredEvents.C:86 FindHLTTriggeredEvents.C:87 FindHLTTriggeredEvents.C:88 FindHLTTriggeredEvents.C:89 FindHLTTriggeredEvents.C:90 FindHLTTriggeredEvents.C:91 FindHLTTriggeredEvents.C:92 FindHLTTriggeredEvents.C:93 FindHLTTriggeredEvents.C:94 FindHLTTriggeredEvents.C:95 FindHLTTriggeredEvents.C:96 FindHLTTriggeredEvents.C:97 FindHLTTriggeredEvents.C:98 FindHLTTriggeredEvents.C:99 FindHLTTriggeredEvents.C:100 FindHLTTriggeredEvents.C:101 FindHLTTriggeredEvents.C:102 FindHLTTriggeredEvents.C:103 FindHLTTriggeredEvents.C:104 FindHLTTriggeredEvents.C:105 FindHLTTriggeredEvents.C:106 FindHLTTriggeredEvents.C:107 FindHLTTriggeredEvents.C:108 FindHLTTriggeredEvents.C:109 FindHLTTriggeredEvents.C:110 FindHLTTriggeredEvents.C:111 FindHLTTriggeredEvents.C:112 FindHLTTriggeredEvents.C:113 FindHLTTriggeredEvents.C:114 FindHLTTriggeredEvents.C:115 FindHLTTriggeredEvents.C:116 FindHLTTriggeredEvents.C:117 FindHLTTriggeredEvents.C:118 FindHLTTriggeredEvents.C:119 FindHLTTriggeredEvents.C:120 FindHLTTriggeredEvents.C:121 FindHLTTriggeredEvents.C:122 FindHLTTriggeredEvents.C:123 FindHLTTriggeredEvents.C:124 FindHLTTriggeredEvents.C:125 FindHLTTriggeredEvents.C:126 FindHLTTriggeredEvents.C:127 FindHLTTriggeredEvents.C:128 FindHLTTriggeredEvents.C:129 FindHLTTriggeredEvents.C:130 FindHLTTriggeredEvents.C:131 FindHLTTriggeredEvents.C:132 FindHLTTriggeredEvents.C:133 FindHLTTriggeredEvents.C:134 FindHLTTriggeredEvents.C:135 FindHLTTriggeredEvents.C:136 FindHLTTriggeredEvents.C:137 FindHLTTriggeredEvents.C:138 FindHLTTriggeredEvents.C:139 FindHLTTriggeredEvents.C:140 FindHLTTriggeredEvents.C:141 FindHLTTriggeredEvents.C:142 FindHLTTriggeredEvents.C:143 FindHLTTriggeredEvents.C:144 FindHLTTriggeredEvents.C:145 FindHLTTriggeredEvents.C:146 FindHLTTriggeredEvents.C:147 FindHLTTriggeredEvents.C:148 FindHLTTriggeredEvents.C:149 FindHLTTriggeredEvents.C:150 FindHLTTriggeredEvents.C:151 FindHLTTriggeredEvents.C:152 FindHLTTriggeredEvents.C:153 FindHLTTriggeredEvents.C:154 FindHLTTriggeredEvents.C:155 FindHLTTriggeredEvents.C:156 FindHLTTriggeredEvents.C:157 FindHLTTriggeredEvents.C:158 FindHLTTriggeredEvents.C:159 FindHLTTriggeredEvents.C:160 FindHLTTriggeredEvents.C:161 FindHLTTriggeredEvents.C:162 FindHLTTriggeredEvents.C:163 FindHLTTriggeredEvents.C:164 FindHLTTriggeredEvents.C:165 FindHLTTriggeredEvents.C:166 FindHLTTriggeredEvents.C:167 FindHLTTriggeredEvents.C:168 FindHLTTriggeredEvents.C:169 FindHLTTriggeredEvents.C:170 FindHLTTriggeredEvents.C:171 FindHLTTriggeredEvents.C:172 FindHLTTriggeredEvents.C:173 FindHLTTriggeredEvents.C:174 FindHLTTriggeredEvents.C:175 FindHLTTriggeredEvents.C:176 FindHLTTriggeredEvents.C:177 FindHLTTriggeredEvents.C:178 FindHLTTriggeredEvents.C:179 FindHLTTriggeredEvents.C:180 FindHLTTriggeredEvents.C:181 FindHLTTriggeredEvents.C:182 FindHLTTriggeredEvents.C:183 FindHLTTriggeredEvents.C:184 FindHLTTriggeredEvents.C:185 FindHLTTriggeredEvents.C:186 FindHLTTriggeredEvents.C:187 FindHLTTriggeredEvents.C:188 FindHLTTriggeredEvents.C:189 FindHLTTriggeredEvents.C:190 FindHLTTriggeredEvents.C:191 FindHLTTriggeredEvents.C:192