#pragma implementation
using namespace std;
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include "hshowerframe.h"
ClassImp(HShowerFrameCorner)
ClassImp(HShowerFrame)
ClassImp(HShowerFrameTab)
HShowerFrameCorner::HShowerFrameCorner() {
fXcor = 0.0;
fYcor = 0.0;
nFlagArea = 0;
}
HShowerFrame::HShowerFrame() {
reset();
}
HShowerFrame::~HShowerFrame() {
reset();
}
void HShowerFrame::reset()
{
nCornerNr = 0;
m_nModuleID = -1;
m_FrameArr.Delete();
}
Bool_t HShowerFrame::initAscii(HParHadAsciiFileIo* pHadAsciiFile) {
Bool_t status = kTRUE;
if (!pHadAsciiFile)
return kFALSE;
Char_t buf[80];
try {
sprintf(buf, "Shower Module %d - Frame Coordinates", m_nModuleID);
printf("%s initializating ...", buf);
HAsciiKey* pHAscii = pHadAsciiFile->GetKeyAscii();
HAsciiKey &mydata = *pHAscii;
mydata.SetActiveSection(buf);
HShowerFrameCorner *pFC;
Int_t cornerNr = mydata.ReadInt("Corners");
for (Int_t i = 0; i < cornerNr; i++) {
pFC = new HShowerFrameCorner;
pFC->setX(mydata.ReadFloat("Corners Coordinates",i*3));
pFC->setY(mydata.ReadFloat("Corners Coordinates",i*3+1));
pFC->setFlagArea((int)mydata.ReadFloat("Corners Coordinates",i*3+2));
addCorner(pFC);
}
printf("\tdone\n");
}
catch (Bool_t ret) {
status = ret;
}
return status;
}
Bool_t HShowerFrame::writeAscii(HParHadAsciiFileIo* pHadAsciiFile) {
Bool_t status = kTRUE;
if (!pHadAsciiFile)
return kFALSE;
Char_t buf[80];
try {
HAsciiKey* pHAscii = pHadAsciiFile->GetKeyAscii();
HAsciiKey &mydata = *pHAscii;
sprintf(buf, "Shower Module %d - Frame Coordinates", m_nModuleID);
mydata.WriteSection(buf);
mydata.WriteInt("Corners",getCornerNr());
mydata.WriteKeyword("Corners Coordinates*");
for (Int_t i = 0; i < getCornerNr(); i++) {
mydata.WriteFloat(getCorner(i)->getX());
mydata.WriteFloat(getCorner(i)->getY());
mydata.WriteFloat(getCorner(i)->getFlagArea());
}
}
catch (Bool_t ret) {
status = ret;
}
return status;
}
HShowerFrameCorner* HShowerFrame::getCorner(Int_t n)
{
if ((n < 0) || (n >= nCornerNr))
return NULL;
return (HShowerFrameCorner*)m_FrameArr.At(n);
}
Int_t HShowerFrame::setCorner(HShowerFrameCorner* pCorner, Int_t n)
{
if ((n < 0) || (n >= nCornerNr))
return 0;
delete m_FrameArr.At(n);
m_FrameArr.AddAt(pCorner, n);
return 1;
}
Int_t HShowerFrame::addCorner(HShowerFrameCorner* pCorner)
{
m_FrameArr.Add(pCorner);
return nCornerNr++;
}
Int_t HShowerFrame::isOut(Float_t x, Float_t y) {
Float_t a,b;
Int_t nCornerNr = getCornerNr();
if (nCornerNr<=2) {
exit(1);
}
#ifdef RICHDIGI_DEBUG3
cout << "RICHDIGI: HShowerFrame _isOut_ is now calculated \n";
#endif
Float_t X0, X1, Y0, Y1;
Int_t nFlag;
for (Int_t i=0; i < nCornerNr - 1; i++) {
X0 = getCorner(i)->getX();
X1 = getCorner(i + 1)->getX();
Y0 = getCorner(i)->getY();
Y1 = getCorner(i + 1)->getY();
nFlag = getCorner(i)->getFlagArea();
if (X0 == X1) {
if (nFlag == 0 && x > X0) return 1;
else if (nFlag == 1 && x < X0) return 1;
}
else if (Y0 == Y1) {
b = (X1 * Y0 - X0 * Y1)/(X1 - X0);
if (nFlag == 0 && y > Y0) return 1;
else if (nFlag == 1 && y < Y0) return 1;
}
else {
a = (Y1 - Y0)/(X1 - X0);
b = (X1*Y0 - X0*Y1)/(X1 - X0);
if (a<0 &&
((nFlag == 0 && y>(a*x+b)) ||
(nFlag == 1 && y<(a*x+b)))) return 1;
else if (a>0 &&
((nFlag==0 && y<(a*x+b)) ||
(nFlag==1 && y>(a*x+b)))) return 1;
}
}
return 0;
}
HShowerFrameTab::HShowerFrameTab()
{
phFrame = NULL;
nrFrames = 0;
}
HShowerFrameTab::~HShowerFrameTab()
{
deleteFrames();
}
void HShowerFrameTab::deleteFrames()
{
if (phFrame)
delete[] phFrame;
phFrame = NULL;
nrFrames = 0;
}
Bool_t HShowerFrameTab::init() {
createFrames(1);
HShowerFrame *phFrame = getFrame(0);
phFrame->initAscii(NULL);
return kTRUE;
}
void HShowerFrameTab::createFrames(Int_t n)
{
deleteFrames();
nrFrames = n;
phFrame = new HShowerFrame[nrFrames];
}
Int_t HShowerFrameTab::getNFrames() {
return nrFrames;
}
HShowerFrame* HShowerFrameTab::getFrame(Int_t nFrame)
{
if (nFrame < 0 || nFrame >= nrFrames)
return NULL;
return &phFrame[nFrame];
}
Int_t HShowerFrameTab::isOut(Int_t nFrame, Float_t x, Float_t y)
{
if (nFrame < 0 || nFrame >= nrFrames)
return 0;
return phFrame[nFrame].isOut(x,y);
}
Last change: Sat May 22 13:13:28 2010
Last generated: 2010-05-22 13:13
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.