using namespace std;
#include <iostream>
#include <iomanip>
#include "hades.h"
#include "hparhadasciifileio.h"
#include "hspectrometer.h"
#include "hrichparset.h"
#include "hrichdetector.h"
#include "hrichmappingpar.h"
ClassImp(HRichMappingPar)
HRichMappingPar::HRichMappingPar(const Char_t* name,const Char_t* title,
const Char_t* context)
: HRichParSet(name,title,context) {
}
HRichMappingPar::~HRichMappingPar()
{
}
Bool_t HRichMappingPar::initAscii(HParHadAsciiFileIo* pHadAsciiFile) {
Int_t fCols2, fRows2, fRCs2, fPorts2, fModules2, fChannels2;
using namespace HadAsciiAuxiliaryFunctions;
if (!pHadAsciiFile) return kFALSE;
Bool_t status = kTRUE;
try {
HAsciiRaw &mydata = *pHadAsciiFile->GetRawAscii();
mydata.SetActiveSection("Rich Mapping Parameters Setup");
mydata.SetReadKeyTypes('i','i','i','i','i','i','i','i');
mydata.ReadRawLine(0,&fPadsNr,&fRows,&fCols,&fRCs,&fPorts,&fModules,&fChannels,&fUnconnCh);
fAddress1 = (fRCs-1)*10000 + (fPorts-1)*1000 + (fModules-1)*100 + fChannels;
fAddress2 = fCols*100 + fRows;
uiplog = new TVector(fAddress1);
padsxy = new TVector(fAddress1);
padsx = new TVector(fAddress1);
padsy = new TVector(fAddress1);
xyuip = new TVector(fAddress2);
xyuiplog = new TVector(fAddress2);
uncuip = new TVector(fAddress1);
for (i=0;i<fAddress1;i++){
(*uiplog)(i) = 0;
(*padsxy)(i) = 0;
(*padsx)(i) = 0;
(*padsy)(i) = 0;
(*uncuip)(i) = 0;
}
for (i=0;i<fAddress2;i++){
(*xyuip)(i) = 0;
(*xyuiplog)(i) = 0;
}
mydata.SetActiveSection("Rich Mapping Parameters");
mydata.SetReadKeyTypes('i','i','i','i','i','i');
Int_t line = 0;
for(i = 0; i < fPadsNr; i++) {
mydata.ReadRawLine(line, &fCols2, &fRows2, &fRCs2,&fPorts2,&fModules2,&fChannels2);
fAddress1 = fRCs2*10000 + fPorts2*1000 + fModules2*100 + fChannels2;
fAddress2 = fCols2*100 + fRows2;
(*uiplog)(fAddress1) = 1;
(*padsxy)(fAddress1) = fCols2*100 + fRows2;
(*padsx)(fAddress1) = fCols2;
(*padsy)(fAddress1) = fRows2;
(*xyuip)(fAddress2) = fAddress1;
(*xyuiplog)(fAddress2) = 1;
line++;
}
mydata.SetActiveSection("Rich Unconnected Channels");
mydata.SetReadKeyTypes('i','i','i','i');
line = 0;
for (i=0; i<fUnconnCh; i++){
mydata.ReadRawLine(line, &fRCs2,&fPorts2,&fModules2,&fChannels2);
fAddress1 = fRCs2*10000 + fPorts2*1000 + fModules2*100 + fChannels2;
(*uncuip)(fAddress1) = 1;
line++;
}
}
catch (Bool_t ret) {
status = ret;
}
catch (...) {
status = kFALSE;
ErrorMsg(2,"HRichMappingPar::initAscii",1,"Unidentified exception catched.");
}
if (status)
ErrorMsg(0,"HRichMappingPar::initAscii",
1,"Container \'RichMappingPar\' has been read from ASCII file.");
return status;
}
Bool_t HRichMappingPar::writeAscii(HParHadAsciiFileIo* pHadAsciiFile) {
Int_t tmp, rc, port, mod, ch;
using namespace HadAsciiAuxiliaryFunctions;
if (!pHadAsciiFile) return kFALSE;
Bool_t status = kTRUE;
try {
HAsciiRaw &mydata = *pHadAsciiFile->GetRawAscii();
mydata.WriteSection("Rich Mapping Parameters Setup");
mydata.WriteKeywords(8, "MaxPads", "MaxRows", "MaxCols", "MaxRCs", "MaxPorts", "MaxModules", "MaxChannels", "UnconnCh");
mydata.SetSeparator('\t');
mydata.SetWriteKeyTypes('i', 'i', 'i','i', 'i', 'i','i','i');
mydata.WriteRawLine(fPadsNr,fRows,fCols,fRCs,fPorts,fModules,fChannels,fUnconnCh);
mydata.WriteSection("Rich Mapping Parameters");
mydata.WriteKeywords(6, "Col","Row","RC","Port","Module","Channel");
mydata.SetWriteKeyTypes('i','i','i','i','i','i');
fAddress1 = (fRCs-1)*10000 + (fPorts-1)*1000 + (fModules-1)*100 + fChannels;
for(i = 0; i < fAddress1; i++)
if ( (*uiplog)(i)) {
rc = i/10000;
tmp = i % 10000;
port = tmp/1000;
tmp = tmp % 1000;
mod = tmp/100;
ch = tmp % 100;
mydata.WriteRawLine((Int_t)(*padsx)(i),(Int_t)(*padsy)(i),(Int_t) rc, (Int_t) port, (Int_t) mod, (Int_t) ch );
}
mydata.WriteSection("Rich Unconnected Channels");
mydata.WriteKeywords(4, "RC","Port","Module","Channel");
mydata.SetWriteKeyTypes('i','i','i','i');
for(i = 0; i < fAddress1; i++)
if ( (*uncuip)(i)) {
rc = i/10000;
tmp = i % 10000;
port = tmp/1000;
tmp = tmp % 1000;
mod = tmp/100;
ch = tmp % 100;
mydata.WriteRawLine(rc,port,mod,ch);
}
}
catch (Bool_t ret) {
status = ret;
}
catch (...) {
status = kFALSE;
ErrorMsg(2,"HRichMappingPar::writeAscii",1,"Unidentified exception catched.");
}
if (status)
ErrorMsg(0,"HRichMappingPar::writeAscii",
1,"Container \'RichMappingPar\' has been written to ASCII file.");
return status;
}
Int_t HRichMappingPar::getRC(Int_t x,Int_t y) {
return ((Int_t)(*xyuip)(x*100+y))/10000;
}
Int_t HRichMappingPar::getPort(Int_t x,Int_t y) {
return (((Int_t) (*xyuip)(x*100+y))%10000)/1000;
}
Int_t HRichMappingPar::getMod(Int_t x,Int_t y) {
return ((((Int_t) (*xyuip)(x*100+y))%10000)%1000)/100;
}
Int_t HRichMappingPar::getCh(Int_t x,Int_t y) {
return ((((Int_t) (*xyuip)(x*100+y))%10000)%1000)%100;
}
Int_t HRichMappingPar::isReadOut(Int_t x, Int_t y){
return (Int_t)(*xyuiplog)(x*100+y);
}
Int_t HRichMappingPar::isValidUpi(Int_t Address){
return (Int_t)(*uiplog)(Address);
}
Int_t HRichMappingPar::isUnConnCh(Int_t Address){
return (Int_t)(*uncuip)(Address);
}
Int_t HRichMappingPar::getCol(Int_t Address){
return (Int_t)(*padsx)(Address);
}
Int_t HRichMappingPar::getRow(Int_t Address){
return (Int_t)(*padsy)(Address);
}
Last change: Sat May 22 13:09:23 2010
Last generated: 2010-05-22 13:09
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.