ROOT logo
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
//  HEmcParRootFileIo
//
//  Class for EMC 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 "hemcparrootfileio.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hemcdetector.h"
#include "hemctrb3lookup.h"
#include "hemccalpar.h"
#include "hemcgeompar.h"
#include <iostream> 
#include <iomanip>

ClassImp(HEmcParRootFileIo)

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

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

Bool_t HEmcParRootFileIo::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("Emc");
  const Text_t* name=pPar->GetName();
  if (pFile) {
    if (0 == strncmp(name, "EmcTrb3Lookup", strlen("EmcTrb3Lookup"))) {
      return HDetParRootFileIo::read((HEmcTrb3Lookup*)pPar);
    }
    if (0 == strncmp(name, "EmcCalPar", strlen("EmcCalPar"))) {
      return read((HEmcCalPar*)pPar,set);
    }
    if (0 == strncmp(name,"EmcGeomPar", strlen("EmcGeomPar"))) {
      return HDetParRootFileIo::read((HEmcGeomPar*)pPar,set);
    }
  }
  Error("init(HParSet*,Int_t*)","Initialization of %s not possible from ASCII file",name);
  return kFALSE;
}

Bool_t HEmcParRootFileIo::read(HEmcCalPar* pPar, Int_t* set) {
  // Reads and fills the container "EmcCalPar"
  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
  pPar->clear();
  HEmcCalPar* rPar = (HEmcCalPar*)findContainer(name, version);
  Bool_t allFound = kTRUE;
  initModules->Reset();
  for (Int_t m = 0; m < pPar->getSize(); m++) {
    if (set[m]) {
      HEmcCalParSec& r = (*rPar)[m];
      HEmcCalParSec& p = (*pPar)[m];
      Int_t pSecSize = p.getSize();
      if (pSecSize && r.getSize() == pSecSize) {
        for (Int_t c = 0; c < pSecSize; c++) p[c].fill(r[c]);
        initModules->AddAt(m + 1, m);
      } else allFound = kFALSE;
    }
  }
  if (allFound) {
    pPar->setInputVersion(version, inputNumber);
    pPar->setChanged();
    cout << name << " initialized from ROOT file" << endl;
  }
  delete rPar;
  return allFound;
}
 hemcparrootfileio.cc:1
 hemcparrootfileio.cc:2
 hemcparrootfileio.cc:3
 hemcparrootfileio.cc:4
 hemcparrootfileio.cc:5
 hemcparrootfileio.cc:6
 hemcparrootfileio.cc:7
 hemcparrootfileio.cc:8
 hemcparrootfileio.cc:9
 hemcparrootfileio.cc:10
 hemcparrootfileio.cc:11
 hemcparrootfileio.cc:12
 hemcparrootfileio.cc:13
 hemcparrootfileio.cc:14
 hemcparrootfileio.cc:15
 hemcparrootfileio.cc:16
 hemcparrootfileio.cc:17
 hemcparrootfileio.cc:18
 hemcparrootfileio.cc:19
 hemcparrootfileio.cc:20
 hemcparrootfileio.cc:21
 hemcparrootfileio.cc:22
 hemcparrootfileio.cc:23
 hemcparrootfileio.cc:24
 hemcparrootfileio.cc:25
 hemcparrootfileio.cc:26
 hemcparrootfileio.cc:27
 hemcparrootfileio.cc:28
 hemcparrootfileio.cc:29
 hemcparrootfileio.cc:30
 hemcparrootfileio.cc:31
 hemcparrootfileio.cc:32
 hemcparrootfileio.cc:33
 hemcparrootfileio.cc:34
 hemcparrootfileio.cc:35
 hemcparrootfileio.cc:36
 hemcparrootfileio.cc:37
 hemcparrootfileio.cc:38
 hemcparrootfileio.cc:39
 hemcparrootfileio.cc:40
 hemcparrootfileio.cc:41
 hemcparrootfileio.cc:42
 hemcparrootfileio.cc:43
 hemcparrootfileio.cc:44
 hemcparrootfileio.cc:45
 hemcparrootfileio.cc:46
 hemcparrootfileio.cc:47
 hemcparrootfileio.cc:48
 hemcparrootfileio.cc:49
 hemcparrootfileio.cc:50
 hemcparrootfileio.cc:51
 hemcparrootfileio.cc:52
 hemcparrootfileio.cc:53
 hemcparrootfileio.cc:54
 hemcparrootfileio.cc:55
 hemcparrootfileio.cc:56
 hemcparrootfileio.cc:57
 hemcparrootfileio.cc:58
 hemcparrootfileio.cc:59
 hemcparrootfileio.cc:60
 hemcparrootfileio.cc:61
 hemcparrootfileio.cc:62
 hemcparrootfileio.cc:63
 hemcparrootfileio.cc:64
 hemcparrootfileio.cc:65
 hemcparrootfileio.cc:66
 hemcparrootfileio.cc:67
 hemcparrootfileio.cc:68
 hemcparrootfileio.cc:69
 hemcparrootfileio.cc:70
 hemcparrootfileio.cc:71
 hemcparrootfileio.cc:72
 hemcparrootfileio.cc:73
 hemcparrootfileio.cc:74
 hemcparrootfileio.cc:75
 hemcparrootfileio.cc:76
 hemcparrootfileio.cc:77
 hemcparrootfileio.cc:78
 hemcparrootfileio.cc:79
 hemcparrootfileio.cc:80
 hemcparrootfileio.cc:81
 hemcparrootfileio.cc:82
 hemcparrootfileio.cc:83
 hemcparrootfileio.cc:84
 hemcparrootfileio.cc:85
 hemcparrootfileio.cc:86
 hemcparrootfileio.cc:87
 hemcparrootfileio.cc:88
 hemcparrootfileio.cc:89
 hemcparrootfileio.cc:90
 hemcparrootfileio.cc:91
 hemcparrootfileio.cc:92
 hemcparrootfileio.cc:93
 hemcparrootfileio.cc:94
 hemcparrootfileio.cc:95
 hemcparrootfileio.cc:96