ROOT logo
AliCDBStorage *storLoc, *storGrid;

AliCDBEntry *entry=0;
TObjString *objstr=0;

void DBAccessTutorial(){

AliCDBManager *man = AliCDBManager::Instance();
// pointer man points to the single instance of AliCDBManager. 
// This will let us avoid typing AliCDBManager::Instance every time... 


printf("\n<< TUTORIAL >> Activating Grid storage...\n");
storGrid = man->GetStorage("alien://aliendb4.cern.ch:9000;colla;DBGrid;ALICE::CERN::se01"); // replace "colla" with your username! 
// The default storage is automatically set to this. 
// One can access default storage with:
// (AliCDBStorage*) AliCDBManager::Instance()->GetDefaultStorage()
// To check the activation of the default storage:
// (Bool_t) AliCDBManager::Instance()->IsDefaultStorageSet()

printf("\n<< TUTORIAL >> Activating Local storage...\n");
storLoc = man->GetStorage("local://DBLocal");
// To set the default storage to this one:
// AliCDBMAnager::Instance()->SetDefaultStorage("local://DBLocal") or
// AliCDBMAnager::Instance()->SetDefaultStorage(storLoc) 

/////////////////////////////////////////////
// Step 0: Write/read in Local storage     //
/////////////////////////////////////////////
printf("\n<< TUTORIAL >> ********************************************\n");
printf(  "<< TUTORIAL >> **** Step 0: write/read in local storage ***\n");
printf(  "<< TUTORIAL >> ********************************************\n");


//create the new object

TObjString str1("This is step zero"); // object that will be stored

AliCDBId id1("ZDC/Calib/Gain",0,10); // Id of the object: AliCDBId("name", firstRun, lastRun)

AliCDBMetaData *md1= new AliCDBMetaData(); // metaData describing the object
md1->SetObjectClassName("TObjString");
md1->SetResponsible("Alberto Colla");
md1->SetBeamPeriod(1);
md1->SetAliRootVersion("05-04-00"); //root version
md1->SetComment("This is a test");
TObjString str("test");
md1->SetProperty("key1",&str);


// Store the object into local storage
printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(&str1,id1, md1); // filename: DBLocal/ZDC/Calib/Gain/Run0_10_v0_s0.root


// read, update, store again
printf("\n<< TUTORIAL >> Retrieve object from local storage...\n");
entry = storLoc->Get("ZDC/Calib/Gain", 5);

objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

objstr->SetString("This is step 0.1: slightly better!"); // update object

printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(entry); // store into local: filename = Run0_10_v0_s1.root

// read, update, store again
printf("\n<< TUTORIAL >> Retrieve object from local storage...\n");
entry = storLoc->Get("ZDC/Calib/Gain", 5);

objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

objstr -> SetString("This is step 0.2: much better!");

printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(entry); // store into local: filename = Run0_10_v0_s2.root

///////////////////////////////////////////////////////////////////////
// Step 1: read from Local, update, store locally and into Grid      //
///////////////////////////////////////////////////////////////////////
printf("\n<< TUTORIAL >> ********************************************\n");
printf(  "<< TUTORIAL >> **** Step 1: write/read in Grid storage  ***\n");
printf(  "<< TUTORIAL >> ********************************************\n");

// read from local
printf("\n<< TUTORIAL >> Retrieve object from local storage...\n");
entry = storLoc->Get("ZDC/Calib/Gain", 5);
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());


objstr -> SetString("This is step 1: stored into Local and into Grid!");

printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(entry); // store into local: filename =  Run0_10_v0_s3.root

printf("\n<< TUTORIAL >> Storing object into Grid storage...\n");
storGrid->Put(entry); // store into grid: filename =  DBGrid/ZDC/Calib/Gain/Run0_10_v1.root



// step 2: read from Grid, update, store again (into Grid)

printf("\n<< TUTORIAL >> Retrieve object from Grid storage...\n");
entry = storGrid->Get("ZDC/Calib/Gain", 5);

objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

objstr -> SetString("This is step 2: update and store into Grid!");

printf("\n<< TUTORIAL >> Storing object into Grid storage...\n");
storGrid->Put(entry); // store into grid: filename =   Run0_10_v2.root

// step 3: read, update, store again (into Grid)
printf("\n<< TUTORIAL >> Retrieve object from Grid storage...\n");
entry = storGrid->Get("ZDC/Calib/Gain", 5);
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

objstr = (TObjString*) entry->GetObject();
objstr -> SetString("This is step 3: update and store into Grid!");

