ROOT logo
//*-- AUTHOR :   Pablo Cabanelas 
//*-- Created :  17/10/2005

/////////////////////////////////////////////////////////////
//  HRpcParRootFileIo
//
//  Class for RPC parameter input/output from/into ROOT file
//
//  It is derived from the base class HDetParRootFileIo and
//  inherits from it basic functions e.g. write(...)
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hrpcparrootfileio.h"
#include "hparrootfileio.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "hrpcdetector.h"
#include "hrpccalpar.h"
#include "hrpcgeompar.h"
#include "hrpctrb2lookup.h"
#include "hrpctrb3lookup.h"
#include <iostream> 
#include <iomanip>

ClassImp(HRpcParRootFileIo)

HRpcParRootFileIo::HRpcParRootFileIo(HParRootFile* f) : HDetParRootFileIo(f) {
  // constructor sets the name of the detector I/O "HRpcParIo"
  fName="HRpcParIo";
  HDetector* det=gHades->getSetup()->getDetector("Rpc");
  Int_t n = det->getMaxSectors();
  initModules=new TArrayI(n);
}

HRpcParRootFileIo::~HRpcParRootFileIo(void) {
  // destructor
  if (initModules) {
    delete initModules;
    initModules=0;
  }
}

Bool_t HRpcParRootFileIo::init(HParSet* pPar,Int_t* set) {
  // initializes a container called by name, but only the modules
  // defined in the array 'set'
  // calls the special read function for this container
  // If it is called the first time it reads the setup found in the file
  if (!isActiv) readModules("Rpc");
  const Text_t* name=pPar->GetName();
  if (pFile) {
    if (strcmp(name,"RpcCalPar")==0)   return read((HRpcCalPar*)pPar,set);
    if (strcmp(name,"RpcGeomPar")==0)
        return HDetParRootFileIo::read((HRpcGeomPar*)pPar,set);
    if (strcmp(name,"RpcTrb2Lookup")==0)
        return HDetParRootFileIo::read((HRpcTrb2Lookup*)pPar);
    if (strcmp(name,"RpcTrb3Lookup")==0)
        return HDetParRootFileIo::read((HRpcTrb3Lookup*)pPar);
  }
  cerr<<"initialization of "<<name<<" not possible from ROOT file!"<<endl;
  return kFALSE;
}

