using namespace std;
#include "hwalldetector.h"
#include "walldef.h"
#include "hcategory.h"
#include "hlinearcategory.h"
#include "hmatrixcategory.h"
#include "hwallcalibrater.h"
#include "hwallcalpar.h"
#include "hwallhitf.h"//FK
#include "hwallrefwinpar.h"
#include "hwallonehit.h"
#include "hwallonehitf.h"
#include "hades.h"
#include "hpario.h"
#include "hparrootfileio.h"
#include "hparasciifileio.h"
#include "hdetpario.h"
#include "hwallparrootfileio.h"
#include "hwallparasciifileio.h"
#include "TClass.h"
#include "TArrayI.h"
#include <iostream>
#include <iomanip>
ClassImp(HWallDetector)
HWallDetector::HWallDetector(void) : HDetector("Wall","The Forward Wall detector") {
maxSectors=-1;
maxModules=1;
maxComponents=302;
modules=new TArrayI(1);
}
HWallDetector::~HWallDetector(void) {
}
HCategory* HWallDetector::buildLinearCategory(const Text_t *classname,Float_t fillRate) {
HLinearCategory* category=new HLinearCategory(classname,(Int_t)(maxComponents*fillRate));
return category;
}
HCategory* HWallDetector::buildMatrixCategory(const Text_t *classname,Float_t fillRate) {
Int_t sizes[1];
sizes[0]=maxComponents;
HMatrixCategory* category=new HMatrixCategory(classname,1,sizes,fillRate);
return category;
}
HCategory* HWallDetector::buildCategory(Cat_t cat) {
switch (cat) {
case catWallRaw : return buildMatrixCategory("HWallRaw",0.5);
case catWallCal : return buildMatrixCategory("HWallCal",0.5);
case catWallOneHit : return buildMatrixCategory("HWallOneHit",0.5);
case catWallHit : return buildMatrixCategory("HWallHit",0.5);
default : return NULL;
}
}
void HWallDetector::activateParIo(HParIo* io) {
if (strcmp(io->IsA()->GetName(),"HParOraIo")==0) {
io->setDetParIo("HWallParIo");
return;
}
if (strcmp(io->IsA()->GetName(),"HParRootFileIo")==0) {
HWallParRootFileIo* p=new HWallParRootFileIo(((HParRootFileIo*)io)->getParRootFile());
io->setDetParIo(p);
}
if (strcmp(io->IsA()->GetName(),"HParAsciiFileIo")==0) {
HWallParAsciiFileIo* p=new HWallParAsciiFileIo(((HParAsciiFileIo*)io)->getFile());
io->setDetParIo(p);
}
}
Bool_t HWallDetector::write(HParIo* output) {
HDetParIo* out=output->getDetParIo("HWallParIo");
if (out) return out->write(this);
return kFALSE;
}
Int_t HWallDetector::getMaxModInSetup(void) {
Int_t maxMod=1;
for(Int_t i=0;i<maxModules;i++) {
if (modules->At(i)) maxMod=(i>maxMod)?i:maxMod;
}
return maxMod;
}