ROOT logo
// $Id$
/**
 * @file makeGlobalHistoConfigObject.C
 * @brief Creation of Global Histo component configuration objects in OCDB
 *
 * <pre>
 * Usage:
 *  aliroot -b -q makeGlobalHistoConfigObject.C'("path", "key", "uri", runmin, runmax)'
 * </pre>
 *
 * Create an OCDB entry with a TObjString containing param.
 * Many HLT components understand configuration strings containing
 * arguments and parameters just like the command line arguments.
 * This macro facilitates the creation of an appropriate object
 * from a parameter string.
 * As another approach the TObjString parameters are stored in a TMap
 * associated to a key. A TMap object is generated if 'key' is specified.
 *
 * Parameters: <br>
 * - path           path of the entry within the OCDB (e.g. HLT/ConfigHLT/GlobalHisto)
 * - uri   (opt)    the OCDB URI, default $ALICE_ROOT/OCDB   
 * - runmin (opt)   default 0
 * - runmax (opt)   default 999999999
 * The parameters of the component configuration should be defined inside function makeString().
 *
 * Note: The configuration procedure of an HLT component is not
 * restricted to that scheme. The implementation is up to the
 * developer and more complex objects are possible.
 *
 * @author Kalliopi.Kanaki@ift.uib.no
 * @ingroup alihlt_tutorial
 */
void makeGlobalHistoConfigObject(const char* path, 
				 const char* key,
				 //const char* param,
				 const char* cdbUri,
				 int runmin=0,
				 int runmax=999999999,
				 int runNo=0)
{
  AliCDBManager* man = AliCDBManager::Instance();
  if (!man) {
    cerr << "Cannot get AliCDBManager." << end;
    exit;
  }
  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();
  }

  TMap* pMap=NULL;

  // load existing object and init TMap
  AliCDBEntry* pExisting=NULL;
  AliCDBStorage* pStorage=AliCDBManager::Instance()->GetDefaultStorage();
  if (key && pStorage->GetLatestVersion(path, runNo)>=0) {
    pExisting=pStorage->Get(path, runNo);
    if (pExisting->GetObject()->IsA() == TMap::Class()) {
      pMap=(TMap*)pExisting->GetObject()->Clone();
    }
  }  

  if (key && !pMap) pMap=new TMap;

  // here is the actual content of the configuration object
  TObject* obj=new TObjString(makeString()); //KK
  //TObject* obj=new TObjString(param); 
  if (pMap) {
    if (pMap->FindObject(key)) {
      pMap->Remove(new TObjString(key));
    }
    pMap->Add(new TObjString(key), obj);
    obj=pMap;
  }

  AliCDBPath cdbPath(path);
  AliCDBId cdbId(cdbPath, runmin, runmax);
  AliCDBMetaData* cdbMetaData=NULL;
  if (pExisting) cdbMetaData=pExisting->GetMetaData();
  else cdbMetaData=new AliCDBMetaData;
  man->Put(obj, cdbId, cdbMetaData);
}

// void makeGlobalHistoConfigObject(const char* path
//                                       ,//const char* param="",
// 				      ,const char* cdbUri=NULL
// 				      ,int runmin=0
// 				      ,int runmax=999999999)
// {
//   //makeGlobalHistoConfigObject(path, NULL, param, cdbUri, runmin, runmax);
//   makeGlobalHistoConfigObject(path, NULL, makeString(), cdbUri, runmin, runmax); //KK
// }
// 
// void makeComponentConfigurationObject(const char* path, 
// 				      int runNo,
// 				      const char* key,
// 				      const char* param)
// {
//   makeComponentConfigurationObject(path, key, param, NULL, 0, 999999999, runNo);
// }

void makeGlobalHistoConfigObject()
{
  cout << "===============================================================" << endl;
  cout << "usage: aliroot -b -q -l makeGlobalHistoConfigObject.C'(\"path\", NULL, \"uri\", rangemin, rangemax)'" << endl << endl;
  cout << "  path           path of the entry within the OCDB, e.g. HLT/ConfigHLT/GlobalHisto" << endl;
  cout << "  uri   (opt)    the OCDB URI, default $ALICE_ROOT/OCDB   " << endl;
  cout << "  rangemin (opt) default 0" << endl;
  cout << "  rangemax (opt) default 999999999" << endl;
  cout << "  The parameters of the component configuration should be defined inside function makeString()." << endl;
  cout << "===============================================================" << endl;
}

