#pragma implementation
using namespace std;
#include "hades.h"
#include "hruntimedb.h"
#include "hpario.h"
#include "hparrootfileio.h"
#include "hdetpario.h"
#include "hparasciifileio.h"
#include "hparhadasciifileio.h"
#include "hrichparset.h"
#include "hrichparhadasciifileio.h"
#include "hrichparasciifileio.h"
#include "hrichparrootfileio.h"
#include "hrichgeometrypar.h"
#include "hevent.h"
#include "hrichdetector.h"
#include "hcategory.h"
#include "hmatrixcategory.h"
#include "hlinearcategory.h"
#include "richdef.h"
#include "hrichcalibrater.h"
#include "hrichhit.h"
#include "hrichpid.h"
#include "hrichgeantreader.h"
//#include "hrichhitfinder.h"
#include "hrichanalysis.h"
#include "hrichdigitizer.h"
#include "hrichtrack.h"
#include "hrichlocalmaxheader.h"
#include "htaskset.h"
#include "hrichdirclus.h"
#include "TClass.h"
#include <iostream>
#include <iomanip>
HRichDetector::HRichDetector(void) : HDetector("Rich","The RICH detector") {
maxModules = 1;
// maxColumns = 92;
// maxRows = 90;
maxColumns = 96;
maxRows = 96;
// maxColumns = 64;
// maxRows = 64;
modules = new TArrayI(getMaxSectors());
// createTaskSet("RichTaskSet", "Rich list of tasks");
}
HRichDetector::~HRichDetector(void) {
}
HTask *HRichDetector::buildTask(Text_t *name, Option_t *opt) {
if (name && strcmp(name, "default")==0)
name = NULL;
HTaskSet *pDetTasks = new HTaskSet();
if (!name) {//default list of tasks
HRichCalibrater *cal = new HRichCalibrater("RichCal","rich.cal");
//HRichDigitizer *dig = new HRichDigitizer("RichDigitisation","Rich digitisation");
HRichAnalysis *hit=new HRichAnalysis("RichAnalysis","Rich hit finder");
pDetTasks->connect(cal);
//pDetTasks->connect(dig);
pDetTasks->connect(hit, "RichCal");
//pDetTasks->connect(hit, "RichDigitisation");
pDetTasks->connect((HTask*)NULL, "RichAnalysis");
return pDetTasks;
}
return HDetector::buildTask(name, opt);
}
HCategory *HRichDetector::buildLinearCat(Text_t *classname) {
HLinearCategory *category=NULL;
category = new HLinearCategory(classname);
return category;
}
HCategory *HRichDetector::buildMatrixCat(Text_t *classname,Float_t fillRate) {
Int_t maxSector=0;
Int_t i,sizes[3];
HMatrixCategory *category=NULL;
for (i = 0; i < 6; i++) if (getModule(i,0) > 0) maxSector++;
sizes[0] = maxSector;
sizes[1] = sizes[2] = 96;
// sizes[1] = sizes[2] = 64;
//printf("**************** Max sectors = %dn", maxSector);
category = new HMatrixCategory(classname,3,sizes,fillRate);
return category;
}
HCategory* HRichDetector::buildSimMatrixCat(Text_t *classname,Float_t fillRate,Int_t size) {
HMatrixCategory *category = NULL;
Int_t ini[2];
ini[0] = 6;
ini[1] = size;
category = new HMatrixCategory(classname, 2, ini, fillRate);
return category;
}
int HRichDetector::getSectors() {
int sect;
getMaxValues(§);
return sect;
}
void HRichDetector::getMaxValues(int* pMaxSector) {
// Int_t mod,sec=0;
Int_t i;
Int_t maxSector=0;
/*
for (i=0;i<modules->fN;i++) {
mod=modules->At(i)-1;
if (mod>-1) {
sec=mod;
maxSector=((sec)>maxSector)?(sec):maxSector;
}
}
*/
//for (i = 0; i < 6; i++) if (getModule(i,0) > 0) maxSector++;
for (i=0;i<6;i++) if (getModule(i,0)>0) maxSector=i+1;
*pMaxSector = maxSector;
}
HCategory *HRichDetector::buildCategory(Cat_t cat) {
switch (cat) {
case catRichRaw: return buildMatrixCat("HRichRaw",1);
case catRichCal: return buildMatrixCat("HRichCal",1);
case catRichCalTemp: return buildMatrixCat("HRichCalMax",1);
case catRichHit: return buildLinearCat("HRichHit");
case catRichHitSim: return buildLinearCat("HRichHitSim");
case catRichPID: return buildLinearCat("HRichPID");
case catRichTrack: return buildLinearCat("HRichTrack");
case catRichPhotonHit: return buildLinearCat("HRichPhotonHit");//et
case catRichPhotonHitHeader: return buildLinearCat("HRichPhotonHitHeader");//et
case catRichLocalMaxHeader :return buildLinearCat("HRichLocalMaxHeader");
case catRichHitFit: return buildLinearCat("HRichHitFit");//et
case catMatchHit: return buildLinearCat("HHitMatch");//et
case catDiMatchHit: return buildLinearCat("HDiHitMatch");//et
case catMatchHitHeader: return buildLinearCat("HHitMatchHeader");//et
case catRichDirClus: return buildMatrixCat("HRichDirClus",0.5);
// case catHardRichHit: return buildLinearCat("HRichHitIPU");//et
// case catRichGeantRaw: return buildLinearCat("HRichGeantCherHit");
// case catRichGeantRaw+1: return buildLinearCat("HRichGeantDirHit");
// case catRichGeantWire: return buildLinearCat("HRichGeantWire");
case catRichLocal: return buildMatrixCat("HRichLocal",1);//
case catRichPhotClus : return buildLinearCat("HPhotonCluster");
case catRichHitHdr: return buildLinearCat("HRichHitHeader");
case catRichGeantRaw: return buildSimMatrixCat("HGeantRichPhoton",1,200);
case catRichGeantRaw+1: return buildSimMatrixCat("HGeantRichDirect",1,200);
case catRichGeantRaw+2: return buildSimMatrixCat("HGeantRichDirect",1,50);
default: return NULL;
}
}
//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////
// initialization according to Ilse's scheme
void HRichDetector::activateParIo(HParIo* io) {
// activates the input/output class for the parameters
// needed by the Rich
if (strcmp(io->IsA()->GetName(),"HOraIo")==0) {
io->setDetParIo("HRichParIo");
return;
}
if (strcmp(io->IsA()->GetName(),"HParRootFileIo")==0) {
HRichParRootFileIo* p=new HRichParRootFileIo(((HParRootFileIo*)io)
->getParRootFile());
io->setDetParIo(p);
}
if (strcmp(io->IsA()->GetName(),"HParAsciiFileIo")==0) {
HRichParAsciiFileIo* p=new HRichParAsciiFileIo(((HParAsciiFileIo*)io)->getFile());
io->setDetParIo(p);
}
if (strcmp(io->IsA()->GetName(),"HParHadAsciiFileIo")==0) {
HRichParHadAsciiFileIo* p=new HRichParHadAsciiFileIo(((HParHadAsciiFileIo*)io)->getHadAscii());
io->setDetParIo(p);
}
}
Bool_t HRichDetector::write(HParIo* output) {
// writes the Rich setup to output
HDetParIo* out=output->getDetParIo("HRichParIo");
if (out) return out->write(this);
return kFALSE;
}
//////////////////////////////////////////////////////////
ClassImp(HRichDetector)
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.