printf("\n<< TUTORIAL >> Storing object into Grid storage...\n");
storGrid->Put(entry); // store into grid: filename =   Run0_10_v3.root

  ////////////////////////////////////////////////
 // Step 3.0: read from Grid, store locally!   //
////////////////////////////////////////////////
printf("\n<< TUTORIAL >> **********************************************\n");
printf(  "<< TUTORIAL >> **** Step 3: read from Grid, store locally ***\n");
printf(  "<< TUTORIAL >> **********************************************\n");

printf("\n<< TUTORIAL >> Retrieve object from Grid storage...\n");
entry = storGrid->Get("ZDC/Calib/Gain", 5);
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(entry); // local: Run0_10_v3_s0.root

// Step 3.1: read from Local, update, store again into Local
printf("\n<< TUTORIAL >> Retrieve object from local storage...\n");
entry = storLoc->Get("ZDC/Calib/Gain", 5);
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

objstr->SetString("This is step 3.1: updated locally!");

printf("\n<< TUTORIAL >> Storing object into local storage...\n");
storLoc->Put(entry); // local: Run0_10_v3_s1.root

/////////////////////////////////////////////////////////////
// Step 3.2: read again from Grid version 3, store locally //
//         -> ERROR, local update already present!!        //
/////////////////////////////////////////////////////////////
printf("\n<< TUTORIAL >> **********************************************\n");
printf(  "<< TUTORIAL >> **** Step 3.2: error test                  ***\n");
printf(  "<< TUTORIAL >> **********************************************\n");

printf("\n<< TUTORIAL >> Retrieve object from Grid storage...\n");
entry = (AliCDBEntry*) storGrid->Get("ZDC/Calib/Gain",5);
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

printf("\n<< TUTORIAL >> Trying to store object into local storage...\n");
storLoc->Put(entry); // ERROR message!

/////////////////////////////////////////////////////////////
// Step 4: read from local, DRAIN to a dump storage: DBDrain.root! //
/////////////////////////////////////////////////////////////
printf("\n<< TUTORIAL >> ************************************************************\n");
printf(  "<< TUTORIAL >> **** Step 4: Read from local and DRAIN to a dump storage ***\n");
printf(  "<< TUTORIAL >> ************************************************************\n");

printf("\n<< TUTORIAL >> Setting Drain storage ...\n");
AliCDBManager::Instance()->SetDrain("dump://DBDrain.root"); //setting Drain storage

// Testing default storage behavior: let's set default storage to Local storage
AliCDBManager::Instance()->SetDefaultStorage(storLoc);

// read from local (default) storage. The object is automatically drained into the drain storage!
printf("\n<< TUTORIAL >> Retrieve object from local storage...\n");
entry = man->GetDefaultStorage()->Get("ZDC/Calib/Gain",5); 
objstr = (TObjString*) entry->GetObject();
printf("\n<< TUTORIAL >> Object string: %s\n", objstr->GetName());

/////////////////////////////////////////////////////////////
// Step 5: READ AND DRAIN multiple objects (with GetAll)   //
/////////////////////////////////////////////////////////////
printf("\n<< TUTORIAL >> *******************************************************\n");
printf(  "<< TUTORIAL >> **** Step 5: Read and Drain multiple objects        ***\n");
printf(  "<< TUTORIAL >> *******************************************************\n");


// Step 5.1: Store an object into four different Grid databases 

TObjString str2("This is the TPC/Calib/Gain object valid for runs 0 to 10.");
AliCDBId id2("TPC/Calib/Gain",0,10);

TObjString str3("This is the TPC/Calib/Drift object valid for runs 0 to 20.");
AliCDBId id3("TPC/Calib/Drift",0,20);

TObjString str4("This is the TPC/Align/Angles object valid for runs 0 to 15.");
AliCDBId id4("TPC/Align/Angles",0,15);

TObjString str5("This is the TPC/Align/Position object valid for runs 0 to 8.");
AliCDBId id5("TPC/Align/Positions",0,8);

printf("\n<< TUTORIAL >> Storing more objects into Grid storage...\n");
storGrid->Put(&str2,id2,md1);
storGrid->Put(&str3,id3,md1);
storGrid->Put(&str4,id4,md1);
storGrid->Put(&str5,id5,md1);

// Step 5.2: Read all the TPC objects with GetAll and drain into DBDrain.root

printf("\n<< TUTORIAL >> Retrieve more objects from Grid storage and drain them into Dump ...\n");
TList *list = (TList*)storGrid->GetAll("TPC/*",5);

