ROOT logo
// $Id:  $
/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        *
 * ALICE Experiment at CERN, All rights reserved.                         *
 *                                                                        *
 * Primary Authors: Artur Szostak <artursz@iafrica.com>                   *
 *                  for The ALICE HLT Project.                            *
 *                                                                        *
 * 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.                  *
 **************************************************************************/

/// @file   TriggerConfig.C
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   28 Oct 2009
/// @brief  Implementation of the global trigger menu configuration routines.
///
/// The TriggerConfig routine generates a global trigger menu configuration used
/// to test the AliHLTGlobalTriggerComponent class.

/**
 * Initialise a trigger menu to test a configuration where all trigger menu entries
 * have different priority values. Thus only the first trigger menu item that
 * matches is activated.
 */
void PriorityGroupTestConfig()
{
	AliHLTGlobalTriggerConfig config("Priority group test config");
	config.AddItem(3, "triggerTPC && triggerSSD", "triggerSSD", "Fast SSD trigger");
	config.AddItem(2, "triggerMUON || triggerSSD", "triggerMUON | triggerSSD", "MUON trigger");
	config.AddItem(1, "triggerTPC", "triggerTPC | triggerMUON | triggerSSD", "TPC trigger");
	config.SetDefaultTriggerDescription("No trigger");
}

/**
 * Initialise a trigger menu to test a configuration where all trigger menu entries
 * have the same priority values. Thus all entries form a single priority group and
 * multiple items can be matched with the trigger input.
 */
void SingleGroupTestConfig()
{
	AliHLTGlobalTriggerConfig config("Single group test config");
	config.AddItem("triggerTPC", "triggerTPC", "TPC trigger");
	config.AddItem("triggerMUON", "triggerMUON", "MUON trigger");
	config.AddItem("triggerSSD", "triggerSSD", "SSD trigger");
	config.SetDefaultConditionOperator("||");
	config.SetDefaultDomainOperator("|");
}

/**
 * Create a trigger menu configuration to test the prescalar mechanism.
 */
void PrescalarTestConfig()
{
	AliHLTGlobalTriggerConfig config("Prescalar test config");
	config.AddItem(2, "triggerTPC", "triggerTPC", 3, "TPC trigger");
	config.AddItem(1, "triggerMUON", "triggerMUON", "MUON trigger");
	config.SetDefaultConditionOperator("||");
	config.SetDefaultTriggerDescription("No trigger");
	config.SetDefaultTriggerDomain(AliHLTTriggerDomain("*******:HLT "));
}

/**
 * Create a trigger menu configuration to test the trigger menu symbol mechanism.
 */
void SymbolTestConfig()
{
	AliHLTGlobalTriggerConfig config("Symbol test config");
	config.AddSymbol("domain-All", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:***,-DAQRDOUT:TST\")");
	config.AddSymbol("PHOSclusters", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:PHOS\")");
	config.AddSymbol("PHOStracks", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"TRACKS:PHOS\")");
	config.AddSymbol("domainPHOS", "AliHLTTriggerDomain", "", "PHOSclusters | PHOStracks");
	config.AddSymbol("triggerTPC", "bool", "this->Result()", "false", "AliHLTTriggerDecision");
	config.AddSymbol("trigClasses", "Double_t", "this->GetScalar(\"TrigClass\")", "0", "AliHLTScalars");
	config.AddItem(2, "true", "domain-All", 4, "Pass through");
	config.AddItem(1, "trigClasses == 0x2", "triggerTPC | domainPHOS", "Trigger class 2");
}

/**
 * This will make a complex configuration that uses multiple features of the
 * trigger menu configuration system.
 */
void ComplexTestConfig()
{
	AliHLTGlobalTriggerConfig config("Complex test config");
	config.AddSymbol("domain-All", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:***,-DAQRDOUT:TST\")");
	config.AddSymbol("PHOSclusters", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:PHOS\")");
	config.AddSymbol("PHOStracks", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"TRACKS:PHOS\")");
	config.AddSymbol("domainPHOS", "AliHLTTriggerDomain", "", "PHOSclusters | PHOStracks");
	config.AddItem(4, "true", "domain-All", 7, "Pass through");
	config.AddItem(3, "triggerSSD", "triggerSSD |", "SSD trigger 1");
	config.AddItem(3, "triggerMUON", "triggerMUON", "MUON trigger 1");
	config.AddItem(2, "triggerSSD ||", "triggerSSD | domainPHOS", "SSD trigger 2");
	config.AddItem(2, "triggerMUON ||", "triggerMUON", "MUON trigger 2");
	config.AddItem(1, "triggerTPC", "triggerTPC | triggerSSD | triggerMUON", "Slow trigger");
	config.SetDefaultTriggerDomain(AliHLTTriggerDomain("*******:MUON"));
	config.SetDefaultConditionOperator("&&");
}

/**
 * This will make a configuration that will test software triggers.
 */
void SoftwareTriggersTestConfig()
{
	AliHLTGlobalTriggerConfig config("Software triggers test config");
	config.AddSymbol("domainPHOS", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:PHOS\")");
	config.AddSymbol("domainSPD", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:SPD\")");
	config.AddItem(5, "START_OF_DATA", "START_OF_DATA", "Start of data");
	config.AddItem(4, "END_OF_DATA", "END_OF_DATA", "End of data");
	config.AddItem(3, "SOFTWARE", "domainSPD | SOFTWARE", "Software trigger");
	config.AddItem(2, "CALIBRATION", "domainPHOS", "Calibration trigger");
	config.AddItem(1, "triggerMUON", "triggerMUON", "MUON trigger");
}

