ROOT logo
// $Id$
/**
 * @file adjustOCDBObject.C
 * @brief Tool to adjust properties of an OCDB object and write it back to OCDB.
 *
 * Usage:
 * <pre>
 *   aliroot -b -q adjustOCDBObject("file",
 *                                  targetCDB="local://$PWD",
 *                                  firstrun=-1,
 *                                  lastrun=-1,
 *                                  version=-1,
 *                                  subversion=-1,
 *                                  comment=NULL,
 *                                  responsible=NULL,
 *                                  alirootv=NULL) 
 * </pre>
 *
 * The macro opens an OCDB entry directly as a file, changes properties
 * of the entry and uses the CDBmanager to write it back to some new
 * location.
 *
 * Required parameters:
 * - filename
 * - OCDB target
 * Optional parameters, if the default values are specified the
 * corresponding key in the entry is not changed
 * - first run
 * - last run, if smaller than first run 'AliCDBRunRange::Infinity' is used
 * - version
 * - subversion
 * - comment
 * - responsible
 * - aliroot version 
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_tutorial
 */
void adjustOCDBObject(const char* file,
		      const char* targetCDB="local://$PWD",
		      int firstrun=-1,
		      int lastrun=-1,
		      int version=-1,
		      int subversion=-1,
		      const char* comment=NULL,
		      const char* responsible=NULL,
		      const char* alirootv=NULL) 
{
  TFile* origfile=new TFile(file);
  if (origfile->IsZombie()) {
    cerr << "error opening file " << file << endl;
    return;
  }
  
  AliCDBEntry* cdbEntry=NULL;
  origfile->GetObject("AliCDBEntry", cdbEntry);
  if (!cdbEntry) {
    cerr << "can not find CDB entry in file " << file << endl;
  }

  AliCDBId& cdbId=cdbEntry->GetId();
  if (version>=0) cdbId.SetVersion(version);
  if (subversion>=0) cdbId.SetSubVersion(subversion);
  if (firstrun>=0) cdbId.SetFirstRun(firstrun);
  if (lastrun>=0) cdbId.SetLastRun(lastrun);
  if (lastrun<firstrun) cdbId.SetLastRun(AliCDBRunRange::Infinity());

  AliCDBMetaData* meta=cdbEntry->GetMetaData();
  if (comment) meta->SetComment(comment);
  if (responsible) meta->SetResponsible(responsible);
  if (alirootv) meta->SetAliRootVersion(alirootv);

  AliCDBManager* man = AliCDBManager::Instance();
  man->SetDefaultStorage(targetCDB);
  man->Put(cdbEntry);

}

void adjustOCDBObject() 
{
  cout << "adjustOCDBObject.C   adjust properties of an OCDB entry" << endl;
  cout << "usage:" << endl;
  cout << "   aliroot -b -q adjustOCDBObject'(\"file\", " << endl;
  cout << "                                  targetCDB=\"local://$PWD\", " << endl;
  cout << "                                  firstrun=-1, " << endl;
  cout << "                                  lastrun=-1, " << endl;
  cout << "                                  version=-1, " << endl;
  cout << "                                  subversion=-1, " << endl;
  cout << "                                  comment=NULL, " << endl;
  cout << "                                  responsible=NULL, " << endl;
  cout << "                                  alirootv=NULL)'  " << endl;
  cout << " e.g." << endl;
  cout << "   aliroot -b -q adjustOCDBObject'(\"myfile.root\", \"$ALICE_ROOT/OCDB\", 42, 42)'" << endl;
}
 adjustOCDBObject.C:1
 adjustOCDBObject.C:2
 adjustOCDBObject.C:3
 adjustOCDBObject.C:4
 adjustOCDBObject.C:5
 adjustOCDBObject.C:6
 adjustOCDBObject.C:7
 adjustOCDBObject.C:8
 adjustOCDBObject.C:9
 adjustOCDBObject.C:10
 adjustOCDBObject.C:11
 adjustOCDBObject.C:12
 adjustOCDBObject.C:13
 adjustOCDBObject.C:14
 adjustOCDBObject.C:15
 adjustOCDBObject.C:16
 adjustOCDBObject.C:17
 adjustOCDBObject.C:18
 adjustOCDBObject.C:19
 adjustOCDBObject.C:20
 adjustOCDBObject.C:21
 adjustOCDBObject.C:22
 adjustOCDBObject.C:23
 adjustOCDBObject.C:24
 adjustOCDBObject.C:25
 adjustOCDBObject.C:26
 adjustOCDBObject.C:27
 adjustOCDBObject.C:28
 adjustOCDBObject.C:29
 adjustOCDBObject.C:30
 adjustOCDBObject.C:31
 adjustOCDBObject.C:32
 adjustOCDBObject.C:33
 adjustOCDBObject.C:34
 adjustOCDBObject.C:35
 adjustOCDBObject.C:36
 adjustOCDBObject.C:37
 adjustOCDBObject.C:38
 adjustOCDBObject.C:39
 adjustOCDBObject.C:40
 adjustOCDBObject.C:41
 adjustOCDBObject.C:42
 adjustOCDBObject.C:43
 adjustOCDBObject.C:44
 adjustOCDBObject.C:45
 adjustOCDBObject.C:46
 adjustOCDBObject.C:47
 adjustOCDBObject.C:48
 adjustOCDBObject.C:49
 adjustOCDBObject.C:50
 adjustOCDBObject.C:51
 adjustOCDBObject.C:52
 adjustOCDBObject.C:53
 adjustOCDBObject.C:54
 adjustOCDBObject.C:55
 adjustOCDBObject.C:56
 adjustOCDBObject.C:57
 adjustOCDBObject.C:58
 adjustOCDBObject.C:59
 adjustOCDBObject.C:60
 adjustOCDBObject.C:61
 adjustOCDBObject.C:62
 adjustOCDBObject.C:63
 adjustOCDBObject.C:64
 adjustOCDBObject.C:65
 adjustOCDBObject.C:66
 adjustOCDBObject.C:67
 adjustOCDBObject.C:68
 adjustOCDBObject.C:69
 adjustOCDBObject.C:70
 adjustOCDBObject.C:71
 adjustOCDBObject.C:72
 adjustOCDBObject.C:73
 adjustOCDBObject.C:74
 adjustOCDBObject.C:75
 adjustOCDBObject.C:76
 adjustOCDBObject.C:77
 adjustOCDBObject.C:78
 adjustOCDBObject.C:79
 adjustOCDBObject.C:80
 adjustOCDBObject.C:81
 adjustOCDBObject.C:82
 adjustOCDBObject.C:83
 adjustOCDBObject.C:84
 adjustOCDBObject.C:85
 adjustOCDBObject.C:86
 adjustOCDBObject.C:87
 adjustOCDBObject.C:88
 adjustOCDBObject.C:89
 adjustOCDBObject.C:90
 adjustOCDBObject.C:91
 adjustOCDBObject.C:92
 adjustOCDBObject.C:93
 adjustOCDBObject.C:94
 adjustOCDBObject.C:95