ROOT logo
//-*- Mode: C++ -*-
// $Id: makeTriggerConfigurationObject.C  $
/**
 * @file makeTriggerConfigurationObject.C
 * @brief Creation of HLT component configuration objects in OCDB
 *
 * <pre>
 * Usage: aliroot -b -q makeTriggerConfigurationObject.C'("triggerName", "cdbUri", runMin, runMax)'
 * </pre>
 *
 * Create an CDB entry for a certain trigger.
 * 
 * According to <Trigger-Identifier>, <Minor Version> and <Major Versions>, 
 * CDB objects are created and saved in the CDB. This objects can be any TObject
 * and have to implemented according to the trigger needs.
 *
 * Note : <br>
 * In the path in the CDB '-' is replaced by '_._'  
 *
 * Parameters: <br>
 * - triggerName    Trigger Name following the standard
 *                  H-<Trigger-Identifier>-VXXXX.YYY
                    - VXXXX being the major version number, specifying the settings 
                    - YYY   being the minor version number, specifying the alogrithm version
 * - cdbUri (opt)   the CDB URI, default $ALICE_ROOT   
 * - runMin (opt)   default 0
 * - runMax (opt)   default 999999999
 *
 * Implemented Trigger : <br>
 *  - Barrel_pT_Single  -> AliHLTESDTrackCuts object
 *
 * Usage Example : <br>
 *  aliroot -b -l -q makeTriggerConfigurationObject.C'("H-Barrel_pT_Single-V0001.001")'
 *
 * @author Jochen Thaeder <jochen@thaeder.de>
 * @ingroup alihlt_trigger
 */

