ROOT logo
#include "ARVersion.h"
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBId.h"
#include "AliCDBMetaData.h"
#include "AliGeomManager.h"
#include "AliMC.h"
#include <TROOT.h>
#include "AliRun.h"
#include <TGeoManager.h>
#include <TString.h>
#include <TInterpreter.h>
#endif

void UpdateCDBIdealGeom(const char* cdbUri, const char* cfgFile){
	// Produce the ideal geometry and store it in the specified CDB
	// The second argument allows to specify the config file to be used
	// in particular for giving the choice to generate either a full or
	// a partial geometry.
	//

	AliCDBManager* cdb = AliCDBManager::Instance();
	// we set the default storage to the repository because some dets require
	// already at the time of geometry creation to find calibration objects in the cdb
	AliCDBStorage* storage = 0;
	if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
	storage = cdb->GetStorage(cdbUri);
	if(!storage) 
	{
		Printf("unable to create valid storage from: %s", cdbUri);
		return;
	}
	cdb->SetRun(0);
	AliCDBId id("GRP/Geometry/Data",0,AliCDBRunRange::Infinity());
	AliCDBMetaData *md= new AliCDBMetaData();

	// Get root and AliRoot versions
	const char* rootv = gROOT->GetVersion();
	TString av(ALIROOT_BRANCH);
	TString revnum(ALIROOT_REVISION);

	Printf("root version: %s.  AliRoot %s, revision number %s",rootv,av.Data(),revnum);

	md->SetAliRootVersion(av.Data());
	md->SetComment(Form("Geometry produced with root version %s and AliRoot %s, revision number %s",rootv,av.Data(),revnum));
	md->AddDateToComment();

	//gSystem->Exec("if [ -e geometry.root ]; then \necho deleting existing geometry.root \nrm -rf geometry.root \nfi");
	if(!gSystem->AccessPathName("geometry.root")){
		Printf("Deleting existing \"geometry.root\"");
		gSystem->Exec("rm -rf geometry.root");
	}

	gROOT->LoadMacro(cfgFile);
	gInterpreter->ProcessLine(gAlice->GetConfigFunction());

	gAlice->GetMCApp()->Init();

	if(!gGeoManager){
		Printf("Unable to produce a valid geometry to be put in the CDB!");
		return;
	}

	/*
	if (gSystem->Exec("if [ ! -e geometry.root ]; then \n return 1  \nfi")) {
		Printf("Did not find freshly written geometry.root file");
		return;
	} */
	if(gSystem->AccessPathName("geometry.root")){
		Printf("Did not find freshly written \"geometry.root\" file. Exiting ...");
		return;
	}

	Printf("Reloading freshly written geometry.root file");
	if (TGeoManager::IsLocked()) TGeoManager::UnlockGeometry();
	AliGeomManager::LoadGeometry("geometry.root");

	gGeoManager->DefaultColors(); // assign default colors according to Z of material
	// (many colors turned into dark gray nuances some time ago, when the root palette was changed)

	Printf("Storing in CDB geometry produced with root version %s and AliRoot version %s",rootv,av.Data());
	storage->Put(gGeoManager,id,md);
	// This is to allow macros lauched after this one in the same session to find the
	// newly produced geometry.
	storage->QueryCDB(cdb->GetRun());

}


 UpdateCDBIdealGeom.C:1
 UpdateCDBIdealGeom.C:2
 UpdateCDBIdealGeom.C:3
 UpdateCDBIdealGeom.C:4
 UpdateCDBIdealGeom.C:5
 UpdateCDBIdealGeom.C:6
 UpdateCDBIdealGeom.C:7
 UpdateCDBIdealGeom.C:8
 UpdateCDBIdealGeom.C:9
 UpdateCDBIdealGeom.C:10
 UpdateCDBIdealGeom.C:11
 UpdateCDBIdealGeom.C:12
 UpdateCDBIdealGeom.C:13
 UpdateCDBIdealGeom.C:14
 UpdateCDBIdealGeom.C:15
 UpdateCDBIdealGeom.C:16
 UpdateCDBIdealGeom.C:17
 UpdateCDBIdealGeom.C:18
 UpdateCDBIdealGeom.C:19
 UpdateCDBIdealGeom.C:20
 UpdateCDBIdealGeom.C:21
 UpdateCDBIdealGeom.C:22
 UpdateCDBIdealGeom.C:23
 UpdateCDBIdealGeom.C:24
 UpdateCDBIdealGeom.C:25
 UpdateCDBIdealGeom.C:26
 UpdateCDBIdealGeom.C:27
 UpdateCDBIdealGeom.C:28
 UpdateCDBIdealGeom.C:29
 UpdateCDBIdealGeom.C:30
 UpdateCDBIdealGeom.C:31
 UpdateCDBIdealGeom.C:32
 UpdateCDBIdealGeom.C:33
 UpdateCDBIdealGeom.C:34
 UpdateCDBIdealGeom.C:35
 UpdateCDBIdealGeom.C:36
 UpdateCDBIdealGeom.C:37
 UpdateCDBIdealGeom.C:38
 UpdateCDBIdealGeom.C:39
 UpdateCDBIdealGeom.C:40
 UpdateCDBIdealGeom.C:41
 UpdateCDBIdealGeom.C:42
 UpdateCDBIdealGeom.C:43
 UpdateCDBIdealGeom.C:44
 UpdateCDBIdealGeom.C:45
 UpdateCDBIdealGeom.C:46
 UpdateCDBIdealGeom.C:47
 UpdateCDBIdealGeom.C:48
 UpdateCDBIdealGeom.C:49
 UpdateCDBIdealGeom.C:50
 UpdateCDBIdealGeom.C:51
 UpdateCDBIdealGeom.C:52
 UpdateCDBIdealGeom.C:53
 UpdateCDBIdealGeom.C:54
 UpdateCDBIdealGeom.C:55
 UpdateCDBIdealGeom.C:56
 UpdateCDBIdealGeom.C:57
 UpdateCDBIdealGeom.C:58
 UpdateCDBIdealGeom.C:59
 UpdateCDBIdealGeom.C:60
 UpdateCDBIdealGeom.C:61
 UpdateCDBIdealGeom.C:62
 UpdateCDBIdealGeom.C:63
 UpdateCDBIdealGeom.C:64
 UpdateCDBIdealGeom.C:65
 UpdateCDBIdealGeom.C:66
 UpdateCDBIdealGeom.C:67
 UpdateCDBIdealGeom.C:68
 UpdateCDBIdealGeom.C:69
 UpdateCDBIdealGeom.C:70
 UpdateCDBIdealGeom.C:71
 UpdateCDBIdealGeom.C:72
 UpdateCDBIdealGeom.C:73
 UpdateCDBIdealGeom.C:74
 UpdateCDBIdealGeom.C:75
 UpdateCDBIdealGeom.C:76
 UpdateCDBIdealGeom.C:77
 UpdateCDBIdealGeom.C:78
 UpdateCDBIdealGeom.C:79
 UpdateCDBIdealGeom.C:80
 UpdateCDBIdealGeom.C:81
 UpdateCDBIdealGeom.C:82
 UpdateCDBIdealGeom.C:83
 UpdateCDBIdealGeom.C:84
 UpdateCDBIdealGeom.C:85
 UpdateCDBIdealGeom.C:86
 UpdateCDBIdealGeom.C:87
 UpdateCDBIdealGeom.C:88
 UpdateCDBIdealGeom.C:89
 UpdateCDBIdealGeom.C:90
 UpdateCDBIdealGeom.C:91