]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Interface simplified
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Sep 2004 09:58:32 +0000 (09:58 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Sep 2004 09:58:32 +0000 (09:58 +0000)
PHOS/AliPHOSCalibrManager.cxx
PHOS/AliPHOSCalibrManager.h
PHOS/AliPHOSCalibrationDB.cxx
PHOS/AliPHOSCalibrationDB.h

index 3f5ada8a63b364612816151a1599a5806dfd87fa..461743f83edf6c12955db38264a0e3a801e0dabb 100644 (file)
 #include "AliPHOSCalibrationData.h"
 ClassImp(AliPHOSCalibrManager)
 
-
-AliPHOSCalibrManager * AliPHOSCalibrManager::fgCaMa = 0 ;
+  
+  AliPHOSCalibrManager * AliPHOSCalibrManager::fgCaMa = 0 ;
 //____________________________________________________________________________ 
 AliPHOSCalibrManager::AliPHOSCalibrManager():TNamed() 
 {
   // default ctor: not to be used
+  fInputKind = 0 ;
+  fFileName= "" ;
   fctdb = 0 ;
-  fFileName="" ;
   Fatal("Default constructor","Should not use") ;
 }
 //____________________________________________________________________________ 
-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)
 {
   // 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") ;
     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 ;
+    }
+  }
+  
+  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()) ;
   }
-  file.close();   
+  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) ;
@@ -134,29 +185,36 @@ void AliPHOSCalibrManager::ReadFromRoot(AliPHOSCalibrationData & data,Int_t run)
     Error("ReadFromRoot","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) ;
@@ -168,16 +226,16 @@ void AliPHOSCalibrManager::WriteData(AliPHOSCalibrationData * data)
      }
   }
   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) ;
   
 }
 //____________________________________________________________________________
index 2ba34e9556b1e8006df5629be0fedfcbd4fdb497..51d207cba4adc968b00cc86c06aea76a9ecaa493 100644 (file)
@@ -32,26 +32,29 @@ public:
  
   virtual ~AliPHOSCalibrManager() ; // dtor
   static AliPHOSCalibrManager * GetInstance() ;
-  static AliPHOSCalibrManager * GetInstance(const char * dbfilename ) ; 
+  static AliPHOSCalibrManager * GetInstance(const char * filename,const char * kind = "root" ) ; 
 
-  //To know correspondance when reads list of gains from ascii file 
-  void SetConTableDB(AliPHOSConTableDB * ctdb){fctdb = ctdb; }
+  void GetParameters(AliPHOSCalibrationData &data) ; 
+  
+  void SetConTable(AliPHOSConTableDB * ct){fctdb = ct ;}
 
-  //Read gains of pedestals from ascii file
-  void ReadFromASCII(AliPHOSCalibrationData & data,const char * filename = "gains.dat") ;
-
-  void ReadFromRoot(AliPHOSCalibrationData &data,Int_t run) ;
-
-  void WriteData(AliPHOSCalibrationData *data) ;
+  void WriteData(AliPHOSCalibrationData &data) ;
 
   AliPHOSCalibrManager & operator = (const AliPHOSCalibrManager & right) ;
 
 private:
-  AliPHOSCalibrManager(const char* filename) ;          
+  //Read gains of pedestals from ascii file
+  void ReadFromASCII(AliPHOSCalibrationData & data) ;
+
+  void ReadFromRoot(AliPHOSCalibrationData &data) ;
+
+  AliPHOSCalibrManager(const char* filename,const char * kind = "root") ;          
 
 private:
   TString   fFileName ;        //Name of file with calibration data
-  AliPHOSConTableDB * fctdb ;  //! Connection table of PHOS
+  Int_t     fInputKind;        //Kind of input to read/write data
+  AliPHOSConTableDB * fctdb ;  //Connection table used to read from ASCII file
+  
   static AliPHOSCalibrManager * fgCaMa ; // pointer to the unique instance of singleton
            
  
index 672d75aa63e376d78c116b699b44c07f8b6b09dc..73d07afc41ec83f566c2f14aed4c33513ccac19e 100644 (file)
 // --- ROOT system ---
 
 // --- Standard library ---
-#include <fstream>
 
 // --- AliRoot header files ---
-#include "AliPHOSConTableDB.h"
+#include "AliPHOSCalibrManager.h"
 #include "AliPHOSCalibrationDB.h"
-#include "AliPHOSGeometry.h"
 ClassImp(AliPHOSCalibrationDB)
 
 
 //____________________________________________________________________________ 
   AliPHOSCalibrationDB::AliPHOSCalibrationDB():TNamed() 
 {
-  fPedestals = 0 ;
-  fSlopes = 0;
-  fNChannels = 0 ;
-  fctdb = 0 ;
 }
 //____________________________________________________________________________ 
 AliPHOSCalibrationDB::AliPHOSCalibrationDB(const char * database):