// #################################################################################
void makeTriggerConfigurationObject(const Char_t* triggerName, const Char_t* cdbUri=NULL, 
				    Int_t runMin=0, Int_t runMax=AliCDBRunRange::Infinity() ) {

  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libHLTbase.so");
  gSystem->Load("libAliHLTUtil.so");

  // --------------------------------------
  // -- Parse Trigger Name
  // --------------------------------------

  TString name(triggerName);
  if ( !name.BeginsWith("H-") ) {
    cerr << "Error : " << name.Data() << " is not a valid trigger name!" << endl;
    return;
  }
  
  TObjArray* entries = name.Tokenize("-");
  if (entries->GetEntriesFast() != 3 ) {
    cerr << "Error : " << name.Data() << " is not a valid trigger name!" << endl;
    return;
  }

  TString id = (static_cast<TObjString*>(entries->UncheckedAt(1)))->GetString();

  TObjArray* version = (static_cast<TObjString*>(entries->UncheckedAt(2)))->GetString().Tokenize(".");
  if (version->GetEntriesFast() != 2 ) {
    cerr << "Error : " << name.Data() << " is not a valid trigger name!" << endl;
    return;
  }

  // -- Major version ID = Settings
  TString major = (static_cast<TObjString*>(version->UncheckedAt(0)))->GetString();

  // -- Minor version ID = Algorithm
  TString minor = (static_cast<TObjString*>(version->UncheckedAt(1)))->GetString();
  

  // -------------------------------------------------------------------------------------

  printf ("Trigger Setup for : %s \n", triggerName);

  // --------------------------------------
  // -- Create Configuration Object
  // --------------------------------------
  
  TObject* configObj = NULL;

  if ( !id.CompareTo("Barrel_pT_Single") ) { // ----------------------------------------
    
    AliHLTESDTrackCuts* esdTrackCuts = NULL;
    TString description;

    if ( !minor.CompareTo("001") ) {
      printf (" - Trigger Setup for 2010 pp data.\n");
      
      esdTrackCuts = AliHLTESDTrackCuts::GetStandardTrackCuts2010pp();
      description += esdTrackCuts->GetTitle();
      
      // -- pt cut 1 GeV - minClusters 80
      if ( !major.CompareTo("V0001") ) {
	esdTrackCuts->SetPtRange(1.);
	esdTrackCuts->SetMinNClustersTPC(80);
	description += " && p_t > 1 GeV/c && clustersTPC > 80";
      }
      // -- pt cut 2 GeV - minClusters 80
      else if ( !major.CompareTo("V0002") ) {
	esdTrackCuts->SetPtRange(2.);
	esdTrackCuts->SetMinNClustersTPC(80);
	description += " && p_t > 2 GeV/c && clustersTPC > 80";
      }
      // -- pt cut 3 GeV - minClusters 100
      else if ( !major.CompareTo("V0003") ) {
	esdTrackCuts->SetPtRange(3.);
	esdTrackCuts->SetMinNClustersTPC(100);
	description += " && p_t > 3 GeV/c && clustersTPC > 100";
      }
      else {
	cerr << "Error : Major version " << major.Data() << " is not implemented!" << endl;
	return;
      }
    }
    else {
      cerr << "Error : Minor version " << minor.Data() << " is not implemented!" << endl;
      return;
    }
    
    if ( !esdTrackCuts ) {
      cerr << "Error : No AliHLTESDTrackCuts object created" << endl;
      return;
    }
    
    esdTrackCuts->SetTitle(description);
    configObj = static_cast<TObject*>(esdTrackCuts);
  }
  else { // ------------------------------------------------------------------------------
    cerr << "Error : Trigger name " << id.Data() << " is not implemented!" << endl;
      return;
  }

  // -------------------------------------------------------------------------------------  
  printf(" - TrackCuts : %s\n", esdTrackCuts->GetTitle());

  // --------------------------------------
  // -- Setup CDB
  // --------------------------------------

  AliCDBManager* man = AliCDBManager::Instance();
  if (!man) {
    cerr << "Error : Can not get AliCDBManager" << endl;
    return;
  }
  
  TString storage;
  if ( !man->IsDefaultStorageSet() ) {
    if ( cdbUri ) {
      storage = cdbUri;
      if ( storage.Contains("://") == 0 ) {
	storage = "local://"; 
	storage += cdbUri;
      }
    } 
    else {
      storage = "local://$ALICE_ROOT/OCDB";
    }
    man->SetDefaultStorage(storage);
  } 
  else {
    storage = man->GetDefaultStorage()->GetURI();
  }

  TString path("HLT/ConfigHLT/");
  path += name.ReplaceAll("-",1,"_._",3);

  // --------------------------------------
  // -- Fill Object
  // --------------------------------------
  
  if ( !configObj ) {
    cerr << "Error : No configuration object created" << endl;
    return;
  }
    
  AliCDBPath cdbPath(path);
  AliCDBId   cdbId(cdbPath, runMin, runMax);
  AliCDBMetaData cdbMetaData;
  man->Put(configObj, cdbId, &cdbMetaData);

  printf("Adding %s type OCDB object to %s [%d,%d] in %s \n",
	 configObj->ClassName(), 
	 path.Data(),
	 runMin, runMax, storage.Data());
  
  // --------------------------------------
  // -- Clean up
  // --------------------------------------
  if (version)
    delete version;
  version = NULL;

  if (entries)
    delete entries;
  entries = NULL;

  if (esdTrackCuts)
    delete esdTrackCuts;
  esdTrackCuts = NULL;
}
// #################################################################################
void makeTriggerConfigurationObject() {

  cout << "===============================================================" << endl;
  cout << "usage: aliroot -b -q -l makeComponentConfigurationObject.C'(\"triggerName\", \"cdbUri\", rangeMin, rangeMax)'" << endl << endl;
  cout << "  triggerName    Trigger Name following the standard" << endl;
  cout << "                 H-<Trigger-Identifier>-VXXXX.YYY" << endl;
  cout << "                    - VXXXX being the major version number, specifying the settings" << endl;
  cout << "                    - YYY   being the minor version number, specifying the alogrithm version" << endl;
  cout << "  cdbUri   (opt) the OCDB URI, default $ALICE_ROOT/OCDB   " << endl;
  cout << "  rangeMin (opt) default 0" << endl;
  cout << "  rangeMax (opt) default 999999999" << endl << endl;
  cout << "example: aliroot -b -l -q makeTriggerConfigurationObject.C'(\"H-Barrel_pT_Single-V0001.001\")'" << endl;
  cout << "===============================================================" << endl;
}
 makeTriggerConfigurationObject.C:1
 makeTriggerConfigurationObject.C:2
 makeTriggerConfigurationObject.C:3
 makeTriggerConfigurationObject.C:4
 makeTriggerConfigurationObject.C:5
 makeTriggerConfigurationObject.C:6
 makeTriggerConfigurationObject.C:7
 makeTriggerConfigurationObject.C:8
 makeTriggerConfigurationObject.C:9
 makeTriggerConfigurationObject.C:10
 makeTriggerConfigurationObject.C:11
 makeTriggerConfigurationObject.C:12
 makeTriggerConfigurationObject.C:13
 makeTriggerConfigurationObject.C:14
 makeTriggerConfigurationObject.C:15
 makeTriggerConfigurationObject.C:16
 makeTriggerConfigurationObject.C:17
 makeTriggerConfigurationObject.C:18
 makeTriggerConfigurationObject.C:19
 makeTriggerConfigurationObject.C:20
 makeTriggerConfigurationObject.C:21
 makeTriggerConfigurationObject.C:22
 makeTriggerConfigurationObject.C:23
 makeTriggerConfigurationObject.C:24
 makeTriggerConfigurationObject.C:25
 makeTriggerConfigurationObject.C:26
 makeTriggerConfigurationObject.C:27
 makeTriggerConfigurationObject.C:28
 makeTriggerConfigurationObject.C:29
 makeTriggerConfigurationObject.C:30
 makeTriggerConfigurationObject.C:31
 makeTriggerConfigurationObject.C:32
 makeTriggerConfigurationObject.C:33
 makeTriggerConfigurationObject.C:34
 makeTriggerConfigurationObject.C:35
 makeTriggerConfigurationObject.C:36
 makeTriggerConfigurationObject.C:37
 makeTriggerConfigurationObject.C:38
 makeTriggerConfigurationObject.C:39
 makeTriggerConfigurationObject.C:40
 makeTriggerConfigurationObject.C:41
 makeTriggerConfigurationObject.C:42
 makeTriggerConfigurationObject.C:43
 makeTriggerConfigurationObject.C:44
 makeTriggerConfigurationObject.C:45
 makeTriggerConfigurationObject.C:46
 makeTriggerConfigurationObject.C:47
 makeTriggerConfigurationObject.C:48
 makeTriggerConfigurationObject.C:49
 makeTriggerConfigurationObject.C:50
 makeTriggerConfigurationObject.C:51
 makeTriggerConfigurationObject.C:52
 makeTriggerConfigurationObject.C:53
 makeTriggerConfigurationObject.C:54
 makeTriggerConfigurationObject.C:55
 makeTriggerConfigurationObject.C:56
 makeTriggerConfigurationObject.C:57
 makeTriggerConfigurationObject.C:58
 makeTriggerConfigurationObject.C:59
 makeTriggerConfigurationObject.C:60
 makeTriggerConfigurationObject.C:61
 makeTriggerConfigurationObject.C:62
 makeTriggerConfigurationObject.C:63
 makeTriggerConfigurationObject.C:64
 makeTriggerConfigurationObject.C:65
 makeTriggerConfigurationObject.C:66
 makeTriggerConfigurationObject.C:67
 makeTriggerConfigurationObject.C:68
 makeTriggerConfigurationObject.C:69
 makeTriggerConfigurationObject.C:70
 makeTriggerConfigurationObject.C:71
 makeTriggerConfigurationObject.C:72
 makeTriggerConfigurationObject.C:73
 makeTriggerConfigurationObject.C:74
 makeTriggerConfigurationObject.C:75
 makeTriggerConfigurationObject.C:76
 makeTriggerConfigurationObject.C:77
 makeTriggerConfigurationObject.C:78
 makeTriggerConfigurationObject.C:79
 makeTriggerConfigurationObject.C:80
 makeTriggerConfigurationObject.C:81
 makeTriggerConfigurationObject.C:82
 makeTriggerConfigurationObject.C:83
 makeTriggerConfigurationObject.C:84
 makeTriggerConfigurationObject.C:85
 makeTriggerConfigurationObject.C:86
 makeTriggerConfigurationObject.C:87
 makeTriggerConfigurationObject.C:88
 makeTriggerConfigurationObject.C:89
 makeTriggerConfigurationObject.C:90
 makeTriggerConfigurationObject.C:91
 makeTriggerConfigurationObject.C:92
 makeTriggerConfigurationObject.C:93
 makeTriggerConfigurationObject.C:94
 makeTriggerConfigurationObject.C:95
 makeTriggerConfigurationObject.C:96
 makeTriggerConfigurationObject.C:97
 makeTriggerConfigurationObject.C:98
 makeTriggerConfigurationObject.C:99
 makeTriggerConfigurationObject.C:100
 makeTriggerConfigurationObject.C:101
 makeTriggerConfigurationObject.C:102
 makeTriggerConfigurationObject.C:103
 makeTriggerConfigurationObject.C:104
 makeTriggerConfigurationObject.C:105
 makeTriggerConfigurationObject.C:106
 makeTriggerConfigurationObject.C:107
 makeTriggerConfigurationObject.C:108
 makeTriggerConfigurationObject.C:109
 makeTriggerConfigurationObject.C:110
 makeTriggerConfigurationObject.C:111
 makeTriggerConfigurationObject.C:112
 makeTriggerConfigurationObject.C:113
 makeTriggerConfigurationObject.C:114
 makeTriggerConfigurationObject.C:115
 makeTriggerConfigurationObject.C:116
 makeTriggerConfigurationObject.C:117
 makeTriggerConfigurationObject.C:118
 makeTriggerConfigurationObject.C:119
 makeTriggerConfigurationObject.C:120
 makeTriggerConfigurationObject.C:121
 makeTriggerConfigurationObject.C:122
 makeTriggerConfigurationObject.C:123
 makeTriggerConfigurationObject.C:124
 makeTriggerConfigurationObject.C:125
 makeTriggerConfigurationObject.C:126
 makeTriggerConfigurationObject.C:127
 makeTriggerConfigurationObject.C:128
 makeTriggerConfigurationObject.C:129
 makeTriggerConfigurationObject.C:130
 makeTriggerConfigurationObject.C:131
 makeTriggerConfigurationObject.C:132
 makeTriggerConfigurationObject.C:133
 makeTriggerConfigurationObject.C:134
 makeTriggerConfigurationObject.C:135
 makeTriggerConfigurationObject.C:136
 makeTriggerConfigurationObject.C:137
 makeTriggerConfigurationObject.C:138
 makeTriggerConfigurationObject.C:139
 makeTriggerConfigurationObject.C:140
 makeTriggerConfigurationObject.C:141
 makeTriggerConfigurationObject.C:142
 makeTriggerConfigurationObject.C:143
 makeTriggerConfigurationObject.C:144
 makeTriggerConfigurationObject.C:145
 makeTriggerConfigurationObject.C:146
 makeTriggerConfigurationObject.C:147
 makeTriggerConfigurationObject.C:148
 makeTriggerConfigurationObject.C:149
 makeTriggerConfigurationObject.C:150
 makeTriggerConfigurationObject.C:151
 makeTriggerConfigurationObject.C:152
 makeTriggerConfigurationObject.C:153
 makeTriggerConfigurationObject.C:154
 makeTriggerConfigurationObject.C:155
 makeTriggerConfigurationObject.C:156
 makeTriggerConfigurationObject.C:157
 makeTriggerConfigurationObject.C:158
 makeTriggerConfigurationObject.C:159
 makeTriggerConfigurationObject.C:160
 makeTriggerConfigurationObject.C:161
 makeTriggerConfigurationObject.C:162
 makeTriggerConfigurationObject.C:163
 makeTriggerConfigurationObject.C:164
 makeTriggerConfigurationObject.C:165
 makeTriggerConfigurationObject.C:166
 makeTriggerConfigurationObject.C:167
 makeTriggerConfigurationObject.C:168
 makeTriggerConfigurationObject.C:169
 makeTriggerConfigurationObject.C:170
 makeTriggerConfigurationObject.C:171
 makeTriggerConfigurationObject.C:172
 makeTriggerConfigurationObject.C:173
 makeTriggerConfigurationObject.C:174
 makeTriggerConfigurationObject.C:175
 makeTriggerConfigurationObject.C:176
 makeTriggerConfigurationObject.C:177
 makeTriggerConfigurationObject.C:178
 makeTriggerConfigurationObject.C:179
 makeTriggerConfigurationObject.C:180
 makeTriggerConfigurationObject.C:181
 makeTriggerConfigurationObject.C:182
 makeTriggerConfigurationObject.C:183
 makeTriggerConfigurationObject.C:184
 makeTriggerConfigurationObject.C:185
 makeTriggerConfigurationObject.C:186
 makeTriggerConfigurationObject.C:187
 makeTriggerConfigurationObject.C:188
 makeTriggerConfigurationObject.C:189
 makeTriggerConfigurationObject.C:190
 makeTriggerConfigurationObject.C:191
 makeTriggerConfigurationObject.C:192
 makeTriggerConfigurationObject.C:193
 makeTriggerConfigurationObject.C:194
 makeTriggerConfigurationObject.C:195
 makeTriggerConfigurationObject.C:196
 makeTriggerConfigurationObject.C:197
 makeTriggerConfigurationObject.C:198
 makeTriggerConfigurationObject.C:199
 makeTriggerConfigurationObject.C:200
 makeTriggerConfigurationObject.C:201
 makeTriggerConfigurationObject.C:202
 makeTriggerConfigurationObject.C:203
 makeTriggerConfigurationObject.C:204
 makeTriggerConfigurationObject.C:205
 makeTriggerConfigurationObject.C:206
 makeTriggerConfigurationObject.C:207
 makeTriggerConfigurationObject.C:208
 makeTriggerConfigurationObject.C:209
 makeTriggerConfigurationObject.C:210
 makeTriggerConfigurationObject.C:211
 makeTriggerConfigurationObject.C:212
 makeTriggerConfigurationObject.C:213
 makeTriggerConfigurationObject.C:214
 makeTriggerConfigurationObject.C:215
 makeTriggerConfigurationObject.C:216
 makeTriggerConfigurationObject.C:217
 makeTriggerConfigurationObject.C:218
 makeTriggerConfigurationObject.C:219
 makeTriggerConfigurationObject.C:220
 makeTriggerConfigurationObject.C:221
 makeTriggerConfigurationObject.C:222
 makeTriggerConfigurationObject.C:223
 makeTriggerConfigurationObject.C:224