ROOT logo
// $Id$
/**
 * @ingroup trigger_menus
 * @file HM_PHYSICS_V0001.C
 * @brief Macro for generating the trigger menu CDB entry for the HLT global trigger.
 *
 * This macro generates the HM-PHYSICS-V0001 global trigger configuration
 * and the trigger component configurations.
 * 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/HM_PHYSICS_V0001.C
 * @endcode
 *
 * Initial configuration:
 *  1. Trigger items based on TPC tracks
 *  ------------------------------------
 *  a) H-TRACK_MULTIPLICITY-V0002.001-CENTRAL-ALL   min 10 tracks
 *     Trigger name: BarrelMultiplicityTrigger
 *  b) H-TRACK_MULTIPLICITY-V0002.002-CENTRAL-ALL   min 100 tracks
 *     Trigger name: BarrelHighMultiplicity
 *  c) H-TRACK_MULTIPLICITY-V0002.003-CENTRAL-ALL   min 1 tracks pt > 0.5 GeV
 *     Trigger name: BarrelPt_v01
 *  d) H-TRACK_MULTIPLICITY-V0002.004-CENTRAL-ALL   min 1 tracks pt > 1 GeV
 *     Trigger name: BarrelPt_v02
 *  e) H-TRACK_MULTIPLICITY-V0002.005-CENTRAL-ALL   min 1 tracks pt > 5 GeV
 *     Trigger name: BarrelPt_v03
 *
 *  2. Min bias trigger
 *  -----------------------------
 *  every 100th event
 *
 * ChangeLog:
 *  2009-12-04    adding explicite trigger domain entries for blocks to be
 *                included in 'domainHLTOUT' in order to avoid wildcards in
 *                the definition of domain entries
 * @author Matthias.Richter@ift.uib.no
 */

