]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSCalibrManager.cxx
RAW DDL first attempt, also virtual hidded problem addressed
[u/mrichter/AliRoot.git] / PHOS / AliPHOSCalibrManager.cxx
index 20912f4eeb9ce25eeb301851aad98a281f51dd3a..a9be865e3b7843969792f32e752959965bfee8f0 100644 (file)
 /* $Id$ */
 
 //_________________________________________________________________________
-// Short description  
+// Class provides interface between classes 
+// consuming/producing calibration data, 
+// such as AliPHOSClusterizer and AliPHOSCalibrator
+// from one side and database (now just a root file, 
+// later  - AliEn etc.)
+// Use case: 
+//  First Manager should be configured so that is reads data 
+//  from a given source. e.g. from a root file:
+//   AliPHOSCalibrManager * m = AliPHOSCalibrManager::GetInstance("MyCalibrationRootFile.root") ;
+//  After that one can real/write data to this source:
+//  AliPHOSCalibrationData mydata("Gains","v1") ;
+//  ......
+//  m->Write(&mydata) ;
+//  AliPHOSCalibrationData myanotherdata("Gains","v2") ;
+//  m->ReadFromRoot(&myanotherdata) ;
 //
 //*-- Author :  D.Peressounko (RRC KI & SUBATECH) 
 //////////////////////////////////////////////////////////////////////////////
 #include <fstream> 
 
 // --- AliRoot header files ---
+#include "AliLog.h"  
 #include "AliPHOSConTableDB.h"
 #include "AliPHOSCalibrManager.h"
 #include "AliPHOSCalibrationData.h"
 ClassImp(AliPHOSCalibrManager)
 
-
-AliPHOSCalibrManager * AliPHOSCalibrManager::fgCaMa = 0 ;
+  
+  AliPHOSCalibrManager * AliPHOSCalibrManager::fgCaMa = 0 ;
 //____________________________________________________________________________ 
 AliPHOSCalibrManager::AliPHOSCalibrManager():TNamed() 
 {
-  // default ctor: nott to be used
+  // default ctor: not to be used
+  fInputKind = 0 ;
+  fFileName= "" ;
   fctdb = 0 ;
-  fFileName="" ;
-  Fatal("Default constructor","Should not use") ;
+  AliFatal(Form("Should not be used")) ;
 }
 //____________________________________________________________________________ 
-AliPHOSCalibrManager::AliPHOSCalibrManager(const char* filename ):
+AliPHOSCalibrManager::AliPHOSCalibrManager(const char* filename,const char * kind ):
   TNamed("AliPHOSCalibrManager",filename){
-  fFileName = filename ;         
+  if(strcmp(kind,"root")==0){
+    fInputKind = 0 ;
+  }
+  else{
+    fInputKind = 1 ;
+  }
+  fFileName = filename;
   fctdb = 0 ;
 } 
 //____________________________________________________________________________ 
-  AliPHOSCalibrManager::~AliPHOSCalibrManager()
+AliPHOSCalibrManager::~AliPHOSCalibrManager()
 {
   //dtor
-  TFile * f = gROOT->GetFile(fFileName) ;
-  if(f && f->IsOpen())
-    f->Close() ;
-  if(fctdb)
-    delete fctdb ;
-  fctdb = 0 ;
+  if(fInputKind==0){
+    TFile * f = gROOT->GetFile(fFileName) ;
+    if(f && f->IsOpen())
+      f->Close() ;
+  }
 }
 //____________________________________________________________________________ 
 AliPHOSCalibrManager * AliPHOSCalibrManager::GetInstance(void)
 { 
   // gets the instance of the unique object
- return fgCaMa ;
 return fgCaMa ;
 }
 //____________________________________________________________________________ 