-  TNamed("AliPHOSCalibrationDB",database){
-  //Creates the containers: we prepare places for all channels in PHOS
+  TNamed("AliPHOSCalibrationDB",database),fPedestals("Pedestals"),fGains("Gains"){
 
-  AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance("IHEP","") ;
-  fNChannels = geom->GetNModules()*geom->GetNPhi()*geom->GetNZ()+
-               geom->GetNumberOfCPVPadsZ()*geom->GetNumberOfCPVPadsPhi()*geom->GetNModules() ;
-  //Note, that to avoid shifting AbsId each time we access data, we do not use
-  //first slot and index runs from 1 to fNChannels inclusively
-  fPedestals = new TArrayF(fNChannels+1) ;
-  fSlopes =  new TArrayF(fNChannels+1) ;
-  fctdb = 0 ;
 } 
 //____________________________________________________________________________ 
   AliPHOSCalibrationDB::~AliPHOSCalibrationDB()
 {
-  if(fPedestals)
-    delete fPedestals ;
-  if(fSlopes)
-    delete fSlopes ;
 }
 //____________________________________________________________________________ 
 Float_t AliPHOSCalibrationDB::Calibrate(Int_t amp, Int_t absId)const 
 {
   //if absID is known, return calibrated energy, else - zero
-  if(absId <=0 || absId > fNChannels) 
-    return 0.0000001 ;
-
-  Float_t ret = (amp - fPedestals->At(absId))*fSlopes->At(absId); 
+  Float_t ret = (amp - fPedestals.Data(absId))*fGains.Data(absId); 
   if(ret > 0)
     return ret ;
   else
     return 0.0000001 ; //Should not be zero - to avoid FPE
 }
-//____________________________________________________________________________ 
-void  AliPHOSCalibrationDB::SetAll(Float_t pedestal, Float_t slope){
-  //Set all calibration parameters to the same value
-  if(fPedestals)
-    for(Int_t i=0;i<fNChannels;i++){
-      fPedestals->AddAt(pedestal,i) ;
-      fSlopes->AddAt(slope,i);
-    }
-  else
-    Warning("SetAll", "Please, create me with non-default constructor!") ;
-}
 //____________________________________________________________________________
-void AliPHOSCalibrationDB::ReadCalibrationParameters(const char * filename, Option_t* opt){
-  //reads calibration parameters from ascii file
+void AliPHOSCalibrationDB::GetParameters(void){
+  //In this method we read calibration parameters using AliPHOSCalibrManager
+  //This manager should be configured to read from correct source.
 
-  if(strcmp(opt,"gains")==0){  //read gains
-    if(!fctdb){
-      Error("ReadCalibrationParameters", "Specify Connections Table Database first") ;
-      return ;
-    }
-    ifstream gainfile(filename) ; 
-    for(Int_t i = 1; i<=64; i++){
-      Float_t slope ;
-      gainfile >> slope  ;      
-      fSlopes->AddAt(slope,fctdb->Raw2AbsId(i));
-    }
-    gainfile.close();   
+  AliPHOSCalibrManager * man = AliPHOSCalibrManager::GetInstance() ;
+  if(!man){
+    Error("GetParameters","AliPHOSCalibrManager not instanciated") ;
+    return ;
   }
-  else
-    if(strstr(opt,"pedest")){  //read pedestals
-      if(!fctdb){
-       Error("ReadCalibrationParameters", "Specify Connections Table Database first") ;
-       return ;
-      }
-      ifstream pfile(filename) ; 
-      for(Int_t i = 1; i<=64; i++){
-       Float_t pedestal ;
-       pfile >> pedestal  ;      
-       fPedestals->AddAt(pedestal,fctdb->Raw2AbsId(i));
-      }
-      pfile.close();
-   }
-   else{
-     Warning("ReadCalibrationParameters", "Available options are\n `gains' : to read gains\n `pedestals : to read pedestals ") ;
-   }
+
+  man->GetParameters(fPedestals) ;
+  man->GetParameters(fGains) ;
+  
 }
 //____________________________________________________________________________
 AliPHOSCalibrationDB& AliPHOSCalibrationDB::operator=(AliPHOSCalibrationDB const & cdb)
 {
   //
-  fNChannels = cdb.fNChannels;
-  fFileName = cdb.fFileName;
   fPedestals=cdb.fPedestals ;
-  fSlopes = cdb.fSlopes;
+  fGains = cdb.fGains;
   return *this ;
 }
index 9c41ad2677a406809aa61646625e914f296ed9e3..781847cdc8828771bab474af1b01501a820c5e22 100644 (file)
 
 // --- ROOT system ---
 #include "TNamed.h"
-#include "TArrayF.h" 
 #include "TString.h" 
 
 // --- Standard library ---
 
 // --- AliRoot header files ---
-class AliPHOSConTableDB ;
+#include "AliPHOSCalibrationData.h" 
 
 class AliPHOSCalibrationDB:public TNamed {
 
@@ -30,30 +29,14 @@ public:
   //Main method: calibrates if gains are known, otherwise - returns 0
   Float_t Calibrate(Int_t amp, Int_t absId)const ;
 
-  //Read gains of pedestals from ascii file
-  void ReadCalibrationParameters(const char * filename = "gains.dat",Option_t* opt = "gains") ;
-
-  //Sets the same parameters for all channels  
-  void SetAll(Float_t pedestal = 0, Float_t slope = 0.01) ; 
-
-  //To know correspondance when reads list of gains from ascii file 
-  void SetConTableDB(AliPHOSConTableDB * ctdb){fctdb = ctdb; }
-
-  //Set parameters for particlular channel
-  void SetParameters(Int_t AbsId, Float_t pedestal = 0, Float_t slope = 0.01)
-    {if(fPedestals){fPedestals->AddAt(pedestal,AbsId-1) ; fSlopes->AddAt(slope,AbsId-1) ;} }
-
-  //To be replaced in real DB when updating will really be necessary
-  void Update(Int_t /*event*/,Int_t /*run*/){} 
+  //Get calibration parameters using AliPHOSCalibrManager
+  void GetParameters(void) ; 
 
   AliPHOSCalibrationDB & operator = (const AliPHOSCalibrationDB & ) ;
 private:
-  Int_t     fCurentRun ;       //! 
-  Int_t     fNChannels ;
-  TString   fFileName ;
-  TArrayF * fPedestals ;
-  TArrayF * fSlopes ;
-  AliPHOSConTableDB * fctdb ;  //!
+
+  AliPHOSCalibrationData fPedestals ;
+  AliPHOSCalibrationData fGains ;
 
   ClassDef(AliPHOSCalibrationDB,1)  // description