ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Modified : 06/12/2009 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//
// HSpecParRootFileIo
//
// Class for parameter input/output from/into ROOT file for
// the spectrometer (not related to a special detector)
//
/////////////////////////////////////////////////////////////

#include "hspecparrootfileio.h"
#include "hgeomvolume.h"
#include "hgeomshapes.h"
#include "hspecgeompar.h"

ClassImp(HSpecParRootFileIo)

HSpecParRootFileIo::HSpecParRootFileIo(HParRootFile* f) : HDetParRootFileIo(f) {
  // constructor calls the base class constructor
  fName="HSpecParIo";
}


Bool_t HSpecParRootFileIo::init(HParSet* pPar,Int_t* set) {
  // calls the appropriate read function of the container
  const  Text_t* name=pPar->GetName();
  if (pFile) {
    if (strcmp(name,"SpecGeomPar")==0) return read((HSpecGeomPar*)pPar,set);
    if (strcmp(name,"TrbLookup")==0) return HDetParRootFileIo::read(pPar);
    if (strcmp(name,"TrbnetAddressMapping")==0) return HDetParRootFileIo::read(pPar);
    if (strcmp(name,"SlowPar")==0) return HDetParRootFileIo::read(pPar);
  }
  cerr<<"initialization of "<<name<<" not possible from ROOT file!"<<endl;
  return kFALSE;
}


Bool_t HSpecParRootFileIo::read(HSpecGeomPar* pPar,Int_t* set) {
  // reads and fills the container "SpecGeomPar" which holds the geometry
  // parameters of the cave, the sectors and the target
  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
  HSpecGeomPar* r=(HSpecGeomPar*)findContainer(name,version);
  pPar->clear();  
  Bool_t allFound=kTRUE;
  pPar->copyComment(*r);
  if (pPar->isFirstInitialization()) {
    if (set[0]) {
      HGeomVolume* cave=r->getCave();
      if (cave) {
        pPar->addCave(cave);
        set[0]=0;
      }
      else allFound=kFALSE; 
    }
    if (set[1]) {
      Int_t n=r->getNumSectors();
      if (n>0) {
        for(Int_t i=0;i<n;i++) pPar->addSector(r->getSector(i));
        set[1]=0;
      }
      else allFound=kFALSE; 
    }
  } else set[0]=set[1]=0;
  if (set[2]) {
    Int_t n=r->getNumTargets();
    if (n>0) {
      for(Int_t i=0;i<n;i++) pPar->addTarget(r->getTarget(i));
      set[2]=0;
    }
    else allFound=kFALSE; 
  }
  pPar->setInputVersion(version,inputNumber);
  pPar->setChanged();
  delete r;
  if (allFound) pPar->setNotFirstInit(); 
  return allFound;
}
  
 hspecparrootfileio.cc:1
 hspecparrootfileio.cc:2
 hspecparrootfileio.cc:3
 hspecparrootfileio.cc:4
 hspecparrootfileio.cc:5
 hspecparrootfileio.cc:6
 hspecparrootfileio.cc:7
 hspecparrootfileio.cc:8
 hspecparrootfileio.cc:9
 hspecparrootfileio.cc:10
 hspecparrootfileio.cc:11
 hspecparrootfileio.cc:12
 hspecparrootfileio.cc:13
 hspecparrootfileio.cc:14
 hspecparrootfileio.cc:15
 hspecparrootfileio.cc:16
 hspecparrootfileio.cc:17
 hspecparrootfileio.cc:18
 hspecparrootfileio.cc:19
 hspecparrootfileio.cc:20
 hspecparrootfileio.cc:21
 hspecparrootfileio.cc:22
 hspecparrootfileio.cc:23
 hspecparrootfileio.cc:24
 hspecparrootfileio.cc:25
 hspecparrootfileio.cc:26
 hspecparrootfileio.cc:27
 hspecparrootfileio.cc:28
 hspecparrootfileio.cc:29
 hspecparrootfileio.cc:30
 hspecparrootfileio.cc:31
 hspecparrootfileio.cc:32
 hspecparrootfileio.cc:33
 hspecparrootfileio.cc:34
 hspecparrootfileio.cc:35
 hspecparrootfileio.cc:36
 hspecparrootfileio.cc:37
 hspecparrootfileio.cc:38
 hspecparrootfileio.cc:39
 hspecparrootfileio.cc:40
 hspecparrootfileio.cc:41
 hspecparrootfileio.cc:42
 hspecparrootfileio.cc:43
 hspecparrootfileio.cc:44
 hspecparrootfileio.cc:45
 hspecparrootfileio.cc:46
 hspecparrootfileio.cc:47
 hspecparrootfileio.cc:48
 hspecparrootfileio.cc:49
 hspecparrootfileio.cc:50
 hspecparrootfileio.cc:51
 hspecparrootfileio.cc:52
 hspecparrootfileio.cc:53
 hspecparrootfileio.cc:54
 hspecparrootfileio.cc:55
 hspecparrootfileio.cc:56
 hspecparrootfileio.cc:57
 hspecparrootfileio.cc:58
 hspecparrootfileio.cc:59
 hspecparrootfileio.cc:60
 hspecparrootfileio.cc:61
 hspecparrootfileio.cc:62
 hspecparrootfileio.cc:63
 hspecparrootfileio.cc:64
 hspecparrootfileio.cc:65
 hspecparrootfileio.cc:66
 hspecparrootfileio.cc:67
 hspecparrootfileio.cc:68
 hspecparrootfileio.cc:69
 hspecparrootfileio.cc:70
 hspecparrootfileio.cc:71
 hspecparrootfileio.cc:72
 hspecparrootfileio.cc:73
 hspecparrootfileio.cc:74
 hspecparrootfileio.cc:75
 hspecparrootfileio.cc:76
 hspecparrootfileio.cc:77
 hspecparrootfileio.cc:78
 hspecparrootfileio.cc:79
 hspecparrootfileio.cc:80
 hspecparrootfileio.cc:81
 hspecparrootfileio.cc:82
 hspecparrootfileio.cc:83
 hspecparrootfileio.cc:84
 hspecparrootfileio.cc:85
 hspecparrootfileio.cc:86
 hspecparrootfileio.cc:87
 hspecparrootfileio.cc:88
 hspecparrootfileio.cc:89