// That's all folks! Delete AliCDBManager instance and metaData object

printf(  "<< TUTORIAL >> **** That's all folks!!        ***\n");


AliCDBManager::Instance()->Destroy();
delete entry;
delete md1;

}
 DBAccessTutorial.C:1
 DBAccessTutorial.C:2
 DBAccessTutorial.C:3
 DBAccessTutorial.C:4
 DBAccessTutorial.C:5
 DBAccessTutorial.C:6
 DBAccessTutorial.C:7
 DBAccessTutorial.C:8
 DBAccessTutorial.C:9
 DBAccessTutorial.C:10
 DBAccessTutorial.C:11
 DBAccessTutorial.C:12
 DBAccessTutorial.C:13
 DBAccessTutorial.C:14
 DBAccessTutorial.C:15
 DBAccessTutorial.C:16
 DBAccessTutorial.C:17
 DBAccessTutorial.C:18
 DBAccessTutorial.C:19
 DBAccessTutorial.C:20
 DBAccessTutorial.C:21
 DBAccessTutorial.C:22
 DBAccessTutorial.C:23
 DBAccessTutorial.C:24
 DBAccessTutorial.C:25
 DBAccessTutorial.C:26
 DBAccessTutorial.C:27
 DBAccessTutorial.C:28
 DBAccessTutorial.C:29
 DBAccessTutorial.C:30
 DBAccessTutorial.C:31
 DBAccessTutorial.C:32
 DBAccessTutorial.C:33
 DBAccessTutorial.C:34
 DBAccessTutorial.C:35
 DBAccessTutorial.C:36
 DBAccessTutorial.C:37
 DBAccessTutorial.C:38
 DBAccessTutorial.C:39
 DBAccessTutorial.C:40
 DBAccessTutorial.C:41
 DBAccessTutorial.C:42
 DBAccessTutorial.C:43
 DBAccessTutorial.C:44
 DBAccessTutorial.C:45
 DBAccessTutorial.C:46
 DBAccessTutorial.C:47
 DBAccessTutorial.C:48
 DBAccessTutorial.C:49
 DBAccessTutorial.C:50
 DBAccessTutorial.C:51
 DBAccessTutorial.C:52
 DBAccessTutorial.C:53
 DBAccessTutorial.C:54
 DBAccessTutorial.C:55
 DBAccessTutorial.C:56
 DBAccessTutorial.C:57
 DBAccessTutorial.C:58
 DBAccessTutorial.C:59
 DBAccessTutorial.C:60
 DBAccessTutorial.C:61
 DBAccessTutorial.C:62
 DBAccessTutorial.C:63
 DBAccessTutorial.C:64
 DBAccessTutorial.C:65
 DBAccessTutorial.C:66
 DBAccessTutorial.C:67
 DBAccessTutorial.C:68
 DBAccessTutorial.C:69
 DBAccessTutorial.C:70
 DBAccessTutorial.C:71
 DBAccessTutorial.C:72
 DBAccessTutorial.C:73
 DBAccessTutorial.C:74
 DBAccessTutorial.C:75
 DBAccessTutorial.C:76
 DBAccessTutorial.C:77
 DBAccessTutorial.C:78
 DBAccessTutorial.C:79
 DBAccessTutorial.C:80
 DBAccessTutorial.C:81
 DBAccessTutorial.C:82
 DBAccessTutorial.C:83
 DBAccessTutorial.C:84
 DBAccessTutorial.C:85
 DBAccessTutorial.C:86
 DBAccessTutorial.C:87
 DBAccessTutorial.C:88
 DBAccessTutorial.C:89
 DBAccessTutorial.C:90
 DBAccessTutorial.C:91
 DBAccessTutorial.C:92
 DBAccessTutorial.C:93
 DBAccessTutorial.C:94
 DBAccessTutorial.C:95
 DBAccessTutorial.C:96
 DBAccessTutorial.C:97
 DBAccessTutorial.C:98
 DBAccessTutorial.C:99
 DBAccessTutorial.C:100
 DBAccessTutorial.C:101
 DBAccessTutorial.C:102
 DBAccessTutorial.C:103
 DBAccessTutorial.C:104
 DBAccessTutorial.C:105
 DBAccessTutorial.C:106
 DBAccessTutorial.C:107
 DBAccessTutorial.C:108
 DBAccessTutorial.C:109
 DBAccessTutorial.C:110
 DBAccessTutorial.C:111
 DBAccessTutorial.C:112
 DBAccessTutorial.C:113
 DBAccessTutorial.C:114
 DBAccessTutorial.C:115
 DBAccessTutorial.C:116
 DBAccessTutorial.C:117
 DBAccessTutorial.C:118
 DBAccessTutorial.C:119
 DBAccessTutorial.C:120
 DBAccessTutorial.C:121
 DBAccessTutorial.C:122
 DBAccessTutorial.C:123
 DBAccessTutorial.C:124
 DBAccessTutorial.C:125
 DBAccessTutorial.C:126
 DBAccessTutorial.C:127
 DBAccessTutorial.C:128
 DBAccessTutorial.C:129
 DBAccessTutorial.C:130
 DBAccessTutorial.C:131
 DBAccessTutorial.C:132
 DBAccessTutorial.C:133
 DBAccessTutorial.C:134
 DBAccessTutorial.C:135
 DBAccessTutorial.C:136
 DBAccessTutorial.C:137
 DBAccessTutorial.C:138
 DBAccessTutorial.C:139
 DBAccessTutorial.C:140
 DBAccessTutorial.C:141
 DBAccessTutorial.C:142
 DBAccessTutorial.C:143
 DBAccessTutorial.C:144
 DBAccessTutorial.C:145
 DBAccessTutorial.C:146
 DBAccessTutorial.C:147
 DBAccessTutorial.C:148
 DBAccessTutorial.C:149
 DBAccessTutorial.C:150
 DBAccessTutorial.C:151
 DBAccessTutorial.C:152
 DBAccessTutorial.C:153
 DBAccessTutorial.C:154
 DBAccessTutorial.C:155
 DBAccessTutorial.C:156
 DBAccessTutorial.C:157
 DBAccessTutorial.C:158
 DBAccessTutorial.C:159
 DBAccessTutorial.C:160
 DBAccessTutorial.C:161
 DBAccessTutorial.C:162
 DBAccessTutorial.C:163
 DBAccessTutorial.C:164
 DBAccessTutorial.C:165
 DBAccessTutorial.C:166
 DBAccessTutorial.C:167
 DBAccessTutorial.C:168
 DBAccessTutorial.C:169
 DBAccessTutorial.C:170
 DBAccessTutorial.C:171
 DBAccessTutorial.C:172
 DBAccessTutorial.C:173
 DBAccessTutorial.C:174
 DBAccessTutorial.C:175
 DBAccessTutorial.C:176
 DBAccessTutorial.C:177
 DBAccessTutorial.C:178
 DBAccessTutorial.C:179
 DBAccessTutorial.C:180
 DBAccessTutorial.C:181
 DBAccessTutorial.C:182
 DBAccessTutorial.C:183
 DBAccessTutorial.C:184
 DBAccessTutorial.C:185
 DBAccessTutorial.C:186
 DBAccessTutorial.C:187
 DBAccessTutorial.C:188
 DBAccessTutorial.C:189
 DBAccessTutorial.C:190
 DBAccessTutorial.C:191
 DBAccessTutorial.C:192
 DBAccessTutorial.C:193
 DBAccessTutorial.C:194
 DBAccessTutorial.C:195
 DBAccessTutorial.C:196
 DBAccessTutorial.C:197
 DBAccessTutorial.C:198
 DBAccessTutorial.C:199
 DBAccessTutorial.C:200
 DBAccessTutorial.C:201
 DBAccessTutorial.C:202
 DBAccessTutorial.C:203
 DBAccessTutorial.C:204
 DBAccessTutorial.C:205
 DBAccessTutorial.C:206
 DBAccessTutorial.C:207
 DBAccessTutorial.C:208
 DBAccessTutorial.C:209
 DBAccessTutorial.C:210
 DBAccessTutorial.C:211
 DBAccessTutorial.C:212
 DBAccessTutorial.C:213
 DBAccessTutorial.C:214
 DBAccessTutorial.C:215
 DBAccessTutorial.C:216
 DBAccessTutorial.C:217
 DBAccessTutorial.C:218
 DBAccessTutorial.C:219
 DBAccessTutorial.C:220
 DBAccessTutorial.C:221
 DBAccessTutorial.C:222
 DBAccessTutorial.C:223
 DBAccessTutorial.C:224
 DBAccessTutorial.C:225
 DBAccessTutorial.C:226
 DBAccessTutorial.C:227
 DBAccessTutorial.C:228
 DBAccessTutorial.C:229
 DBAccessTutorial.C:230
 DBAccessTutorial.C:231
 DBAccessTutorial.C:232
 DBAccessTutorial.C:233