ROOT logo
//$Id$
/**************************************************************************
 * 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.                  *
 **************************************************************************/

/**
 * \ingroup macros
 * \file CreateTriggerMenuCDBEntry.C
 * \brief Macro for generating the trigger menu CDB entry for the HLT global trigger.
 *
 * This macro is used to generate a default CDB entry for the HLT global trigger.
 * The trigger menu is used by the HLT global trigger as a configuration object.
 * It is an experts macro so make sure you know what you are doing.
 *
 * You can run this macro with defaults using the following shell command:
 * \code
 *   > aliroot -b -q $ALICE_ROOT/HLT/trigger/CreateTriggerMenuCDBEntry.C
 * \endcode
 *
 * \author Artur Szostak <artursz@iafrica.com>
 */

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliHLTTriggerMenu.h"
#include "AliHLTGlobalTriggerConfig.h"
#include "TObjString.h"
#include "TString.h"
#include "TSystem.h"
#include "Riostream.h"
using std::cerr;
using std::endl;
#endif

/**
 * Generates a default CDB entry for the trigger menu in the given CDB storage
 * (local by default).
 * \param cdbPath  The path to the default CDB storage.
 */
void CreateTriggerMenuCDBEntry(
		const char* cdbPath = "local://$ALICE_ROOT/OCDB",
		Int_t version = 0,
		Int_t firstRun = 0,
		Int_t lastRun = AliCDBRunRange::Infinity()
	)
{
	gSystem->Load("libAliHLTUtil.so");
	gSystem->Load("libAliHLTTRD.so");
	gSystem->Load("libAliHLTMUON.so");
	gSystem->Load("libAliHLTTrigger.so");

	// Setup the CDB default storage and run number.
	AliCDBManager* cdbManager = AliCDBManager::Instance();
	if (cdbManager == NULL)
	{
		cerr << "ERROR: Global CDB manager object does not exist." << endl;
		return;
	}
	AliCDBStorage* storage = cdbManager->GetStorage(cdbPath);
	if (storage == NULL)
	{
		cerr << "ERROR: Could not get storage for: " << cdbPath << endl;
		return;
	}

	///////////////////////////////////////////////////////////////////////////////////////////	
	// Create the trigger menu.
	AliHLTGlobalTriggerConfig config("Default Global Trigger Config");

	config.AddSymbol("domainAll", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:***\")");

	///////////////////////////////////////////////////////////////////////////////////////////	
	// the domain definitions for the global HLT output and the HLT DDLs
	config.AddSymbol("domainHLTOUT", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:HLT \")");
	config.AddSymbol("domainHLTDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:HLT\\0\")");
	config.AddSymbol("domainALLDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:***\\0\")");

	///////////////////////////////////////////////////////////////////////////////////////////	
	// NOTE: always make sure that the global HLT output and the HLT DDLs are included
	// in the readout, i.e. add domainHLTOUT|domainHLTDDL to the trigger domain
	config.AddItem("BarrelMultiplicityTrigger", "BarrelMultiplicityTrigger|domainHLTOUT|domainALLDDL", "charged barrel track multiplicity triggered");
	config.AddItem("MuonSpectroTrigger", "MuonSpectroTrigger|domainHLTOUT|domainALLDDL", "Muon spectrometer triggered");
	
	///////////////////////////////////////////////////////////////////////////////////////////	
	// default domain in case there is no global trigger
	// readout the output of the reconstruction
	// this refers to the domain domainHLTOUT|domainHLTDDL
	config.SetDefaultTriggerDescription("No HLT global trigger");
	config.DefaultTriggerDomain().Add("*******", "HLT ");
	AliHLTReadoutList readoutlist;
	readoutlist.Enable(AliHLTReadoutList::kHLT);
	config.DefaultTriggerDomain().Add(readoutlist);

	TObject* menu = AliHLTGlobalTriggerConfig::Menu()->Clone();
	menu->Print();

	///////////////////////////////////////////////////////////////////////////////////////////	
	// Write the trigger menu object to the CDB.
	AliCDBId id("HLT/ConfigHLT/HLTGlobalTrigger", firstRun, lastRun, version);
	AliCDBMetaData* metaData = new AliCDBMetaData();
	metaData->SetResponsible("HLT");
	metaData->SetComment("Default trigger menu for HLT global trigger.");
	storage->Put(menu, id, metaData);
}
 CreateTriggerMenuCDBEntry.C:1
 CreateTriggerMenuCDBEntry.C:2
 CreateTriggerMenuCDBEntry.C:3
 CreateTriggerMenuCDBEntry.C:4
 CreateTriggerMenuCDBEntry.C:5
 CreateTriggerMenuCDBEntry.C:6
 CreateTriggerMenuCDBEntry.C:7
 CreateTriggerMenuCDBEntry.C:8
 CreateTriggerMenuCDBEntry.C:9
 CreateTriggerMenuCDBEntry.C:10
 CreateTriggerMenuCDBEntry.C:11
 CreateTriggerMenuCDBEntry.C:12
 CreateTriggerMenuCDBEntry.C:13
 CreateTriggerMenuCDBEntry.C:14
 CreateTriggerMenuCDBEntry.C:15
 CreateTriggerMenuCDBEntry.C:16
 CreateTriggerMenuCDBEntry.C:17
 CreateTriggerMenuCDBEntry.C:18
 CreateTriggerMenuCDBEntry.C:19
 CreateTriggerMenuCDBEntry.C:20
 CreateTriggerMenuCDBEntry.C:21
 CreateTriggerMenuCDBEntry.C:22
 CreateTriggerMenuCDBEntry.C:23
 CreateTriggerMenuCDBEntry.C:24
 CreateTriggerMenuCDBEntry.C:25
 CreateTriggerMenuCDBEntry.C:26
 CreateTriggerMenuCDBEntry.C:27
 CreateTriggerMenuCDBEntry.C:28
 CreateTriggerMenuCDBEntry.C:29
 CreateTriggerMenuCDBEntry.C:30
 CreateTriggerMenuCDBEntry.C:31
 CreateTriggerMenuCDBEntry.C:32
 CreateTriggerMenuCDBEntry.C:33
 CreateTriggerMenuCDBEntry.C:34
 CreateTriggerMenuCDBEntry.C:35
 CreateTriggerMenuCDBEntry.C:36
 CreateTriggerMenuCDBEntry.C:37
 CreateTriggerMenuCDBEntry.C:38
 CreateTriggerMenuCDBEntry.C:39
 CreateTriggerMenuCDBEntry.C:40
 CreateTriggerMenuCDBEntry.C:41
 CreateTriggerMenuCDBEntry.C:42
 CreateTriggerMenuCDBEntry.C:43
 CreateTriggerMenuCDBEntry.C:44
 CreateTriggerMenuCDBEntry.C:45
 CreateTriggerMenuCDBEntry.C:46
 CreateTriggerMenuCDBEntry.C:47
 CreateTriggerMenuCDBEntry.C:48
 CreateTriggerMenuCDBEntry.C:49
 CreateTriggerMenuCDBEntry.C:50
 CreateTriggerMenuCDBEntry.C:51
 CreateTriggerMenuCDBEntry.C:52
 CreateTriggerMenuCDBEntry.C:53
 CreateTriggerMenuCDBEntry.C:54
 CreateTriggerMenuCDBEntry.C:55
 CreateTriggerMenuCDBEntry.C:56
 CreateTriggerMenuCDBEntry.C:57
 CreateTriggerMenuCDBEntry.C:58
 CreateTriggerMenuCDBEntry.C:59
 CreateTriggerMenuCDBEntry.C:60
 CreateTriggerMenuCDBEntry.C:61
 CreateTriggerMenuCDBEntry.C:62
 CreateTriggerMenuCDBEntry.C:63
 CreateTriggerMenuCDBEntry.C:64
 CreateTriggerMenuCDBEntry.C:65
 CreateTriggerMenuCDBEntry.C:66
 CreateTriggerMenuCDBEntry.C:67
 CreateTriggerMenuCDBEntry.C:68
 CreateTriggerMenuCDBEntry.C:69
 CreateTriggerMenuCDBEntry.C:70
 CreateTriggerMenuCDBEntry.C:71
 CreateTriggerMenuCDBEntry.C:72
 CreateTriggerMenuCDBEntry.C:73
 CreateTriggerMenuCDBEntry.C:74
 CreateTriggerMenuCDBEntry.C:75
 CreateTriggerMenuCDBEntry.C:76
 CreateTriggerMenuCDBEntry.C:77
 CreateTriggerMenuCDBEntry.C:78
 CreateTriggerMenuCDBEntry.C:79
 CreateTriggerMenuCDBEntry.C:80
 CreateTriggerMenuCDBEntry.C:81
 CreateTriggerMenuCDBEntry.C:82
 CreateTriggerMenuCDBEntry.C:83
 CreateTriggerMenuCDBEntry.C:84
 CreateTriggerMenuCDBEntry.C:85
 CreateTriggerMenuCDBEntry.C:86
 CreateTriggerMenuCDBEntry.C:87
 CreateTriggerMenuCDBEntry.C:88
 CreateTriggerMenuCDBEntry.C:89
 CreateTriggerMenuCDBEntry.C:90
 CreateTriggerMenuCDBEntry.C:91
 CreateTriggerMenuCDBEntry.C:92
 CreateTriggerMenuCDBEntry.C:93
 CreateTriggerMenuCDBEntry.C:94
 CreateTriggerMenuCDBEntry.C:95
 CreateTriggerMenuCDBEntry.C:96
 CreateTriggerMenuCDBEntry.C:97
 CreateTriggerMenuCDBEntry.C:98
 CreateTriggerMenuCDBEntry.C:99
 CreateTriggerMenuCDBEntry.C:100
 CreateTriggerMenuCDBEntry.C:101
 CreateTriggerMenuCDBEntry.C:102
 CreateTriggerMenuCDBEntry.C:103
 CreateTriggerMenuCDBEntry.C:104
 CreateTriggerMenuCDBEntry.C:105
 CreateTriggerMenuCDBEntry.C:106
 CreateTriggerMenuCDBEntry.C:107
 CreateTriggerMenuCDBEntry.C:108
 CreateTriggerMenuCDBEntry.C:109
 CreateTriggerMenuCDBEntry.C:110
 CreateTriggerMenuCDBEntry.C:111
 CreateTriggerMenuCDBEntry.C:112
 CreateTriggerMenuCDBEntry.C:113
 CreateTriggerMenuCDBEntry.C:114
 CreateTriggerMenuCDBEntry.C:115
 CreateTriggerMenuCDBEntry.C:116
 CreateTriggerMenuCDBEntry.C:117
 CreateTriggerMenuCDBEntry.C:118
 CreateTriggerMenuCDBEntry.C:119