Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / GRP / UpdateCDBIdealGeom.C
CommitLineData
3592c27f 1#include "ARVersion.h"
a63b8f02 2#if !defined(__CINT__) || defined(__MAKECINT__)
3#include "AliCDBManager.h"
4#include "AliCDBStorage.h"
5#include "AliCDBId.h"
6#include "AliCDBMetaData.h"
7#include "AliGeomManager.h"
b0e25852 8#include "AliMC.h"
a63b8f02 9#include <TROOT.h>
10#include "AliRun.h"
11#include <TGeoManager.h>
12#include <TString.h>
b0e25852 13#include <TInterpreter.h>
a63b8f02 14#endif
3592c27f 15
a24be56b 16void UpdateCDBIdealGeom(const char* cdbUri, const char* cfgFile){
a8b4a72d 17 // Produce the ideal geometry and store it in the specified CDB
18 // The second argument allows to specify the config file to be used
19 // in particular for giving the choice to generate either a full or
20 // a partial geometry.
21 //
22
23 AliCDBManager* cdb = AliCDBManager::Instance();
24 // we set the default storage to the repository because some dets require
25 // already at the time of geometry creation to find calibration objects in the cdb
26 AliCDBStorage* storage = 0;
27 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
28 storage = cdb->GetStorage(cdbUri);
29 if(!storage)
30 {
31 Printf("unable to create valid storage from: %s", cdbUri);
32 return;
33 }
34 cdb->SetRun(0);
35 AliCDBId id("GRP/Geometry/Data",0,AliCDBRunRange::Infinity());
36 AliCDBMetaData *md= new AliCDBMetaData();
37
38 // Get root and AliRoot versions
39 const char* rootv = gROOT->GetVersion();
0492edf5
A
40 TString av(ALIROOT_BRANCH);
41 TString revnum(ALIROOT_REVISION);
a8b4a72d 42
0492edf5 43 Printf("root version: %s. AliRoot %s, revision number %s",rootv,av.Data(),revnum);
a8b4a72d 44
45 md->SetAliRootVersion(av.Data());
0492edf5 46 md->SetComment(Form("Geometry produced with root version %s and AliRoot %s, revision number %s",rootv,av.Data(),revnum));
a8b4a72d 47 md->AddDateToComment();
48
49 //gSystem->Exec("if [ -e geometry.root ]; then \necho deleting existing geometry.root \nrm -rf geometry.root \nfi");
50 if(!gSystem->AccessPathName("geometry.root")){
51 Printf("Deleting existing \"geometry.root\"");
52 gSystem->Exec("rm -rf geometry.root");
53 }
54
55 gROOT->LoadMacro(cfgFile);
56 gInterpreter->ProcessLine(gAlice->GetConfigFunction());
57
58 gAlice->GetMCApp()->Init();
59
60 if(!gGeoManager){
61 Printf("Unable to produce a valid geometry to be put in the CDB!");
62 return;
63 }
64
65 /*
66 if (gSystem->Exec("if [ ! -e geometry.root ]; then \n return 1 \nfi")) {
67 Printf("Did not find freshly written geometry.root file");
68 return;
69 } */
70 if(gSystem->AccessPathName("geometry.root")){
71 Printf("Did not find freshly written \"geometry.root\" file. Exiting ...");
72 return;
73 }
74
75 Printf("Reloading freshly written geometry.root file");
76 if (TGeoManager::IsLocked()) TGeoManager::UnlockGeometry();
77 AliGeomManager::LoadGeometry("geometry.root");
78
79 gGeoManager->DefaultColors(); // assign default colors according to Z of material
80 // (many colors turned into dark gray nuances some time ago, when the root palette was changed)
81
82 Printf("Storing in CDB geometry produced with root version %s and AliRoot version %s",rootv,av.Data());
83 storage->Put(gGeoManager,id,md);
84 // This is to allow macros lauched after this one in the same session to find the
85 // newly produced geometry.
86 storage->QueryCDB(cdb->GetRun());
9b8b014f 87
88}
a24be56b 89
90