ROOT logo
// $Id: $
/**
 * \ingroup trigger_menus
 * \file HM_PHYSICS_V0002.C
 * \brief Macro for generating the trigger menu for min-bias p+p triggering.
 *
 * This macro generates the HM-PHYSICS-V0002 global trigger configuration.
 *
 * You can run this macro with defaults using the following shell command:
 * \code
 *   > aliroot -b -q $ALICE_ROOT/HLT/trigger/HM_PHYSICS_V0002.C
 * \endcode
 *
 * Configuration:
 *  Only triggering on min-bias CTP triggers, pass through all other triggers.
 *  Scale down the trigger rate and store HLT ESD for rejected events.
 *  Triggering on high pT tracks as defined by CDB entries:
 *   H_._Barrel_pT_Single_._V0001.001
 *   H_._Barrel_pT_Single_._V0002.001
 *   H_._Barrel_pT_Single_._V0003.001
 *
 * \note The above mentioned CDB entries must already exist. They are not created
 *    by this macro.
 *
 * \author Artur Szostak <artursz@iafrica.com>
 */

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliHLTTriggerMenu.h"
#include "AliHLTReadoutList.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_V0002(
		      const char* cdbPath = "local://$ALICE_ROOT/OCDB",
		      Int_t version = 0,
		      Int_t firstRun = 0,
		      Int_t lastRun = AliCDBRunRange::Infinity()
		     )
{
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libAliHLTUtil.so");
  gSystem->Load("libAliHLTMUON.so");
  gSystem->Load("libAliHLTTRD.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("HM-PHYSICS-V0002");
  
  ///////////////////////////////////////////////////////////////////////////////////////////
  // Predefine some explicit domain definitions used in the trigger menu.
  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 \")");

  config.AddSymbol("domainHLTOUT", "AliHLTTriggerDomain", "", 
		   "domainTObject    | "
		   "domainESD        | "
		   "domainHistogram  | "
		   "domainSPDCluster | "
		   "domainSDDCluster | "
		   "domainSSDCluster | "
		   "domainTPCCluster"
		   );

  config.AddSymbol("domainALLDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:***\")");
  config.AddSymbol("domainHLTDDL", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"DAQRDOUT:HLT\")");
  
  ///////////////////////////////////////////////////////////////////////////////////////////
  // Setup the trigger items in 5 priority groups.
  // Group 5 is for the HLT triggers.
  // Group 4 is for scaling down min-bias CTP interaction triggers.
  // Group 2 and 3 are used to readout only HLT ESDs for rejected min bias events.
  // The last group (1) handles special software triggers.
  
  config.AddItem(
		 5, // priority group.
		 "(CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD) && H-Barrel_pT_Single-V0001.001",
		 "domainHLTOUT | domainALLDDL", 
		 5,  // scaledown factor 1/5
		 "H-Barrel_pT_Single-V0001.001-ALL-ALL"
		 );

  config.AddItem(
		 5, // priority group.
		 "(CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD) && H-Barrel_pT_Single-V0002.001",
		 "domainHLTOUT | domainALLDDL",
		 2,  // scaledown factor 1/2
		 "H-Barrel_pT_Single-V0002.001-ALL-ALL"
		 );

  config.AddItem(
		 5, // priority group.
		 "(CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD) && H-Barrel_pT_Single-V0003.001",
		 "domainHLTOUT | domainALLDDL", 
		 "H-Barrel_pT_Single-V0003.001-ALL-ALL"
		 );

  config.AddItem(
		 4, // priority group.
		 "CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD",
		 "domainHLTOUT | domainALLDDL",
		 "H-MINBIAS_SCALE_DOWN-V0003.001-CENTRAL-ALL",
		 15.  // scaledown factor 0.15
		 );

  // Readout only 50% of HLT ESDs for min bias.
  config.AddItem(
		 3, // priority group.
		 "CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD",
		 "domainESD | domainHLTDDL",
		 2,  // scaledown factor 1/2
		 "Rejected min-bias with HLT ESD readout",
		 false  // default global trigger decision result
		 );

  // Reject completely the other 50% min bias.
  config.AddItem(
		 2, // priority group.
		 "CINT1WU-B-NOPF-ALL || CINT1-B-NOPF-ALLNOTRD",
		 "domainHLTDDL",  // Only HLT DDL to deliver at least the decision.
		 0,  // No prescalar (no scaledown)
		 "Rejected min-bias",
		 false  // default global trigger decision result
		 );

  config.AddItem(
		 1, // priority group.
		 "SOFTWARE || CALIBRATION || START_OF_DATA || END_OF_DATA",
		 "SOFTWARE | CALIBRATION | START_OF_DATA | END_OF_DATA | domainHLTDDL",
		 "H-SoftwareTrigger-V0001.001-ALL-ALL"
		 );

  ///////////////////////////////////////////////////////////////////////////////////////////
  // Setup defaults in case there is no global trigger.
  // For non-triggered events store everything from HLT and readout all detectors.
  config.SetDefaultTriggerDescription("No HLT global trigger");
  AliHLTTriggerDomain defaultDomain("*******:***");
  AliHLTReadoutList readoutlist;
  readoutlist.Enable(AliHLTReadoutList::kALLDET);
  defaultDomain.Add(readoutlist);
  config.SetDefaultTriggerDomain(defaultDomain);
  config.SetDefaultResult(true);
  
  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 Artur.Szostak@cern.ch");
  metaData->SetComment("HM-PHYSICS-V0002");
  storage->Put(menu, id, metaData);
}
 HM-PHYSICS-V0002.C:1
 HM-PHYSICS-V0002.C:2
 HM-PHYSICS-V0002.C:3
 HM-PHYSICS-V0002.C:4
 HM-PHYSICS-V0002.C:5
 HM-PHYSICS-V0002.C:6
 HM-PHYSICS-V0002.C:7
 HM-PHYSICS-V0002.C:8
 HM-PHYSICS-V0002.C:9
 HM-PHYSICS-V0002.C:10
 HM-PHYSICS-V0002.C:11
 HM-PHYSICS-V0002.C:12
 HM-PHYSICS-V0002.C:13
 HM-PHYSICS-V0002.C:14
 HM-PHYSICS-V0002.C:15
 HM-PHYSICS-V0002.C:16
 HM-PHYSICS-V0002.C:17
 HM-PHYSICS-V0002.C:18
 HM-PHYSICS-V0002.C:19
 HM-PHYSICS-V0002.C:20
 HM-PHYSICS-V0002.C:21
 HM-PHYSICS-V0002.C:22
 HM-PHYSICS-V0002.C:23
 HM-PHYSICS-V0002.C:24
 HM-PHYSICS-V0002.C:25
 HM-PHYSICS-V0002.C:26
 HM-PHYSICS-V0002.C:27
 HM-PHYSICS-V0002.C:28
 HM-PHYSICS-V0002.C:29
 HM-PHYSICS-V0002.C:30
 HM-PHYSICS-V0002.C:31
 HM-PHYSICS-V0002.C:32
 HM-PHYSICS-V0002.C:33
 HM-PHYSICS-V0002.C:34
 HM-PHYSICS-V0002.C:35
 HM-PHYSICS-V0002.C:36
 HM-PHYSICS-V0002.C:37
 HM-PHYSICS-V0002.C:38
 HM-PHYSICS-V0002.C:39
 HM-PHYSICS-V0002.C:40
 HM-PHYSICS-V0002.C:41
 HM-PHYSICS-V0002.C:42
 HM-PHYSICS-V0002.C:43
 HM-PHYSICS-V0002.C:44
 HM-PHYSICS-V0002.C:45
 HM-PHYSICS-V0002.C:46
 HM-PHYSICS-V0002.C:47
 HM-PHYSICS-V0002.C:48
 HM-PHYSICS-V0002.C:49
 HM-PHYSICS-V0002.C:50
 HM-PHYSICS-V0002.C:51
 HM-PHYSICS-V0002.C:52
 HM-PHYSICS-V0002.C:53
 HM-PHYSICS-V0002.C:54
 HM-PHYSICS-V0002.C:55
 HM-PHYSICS-V0002.C:56
 HM-PHYSICS-V0002.C:57
 HM-PHYSICS-V0002.C:58
 HM-PHYSICS-V0002.C:59
 HM-PHYSICS-V0002.C:60
 HM-PHYSICS-V0002.C:61
 HM-PHYSICS-V0002.C:62
 HM-PHYSICS-V0002.C:63
 HM-PHYSICS-V0002.C:64
 HM-PHYSICS-V0002.C:65
 HM-PHYSICS-V0002.C:66
 HM-PHYSICS-V0002.C:67
 HM-PHYSICS-V0002.C:68
 HM-PHYSICS-V0002.C:69
 HM-PHYSICS-V0002.C:70
 HM-PHYSICS-V0002.C:71
 HM-PHYSICS-V0002.C:72
 HM-PHYSICS-V0002.C:73
 HM-PHYSICS-V0002.C:74
 HM-PHYSICS-V0002.C:75
 HM-PHYSICS-V0002.C:76
 HM-PHYSICS-V0002.C:77
 HM-PHYSICS-V0002.C:78
 HM-PHYSICS-V0002.C:79
 HM-PHYSICS-V0002.C:80
 HM-PHYSICS-V0002.C:81
 HM-PHYSICS-V0002.C:82
 HM-PHYSICS-V0002.C:83
 HM-PHYSICS-V0002.C:84
 HM-PHYSICS-V0002.C:85
 HM-PHYSICS-V0002.C:86
 HM-PHYSICS-V0002.C:87
 HM-PHYSICS-V0002.C:88
 HM-PHYSICS-V0002.C:89
 HM-PHYSICS-V0002.C:90
 HM-PHYSICS-V0002.C:91
 HM-PHYSICS-V0002.C:92
 HM-PHYSICS-V0002.C:93
 HM-PHYSICS-V0002.C:94
 HM-PHYSICS-V0002.C:95
 HM-PHYSICS-V0002.C:96
 HM-PHYSICS-V0002.C:97
 HM-PHYSICS-V0002.C:98
 HM-PHYSICS-V0002.C:99
 HM-PHYSICS-V0002.C:100
 HM-PHYSICS-V0002.C:101
 HM-PHYSICS-V0002.C:102
 HM-PHYSICS-V0002.C:103
 HM-PHYSICS-V0002.C:104
 HM-PHYSICS-V0002.C:105
 HM-PHYSICS-V0002.C:106
 HM-PHYSICS-V0002.C:107
 HM-PHYSICS-V0002.C:108
 HM-PHYSICS-V0002.C:109
 HM-PHYSICS-V0002.C:110
 HM-PHYSICS-V0002.C:111
 HM-PHYSICS-V0002.C:112
 HM-PHYSICS-V0002.C:113
 HM-PHYSICS-V0002.C:114
 HM-PHYSICS-V0002.C:115
 HM-PHYSICS-V0002.C:116
 HM-PHYSICS-V0002.C:117
 HM-PHYSICS-V0002.C:118
 HM-PHYSICS-V0002.C:119
 HM-PHYSICS-V0002.C:120
 HM-PHYSICS-V0002.C:121
 HM-PHYSICS-V0002.C:122
 HM-PHYSICS-V0002.C:123
 HM-PHYSICS-V0002.C:124
 HM-PHYSICS-V0002.C:125
 HM-PHYSICS-V0002.C:126
 HM-PHYSICS-V0002.C:127
 HM-PHYSICS-V0002.C:128
 HM-PHYSICS-V0002.C:129
 HM-PHYSICS-V0002.C:130
 HM-PHYSICS-V0002.C:131
 HM-PHYSICS-V0002.C:132
 HM-PHYSICS-V0002.C:133
 HM-PHYSICS-V0002.C:134
 HM-PHYSICS-V0002.C:135
 HM-PHYSICS-V0002.C:136
 HM-PHYSICS-V0002.C:137
 HM-PHYSICS-V0002.C:138
 HM-PHYSICS-V0002.C:139
 HM-PHYSICS-V0002.C:140
 HM-PHYSICS-V0002.C:141
 HM-PHYSICS-V0002.C:142
 HM-PHYSICS-V0002.C:143
 HM-PHYSICS-V0002.C:144
 HM-PHYSICS-V0002.C:145
 HM-PHYSICS-V0002.C:146
 HM-PHYSICS-V0002.C:147
 HM-PHYSICS-V0002.C:148
 HM-PHYSICS-V0002.C:149
 HM-PHYSICS-V0002.C:150
 HM-PHYSICS-V0002.C:151
 HM-PHYSICS-V0002.C:152
 HM-PHYSICS-V0002.C:153
 HM-PHYSICS-V0002.C:154
 HM-PHYSICS-V0002.C:155
 HM-PHYSICS-V0002.C:156
 HM-PHYSICS-V0002.C:157
 HM-PHYSICS-V0002.C:158
 HM-PHYSICS-V0002.C:159
 HM-PHYSICS-V0002.C:160
 HM-PHYSICS-V0002.C:161
 HM-PHYSICS-V0002.C:162
 HM-PHYSICS-V0002.C:163
 HM-PHYSICS-V0002.C:164
 HM-PHYSICS-V0002.C:165
 HM-PHYSICS-V0002.C:166
 HM-PHYSICS-V0002.C:167
 HM-PHYSICS-V0002.C:168
 HM-PHYSICS-V0002.C:169
 HM-PHYSICS-V0002.C:170
 HM-PHYSICS-V0002.C:171
 HM-PHYSICS-V0002.C:172
 HM-PHYSICS-V0002.C:173
 HM-PHYSICS-V0002.C:174
 HM-PHYSICS-V0002.C:175
 HM-PHYSICS-V0002.C:176
 HM-PHYSICS-V0002.C:177
 HM-PHYSICS-V0002.C:178
 HM-PHYSICS-V0002.C:179
 HM-PHYSICS-V0002.C:180
 HM-PHYSICS-V0002.C:181
 HM-PHYSICS-V0002.C:182
 HM-PHYSICS-V0002.C:183
 HM-PHYSICS-V0002.C:184
 HM-PHYSICS-V0002.C:185
 HM-PHYSICS-V0002.C:186
 HM-PHYSICS-V0002.C:187
 HM-PHYSICS-V0002.C:188
 HM-PHYSICS-V0002.C:189
 HM-PHYSICS-V0002.C:190