1 #if !defined( __CINT__) || defined(__MAKECINT__)
8 #include <AliCDBManager.h>
9 #include <AliCDBStorage.h>
10 #include <AliCDBEntry.h>
11 #include <AliCDBMetaData.h>
12 #include <AliGeometry.h>
15 #include "../TRD/AliTRDgeometry.h"
17 #include "../TRD/Cal/AliTRDCalROC.h"
18 #include "../TRD/Cal/AliTRDCalPad.h"
19 #include "../TRD/Cal/AliTRDCalDet.h"
23 // run number for the dummy file
24 const Int_t gkDummyRun = 0;
25 AliCDBStorage* gStorLoc = 0;
26 Double_t t0minimum[540];
30 TObject* CreatePadObjectT0Random(const char* shortName, const char* description, Float_t mean, Float_t sigma);
31 TObject* CreateDetT0Object(const char* shortName, const char* description);
32 Double_t funcpoly16(Double_t* x);
33 Double_t funcpoly12(Double_t* x);
34 Double_t funcpoly144(Double_t* x);
35 Double_t funcpoly16v(Double_t* x);
36 Double_t funcpoly12v(Double_t* x);
37 Double_t funcpoly144v(Double_t* x);
38 TObject* CreatePadObject(const char* shortName, const char* description, Float_t value);
39 TObject* CreatePadObjectRandom(const char* shortName, const char* description, Float_t mean, Float_t sigma);
40 TObject* CreatePadObjectRandomv(const char* shortName, const char* description, Float_t mean, Float_t sigma);
41 TObject* CreatePadObjectbridge(const char* shortName, const char* description);
42 TObject* CreatePadObjectbridgev(const char* shortName, const char* description);
43 TObject* CreateDetObject(const char* shortName, const char* description, Float_t value);
44 TObject* CreateDetObjectRandom(const char* shortName, const char* description, Float_t mean, Float_t sigma);
45 TObject* CreateDetObjectRandomg(const char* shortName, const char* description, Float_t mean, Float_t sigma);
46 TObject* CreateDetObjectRandomv(const char* shortName, const char* description, Float_t mean, Float_t sigma);
47 AliCDBMetaData* CreateMetaObject(const char* objectClassName);
48 void StoreObject(const char* cdbPath, TObject* object, AliCDBMetaData* metaData);
49 void AliTRDCreate(Bool_t residual = kFALSE);
52 //________________________________________________________________________________________________
53 TObject* CreatePadObjectT0Random(const char* shortName, const char* description, Float_t mean, Float_t sigma)
56 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
57 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
59 AliTRDCalROC *calROC = calPad->GetCalROC(det);
61 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
62 value[channel] = gRandom->Gaus(mean,sigma);
65 //printf("value[0] %f and min %f et gRandom %f\n",value[0],min, gRandom->Gaus(mean,sigma));
67 if(min > value[channel]) min = value[channel];
68 //calROC->SetValue(channel, TMath::Abs(value));
71 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
72 //printf("min value for the det %d is %f and the channel is %f, we put %f\n",det,t0minimum[det],value[channel],(value[channel]-t0minimum[det]));
73 calROC->SetValue(channel, (value[channel]-t0minimum[det]));
79 //___________________________________________________________________________________________________
80 TObject* CreateDetT0Object(const char* shortName, const char* description)
82 AliTRDCalDet *object = new AliTRDCalDet(shortName, description);
83 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
84 object->SetValue(det, t0minimum[det]);
87 //__________________________________________________________________________________________________
88 Double_t funcpoly16(Double_t* x){
92 Double_t par[3] = {-0.002678571429,0.040178571,1};
94 // sum landau + gaus with identical mean
96 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
100 //_____________________________________________________________________________________________________
101 Double_t funcpoly12(Double_t* x){
105 Double_t par[3] = {-0.005,0.055,1};
107 // sum landau + gaus with identical mean
109 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
113 //______________________________________________________________________________________________________
114 Double_t funcpoly144(Double_t* x){
118 Double_t par[3] = {-0.00001956181536,0.00279339596,1};
120 // sum landau + gaus with identical mean
122 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
127 //__________________________________________________________________________________________________
128 Double_t funcpoly16v(Double_t* x){
132 Double_t par[3] = {-0.0008928571429,0.013392857,1};
134 // sum landau + gaus with identical mean
136 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
140 //_____________________________________________________________________________________________________
141 Double_t funcpoly12v(Double_t* x){
145 Double_t par[3] = {-0.001666667,0.018333,1};
147 // sum landau + gaus with identical mean
149 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
153 //___________________________________________________________________________________________________
154 Double_t funcpoly144v(Double_t* x){
158 Double_t par[3] = {-0.000009780907668,0.001398669797,1};
160 // sum landau + gaus with identical mean
162 Double_t valLandau = par[0]*x[0]*x[0]+par[1]*x[0]+par[2];
166 //__________________________________________________________________________________________________
167 TObject* CreatePadObject(const char* shortName, const char* description, Float_t value)
169 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
170 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
172 AliTRDCalROC *calROC = calPad->GetCalROC(det);
173 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
174 calROC->SetValue(channel, value);
179 //___________________________________________________________________________________________________
180 TObject* CreatePadObjectRandom(const char* shortName, const char* description, Float_t mean, Float_t sigma)
182 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
183 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
186 AliTRDCalROC *calROC = calPad->GetCalROC(det);
187 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
188 Double_t value = gRandom->Gaus(mean,sigma);
189 //cout << "value: " << value << endl;
190 //if(value < 0) calROC->SetValue(channel, 0);
191 calROC->SetValue(channel, value);
197 //_______________________________________________________________________________________
198 TObject* CreatePadObjectRandomv(const char* shortName, const char* description, Float_t mean, Float_t sigma)
200 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
201 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
205 AliTRDCalROC *calROC = calPad->GetCalROC(det);
206 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
207 Double_t value = gRandom->Gaus(mean,sigma);
210 //cout << "value: " << value << endl;
211 //if(value < 0) calROC->SetValue(channel, 0);
212 calROC->SetValue(channel, value);
215 for (Int_t channel=0; channel<calROC->GetNchannels(); ++channel){
216 Double_t value = calROC->GetValue(channel);
217 //cout << "value: " << value << endl;
218 //if(value < 0) calROC->SetValue(channel, 0);
219 calROC->SetValue(channel, value/vav[det]);
225 //____________________________________________________________________________________________________
226 TObject* CreatePadObjectbridge(const char* shortName, const char* description)
228 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
230 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
233 AliTRDCalROC *calROC = calPad->GetCalROC(det);
234 Int_t rowMax = calROC->GetNrows();
235 Int_t colMax = calROC->GetNcols();
239 for(Int_t row = 0; row < rowMax; ++row){
240 for(Int_t col = 0; col < colMax; ++col){
244 Double_t value = funcpoly12(&x[0])*funcpoly144(&x[1]);
245 calROC->SetValue(col,row,value);
246 gainav[det] += value;
249 Double_t value = funcpoly16(&x[0])*funcpoly144(&x[1]);
250 calROC->SetValue(col,row,value);
251 gainav[det] += value;
255 gainav[det] /= (rowMax*colMax);
258 for(Int_t row = 0; row < rowMax; ++row){
259 for(Int_t col = 0; col < colMax; ++col){
262 //Double_t value = funcpoly12(&x[0])*funcpoly144(&x[1]);
263 Double_t value = calROC->GetValue(col,row);
264 calROC->SetValue(col,row,value/gainav[det]);
265 //gainav[det] += value;
273 //__________________________________________________________________________________________
274 TObject* CreatePadObjectbridgev(const char* shortName, const char* description)
276 AliTRDCalPad *calPad = new AliTRDCalPad(shortName, description);
278 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
281 AliTRDCalROC *calROC = calPad->GetCalROC(det);
282 Int_t rowMax = calROC->GetNrows();
283 Int_t colMax = calROC->GetNcols();
287 for(Int_t row = 0; row < rowMax; ++row){
288 for(Int_t col = 0; col < colMax; ++col){
292 Double_t value = funcpoly12v(&x[0])*funcpoly144v(&x[1]);
293 calROC->SetValue(col,row,value);
297 Double_t value = funcpoly16v(&x[0])*funcpoly144v(&x[1]);
298 calROC->SetValue(col,row,value);
303 vav[det] /= (rowMax*colMax);
306 for(Int_t row = 0; row < rowMax; ++row){
307 for(Int_t col = 0; col < colMax; ++col){
311 //Double_t value = funcpoly12v(&x[0])*funcpoly144v(&x[1]);
312 Double_t value = calROC->GetValue(col,row);
313 calROC->SetValue(col,row,value/vav[det]);
322 //___________________________________________________________________________________________________
323 TObject* CreateDetObject(const char* shortName, const char* description, Float_t value)
325 AliTRDCalDet *object = new AliTRDCalDet(shortName, description);
326 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det)
327 object->SetValue(det, value);
330 //___________________________________________________________________________________________________
331 TObject* CreateDetObjectRandom(const char* shortName, const char* description, Float_t mean, Float_t sigma)
333 AliTRDCalDet *object = new AliTRDCalDet(shortName, description);
334 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det){
335 Double_t value = gRandom->Gaus(mean,sigma);
336 //cout << "value: " << value << endl;
337 object->SetValue(det, value);
338 //else cout << "value negative!" << endl;
342 //___________________________________________________________________________________________________
343 TObject* CreateDetObjectRandomg(const char* shortName, const char* description, Float_t mean, Float_t sigma)
345 AliTRDCalDet *object = new AliTRDCalDet(shortName, description);
346 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det){
347 Double_t value = gRandom->Gaus(mean,sigma);
348 //cout << "value: " << value << endl;
349 object->SetValue(det, value/gainav[det]);
350 //else cout << "value negative!" << endl;
354 //___________________________________________________________________________________________________
355 TObject* CreateDetObjectRandomv(const char* shortName, const char* description, Float_t mean, Float_t sigma)
357 AliTRDCalDet *object = new AliTRDCalDet(shortName, description);
358 for (Int_t det=0; det<AliTRDgeometry::kNdet; ++det){
359 Double_t value = gRandom->Gaus(mean,sigma);
360 //cout << "value: " << value << endl;
361 object->SetValue(det, value/vav[det]);
362 //else cout << "value negative!" << endl;
366 //___________________________________________________________________________________________________
367 AliCDBMetaData* CreateMetaObject(const char* objectClassName)
369 AliCDBMetaData *md1= new AliCDBMetaData();
370 md1->SetObjectClassName(objectClassName);
371 md1->SetResponsible("Raphaelle Bailhache");
372 //md1->SetBeamPeriod(1);
373 //md1->SetAliRootVersion("head"); //root version
374 md1->SetComment("residual database TRD");
378 //___________________________________________________________________________________________________
379 void StoreObject(const char* cdbPath, TObject* object, AliCDBMetaData* metaData)
381 AliCDBId id1(cdbPath, gkDummyRun, 999999999);
383 gStorLoc->Put(object, id1, metaData);
385 //___________________________________________________________________________________________________
386 void AliTRDCreate(Bool_t residual)
389 //************************random generator******************************************
390 TDatime *datime = new TDatime();
391 Int_t time = datime->GetTime();
392 Int_t date = datime->GetDate();
393 Int_t pid = gSystem->GetPid();
395 Int_t seed = TMath::Abs(10000 * pid + time - date);
396 gRandom->SetSeed(seed);
398 //*************************************************************************
400 cout << endl << "TRD :: Creating dummy CDB with event number " << gkDummyRun << endl;
402 AliCDBManager *man = AliCDBManager::Instance();
403 gStorLoc = man->GetStorage("local://.");
408 AliCDBMetaData* metaData = 0;
413 //Pad////////////////////////////////////////////////////////////////////
415 metaData = CreateMetaObject("AliTRDCalPad");
417 obj = CreatePadObjectT0Random("LocalT0","T0 (local variations)", 0, 0.2);
418 StoreObject("TRD/Calib/LocalT0", obj, metaData);
420 obj = CreatePadObjectbridge("LocalGainFactor","GainFactor (local variations)");
421 StoreObject("TRD/Calib/LocalGainFactor", obj, metaData);
423 obj = CreatePadObjectbridgev("LocalVdrift","TRD drift velocities (local variations)");
424 StoreObject("TRD/Calib/LocalVdrift", obj, metaData);
426 //Det//////////////////////////////////////////////////////////////////
428 metaData = CreateMetaObject("AliTRDCalDet");
430 obj = CreateDetObjectRandom("ChamberVdrift","TRD drift velocities (detector value)", 1.5, 0.08);
431 StoreObject("TRD/Calib/ChamberVdrift", obj, metaData);
433 obj = CreateDetT0Object("ChamberT0","T0 (detector value)");
434 StoreObject("TRD/Calib/ChamberT0", obj, metaData);
436 obj = CreateDetObjectRandom("ChamberGainFactor","GainFactor (detector value)", 1.0, 0.18);
437 StoreObject("TRD/Calib/ChamberGainFactor", obj, metaData);
443 //Pad////////////////////////////////////////////////////////////////////
445 metaData = CreateMetaObject("AliTRDCalPad");
447 obj = CreatePadObjectRandomv("LocalVdrift","TRD drift velocities (local variations)", 1.5, 0.015);
448 StoreObject("TRD/Calib/LocalVdrift", obj, metaData);
450 obj = CreatePadObjectT0Random("LocalT0","T0 (local variations)", 0, 0.02);
451 StoreObject("TRD/Calib/LocalT0", obj, metaData);
453 obj = CreatePadObjectRandom("LocalGainFactor","GainFactor (local variations)", 1, 0.01);
454 StoreObject("TRD/Calib/LocalGainFactor", obj, metaData);
456 //Det//////////////////////////////////////////////////////////////////
458 metaData = CreateMetaObject("AliTRDCalDet");
460 obj = CreateDetT0Object("ChamberT0","T0 (detector value)");
461 StoreObject("TRD/Calib/ChamberT0", obj, metaData);