]>
Commit | Line | Data |
---|---|---|
d85afa9b | 1 | void DBAccessTutorial(){ |
2 | ||
3 | ||
4 | /*************************************************************************************************************** | |
5 | Prelude(0): if it doesn't exist, create DB directory: $ALICE_ROOT/DB | |
6 | ***************************************************************************************************************/ | |
7 | TString DBFolder="$ALICE_ROOT/DBTutorial"; | |
8 | gSystem->ExpandPathName(DBFolder); | |
9 | ||
10 | if(!gSystem->OpenDirectory(DBFolder)){ | |
11 | printf("Warning: folder DBTutorial does not exist, I will create it!"); | |
12 | TString command = "mkdir "+ DBFolder; | |
13 | gSystem->Exec(command.Data()); | |
14 | } | |
15 | ||
16 | /*************************************************************************************************************** | |
17 | Prelude(1): create a DB object. We'll take AliZDCCalibData | |
18 | (container class for ZDC Calibration data) as an example | |
19 | ***************************************************************************************************************/ | |
20 | ||
21 | AliZDCCalibData *calibda=new AliZDCCalibData("ZDC"); | |
22 | ||
23 | // Fill array of ZDC energy calibration factors (4 float's) with some numbers | |
24 | Float_t EnFactorsArray[4]={20.,25.,200.,10.}; | |
25 | calibda->SetEnCalib(EnFactorsArray); | |
26 | ||
27 | printf("\nI am in Prelude(1). ZDC Energy calibration factors: \n"); | |
28 | printf("PM0=%f; PM1=%f; PM2=%f; PM3=%f \n", | |
29 | calibda->GetEnCalib(0), calibda->GetEnCalib(1), calibda->GetEnCalib(2), calibda->GetEnCalib(3) ); | |
30 | ||
31 | /*************************************************************************************************************** | |
32 | Part 1: Store the calibration object in the database, using | |
33 | the "Organized" storage system | |
34 | (i.e. a well defined directory structure, defined by the | |
35 | object's metadata and set in the DBFodler above specified) | |
36 | ***************************************************************************************************************/ | |
37 | ||
38 | // a. Define the object's metadata (set of information which describes the object) | |
39 | // AliObjectMetaData(char* name, int firstRun, int lastRun,int Period,char* ObjectFormat, char* ResponsibleName, char* extraInfo) | |
40 | // | |
41 | // name: Object's name ("Detector/DBType/DetSpecType") | |
42 | // firstRun: first run for which the object is valid | |
43 | // lastRun: last run for which the object is valid | |
44 | // period: beam period (to be better specified in future) | |
45 | // objectFormat: a string which describes the object's format | |
46 | // ResponsibleName: name of the person who created and stored the object | |
47 | // extraInfo: anything else you may want to know | |
48 | ||
49 | AliObjectMetaData omd("ZDC/Calib/GainFactors",1,10,1,"AliZDCCalibData: Pedestals (47 floats), En. calib factors (4 floats)","A. Colla", "Tutorial"); | |
50 | ||
51 | // b. Create the specific AliRunDataStorage instance (AliRunDataOrganizedFile in this case) | |
52 | ||
53 | AliRunDataOrganizedFile *orgf = new AliRunDataOrganizedFile(DBFolder.Data()); | |
54 | ||
55 | // c. Put the object in the database. Use Put method: AliRunDataStorage::Put(TObject object, AliObjectMetaData& metaData) | |
56 | // | |
57 | // the object will be stored in the file DBFolder/ZDC/Calib/GainFactors/Run1-10_v0.root | |
58 | // Note that the version is automatically determined. | |
59 | ||
60 | AliRunDataStorage::Instance()->Put(calibda, omd); // we could also type: orgf->Put(calibda, omd) | |
61 | ||
62 | // delete the AliRunDataStorage instance and the object (optional) | |
63 | AliRunDataStorage::Instance()->Delete(); | |
64 | ||
65 | ||
66 | /*************************************************************************************************************** | |
67 | Part 2: Now we want to retrieve the object valid, say, for run 5 from the database folder. | |
68 | We will dump it in a local file called "dummyDBTutorail.root", for later usage. | |
69 | ***************************************************************************************************************/ | |
70 | ||
71 | // a. Create the specific AliRunDataStorage instance (AliRunDataOrganizedFile in this case) | |
72 | AliRunDataOrganizedFile *orgf = new AliRunDataOrganizedFile(DBFolder.Data()); | |
73 | ||
74 | // b. Prepare AliRunDataStorage to save the object in the local file | |
75 | AliRunDataStorage::Instance()->RecordToFile("dummyDBTutorial.root"); | |
76 | ||
77 | // c. Get the object! | |
78 | // TObject *AliRunDataStorage::Get(char* name, int runNumber) | |
79 | // if no selection criteria are specified, the highest version found is retrieved. | |
80 | ||
81 | AliZDCCalibData *calibda2 = (AliZDCCalibData*) AliRunDataStorage::Instance()->Get("ZDC/Calib/GainFactors",5); | |
82 | ||
83 | printf("\nI am in Part2. ZDC Energy calibration factors: \n"); | |
84 | printf("PM0=%f; PM1=%f; PM2=%f; PM3=%f \n", | |
85 | calibda2->GetEnCalib(0), calibda2->GetEnCalib(1), calibda2->GetEnCalib(2), calibda2->GetEnCalib(3) ); | |
86 | ||
87 | AliRunDataStorage::Instance()->Delete(); | |
88 | ||
89 | ||
90 | /*************************************************************************************************************** | |
91 | Part 3: Now we will retrieve the object from the local file. | |
92 | We will tune the energy calibration factors and we suppose that the new object is valid from run 1 to run 15. | |
93 | Finally we will store the object in DBFolder again with the new run range specified in the object's metadata. | |
94 | ***************************************************************************************************************/ | |
95 | ||
96 | // a. Create the specific AliRunDataStorage instance (AliRunDataFile in this case) | |
97 | AliRunDataFile *df = new AliRunDataFile("dummyDBTutorial.root"); | |
98 | //AliRunDataOrganizedFile *orgf = new AliRunDataOrganizedFile(DBFolder.Data()); | |
99 | ||
100 | // b. Get the object. | |
101 | AliZDCCalibData *calibda3 = (AliZDCCalibData*) AliRunDataStorage::Instance()->Get("ZDC/Calib/GainFactors",5); | |
102 | ||
103 | //AliZDCCalibData calibda3copy=*calibda3; | |
104 | ||
105 | // c. Tune the energy calibration factors. | |
106 | calibda3->SetEnCalib(21.5, 0); calibda3->SetEnCalib(26.3, 1); | |
107 | calibda3->SetEnCalib(201., 2); calibda3->SetEnCalib(9.45, 3); | |
108 | ||
109 | printf("\nI am in Part3. New ZDC Energy calibration factors: \n"); | |
110 | printf("PM0=%f; PM1=%f; PM2=%f; PM3=%f \n", | |
111 | calibda3->GetEnCalib(0), calibda3->GetEnCalib(1), calibda3->GetEnCalib(2), calibda3->GetEnCalib(3) ); | |
112 | ||
113 | // d. Get the object's metadata, set the new run range | |
114 | AliObjectMetaData omd2 = AliRunDataStorage::Instance()->GetObjectMetaData("ZDC/Calib/GainFactors"); | |
115 | omd2.SetRunRange(1,15); | |
116 | ||
117 | // e. Store the object in the "organized" database. | |
118 | // the object will be stored in the file DBFolder/ZDC/Calib/GainFactors/Run1-15_v1.root | |
119 | // Note that, since there is an "overlap" of the new run range with the one specified | |
120 | // in the previous version, the version is automatically increased. | |
121 | ||
122 | AliRunDataOrganizedFile *orgf = new AliRunDataOrganizedFile(DBFolder.Data()); | |
123 | AliRunDataStorage::Instance()->Put(calibda3, omd2); | |
124 | ||
125 | /*************************************************************************************************************** | |
126 | Part 3: Last act. | |
127 | We want to retrieve the object from the "organized" database folder again. | |
128 | This time, anyway, we don't want the highest version but version 0 instead. | |
129 | Therefore we have to specify the version wanted using the "Select" method of AliRunDataStorage | |
130 | and the aliSelectionMetaData object. | |
131 | ***************************************************************************************************************/ | |
132 | ||
133 | // a. Create the specific AliRunDataStorage instance (AliRunDataOrganizedFile in this case) | |
134 | orgf = new AliRunDataOrganizedFile(DBFolder.Data()); | |
135 | ||
136 | // b. Specify the selection criterion. We want version 0 for the object valid for run range (1,100) | |
137 | // NOTE(1): TRegexp expression are valid! E.g. we could type "ZDC/Calib/*" if we want to specify version | |
138 | // for all the "ZDC/Calib" subsamples... | |
139 | // Note(2): we could also not specify the run range, if we want version 0 for any retrieved object | |
140 | AliSelectionMetaData smd("ZDC/Calib/GainFactors",1,100,0); | |
141 | AliRunDataStorage::Instance()->Select(smd); | |
142 | ||
143 | // c. Get the object | |
144 | AliZDCCalibData *calibda4 = (AliZDCCalibData*) AliRunDataStorage::Instance()->Get("ZDC/Calib/GainFactors",5); | |
145 | printf("\nI am in Part4. I've just got \"ZDC/Calib/GainFactors\" object valid for run 5, version 0.\n"); | |
146 | printf("ZDC Energy calibration factors: \n"); | |
147 | printf("PM0=%f; PM1=%f; PM2=%f; PM3=%f \n", | |
148 | calibda4->GetEnCalib(0), calibda4->GetEnCalib(1), calibda4->GetEnCalib(2), calibda4->GetEnCalib(3) ); | |
149 | ||
150 | printf("\nEnd of tutorial. Bye bye!! \n"); | |
151 | ||
152 | ||
153 | } |