1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
18 //_________________________________________________________________________
19 // Class provides interface between classes
20 // consuming/producing calibration data,
21 // such as AliPHOSClusterizer and AliPHOSCalibrator
22 // from one side and database (now just a root file,
23 // later - AliEn etc.)
25 // First Manager should be configured so that is reads data
26 // from a given source. e.g. from a root file:
27 // AliPHOSCalibrManager * m = AliPHOSCalibrManager::GetInstance("MyCalibrationRootFile.root") ;
28 // After that one can real/write data to this source:
29 // AliPHOSCalibrationData mydata("Gains","v1") ;
31 // m->Write(&mydata) ;
32 // AliPHOSCalibrationData myanotherdata("Gains","v2") ;
33 // m->ReadFromRoot(&myanotherdata) ;
35 //*-- Author : D.Peressounko (RRC KI & SUBATECH)
36 //////////////////////////////////////////////////////////////////////////////
39 // --- ROOT system ---
44 // --- Standard library ---
47 // --- AliRoot header files ---
49 #include "AliPHOSConTableDB.h"
50 #include "AliPHOSCalibrManager.h"
51 #include "AliPHOSCalibrationData.h"
52 ClassImp(AliPHOSCalibrManager)
55 AliPHOSCalibrManager * AliPHOSCalibrManager::fgCaMa = 0 ;
56 //____________________________________________________________________________
57 AliPHOSCalibrManager::AliPHOSCalibrManager():TNamed()
59 // default ctor: not to be used
63 AliFatal(Form("Should not be used")) ;
65 //____________________________________________________________________________
66 AliPHOSCalibrManager::AliPHOSCalibrManager(const char* filename,const char * kind ):
67 TNamed("AliPHOSCalibrManager",filename){
68 if(strcmp(kind,"root")==0){
77 //____________________________________________________________________________
78 AliPHOSCalibrManager::~AliPHOSCalibrManager()
82 TFile * f = gROOT->GetFile(fFileName) ;
87 //____________________________________________________________________________
88 AliPHOSCalibrManager * AliPHOSCalibrManager::GetInstance(void)
90 // gets the instance of the unique object
93 //____________________________________________________________________________
94 AliPHOSCalibrManager * AliPHOSCalibrManager::GetInstance(const char* filename,const char * kind)
96 // Opens source (now only root file) and
97 // returns the instance of the unique object
100 fgCaMa = new AliPHOSCalibrManager(filename,kind) ;
102 if(strcmp(filename,fgCaMa->fFileName.Data())){
103 //Close previous file, construct new Manager
105 fgCaMa = new AliPHOSCalibrManager(filename,kind) ;
110 //____________________________________________________________________________
111 void AliPHOSCalibrManager::GetParameters(AliPHOSCalibrationData &data){
116 ReadFromASCII(data) ;
119 //____________________________________________________________________________
120 void AliPHOSCalibrManager::ReadFromASCII(AliPHOSCalibrationData &data){
121 // We read pedestals and gains from *.dat file with following format:
122 // 0 0 0 0 37.09 1972. // next nmodrows*nmodcols*ncryrows*ncrycols lines
123 // 0 0 0 1 28.53 2072. // contains <RR CC r c ped peak>
124 // 0 0 0 2 30.93 1938. //
125 // where module is an array of 8*8 crystals and RR and CC are module raw and column position
128 AliError(Form("Specify Connections Table Database first")) ;
132 FILE * file = fopen(fFileName, "r");
134 Error("ReadFromASCII", "could not open file %s", fFileName.Data());
138 Bool_t isPed = kFALSE ;
139 if(strcmp(data.GetCategory(),"Pedestals")==0){
143 if(strcmp(data.GetCategory(),"Gains")){
144 Error("ReadFromASCII","Unknown data category: %s",data.GetCategory()) ;
149 Int_t modRaw,modCol,raw,col;
152 while(fscanf(file,"%d %d %d %d %f %f",&modRaw,&modCol,&raw,&col,&ped,&pik)==6){
153 //Calculate plain crystal position:
154 Int_t rawPosition = (modRaw*8+raw)*fctdb->GetNColumns()+modCol*8+col ;
155 Int_t absId = fctdb->Raw2AbsId(rawPosition);
157 data.SetData(absId,ped) ;
161 data.SetData(absId,1./pik);
163 data.SetData(absId,0.);
167 if(nread != fctdb->GetNColumns()*fctdb->GetNRaws()){
168 Error("ReadFromASCII","Read %d parameters instead of %d\n",nread,fctdb->GetNColumns()*fctdb->GetNRaws()) ;
173 //____________________________________________________________________________
174 void AliPHOSCalibrManager::ReadFromRoot(AliPHOSCalibrationData & data)
176 //reads calibration parameters from root file
179 TString searchname(data.GetCategory()) ;
181 searchname+=data.GetVersion() ;
182 TFile * file = gROOT->GetFile(fFileName) ;
183 if(!file || !file->IsOpen())
184 file = TFile::Open(fFileName) ;
186 AliError(Form("Can not open file %s\n",fFileName.Data() )) ;
190 AliPHOSCalibrationData * tmp = dynamic_cast<AliPHOSCalibrationData*>(file->Get(searchname) ) ;
192 Error("ReadFromRoot","there is no data %s in file %s",fFileName.Data(),fFileName.Data()) ;
197 // TList * list = file->GetListOfKeys() ;
198 // TIter next(list) ;
200 // while((key=((TKey*)next()))){
201 // TString kname(key->GetName()) ;
202 // if(kname.BeginsWith(searchname)){
203 // TString sbegin = kname(searchname.Sizeof()-1,
204 // kname.Last('_')-searchname.Sizeof()+1) ;
205 // TString send = kname(kname.Last('_')+1,kname.Sizeof()) ;
207 // if(sscanf(sbegin.Data(),"%d",&begin) &&
208 // sscanf(send.Data(),"%d",&end)){
209 // if(begin<=run && end >=run){
210 // data=(*dynamic_cast<AliPHOSCalibrationData*>(file->Get(key->GetName()) ));
216 // Error("ReadFromRoot","Can not find key %s for run %d in file %s \n",searchname.Data(),run,fFileName.Data()) ;
218 //____________________________________________________________________________
219 void AliPHOSCalibrManager::WriteData(AliPHOSCalibrationData &data)
222 TFile * file = gROOT->GetFile(fFileName) ;
223 if(!file || !file->IsOpen()){
224 file = TFile::Open(fFileName,"UPDATE") ;
226 AliError(Form("Can not open file %s\n",fFileName.Data() )) ;
231 TString kname(data.GetCategory()) ;
233 kname+=data.GetVersion() ;
236 // data->GetValidityRange(begin,end) ;
240 data.Write(kname,TObject::kOverwrite) ;
243 //____________________________________________________________________________
244 AliPHOSCalibrManager& AliPHOSCalibrManager::operator=(AliPHOSCalibrManager const & cdb)
246 //overloads = operator
247 fFileName = cdb.fFileName;