/**************************************************************************
* 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 SanityCheckGlobalTriggerDecisions.C
* \brief Macro for performing sanity checks on the HLT global trigger decisions.
*
* Basic sanity checks are performed by the SanityCheckGlobalTriggerDecisions macro
* on the HLT global trigger counters. These checks include:
* - The counters must be increasing with increasing event ID.
* - The total events counter must be the largest and the number of events read
* by the raw reader must be less than or equal to the total events counter.
*
* 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/SanityCheckGlobalTriggerDecisions.C
* \endcode
* This will expect data in DDL directory format in the current directory.
*
* \author Artur Szostak <artursz@iafrica.com>
*/
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliHLTGlobalTriggerDecision.h"
#include "TSystem.h"
#include "TString.h"
#include "TFile.h"
#include "TCollection.h"
#include "TMap.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TArrayI.h"
#include "TArrayL64.h"
#include "Riostream.h"
#endif
#include "DumpGlobalTrigger.C"
/**
* Checks to see if a file contains global HLT trigger decision objects.
* \param filename The name of the ROOT file to check.
* \returns true if the file contains AliHLTGlobalTriggerDecision objects and
* false otherwise.
*/
bool FileContainsDecisions(const char* filename)
{
TFile* file = new TFile(filename, "READ");
if (file == NULL)
{
cerr << "ERROR: Could not create a TFile object to open '"
<< filename << "'." << endl;
return false;
}
TIter next(file->GetListOfKeys());
TObject* key = NULL;
bool result = false;
while ((key = next()) != NULL)
{
TObject* obj = file->Get(key->GetName());
if (obj == NULL) continue;
if (TString(obj->ClassName()) == "AliHLTGlobalTriggerDecision")
{
result = true;
break;
}
}
delete file;
return result;
}
/**
* Routine to print the counters in a HLT global trigger decision object.
* \param key The key object storing the key name of the object in the ROOT file.
* \param decision The HLT global decision object to print.
*/
void PrintCounters(const TObject* key, const AliHLTGlobalTriggerDecision* decision)
{
if (key == NULL) return;
if (decision == NULL) return;
cout << key->GetName() << " (Global component ID = " << decision->GetUniqueID() << "):";
const TArrayL64& counters = decision->Counters();
for (Int_t i = 0; i < counters.GetSize(); ++i)
{
cout << " " << counters[i];
}
if (counters.GetSize() <= 0) cout << "(none)";
cout << endl;
}
/**
* Performs sanity checks on the global HLT trigger counters found in the raw 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).
* One can also specify the output ROOT file as generated by the
* DumpGlobalTrigger.C macro directly.
* \param firstEvent The event number of the first event to process. (default = 0)
* This parameter is ignored if dataSource points to a file containing
* AliHLTGlobalTriggerDecision objects.
* \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)
* This parameter is ignored if dataSource points to a file containing
* AliHLTGlobalTriggerDecision objects.
* \param debug Specifies if full debug messages should be printed when running
* the DumpGlobalTrigger.C macro.
* \returns true if the data passed all validity checks and false if there was a problem.
*/
bool SanityCheckGlobalTriggerDecisions(
const char* dataSource = "./",
Int_t firstEvent = 0,
Int_t lastEvent = -1,
bool debug = false
)
{
const char* outputFile = "globalTriggerDecisions.root";
if ((! TString(dataSource).EndsWith(".root")) ||
(TString(dataSource).EndsWith(".root") && ! FileContainsDecisions(dataSource))
)
{
if (gSystem->Exec(Form("test -f %s", outputFile)) == 0)
{
cerr << "ERROR: File " << outputFile
<< " already exists. It must be moved or removed."
<< " This script will not overwrite it."
<< endl;
return false;
}
DumpGlobalTrigger(dataSource, firstEvent, lastEvent, outputFile, debug);
}
else
{
outputFile = dataSource;
}
TMap map;
map.SetOwnerKeyValue(kTRUE, kTRUE);
TObjArray eventIds;
eventIds.SetOwner(kFALSE);
TArrayI objIds;
TFile* file = new TFile(outputFile, "READ");
if (file == NULL)
{
cerr << "ERROR: Could not create a TFile object to open '"
<< outputFile << "'." << endl;
return false;
}
TIter next(file->GetListOfKeys());
TObject* key = NULL;
while ((key = next()) != NULL)
{
TObject* obj = file->Get(key->GetName());
if (obj == NULL)
{
cerr << "Warning: Could not fetch object '" << key->GetName() << "'." << endl;
continue;
}
TObjString* id = new TObjString(key->GetName());
map.Add(id, obj->Clone());
eventIds.Add(id);
bool addID = true;
for (Int_t i = 0; i < objIds.GetSize(); ++i)
{
if (objIds[i] == Int_t(obj->GetUniqueID()))
{
addID = false;
break;
}
}
if (addID)
{
objIds.Set(objIds.GetSize()+1);
objIds[objIds.GetSize()-1] = Int_t(obj->GetUniqueID());
}
}
delete file;
eventIds.Sort(); // Must sort the events in order of increasing event ID.
ULong64_t totalCounters = 0;
bool result = true;
for (Int_t n = 0; n < objIds.GetSize(); ++n)
{
UInt_t objId = UInt_t(objIds[n]);
TObject* oldKey = NULL;
AliHLTGlobalTriggerDecision* oldDecision = NULL;
TIter nextEvent(&eventIds);
AliHLTGlobalTriggerDecision* decision = NULL;
while ((key = nextEvent()) != NULL)
{
TPair* pair = (TPair*) map.FindObject(key->GetName());
if (pair == NULL)
{
cerr << "Warning: Could not find trigger decision '" << key->GetName() << "' in the map." << endl;
continue;
}
decision = (AliHLTGlobalTriggerDecision*) pair->Value();
if (decision == NULL)
{
cerr << "Warning: The trigger decision object for '" << key->GetName() << "' was NULL in the map." << endl;
continue;
}
if (decision->GetUniqueID() != objId) continue; // Filter on the current ID we are handling.
bool printCounters = false;
const TArrayL64& counters = decision->Counters();
// Check that all current counters are larger than the old ones.
if (oldDecision != NULL)
{
const TArrayL64& oldCounters = oldDecision->Counters();
if (counters.GetSize() == oldCounters.GetSize())
{
for (Int_t i = 0; i < counters.GetSize(); ++i)
{
if (oldCounters[i] > counters[i])
{
cerr << "ERROR: Previous counter value " << oldCounters[i]
<< " from object " << oldKey->GetName()
<< " is larger than the new one " << counters[i]
<< " from " << key->GetName()
<< "." << endl;
printCounters = true;
result = false;
}
}
}
else
{
cerr << "ERROR: Number of previous counters from object " << oldKey->GetName()
<< " do not match the current counters from " << key->GetName()
<< "." << endl;
printCounters = true;
result = false;
}
}
// Check that all counters are larger than the total counter at the end.
if (counters.GetSize() > 0)
{
for (Int_t i = 0; i < counters.GetSize()-1; ++i)
{
if (counters[i] > counters[counters.GetSize()-1])
{
cerr << "ERROR: Counter " << i
<< " with value " << counters[i]
<< " from object " << oldKey->GetName()
<< " is larger than the last counter " << counters[counters.GetSize()-1]
<< "." << endl;
printCounters = true;
result = false;
}
}
}
if (debug && ! printCounters) PrintCounters(key, decision);
if (printCounters)
{
cout << "Previous counters: "; PrintCounters(oldKey, oldDecision);
cout << " Current counters: "; PrintCounters(key, decision);
cout << endl;
}
oldDecision = decision;
oldKey = key;
}
if (oldDecision != NULL)
{
if (oldDecision->Counters().GetSize() > 0)
{
// oldDecision will contain the last counter, which we use to get
// the total number of events seen by the global trigger component.
const TArrayL64& oldCounters = oldDecision->Counters();
totalCounters += oldCounters[oldCounters.GetSize()-1];
}
}
}
if (ULong64_t(eventIds.GetEntries()) > totalCounters)
{
cerr << "ERROR: The total number of events counters added up to " << totalCounters
<< ", but the total number of events seen on file is " << eventIds.GetEntries()
<< ". This is inconsistent." << endl;
result = false;
}
return result;
}
SanityCheckGlobalTriggerDecisions.C:1 SanityCheckGlobalTriggerDecisions.C:2 SanityCheckGlobalTriggerDecisions.C:3 SanityCheckGlobalTriggerDecisions.C:4 SanityCheckGlobalTriggerDecisions.C:5 SanityCheckGlobalTriggerDecisions.C:6 SanityCheckGlobalTriggerDecisions.C:7 SanityCheckGlobalTriggerDecisions.C:8 SanityCheckGlobalTriggerDecisions.C:9 SanityCheckGlobalTriggerDecisions.C:10 SanityCheckGlobalTriggerDecisions.C:11 SanityCheckGlobalTriggerDecisions.C:12 SanityCheckGlobalTriggerDecisions.C:13 SanityCheckGlobalTriggerDecisions.C:14 SanityCheckGlobalTriggerDecisions.C:15 SanityCheckGlobalTriggerDecisions.C:16 SanityCheckGlobalTriggerDecisions.C:17 SanityCheckGlobalTriggerDecisions.C:18 SanityCheckGlobalTriggerDecisions.C:19 SanityCheckGlobalTriggerDecisions.C:20 SanityCheckGlobalTriggerDecisions.C:21 SanityCheckGlobalTriggerDecisions.C:22 SanityCheckGlobalTriggerDecisions.C:23 SanityCheckGlobalTriggerDecisions.C:24 SanityCheckGlobalTriggerDecisions.C:25 SanityCheckGlobalTriggerDecisions.C:26 SanityCheckGlobalTriggerDecisions.C:27 SanityCheckGlobalTriggerDecisions.C:28 SanityCheckGlobalTriggerDecisions.C:29 SanityCheckGlobalTriggerDecisions.C:30 SanityCheckGlobalTriggerDecisions.C:31 SanityCheckGlobalTriggerDecisions.C:32 SanityCheckGlobalTriggerDecisions.C:33 SanityCheckGlobalTriggerDecisions.C:34 SanityCheckGlobalTriggerDecisions.C:35 SanityCheckGlobalTriggerDecisions.C:36 SanityCheckGlobalTriggerDecisions.C:37 SanityCheckGlobalTriggerDecisions.C:38 SanityCheckGlobalTriggerDecisions.C:39 SanityCheckGlobalTriggerDecisions.C:40 SanityCheckGlobalTriggerDecisions.C:41 SanityCheckGlobalTriggerDecisions.C:42 SanityCheckGlobalTriggerDecisions.C:43 SanityCheckGlobalTriggerDecisions.C:44 SanityCheckGlobalTriggerDecisions.C:45 SanityCheckGlobalTriggerDecisions.C:46 SanityCheckGlobalTriggerDecisions.C:47 SanityCheckGlobalTriggerDecisions.C:48 SanityCheckGlobalTriggerDecisions.C:49 SanityCheckGlobalTriggerDecisions.C:50 SanityCheckGlobalTriggerDecisions.C:51 SanityCheckGlobalTriggerDecisions.C:52 SanityCheckGlobalTriggerDecisions.C:53 SanityCheckGlobalTriggerDecisions.C:54 SanityCheckGlobalTriggerDecisions.C:55 SanityCheckGlobalTriggerDecisions.C:56 SanityCheckGlobalTriggerDecisions.C:57 SanityCheckGlobalTriggerDecisions.C:58 SanityCheckGlobalTriggerDecisions.C:59 SanityCheckGlobalTriggerDecisions.C:60 SanityCheckGlobalTriggerDecisions.C:61 SanityCheckGlobalTriggerDecisions.C:62 SanityCheckGlobalTriggerDecisions.C:63 SanityCheckGlobalTriggerDecisions.C:64 SanityCheckGlobalTriggerDecisions.C:65 SanityCheckGlobalTriggerDecisions.C:66 SanityCheckGlobalTriggerDecisions.C:67 SanityCheckGlobalTriggerDecisions.C:68 SanityCheckGlobalTriggerDecisions.C:69 SanityCheckGlobalTriggerDecisions.C:70 SanityCheckGlobalTriggerDecisions.C:71 SanityCheckGlobalTriggerDecisions.C:72 SanityCheckGlobalTriggerDecisions.C:73 SanityCheckGlobalTriggerDecisions.C:74 SanityCheckGlobalTriggerDecisions.C:75 SanityCheckGlobalTriggerDecisions.C:76 SanityCheckGlobalTriggerDecisions.C:77 SanityCheckGlobalTriggerDecisions.C:78 SanityCheckGlobalTriggerDecisions.C:79 SanityCheckGlobalTriggerDecisions.C:80 SanityCheckGlobalTriggerDecisions.C:81 SanityCheckGlobalTriggerDecisions.C:82 SanityCheckGlobalTriggerDecisions.C:83 SanityCheckGlobalTriggerDecisions.C:84 SanityCheckGlobalTriggerDecisions.C:85 SanityCheckGlobalTriggerDecisions.C:86 SanityCheckGlobalTriggerDecisions.C:87 SanityCheckGlobalTriggerDecisions.C:88 SanityCheckGlobalTriggerDecisions.C:89 SanityCheckGlobalTriggerDecisions.C:90 SanityCheckGlobalTriggerDecisions.C:91 SanityCheckGlobalTriggerDecisions.C:92 SanityCheckGlobalTriggerDecisions.C:93 SanityCheckGlobalTriggerDecisions.C:94 SanityCheckGlobalTriggerDecisions.C:95 SanityCheckGlobalTriggerDecisions.C:96 SanityCheckGlobalTriggerDecisions.C:97 SanityCheckGlobalTriggerDecisions.C:98 SanityCheckGlobalTriggerDecisions.C:99 SanityCheckGlobalTriggerDecisions.C:100 SanityCheckGlobalTriggerDecisions.C:101 SanityCheckGlobalTriggerDecisions.C:102 SanityCheckGlobalTriggerDecisions.C:103 SanityCheckGlobalTriggerDecisions.C:104 SanityCheckGlobalTriggerDecisions.C:105 SanityCheckGlobalTriggerDecisions.C:106 SanityCheckGlobalTriggerDecisions.C:107 SanityCheckGlobalTriggerDecisions.C:108 SanityCheckGlobalTriggerDecisions.C:109 SanityCheckGlobalTriggerDecisions.C:110 SanityCheckGlobalTriggerDecisions.C:111 SanityCheckGlobalTriggerDecisions.C:112 SanityCheckGlobalTriggerDecisions.C:113 SanityCheckGlobalTriggerDecisions.C:114 SanityCheckGlobalTriggerDecisions.C:115 SanityCheckGlobalTriggerDecisions.C:116 SanityCheckGlobalTriggerDecisions.C:117 SanityCheckGlobalTriggerDecisions.C:118 SanityCheckGlobalTriggerDecisions.C:119 SanityCheckGlobalTriggerDecisions.C:120 SanityCheckGlobalTriggerDecisions.C:121 SanityCheckGlobalTriggerDecisions.C:122 SanityCheckGlobalTriggerDecisions.C:123 SanityCheckGlobalTriggerDecisions.C:124 SanityCheckGlobalTriggerDecisions.C:125 SanityCheckGlobalTriggerDecisions.C:126 SanityCheckGlobalTriggerDecisions.C:127 SanityCheckGlobalTriggerDecisions.C:128 SanityCheckGlobalTriggerDecisions.C:129 SanityCheckGlobalTriggerDecisions.C:130 SanityCheckGlobalTriggerDecisions.C:131 SanityCheckGlobalTriggerDecisions.C:132 SanityCheckGlobalTriggerDecisions.C:133 SanityCheckGlobalTriggerDecisions.C:134 SanityCheckGlobalTriggerDecisions.C:135 SanityCheckGlobalTriggerDecisions.C:136 SanityCheckGlobalTriggerDecisions.C:137 SanityCheckGlobalTriggerDecisions.C:138 SanityCheckGlobalTriggerDecisions.C:139 SanityCheckGlobalTriggerDecisions.C:140 SanityCheckGlobalTriggerDecisions.C:141 SanityCheckGlobalTriggerDecisions.C:142 SanityCheckGlobalTriggerDecisions.C:143 SanityCheckGlobalTriggerDecisions.C:144 SanityCheckGlobalTriggerDecisions.C:145 SanityCheckGlobalTriggerDecisions.C:146 SanityCheckGlobalTriggerDecisions.C:147 SanityCheckGlobalTriggerDecisions.C:148 SanityCheckGlobalTriggerDecisions.C:149 SanityCheckGlobalTriggerDecisions.C:150 SanityCheckGlobalTriggerDecisions.C:151 SanityCheckGlobalTriggerDecisions.C:152 SanityCheckGlobalTriggerDecisions.C:153 SanityCheckGlobalTriggerDecisions.C:154 SanityCheckGlobalTriggerDecisions.C:155 SanityCheckGlobalTriggerDecisions.C:156 SanityCheckGlobalTriggerDecisions.C:157 SanityCheckGlobalTriggerDecisions.C:158 SanityCheckGlobalTriggerDecisions.C:159 SanityCheckGlobalTriggerDecisions.C:160 SanityCheckGlobalTriggerDecisions.C:161 SanityCheckGlobalTriggerDecisions.C:162 SanityCheckGlobalTriggerDecisions.C:163 SanityCheckGlobalTriggerDecisions.C:164 SanityCheckGlobalTriggerDecisions.C:165 SanityCheckGlobalTriggerDecisions.C:166 SanityCheckGlobalTriggerDecisions.C:167 SanityCheckGlobalTriggerDecisions.C:168 SanityCheckGlobalTriggerDecisions.C:169 SanityCheckGlobalTriggerDecisions.C:170 SanityCheckGlobalTriggerDecisions.C:171 SanityCheckGlobalTriggerDecisions.C:172 SanityCheckGlobalTriggerDecisions.C:173 SanityCheckGlobalTriggerDecisions.C:174 SanityCheckGlobalTriggerDecisions.C:175 SanityCheckGlobalTriggerDecisions.C:176 SanityCheckGlobalTriggerDecisions.C:177 SanityCheckGlobalTriggerDecisions.C:178 SanityCheckGlobalTriggerDecisions.C:179 SanityCheckGlobalTriggerDecisions.C:180 SanityCheckGlobalTriggerDecisions.C:181 SanityCheckGlobalTriggerDecisions.C:182 SanityCheckGlobalTriggerDecisions.C:183 SanityCheckGlobalTriggerDecisions.C:184 SanityCheckGlobalTriggerDecisions.C:185 SanityCheckGlobalTriggerDecisions.C:186 SanityCheckGlobalTriggerDecisions.C:187 SanityCheckGlobalTriggerDecisions.C:188 SanityCheckGlobalTriggerDecisions.C:189 SanityCheckGlobalTriggerDecisions.C:190 SanityCheckGlobalTriggerDecisions.C:191 SanityCheckGlobalTriggerDecisions.C:192 SanityCheckGlobalTriggerDecisions.C:193 SanityCheckGlobalTriggerDecisions.C:194 SanityCheckGlobalTriggerDecisions.C:195 SanityCheckGlobalTriggerDecisions.C:196 SanityCheckGlobalTriggerDecisions.C:197 SanityCheckGlobalTriggerDecisions.C:198 SanityCheckGlobalTriggerDecisions.C:199 SanityCheckGlobalTriggerDecisions.C:200 SanityCheckGlobalTriggerDecisions.C:201 SanityCheckGlobalTriggerDecisions.C:202 SanityCheckGlobalTriggerDecisions.C:203 SanityCheckGlobalTriggerDecisions.C:204 SanityCheckGlobalTriggerDecisions.C:205 SanityCheckGlobalTriggerDecisions.C:206 SanityCheckGlobalTriggerDecisions.C:207 SanityCheckGlobalTriggerDecisions.C:208 SanityCheckGlobalTriggerDecisions.C:209 SanityCheckGlobalTriggerDecisions.C:210 SanityCheckGlobalTriggerDecisions.C:211 SanityCheckGlobalTriggerDecisions.C:212 SanityCheckGlobalTriggerDecisions.C:213 SanityCheckGlobalTriggerDecisions.C:214 SanityCheckGlobalTriggerDecisions.C:215 SanityCheckGlobalTriggerDecisions.C:216 SanityCheckGlobalTriggerDecisions.C:217 SanityCheckGlobalTriggerDecisions.C:218 SanityCheckGlobalTriggerDecisions.C:219 SanityCheckGlobalTriggerDecisions.C:220 SanityCheckGlobalTriggerDecisions.C:221 SanityCheckGlobalTriggerDecisions.C:222 SanityCheckGlobalTriggerDecisions.C:223 SanityCheckGlobalTriggerDecisions.C:224 SanityCheckGlobalTriggerDecisions.C:225 SanityCheckGlobalTriggerDecisions.C:226 SanityCheckGlobalTriggerDecisions.C:227 SanityCheckGlobalTriggerDecisions.C:228 SanityCheckGlobalTriggerDecisions.C:229 SanityCheckGlobalTriggerDecisions.C:230 SanityCheckGlobalTriggerDecisions.C:231 SanityCheckGlobalTriggerDecisions.C:232 SanityCheckGlobalTriggerDecisions.C:233 SanityCheckGlobalTriggerDecisions.C:234 SanityCheckGlobalTriggerDecisions.C:235 SanityCheckGlobalTriggerDecisions.C:236 SanityCheckGlobalTriggerDecisions.C:237 SanityCheckGlobalTriggerDecisions.C:238 SanityCheckGlobalTriggerDecisions.C:239 SanityCheckGlobalTriggerDecisions.C:240 SanityCheckGlobalTriggerDecisions.C:241 SanityCheckGlobalTriggerDecisions.C:242 SanityCheckGlobalTriggerDecisions.C:243 SanityCheckGlobalTriggerDecisions.C:244 SanityCheckGlobalTriggerDecisions.C:245 SanityCheckGlobalTriggerDecisions.C:246 SanityCheckGlobalTriggerDecisions.C:247 SanityCheckGlobalTriggerDecisions.C:248 SanityCheckGlobalTriggerDecisions.C:249 SanityCheckGlobalTriggerDecisions.C:250 SanityCheckGlobalTriggerDecisions.C:251 SanityCheckGlobalTriggerDecisions.C:252 SanityCheckGlobalTriggerDecisions.C:253 SanityCheckGlobalTriggerDecisions.C:254 SanityCheckGlobalTriggerDecisions.C:255 SanityCheckGlobalTriggerDecisions.C:256 SanityCheckGlobalTriggerDecisions.C:257 SanityCheckGlobalTriggerDecisions.C:258 SanityCheckGlobalTriggerDecisions.C:259 SanityCheckGlobalTriggerDecisions.C:260 SanityCheckGlobalTriggerDecisions.C:261 SanityCheckGlobalTriggerDecisions.C:262 SanityCheckGlobalTriggerDecisions.C:263 SanityCheckGlobalTriggerDecisions.C:264 SanityCheckGlobalTriggerDecisions.C:265 SanityCheckGlobalTriggerDecisions.C:266 SanityCheckGlobalTriggerDecisions.C:267 SanityCheckGlobalTriggerDecisions.C:268 SanityCheckGlobalTriggerDecisions.C:269 SanityCheckGlobalTriggerDecisions.C:270 SanityCheckGlobalTriggerDecisions.C:271 SanityCheckGlobalTriggerDecisions.C:272 SanityCheckGlobalTriggerDecisions.C:273 SanityCheckGlobalTriggerDecisions.C:274 SanityCheckGlobalTriggerDecisions.C:275 SanityCheckGlobalTriggerDecisions.C:276 SanityCheckGlobalTriggerDecisions.C:277 SanityCheckGlobalTriggerDecisions.C:278 SanityCheckGlobalTriggerDecisions.C:279 SanityCheckGlobalTriggerDecisions.C:280 SanityCheckGlobalTriggerDecisions.C:281 SanityCheckGlobalTriggerDecisions.C:282 SanityCheckGlobalTriggerDecisions.C:283 SanityCheckGlobalTriggerDecisions.C:284 SanityCheckGlobalTriggerDecisions.C:285 SanityCheckGlobalTriggerDecisions.C:286 SanityCheckGlobalTriggerDecisions.C:287 SanityCheckGlobalTriggerDecisions.C:288 SanityCheckGlobalTriggerDecisions.C:289 SanityCheckGlobalTriggerDecisions.C:290 SanityCheckGlobalTriggerDecisions.C:291 SanityCheckGlobalTriggerDecisions.C:292 SanityCheckGlobalTriggerDecisions.C:293 SanityCheckGlobalTriggerDecisions.C:294 SanityCheckGlobalTriggerDecisions.C:295 SanityCheckGlobalTriggerDecisions.C:296 SanityCheckGlobalTriggerDecisions.C:297 SanityCheckGlobalTriggerDecisions.C:298 SanityCheckGlobalTriggerDecisions.C:299 SanityCheckGlobalTriggerDecisions.C:300 SanityCheckGlobalTriggerDecisions.C:301 SanityCheckGlobalTriggerDecisions.C:302 SanityCheckGlobalTriggerDecisions.C:303 SanityCheckGlobalTriggerDecisions.C:304 SanityCheckGlobalTriggerDecisions.C:305 SanityCheckGlobalTriggerDecisions.C:306 SanityCheckGlobalTriggerDecisions.C:307