TString makeString(){
  
  TString s = "";

  s+="-max-track-count 8000 ";
  //s+="-max-track-count 8000 -fill-V0 -max-V0-count 200 ";
  
  s+="-histogram TrackPt(100,0,20) -size 1000 -expression Track_pt -title p_{T}_[GeV/c] -cut Track_TPCclus>0 ";
  s+="-histogram TrackPhi(180,0,360) -size 1000 -expression Track_phi -title #phi_(deg) -cut Track_TPCclus>0 ";
  s+="-histogram TrackMultiplicity(250,0,5000) -size 1000 -expression trackcount -title TrackMultiplicity ";
  s+="-histogram TrackEta(100,-2,2) -size 1000 -expression Track_eta -title #eta -cut Track_TPCclus>0&&Track_DCAr<7&&Track_DCAr>-7&&Track_pt>0.3&&Track_eta<0.9&&Track_eta>-0.9 ";
  s+="-histogram TrackTPCclus(200,0,200) -size 1000 -expression Track_TPCclus -title TPC_clusters/track -cut Track_TPCclus>0&&Track_DCAr<7&&Track_DCAr>-7&&Track_pt>0.3&&Track_eta<0.9&&Track_eta>-0.9 ";
  s+="-histogram TrackITSclus(7,0,7) -size 1000 -expression Track_ITSclus -title ITS_clusters/track ";
  s+="-histogram TrackTheta(90,0,180) -size 1000 -expression Track_theta -title #theta_(deg) -cut Track_TPCclus>0&&Track_DCAr<7&&Track_DCAr>-7&&Track_pt>0.3&&Track_eta<0.9&&Track_eta>-0.9 ";
  s+="-histogram TrackDCAr(100,-50,50) -size 1000 -expression Track_DCAr -title DCAr_[cm] -cut Track_TPCclus>0 ";
  s+="-histogram TrackCharge -size 1000 -expression Track_charge -title Polarity -cut Track_TPCclus>0 ";
 
  s+="-histogram VertexXY -size 1000 -expression vertexY:vertexX -title y:x_[cm] -cut nContributors>3 -opt colz ";
  s+="-histogram VertexX(50,-5,5)  -size 1000 -expression vertexX -title x_[cm] -cut nContributors>3 ";
  s+="-histogram VertexY(50,-5,5)  -size 1000 -expression vertexY -title y_[cm] -cut nContributors>3 ";
  s+="-histogram VertexZ(200,-50,50)  -size 1000 -expression vertexZ -title x_[cm] -cut nContributors>3 ";
  s+="-histogram VertexTrendX -size 1000 -expression vertexX:event -title vertexX_vs_event -cut nContributors>3 ";
  s+="-histogram VertexTrendY -size 1000 -expression vertexY:event -title vertexY_vs_event -cut nContributors>3 ";

  
  return s;
}
 makeGlobalHistoConfigObject.C:1
 makeGlobalHistoConfigObject.C:2
 makeGlobalHistoConfigObject.C:3
 makeGlobalHistoConfigObject.C:4
 makeGlobalHistoConfigObject.C:5
 makeGlobalHistoConfigObject.C:6
 makeGlobalHistoConfigObject.C:7
 makeGlobalHistoConfigObject.C:8
 makeGlobalHistoConfigObject.C:9
 makeGlobalHistoConfigObject.C:10
 makeGlobalHistoConfigObject.C:11
 makeGlobalHistoConfigObject.C:12
 makeGlobalHistoConfigObject.C:13
 makeGlobalHistoConfigObject.C:14
 makeGlobalHistoConfigObject.C:15
 makeGlobalHistoConfigObject.C:16
 makeGlobalHistoConfigObject.C:17
 makeGlobalHistoConfigObject.C:18
 makeGlobalHistoConfigObject.C:19
 makeGlobalHistoConfigObject.C:20
 makeGlobalHistoConfigObject.C:21
 makeGlobalHistoConfigObject.C:22
 makeGlobalHistoConfigObject.C:23
 makeGlobalHistoConfigObject.C:24
 makeGlobalHistoConfigObject.C:25
 makeGlobalHistoConfigObject.C:26
 makeGlobalHistoConfigObject.C:27
 makeGlobalHistoConfigObject.C:28
 makeGlobalHistoConfigObject.C:29
 makeGlobalHistoConfigObject.C:30
 makeGlobalHistoConfigObject.C:31
 makeGlobalHistoConfigObject.C:32
 makeGlobalHistoConfigObject.C:33
 makeGlobalHistoConfigObject.C:34
 makeGlobalHistoConfigObject.C:35
 makeGlobalHistoConfigObject.C:36
 makeGlobalHistoConfigObject.C:37
 makeGlobalHistoConfigObject.C:38
 makeGlobalHistoConfigObject.C:39
 makeGlobalHistoConfigObject.C:40
 makeGlobalHistoConfigObject.C:41
 makeGlobalHistoConfigObject.C:42
 makeGlobalHistoConfigObject.C:43
 makeGlobalHistoConfigObject.C:44
 makeGlobalHistoConfigObject.C:45
 makeGlobalHistoConfigObject.C:46
 makeGlobalHistoConfigObject.C:47
 makeGlobalHistoConfigObject.C:48
 makeGlobalHistoConfigObject.C:49
 makeGlobalHistoConfigObject.C:50
 makeGlobalHistoConfigObject.C:51
 makeGlobalHistoConfigObject.C:52
 makeGlobalHistoConfigObject.C:53
 makeGlobalHistoConfigObject.C:54
 makeGlobalHistoConfigObject.C:55
 makeGlobalHistoConfigObject.C:56
 makeGlobalHistoConfigObject.C:57
 makeGlobalHistoConfigObject.C:58
 makeGlobalHistoConfigObject.C:59
 makeGlobalHistoConfigObject.C:60
 makeGlobalHistoConfigObject.C:61
 makeGlobalHistoConfigObject.C:62
 makeGlobalHistoConfigObject.C:63
 makeGlobalHistoConfigObject.C:64
 makeGlobalHistoConfigObject.C:65
 makeGlobalHistoConfigObject.C:66
 makeGlobalHistoConfigObject.C:67
 makeGlobalHistoConfigObject.C:68
 makeGlobalHistoConfigObject.C:69
 makeGlobalHistoConfigObject.C:70
 makeGlobalHistoConfigObject.C:71
 makeGlobalHistoConfigObject.C:72
 makeGlobalHistoConfigObject.C:73
 makeGlobalHistoConfigObject.C:74
 makeGlobalHistoConfigObject.C:75
 makeGlobalHistoConfigObject.C:76
 makeGlobalHistoConfigObject.C:77
 makeGlobalHistoConfigObject.C:78
 makeGlobalHistoConfigObject.C:79
 makeGlobalHistoConfigObject.C:80
 makeGlobalHistoConfigObject.C:81
 makeGlobalHistoConfigObject.C:82
 makeGlobalHistoConfigObject.C:83
 makeGlobalHistoConfigObject.C:84
 makeGlobalHistoConfigObject.C:85
 makeGlobalHistoConfigObject.C:86
 makeGlobalHistoConfigObject.C:87
 makeGlobalHistoConfigObject.C:88
 makeGlobalHistoConfigObject.C:89
 makeGlobalHistoConfigObject.C:90
 makeGlobalHistoConfigObject.C:91
 makeGlobalHistoConfigObject.C:92
 makeGlobalHistoConfigObject.C:93
 makeGlobalHistoConfigObject.C:94
 makeGlobalHistoConfigObject.C:95
 makeGlobalHistoConfigObject.C:96
 makeGlobalHistoConfigObject.C:97
 makeGlobalHistoConfigObject.C:98
 makeGlobalHistoConfigObject.C:99
 makeGlobalHistoConfigObject.C:100
 makeGlobalHistoConfigObject.C:101
 makeGlobalHistoConfigObject.C:102
 makeGlobalHistoConfigObject.C:103
 makeGlobalHistoConfigObject.C:104
 makeGlobalHistoConfigObject.C:105
 makeGlobalHistoConfigObject.C:106
 makeGlobalHistoConfigObject.C:107
 makeGlobalHistoConfigObject.C:108
 makeGlobalHistoConfigObject.C:109
 makeGlobalHistoConfigObject.C:110
 makeGlobalHistoConfigObject.C:111
 makeGlobalHistoConfigObject.C:112
 makeGlobalHistoConfigObject.C:113
 makeGlobalHistoConfigObject.C:114
 makeGlobalHistoConfigObject.C:115
 makeGlobalHistoConfigObject.C:116
 makeGlobalHistoConfigObject.C:117
 makeGlobalHistoConfigObject.C:118
 makeGlobalHistoConfigObject.C:119
 makeGlobalHistoConfigObject.C:120
 makeGlobalHistoConfigObject.C:121
 makeGlobalHistoConfigObject.C:122
 makeGlobalHistoConfigObject.C:123
 makeGlobalHistoConfigObject.C:124
 makeGlobalHistoConfigObject.C:125
 makeGlobalHistoConfigObject.C:126
 makeGlobalHistoConfigObject.C:127
 makeGlobalHistoConfigObject.C:128
 makeGlobalHistoConfigObject.C:129
 makeGlobalHistoConfigObject.C:130
 makeGlobalHistoConfigObject.C:131
 makeGlobalHistoConfigObject.C:132
 makeGlobalHistoConfigObject.C:133
 makeGlobalHistoConfigObject.C:134
 makeGlobalHistoConfigObject.C:135
 makeGlobalHistoConfigObject.C:136
 makeGlobalHistoConfigObject.C:137
 makeGlobalHistoConfigObject.C:138
 makeGlobalHistoConfigObject.C:139
 makeGlobalHistoConfigObject.C:140
 makeGlobalHistoConfigObject.C:141
 makeGlobalHistoConfigObject.C:142
 makeGlobalHistoConfigObject.C:143
 makeGlobalHistoConfigObject.C:144
 makeGlobalHistoConfigObject.C:145
 makeGlobalHistoConfigObject.C:146
 makeGlobalHistoConfigObject.C:147
 makeGlobalHistoConfigObject.C:148
 makeGlobalHistoConfigObject.C:149
 makeGlobalHistoConfigObject.C:150
 makeGlobalHistoConfigObject.C:151