Bool_t HRpcParRootFileIo::read(HRpcCalPar* pPar,Int_t* set) {
  // reads and fills the container "RpcCalPar" for calibration parameters
  Text_t* name=(Char_t*)pPar->GetName();
  Int_t version=findInputVersion(name);

  if (version<=0) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;    // not in ROOT file
  }
  if (pPar->getInputVersion(inputNumber)==version
      && pPar->getInputVersion(inputNumber)!=-1) return kTRUE;
  // needs reinitialization
  HRpcCalPar* r=(HRpcCalPar*)findContainer(name,version);
  Bool_t allFound=kTRUE;

  initModules->Reset();
  HRpcCalPar& rRpc=*r;
  HRpcCalPar& pRpc=*pPar;
  for(Int_t sect=0;sect<pRpc.getSize();sect++) {
    HRpcCalParSec& rSec=rRpc[sect];
    HRpcCalParSec& pSec=pRpc[sect];
    if (set[sect]) {//Note: In the RPC, sector and module is the same.
      for(Int_t col=0;col<pSec.getSize();col++) {
	HRpcCalParCol& rCol=rSec[col];
	HRpcCalParCol& pCol=pSec[col];
	  
	if (pCol.getSize() && rCol.getSize()==pCol.getSize()) {
	  for(Int_t cell=0;cell<pCol.getSize();cell++) pCol[cell].fill(rCol[cell]);
	}
	else allFound=kFALSE;
      }
      set[sect]=0;
      initModules->AddAt(sect+1,sect);
    }
  }

  pPar->setInputVersion(version,inputNumber);
  pPar->setChanged();
  printInfo("RpcCalPar: module(s) initialized from Root file:\n ");
  delete r;
  return allFound;
}
 hrpcparrootfileio.cc:1
 hrpcparrootfileio.cc:2
 hrpcparrootfileio.cc:3
 hrpcparrootfileio.cc:4
 hrpcparrootfileio.cc:5
 hrpcparrootfileio.cc:6
 hrpcparrootfileio.cc:7
 hrpcparrootfileio.cc:8
 hrpcparrootfileio.cc:9
 hrpcparrootfileio.cc:10
 hrpcparrootfileio.cc:11
 hrpcparrootfileio.cc:12
 hrpcparrootfileio.cc:13
 hrpcparrootfileio.cc:14
 hrpcparrootfileio.cc:15
 hrpcparrootfileio.cc:16
 hrpcparrootfileio.cc:17
 hrpcparrootfileio.cc:18
 hrpcparrootfileio.cc:19
 hrpcparrootfileio.cc:20
 hrpcparrootfileio.cc:21
 hrpcparrootfileio.cc:22
 hrpcparrootfileio.cc:23
 hrpcparrootfileio.cc:24
 hrpcparrootfileio.cc:25
 hrpcparrootfileio.cc:26
 hrpcparrootfileio.cc:27
 hrpcparrootfileio.cc:28
 hrpcparrootfileio.cc:29
 hrpcparrootfileio.cc:30
 hrpcparrootfileio.cc:31
 hrpcparrootfileio.cc:32
 hrpcparrootfileio.cc:33
 hrpcparrootfileio.cc:34
 hrpcparrootfileio.cc:35
 hrpcparrootfileio.cc:36
 hrpcparrootfileio.cc:37
 hrpcparrootfileio.cc:38
 hrpcparrootfileio.cc:39
 hrpcparrootfileio.cc:40
 hrpcparrootfileio.cc:41
 hrpcparrootfileio.cc:42
 hrpcparrootfileio.cc:43
 hrpcparrootfileio.cc:44
 hrpcparrootfileio.cc:45
 hrpcparrootfileio.cc:46
 hrpcparrootfileio.cc:47
 hrpcparrootfileio.cc:48
 hrpcparrootfileio.cc:49
 hrpcparrootfileio.cc:50
 hrpcparrootfileio.cc:51
 hrpcparrootfileio.cc:52
 hrpcparrootfileio.cc:53
 hrpcparrootfileio.cc:54
 hrpcparrootfileio.cc:55
 hrpcparrootfileio.cc:56
 hrpcparrootfileio.cc:57
 hrpcparrootfileio.cc:58
 hrpcparrootfileio.cc:59
 hrpcparrootfileio.cc:60
 hrpcparrootfileio.cc:61
 hrpcparrootfileio.cc:62
 hrpcparrootfileio.cc:63
 hrpcparrootfileio.cc:64
 hrpcparrootfileio.cc:65
 hrpcparrootfileio.cc:66
 hrpcparrootfileio.cc:67
 hrpcparrootfileio.cc:68
 hrpcparrootfileio.cc:69
 hrpcparrootfileio.cc:70
 hrpcparrootfileio.cc:71
 hrpcparrootfileio.cc:72
 hrpcparrootfileio.cc:73
 hrpcparrootfileio.cc:74
 hrpcparrootfileio.cc:75
 hrpcparrootfileio.cc:76
 hrpcparrootfileio.cc:77
 hrpcparrootfileio.cc:78
 hrpcparrootfileio.cc:79
 hrpcparrootfileio.cc:80
 hrpcparrootfileio.cc:81
 hrpcparrootfileio.cc:82
 hrpcparrootfileio.cc:83
 hrpcparrootfileio.cc:84
 hrpcparrootfileio.cc:85
 hrpcparrootfileio.cc:86
 hrpcparrootfileio.cc:87
 hrpcparrootfileio.cc:88
 hrpcparrootfileio.cc:89
 hrpcparrootfileio.cc:90
 hrpcparrootfileio.cc:91
 hrpcparrootfileio.cc:92
 hrpcparrootfileio.cc:93
 hrpcparrootfileio.cc:94
 hrpcparrootfileio.cc:95
 hrpcparrootfileio.cc:96
 hrpcparrootfileio.cc:97
 hrpcparrootfileio.cc:98
 hrpcparrootfileio.cc:99
 hrpcparrootfileio.cc:100
 hrpcparrootfileio.cc:101
 hrpcparrootfileio.cc:102
 hrpcparrootfileio.cc:103
 hrpcparrootfileio.cc:104
 hrpcparrootfileio.cc:105
 hrpcparrootfileio.cc:106