/**
 * Top level configuration routine for the global trigger component tests.
 */
void TriggerConfig(int version = 0)
{
	switch (version)
	{
	case 0: PriorityGroupTestConfig(); break;
	case 1: SingleGroupTestConfig(); break;
	case 2: PrescalarTestConfig(); break;
	case 3: SymbolTestConfig(); break;
	case 4: ComplexTestConfig(); break;
	case 5: SoftwareTriggersTestConfig(); break;
	default: AliHLTGlobalTriggerConfig config("Empty test config");
	}
}
 TriggerConfig.C:1
 TriggerConfig.C:2
 TriggerConfig.C:3
 TriggerConfig.C:4
 TriggerConfig.C:5
 TriggerConfig.C:6
 TriggerConfig.C:7
 TriggerConfig.C:8
 TriggerConfig.C:9
 TriggerConfig.C:10
 TriggerConfig.C:11
 TriggerConfig.C:12
 TriggerConfig.C:13
 TriggerConfig.C:14
 TriggerConfig.C:15
 TriggerConfig.C:16
 TriggerConfig.C:17
 TriggerConfig.C:18
 TriggerConfig.C:19
 TriggerConfig.C:20
 TriggerConfig.C:21
 TriggerConfig.C:22
 TriggerConfig.C:23
 TriggerConfig.C:24
 TriggerConfig.C:25
 TriggerConfig.C:26
 TriggerConfig.C:27
 TriggerConfig.C:28
 TriggerConfig.C:29
 TriggerConfig.C:30
 TriggerConfig.C:31
 TriggerConfig.C:32
 TriggerConfig.C:33
 TriggerConfig.C:34
 TriggerConfig.C:35
 TriggerConfig.C:36
 TriggerConfig.C:37
 TriggerConfig.C:38
 TriggerConfig.C:39
 TriggerConfig.C:40
 TriggerConfig.C:41
 TriggerConfig.C:42
 TriggerConfig.C:43
 TriggerConfig.C:44
 TriggerConfig.C:45
 TriggerConfig.C:46
 TriggerConfig.C:47
 TriggerConfig.C:48
 TriggerConfig.C:49
 TriggerConfig.C:50
 TriggerConfig.C:51
 TriggerConfig.C:52
 TriggerConfig.C:53
 TriggerConfig.C:54
 TriggerConfig.C:55
 TriggerConfig.C:56
 TriggerConfig.C:57
 TriggerConfig.C:58
 TriggerConfig.C:59
 TriggerConfig.C:60
 TriggerConfig.C:61
 TriggerConfig.C:62
 TriggerConfig.C:63
 TriggerConfig.C:64
 TriggerConfig.C:65
 TriggerConfig.C:66
 TriggerConfig.C:67
 TriggerConfig.C:68
 TriggerConfig.C:69
 TriggerConfig.C:70
 TriggerConfig.C:71
 TriggerConfig.C:72
 TriggerConfig.C:73
 TriggerConfig.C:74
 TriggerConfig.C:75
 TriggerConfig.C:76
 TriggerConfig.C:77
 TriggerConfig.C:78
 TriggerConfig.C:79
 TriggerConfig.C:80
 TriggerConfig.C:81
 TriggerConfig.C:82
 TriggerConfig.C:83
 TriggerConfig.C:84
 TriggerConfig.C:85
 TriggerConfig.C:86
 TriggerConfig.C:87
 TriggerConfig.C:88
 TriggerConfig.C:89
 TriggerConfig.C:90
 TriggerConfig.C:91
 TriggerConfig.C:92
 TriggerConfig.C:93
 TriggerConfig.C:94
 TriggerConfig.C:95
 TriggerConfig.C:96
 TriggerConfig.C:97
 TriggerConfig.C:98
 TriggerConfig.C:99
 TriggerConfig.C:100
 TriggerConfig.C:101
 TriggerConfig.C:102
 TriggerConfig.C:103
 TriggerConfig.C:104
 TriggerConfig.C:105
 TriggerConfig.C:106
 TriggerConfig.C:107
 TriggerConfig.C:108
 TriggerConfig.C:109
 TriggerConfig.C:110
 TriggerConfig.C:111
 TriggerConfig.C:112
 TriggerConfig.C:113
 TriggerConfig.C:114
 TriggerConfig.C:115
 TriggerConfig.C:116
 TriggerConfig.C:117
 TriggerConfig.C:118
 TriggerConfig.C:119
 TriggerConfig.C:120
 TriggerConfig.C:121
 TriggerConfig.C:122
 TriggerConfig.C:123
 TriggerConfig.C:124
 TriggerConfig.C:125
 TriggerConfig.C:126
 TriggerConfig.C:127
 TriggerConfig.C:128
 TriggerConfig.C:129
 TriggerConfig.C:130
 TriggerConfig.C:131
 TriggerConfig.C:132
 TriggerConfig.C:133
 TriggerConfig.C:134
 TriggerConfig.C:135
 TriggerConfig.C:136