-AliPHOSCalibrManager * AliPHOSCalibrManager::GetInstance(const char* filename )
+AliPHOSCalibrManager * AliPHOSCalibrManager::GetInstance(const char* filename,const char * kind)
 {
-  // gets the instance of the unique object
-
+  // Opens source (now only root file) and
+  // returns the instance of the unique object
+  
   if(!fgCaMa)
-    fgCaMa = new AliPHOSCalibrManager(filename) ;
+    fgCaMa = new AliPHOSCalibrManager(filename,kind) ;
   else{
-   if(strcmp(filename,fgCaMa->fFileName.Data())){
-   //Close previous file, construct new Manager
-     delete fgCaMa ;
-     fgCaMa = new AliPHOSCalibrManager(filename) ;
-   }
+    if(strcmp(filename,fgCaMa->fFileName.Data())){
+      //Close previous file, construct new Manager
+      delete fgCaMa ;
+      fgCaMa = new AliPHOSCalibrManager(filename,kind) ;
+    }
   }
   return fgCaMa ;       
 }
 //____________________________________________________________________________
-void AliPHOSCalibrManager::ReadFromASCII(AliPHOSCalibrationData &data,const char * filename)
-{
-  //reads calibration parameters from ascii file
+void AliPHOSCalibrManager::GetParameters(AliPHOSCalibrationData &data){ 
+  if(fInputKind == 0){
+    ReadFromRoot(data) ;
+  }
+  else{
+    ReadFromASCII(data) ;
+  }
+}
+//____________________________________________________________________________
+void AliPHOSCalibrManager::ReadFromASCII(AliPHOSCalibrationData &data){
+  // We read pedestals and gains from *.dat file with following format:
+  //   0       0       0       0       37.09   1972.   // next nmodrows*nmodcols*ncryrows*ncrycols lines
+  //   0       0       0       1       28.53   2072.   // contains <RR CC r c ped peak>
+  //   0       0       0       2       30.93   1938.   //
+  // where module is an array of 8*8 crystals and RR and CC are module raw and column position 
 
   if(!fctdb){
-    Error("ReadCalibrationParameters", "Specify Connections Table Database first") ;
+    AliError(Form("Specify Connections Table Database first")) ;
     return ;
   }
-  ifstream file(filename) ; 
-  for(Int_t i = 1; i<=64; i++){
-    Float_t inp ;
-    file >> inp  ;      
-    data.SetData(fctdb->Raw2AbsId(i),static_cast<Float_t>(inp));
+  
+  FILE * file = fopen(fFileName, "r");
+  if (!file) {
+    Error("ReadFromASCII", "could not open file %s", fFileName.Data());
+    return;
+  }
+  
+  Bool_t isPed = kFALSE ;
+  if(strcmp(data.GetCategory(),"Pedestals")==0){
+    isPed = 1 ;
+  }
+  else{
+    if(strcmp(data.GetCategory(),"Gains")){
+      Error("ReadFromASCII","Unknown data category: %s",data.GetCategory()) ;
+      return ;
+    }
   }
-  file.close();   
+  
+  Int_t modRaw,modCol,raw,col;
+  Float_t ped,pik;
+  Int_t nread = 0 ;
+  while(fscanf(file,"%d %d %d %d %f %f",&modRaw,&modCol,&raw,&col,&ped,&pik)==6){
+    //Calculate plain crystal position:
+    Int_t rawPosition = (modRaw*8+raw)*fctdb->GetNColumns()+modCol*8+col ;
+    Int_t absId =  fctdb->Raw2AbsId(rawPosition);
+    if(isPed){
+      data.SetData(absId,ped) ;
+    }
+    else{
+      if(pik!=0.)
+       data.SetData(absId,1./pik);
+      else
+       data.SetData(absId,0.);
+    }
+    nread++ ;
+  }    
+  if(nread != fctdb->GetNColumns()*fctdb->GetNRaws()){
+    Error("ReadFromASCII","Read %d parameters instead of %d\n",nread,fctdb->GetNColumns()*fctdb->GetNRaws()) ;
+  }
+  fclose(file) ;
+  
 }
 //____________________________________________________________________________
-void AliPHOSCalibrManager::ReadFromRoot(AliPHOSCalibrationData & data,Int_t run)
+void AliPHOSCalibrManager::ReadFromRoot(AliPHOSCalibrationData & data)
 {
   //reads calibration parameters from root file
-
+  
   //construct name
   TString searchname(data.GetCategory()) ;
   searchname+='_' ;
   searchname+=data.GetVersion() ;
-  searchname+='_' ;
   TFile * file = gROOT->GetFile(fFileName) ;
   if(!file || !file->IsOpen())
     file = TFile::Open(fFileName) ;
   if(!file->IsOpen()){
-    Error("ReadFromRoot","Can not open file %s\n",fFileName.Data() ) ;
+    AliError(Form("Can not open file %s\n",fFileName.Data() )) ;
     return ;
   }
-  TList * list = file->GetListOfKeys() ;
-  TIter next(list) ;
-  TKey * key ;
-  while((key=((TKey*)next()))){
-    TString kname(key->GetName()) ;
-    if(kname.BeginsWith(searchname)){
-      TString sbegin = kname(searchname.Sizeof()-1,
-                            kname.Last('_')-searchname.Sizeof()+1) ;
-      TString send   = kname(kname.Last('_')+1,kname.Sizeof()) ;
-      Int_t begin,end ;
-      if(sscanf(sbegin.Data(),"%d",&begin) && 
-        sscanf(send.Data(),"%d",&end)){
-       if(begin<=run && end >=run){
-         data=(*dynamic_cast<AliPHOSCalibrationData*>(file->Get(key->GetName()) ));
-         return ;
-       }
-      }
-    }
-  }
-  Error("ReadFromRoot","Can not find key %s for run %d in file %s \n",searchname.Data(),run,fFileName.Data()) ;
+
+  AliPHOSCalibrationData * tmp = dynamic_cast<AliPHOSCalibrationData*>(file->Get(searchname) ) ;
+  if(!tmp)
+    Error("ReadFromRoot","there is no data %s in file %s",fFileName.Data(),fFileName.Data()) ;
+  else
+    data=(*tmp);
+  
+
+//   TList * list = file->GetListOfKeys() ;
+//   TIter next(list) ;
+//   TKey * key ;
+//   while((key=((TKey*)next()))){
+//     TString kname(key->GetName()) ;
+//     if(kname.BeginsWith(searchname)){
+//       TString sbegin = kname(searchname.Sizeof()-1,
+//                          kname.Last('_')-searchname.Sizeof()+1) ;
+//       TString send   = kname(kname.Last('_')+1,kname.Sizeof()) ;
+//       Int_t begin,end ;
+//       if(sscanf(sbegin.Data(),"%d",&begin) && 
+//      sscanf(send.Data(),"%d",&end)){
+//     if(begin<=run && end >=run){
+//       data=(*dynamic_cast<AliPHOSCalibrationData*>(file->Get(key->GetName()) ));
+//       return ;
+//     }
+//       }
+//     }
+//   }
+//   Error("ReadFromRoot","Can not find key %s for run %d in file %s \n",searchname.Data(),run,fFileName.Data()) ;
 }
 //____________________________________________________________________________
-void AliPHOSCalibrManager::WriteData(AliPHOSCalibrationData data)
+void AliPHOSCalibrManager::WriteData(AliPHOSCalibrationData &data)
 {
   //Writes data
   TFile * file = gROOT->GetFile(fFileName) ;
   if(!file || !file->IsOpen()){
     file = TFile::Open(fFileName,"UPDATE") ;
     if(!file->IsOpen()){
-      Error("WriteData","Can not open file %s\n",fFileName.Data() ) ;
+      AliError(Form("Can not open file %s\n",fFileName.Data() )) ;
       return ;
      }
   }
   file->cd() ;
-  TString kname(data->GetCategory()) ;
-  kname+='_';
-  kname+=data->GetVersion() ;
+  TString kname(data.GetCategory()) ;
   kname+='_';
-  Int_t begin,end ;
-  data->GetValidityRange(begin,end) ;
-  kname+=begin ;
-  kname+='_' ;
-  kname+=end ;
-  data->Write(kname,TObject::kOverwrite) ;
+  kname+=data.GetVersion() ;
+//   kname+='_';
+//   Int_t begin,end ;
+//   data->GetValidityRange(begin,end) ;
+//   kname+=begin ;
+//   kname+='_' ;
+//   kname+=end ;
+  data.Write(kname,TObject::kOverwrite) ;
   
 }
 //____________________________________________________________________________