#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 HM_PHYSICS_V0001(
		      const char* cdbPath = "local://$ALICE_ROOT/OCDB",
		      Int_t version = 0,
		      Int_t firstRun = 0,
		      Int_t lastRun = AliCDBRunRange::Infinity()
		      ) {
  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("HM-COSMICS-V0001");

  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\")");

  // some explicite domain entries
  config.AddSymbol("domainTObject"   , "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"ROOTTOBJ:HLT \")");
  config.AddSymbol("domainESD"       , "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"ALIESDV0:HLT \")");
  config.AddSymbol("domainHistogram" , "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"ROOTHIST:HLT \")");

  config.AddSymbol("domainSPDCluster", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:ISPD\")");
  config.AddSymbol("domainSDDCluster", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:ISDD\")");
  config.AddSymbol("domainSSDCluster", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:ISSD\")");
  config.AddSymbol("domainTPCCluster", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"CLUSTERS:TPC \")");

  // an explicite HLTOUT selection which avoids wildcards
  config.AddSymbol("domainHLTOUT", "AliHLTTriggerDomain", "", 
		   "domainTObject    | "
		   "domainESD        | "
		   "domainHistogram  | "
		   "domainSPDCluster | "
		   "domainSDDCluster | "
		   "domainSSDCluster | "
		   "domainTPCCluster"
		   );

  // /////////////////////////////////////////////////////////////////////////////////////////	
  // -- DETECTOR READOUT DOMAINS
  config.AddSymbol("domainSPDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:SPD\\0\")");
  config.AddSymbol("domainSDDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:SDD\\0\")");
  config.AddSymbol("domainSSDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:SSD\\0\")");
  config.AddSymbol("domainTPCDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:TPC\\0\")");
  config.AddSymbol("domainTRDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:TRD\\0\")");
  config.AddSymbol("domainTOFDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:TOF\\0\")");
  config.AddSymbol("domainHMPDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:HMP\\0\")");
  config.AddSymbol("domainPHSDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:PHS\\0\")");
  config.AddSymbol("domainCPVDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:CPV\\0\")");
  config.AddSymbol("domainPMDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:PMD\\0\")");
  config.AddSymbol("domainMCHDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:MCH\\0\")");
  config.AddSymbol("domainMTRDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:MTR\\0\")");
  config.AddSymbol("domainFMDDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:FMD\\0\")");
  config.AddSymbol("domainT00DDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:T00\\0\")");
  config.AddSymbol("domainV00DDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:V00\\0\")");
  config.AddSymbol("domainZDCDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:ZDC\\0\")");
  config.AddSymbol("domainACODDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:ACO\\0\")");
  config.AddSymbol("domainCTPDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:TRI\\0\")");
  config.AddSymbol("domainEMCDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:EMC\\0\")");

  // /////////////////////////////////////////////////////////////////////////////////////////	
  // -- DETECTOR READOUT DOMAINS - SPECIAL
  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

  // -- BarrelMultiplicity
  config.AddItem(
		 "BarrelMultiplicityTrigger", 
		 "domainHLTOUT|domainALLDDL", 
		 "H-TRACK_MULTIPLICITY-V0002.001-CENTRAL-ALL"
		 );

  config.AddItem(
		 "BarrelHighMultiplicity", 
		 "domainHLTOUT|domainALLDDL", 
		 "H-TRACK_MULTIPLICITY-V0002.002-CENTRAL-ALL"
		 );

  config.AddItem(
		 "BarrelPt_v01", 
		 "domainHLTOUT|domainALLDDL", 
		 "H-TRACK_MULTIPLICITY-V0002.003-CENTRAL-ALL"
		 );

  config.AddItem(
		 "BarrelPt_v01", 
		 "domainHLTOUT|domainALLDDL", 
		 "H-TRACK_MULTIPLICITY-V0002.004-CENTRAL-ALL"
		 );

  config.AddItem(
		 "BarrelPt_v01", 
		 "domainHLTOUT|domainALLDDL", 
		 "H-TRACK_MULTIPLICITY-V0002.005-CENTRAL-ALL"
		 );

  // -- Min bias trigger
  config.AddItem(
		 "true",
		 "domainALLDDL|domainHLTOUT", 
		 10, "H-MINBIAS_SCALE_DOWN-V0002.001-CENTRAL-ALL"
		 );

  
  // /////////////////////////////////////////////////////////////////////////////////////////	
  // 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");

  // HLT payload also stored for not triggered events
  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("ALICE HLT Matthias.Richter@cern.ch");
  metaData->SetComment("HM-PHYSICS-V0001");
  storage->Put(menu, id, metaData);


  // /////////////////////////////////////////////////////////////////////////////////////////	
  // /////////////////////////////////////////////////////////////////////////////////////////	
  // /////////////////////////////////////////////////////////////////////////////////////////	
  //
  // component configurations
  gROOT->LoadMacro("$ALICE_ROOT/HLT/exa/makeComponentConfigurationObject.C");

  // /////////////////////////////////////////////////////////////////////////////////////////	
  // configuration of BarrelMultiplicityTrigger instances
  makeComponentConfigurationObject("HLT/ConfigHLT/BarrelMultiplicityTrigger", "-mintracks 10", cdbPath, firstRun, lastRun);
  makeComponentConfigurationObject("HLT/ConfigHLT/BarrelHighMultiplicity", "-mintracks 100"  , cdbPath, firstRun, lastRun);
  makeComponentConfigurationObject("HLT/ConfigHLT/BarrelPt_v01", "-mintracks 1 -minpt 0.5"   , cdbPath, firstRun, lastRun);
  makeComponentConfigurationObject("HLT/ConfigHLT/BarrelPt_v02", "-mintracks 1 -minpt 1.0"   , cdbPath, firstRun, lastRun);
  makeComponentConfigurationObject("HLT/ConfigHLT/BarrelPt_v03", "-mintracks 1 -minpt 5.0"   , cdbPath, firstRun, lastRun);
}
 HM-PHYSICS-V0001.C:1
 HM-PHYSICS-V0001.C:2
 HM-PHYSICS-V0001.C:3
 HM-PHYSICS-V0001.C:4
 HM-PHYSICS-V0001.C:5
 HM-PHYSICS-V0001.C:6
 HM-PHYSICS-V0001.C:7
 HM-PHYSICS-V0001.C:8
 HM-PHYSICS-V0001.C:9
 HM-PHYSICS-V0001.C:10
 HM-PHYSICS-V0001.C:11
 HM-PHYSICS-V0001.C:12
 HM-PHYSICS-V0001.C:13
 HM-PHYSICS-V0001.C:14
 HM-PHYSICS-V0001.C:15
 HM-PHYSICS-V0001.C:16
 HM-PHYSICS-V0001.C:17
 HM-PHYSICS-V0001.C:18
 HM-PHYSICS-V0001.C:19
 HM-PHYSICS-V0001.C:20
 HM-PHYSICS-V0001.C:21
 HM-PHYSICS-V0001.C:22
 HM-PHYSICS-V0001.C:23
 HM-PHYSICS-V0001.C:24
 HM-PHYSICS-V0001.C:25
 HM-PHYSICS-V0001.C:26
 HM-PHYSICS-V0001.C:27
 HM-PHYSICS-V0001.C:28
 HM-PHYSICS-V0001.C:29
 HM-PHYSICS-V0001.C:30
 HM-PHYSICS-V0001.C:31
 HM-PHYSICS-V0001.C:32
 HM-PHYSICS-V0001.C:33
 HM-PHYSICS-V0001.C:34
 HM-PHYSICS-V0001.C:35
 HM-PHYSICS-V0001.C:36
 HM-PHYSICS-V0001.C:37
 HM-PHYSICS-V0001.C:38
 HM-PHYSICS-V0001.C:39
 HM-PHYSICS-V0001.C:40
 HM-PHYSICS-V0001.C:41
 HM-PHYSICS-V0001.C:42
 HM-PHYSICS-V0001.C:43
 HM-PHYSICS-V0001.C:44
 HM-PHYSICS-V0001.C:45
 HM-PHYSICS-V0001.C:46
 HM-PHYSICS-V0001.C:47
 HM-PHYSICS-V0001.C:48
 HM-PHYSICS-V0001.C:49
 HM-PHYSICS-V0001.C:50
 HM-PHYSICS-V0001.C:51
 HM-PHYSICS-V0001.C:52
 HM-PHYSICS-V0001.C:53
 HM-PHYSICS-V0001.C:54
 HM-PHYSICS-V0001.C:55
 HM-PHYSICS-V0001.C:56
 HM-PHYSICS-V0001.C:57
 HM-PHYSICS-V0001.C:58
 HM-PHYSICS-V0001.C:59
 HM-PHYSICS-V0001.C:60
 HM-PHYSICS-V0001.C:61
 HM-PHYSICS-V0001.C:62
 HM-PHYSICS-V0001.C:63
 HM-PHYSICS-V0001.C:64
 HM-PHYSICS-V0001.C:65
 HM-PHYSICS-V0001.C:66
 HM-PHYSICS-V0001.C:67
 HM-PHYSICS-V0001.C:68
 HM-PHYSICS-V0001.C:69
 HM-PHYSICS-V0001.C:70
 HM-PHYSICS-V0001.C:71
 HM-PHYSICS-V0001.C:72
 HM-PHYSICS-V0001.C:73
 HM-PHYSICS-V0001.C:74
 HM-PHYSICS-V0001.C:75
 HM-PHYSICS-V0001.C:76
 HM-PHYSICS-V0001.C:77
 HM-PHYSICS-V0001.C:78
 HM-PHYSICS-V0001.C:79
 HM-PHYSICS-V0001.C:80
 HM-PHYSICS-V0001.C:81
 HM-PHYSICS-V0001.C:82
 HM-PHYSICS-V0001.C:83
 HM-PHYSICS-V0001.C:84
 HM-PHYSICS-V0001.C:85
 HM-PHYSICS-V0001.C:86
 HM-PHYSICS-V0001.C:87
 HM-PHYSICS-V0001.C:88
 HM-PHYSICS-V0001.C:89
 HM-PHYSICS-V0001.C:90
 HM-PHYSICS-V0001.C:91
 HM-PHYSICS-V0001.C:92
 HM-PHYSICS-V0001.C:93
 HM-PHYSICS-V0001.C:94
 HM-PHYSICS-V0001.C:95
 HM-PHYSICS-V0001.C:96
 HM-PHYSICS-V0001.C:97
 HM-PHYSICS-V0001.C:98
 HM-PHYSICS-V0001.C:99
 HM-PHYSICS-V0001.C:100
 HM-PHYSICS-V0001.C:101
 HM-PHYSICS-V0001.C:102
 HM-PHYSICS-V0001.C:103
 HM-PHYSICS-V0001.C:104
 HM-PHYSICS-V0001.C:105
 HM-PHYSICS-V0001.C:106
 HM-PHYSICS-V0001.C:107
 HM-PHYSICS-V0001.C:108
 HM-PHYSICS-V0001.C:109
 HM-PHYSICS-V0001.C:110
 HM-PHYSICS-V0001.C:111
 HM-PHYSICS-V0001.C:112
 HM-PHYSICS-V0001.C:113
 HM-PHYSICS-V0001.C:114
 HM-PHYSICS-V0001.C:115
 HM-PHYSICS-V0001.C:116
 HM-PHYSICS-V0001.C:117
 HM-PHYSICS-V0001.C:118
 HM-PHYSICS-V0001.C:119
 HM-PHYSICS-V0001.C:120
 HM-PHYSICS-V0001.C:121
 HM-PHYSICS-V0001.C:122
 HM-PHYSICS-V0001.C:123
 HM-PHYSICS-V0001.C:124
 HM-PHYSICS-V0001.C:125
 HM-PHYSICS-V0001.C:126
 HM-PHYSICS-V0001.C:127
 HM-PHYSICS-V0001.C:128
 HM-PHYSICS-V0001.C:129
 HM-PHYSICS-V0001.C:130
 HM-PHYSICS-V0001.C:131
 HM-PHYSICS-V0001.C:132
 HM-PHYSICS-V0001.C:133
 HM-PHYSICS-V0001.C:134
 HM-PHYSICS-V0001.C:135
 HM-PHYSICS-V0001.C:136
 HM-PHYSICS-V0001.C:137
 HM-PHYSICS-V0001.C:138
 HM-PHYSICS-V0001.C:139
 HM-PHYSICS-V0001.C:140
 HM-PHYSICS-V0001.C:141
 HM-PHYSICS-V0001.C:142
 HM-PHYSICS-V0001.C:143
 HM-PHYSICS-V0001.C:144
 HM-PHYSICS-V0001.C:145
 HM-PHYSICS-V0001.C:146
 HM-PHYSICS-V0001.C:147
 HM-PHYSICS-V0001.C:148
 HM-PHYSICS-V0001.C:149
 HM-PHYSICS-V0001.C:150
 HM-PHYSICS-V0001.C:151
 HM-PHYSICS-V0001.C:152
 HM-PHYSICS-V0001.C:153
 HM-PHYSICS-V0001.C:154
 HM-PHYSICS-V0001.C:155
 HM-PHYSICS-V0001.C:156
 HM-PHYSICS-V0001.C:157
 HM-PHYSICS-V0001.C:158
 HM-PHYSICS-V0001.C:159
 HM-PHYSICS-V0001.C:160
 HM-PHYSICS-V0001.C:161
 HM-PHYSICS-V0001.C:162
 HM-PHYSICS-V0001.C:163
 HM-PHYSICS-V0001.C:164
 HM-PHYSICS-V0001.C:165
 HM-PHYSICS-V0001.C:166
 HM-PHYSICS-V0001.C:167
 HM-PHYSICS-V0001.C:168
 HM-PHYSICS-V0001.C:169
 HM-PHYSICS-V0001.C:170
 HM-PHYSICS-V0001.C:171
 HM-PHYSICS-V0001.C:172
 HM-PHYSICS-V0001.C:173
 HM-PHYSICS-V0001.C:174
 HM-PHYSICS-V0001.C:175
 HM-PHYSICS-V0001.C:176
 HM-PHYSICS-V0001.C:177
 HM-PHYSICS-V0001.C:178
 HM-PHYSICS-V0001.C:179
 HM-PHYSICS-V0001.C:180
 HM-PHYSICS-V0001.C:181
 HM-PHYSICS-V0001.C:182
 HM-PHYSICS-V0001.C:183
 HM-PHYSICS-V0001.C:184
 HM-PHYSICS-V0001.C:185
 HM-PHYSICS-V0001.C:186
 HM-PHYSICS-V0001.C:187
 HM-PHYSICS-V0001.C:188
 HM-PHYSICS-V0001.C:189
 HM-PHYSICS-V0001.C:190
 HM-PHYSICS-V0001.C:191
 HM-PHYSICS-V0001.C:192
 HM-PHYSICS-V0001.C:193
 HM-PHYSICS-V0001.C:194
 HM-PHYSICS-V0001.C:195
 HM-PHYSICS-V0001.C:196
 HM-PHYSICS-V0001.C:197
 HM-PHYSICS-V0001.C:198
 HM-PHYSICS-V0001.C:199
 HM-PHYSICS-V0001.C:200
 HM-PHYSICS-V0001.C:201
 HM-PHYSICS-V0001.C:202
 HM-PHYSICS-V0001.C:203
 HM-PHYSICS-V0001.C:204
 HM-PHYSICS-V0001.C:205
 HM-PHYSICS-V0001.C:206
 HM-PHYSICS-V0001.C:207
 HM-PHYSICS-V0001.C:208
 HM-PHYSICS-V0001.C:209
 HM-PHYSICS-V0001.C:210
 HM-PHYSICS-V0001.C:211
 HM-PHYSICS-V0001.C:212
 HM-PHYSICS-V0001.C:213
 HM-PHYSICS-V0001.C:214
 HM-PHYSICS-V0001.C:215
 HM-PHYSICS-V0001.C:216
 HM-PHYSICS-V0001.C:217
 HM-PHYSICS-V0001.C:218
 HM-PHYSICS-V0001.C:219
 HM-PHYSICS-V0001.C:220
 HM-PHYSICS-V0001.C:221
 HM-PHYSICS-V0001.C:222