1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15 /* History of cvs commits:
18 * Revision 1.3 2007/10/16 14:36:39 pavlinov
19 * fixed code violation (almost)
21 * Revision 1.2 2007/09/11 19:38:15 pavlinov
22 * added pi0 calibration, linearity, shower profile
23 * co: warning: `$Log' is obsolescent; use ` * $Log'.
24 * Revision 1.1 2007/08/08 15:58:01 hristov
28 //_________________________________________________________________________
29 // Calibration coefficients
30 // The place for holding all information after calibration
31 // - not only calibration coefficients.
32 // For flash Adc we should keep at least ratio of high/low gains
34 //*-- Author: Aleksei Pavlinov (WSU, Detroit, USA)
36 #include "AliEMCALCalibCoefs.h"
39 #include "AliEMCALCalibData.h"
40 #include "AliCDBMetaData.h"
42 #include "AliCDBEntry.h"
43 #include "AliCDBManager.h"
44 #include "AliCDBStorage.h"
45 #include "AliEMCALGeometry.h"
50 ClassImp(AliEMCALCalibCoef)
52 AliEMCALCalibCoef::AliEMCALCalibCoef() : fAbsId(-1), fCc(-1), fECc(-1)
54 // default constructor
56 AliEMCALCalibCoef::AliEMCALCalibCoef(const Int_t id, const Double_t c, const Double_t ec) :
57 fAbsId(id), fCc(c), fECc(ec)
61 // ----------------------------------------------------------------------
63 ClassImp(AliEMCALCalibCoefs)
65 AliEMCALCalibCoefs::AliEMCALCalibCoefs() : TNamed("",""), fTable(0), fCurrentInd(0), fCalibMethod(0)
67 // default constructor
70 AliEMCALCalibCoefs::AliEMCALCalibCoefs(const char* name, const Int_t nrow) : TNamed(name,"table of cell information") , fTable(0), fCurrentInd(0), fCalibMethod(0)
73 fTable = new TObjArray(nrow);
76 void AliEMCALCalibCoefs::AddAt(AliEMCALCalibCoef* r)
79 (*fTable)[fCurrentInd] = new AliEMCALCalibCoef(*r);
83 AliEMCALCalibCoefs::~AliEMCALCalibCoefs()
92 AliEMCALCalibCoef* AliEMCALCalibCoefs::GetTable(Int_t i) const
95 return (AliEMCALCalibCoef*)fTable->At(i);
99 // Get initial Calib Data from DB
100 AliEMCALCalibCoefs* AliEMCALCalibCoefs::GetCalibTableFromDb(const char *tn, AliEMCALCalibData **calData)
103 // See ~/macros/ALICE/sim.C for choice of CDB
104 // Get calib. table which was used than calculated rec.points
106 static char *calibType = "EMCAL/Calib/*";
107 static char *calibTypeData = "EMCAL/Calib/Data";
111 AliCDBManager* man = AliCDBManager::Instance();
112 AliCDBStorage* specificStorage = man->GetSpecificStorage(calibType);
114 AliEMCALCalibData* caldata = (AliEMCALCalibData*)
115 specificStorage->Get(calibTypeData, gAlice->GetRunNumber())->GetObject();
116 if(caldata == 0) return 0;
118 AliEMCALGeometry *g = AliEMCALGeometry::GetInstance();
120 AliEMCALCalibCoefs *tab = new AliEMCALCalibCoefs(tn,g->GetNCells());
121 tab->SetCalibMethod(AliEMCALCalibCoefs::kMC);
123 for(Int_t id=0; id<g->GetNCells(); id++){
124 Int_t nSupMod=0, nModule=0, nIphi=0, nIeta=0, iphiCell=0, ietaCell=0;
125 g->GetCellIndex(id, nSupMod, nModule, nIphi, nIeta);
126 g->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, iphiCell, ietaCell);
130 r.fCc = caldata->GetADCchannel(nSupMod, ietaCell, iphiCell); // column(ietaCell) : row(iphiCell)
136 tab->SetCalibMethod(AliEMCALCalibCoefs::kPI0);
137 calData[0] = caldata;
139 printf("\n <I> AliEMCALCalibCoefs::GetCalibTableFromDb \n name |%s| title |%s| | storage |%s|\n",
140 caldata->GetName(), caldata->GetTitle(), specificStorage->GetURI().Data());
145 TH1F* AliEMCALCalibCoefs::GetHistOfCalibTableFromDb(const char *tn)
148 AliEMCALCalibData *calData[1]; // unused here
150 AliEMCALCalibCoefs* tab = GetCalibTableFromDb(tn, calData);
153 TH1F *h = new TH1F("hCCfirst", " fCc first (in MeV)", 70, 12., 19.);
154 AliEMCALCalibCoef *r;
155 for(Int_t i=0; i<tab->GetSize(); i++){
156 r = tab->GetTable(i);
158 h->Fill(r->fCc*1000.); // GEV ->MeV
164 AliEMCALCalibData* AliEMCALCalibCoefs::GetCalibTableForDb(const AliEMCALCalibCoefs *tab, const char* dbLocation,
167 // See EMCAL/macros/CalibrationDB/AliEMCALSetCDB.C
168 // Define and save to CDB
169 printf("<I> AliEMCALCalibCoefs::GetCalibTableForDb started \n");
170 AliEMCALCalibData* caldata=0;
171 if(tab==0) return caldata;
175 Int_t beamPeriod = 1;
176 char* objFormat = "";
177 caldata = new AliEMCALCalibData("EMCAL");
178 caldata->SetTitle(coment);
180 AliEMCALGeometry *g = AliEMCALGeometry::GetInstance();
182 for(int id=0; id<tab->GetSize(); id++){
185 Int_t nSupMod=0, nModule=0, nIphi=0, nIeta=0, iphiCell=0, ietaCell=0;
186 g->GetCellIndex(id, nSupMod, nModule, nIphi, nIeta);
187 g->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, iphiCell, ietaCell);
189 AliEMCALCalibCoef *r = tab->GetTable(id);
190 // ietaCell - column; iphiCell - row
191 caldata->SetADCchannel (nSupMod, ietaCell, iphiCell, r->fCc);
192 caldata->SetADCpedestal(nSupMod, ietaCell, iphiCell, ped);
194 printf("<I> Fill AliEMCALCalibData table \n");
195 //Store calibration data into database
198 md.SetComment(objFormat);
199 md.SetBeamPeriod(beamPeriod);
200 md.SetResponsible("Aleksei Pavlinov");
202 AliCDBManager* man = AliCDBManager::Instance();
204 printf("<E> AliEMCALCalibCoefs::GetCalibTableForDb : define AliCDBManager, NO saving !! \n");
206 printf("<I> AliCDBManager %p \n", man);
207 AliCDBId id("EMCAL/Calib/Data",firstRun,lastRun); // create in EMCAL/Calib/Data DBFolder
208 TString dBFolder(dbLocation);
209 AliCDBStorage* loc = man->GetStorage(dBFolder.Data());
210 loc->Put(caldata, id, &md);
216 AliEMCALCalibCoef *AliEMCALCalibCoefs::GetRow(const int absId)
219 AliEMCALCalibCoef *r=0;
220 for(int id=0; id<fTable->GetSize(); id++){
222 if(r->fAbsId == absId) return r;
227 void AliEMCALCalibCoefs::PrintTable()
230 printf(" Table : %s : nrows %i \n", GetName(), int(fTable->GetSize()));
231 for(int i=0; i<fTable->GetSize(); i++) PrintTable(i);
234 void AliEMCALCalibCoefs::PrintTable(const Int_t i)
237 if(i>=fTable->GetSize()) return;
238 printf("row %i \n", i);
239 PrintRec(GetTable(i));
242 void AliEMCALCalibCoefs::PrintRec(AliEMCALCalibCoef* r)
246 printf(" abs Id %5.5i fCc %7.6f fECc %7.6f \n", r->fAbsId, r->fCc, r->fECc);