ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : JAM
//*-- Revised : Joern Adamczewski-Musch <j.adamczewski@gsi.de> 2017
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRich700ThresholdPar
//    Treestyle parameter container with trb3 time thresholds for rich700
//    Defined after example of hrichcalpar JAM Nov2017
//
//////////////////////////////////////////////////////////////////////////////

#include "hdetpario.h"
#include "hpario.h"
#include "hrich700thresholdpar.h"
//#include "hrich700pixelthreshold.h"
#include "richdef.h"

#include <fstream>

using namespace std;

ClassImp(HRich700ThresholdPar)

    HRich700ThresholdPar::HRich700ThresholdPar(const Char_t* name,
					       const Char_t* title, const Char_t* context) : HParSet(name, title, context)
{
    strcpy(detName, "Rich");

    fLoc.setNIndex(2);
    fParamsTable.set(2, RICH700_MAX_PMT+1, RICH700_MAX_PMTPIXELS+1);
    fParamsTable.setCellClassName("HRich700PixelThreshold");
    fParamsTable.makeObjTable();

    clear();

    status = kFALSE;
    resetInputVersions();

}

HRich700ThresholdPar::~HRich700ThresholdPar()
{
    fParamsTable.deleteTab();
}

void HRich700ThresholdPar::clear() {
    // initialize all pixels to 0, flag to -1

    // NOTE: first real pmt and pixel object index is 1
    // we initialize slots for 0 indices anyway to avoid root streamer trouble...
    HRich700PixelThreshold* pCell = NULL;
    for (Int_t pmt = 0; pmt <= RICH700_MAX_PMT; ++pmt) {
	fLoc[0] = pmt;
	for (Int_t pixel = 0; pixel <= RICH700_MAX_PMTPIXELS; ++pixel) {
	    fLoc[1] = pixel;
	    pCell = static_cast<HRich700PixelThreshold*>(fParamsTable.getSlot(
									      fLoc));
	    if (NULL != pCell) {
		pCell = new (pCell) HRich700PixelThreshold;
		pCell->reset();
		pCell->setPMT(pmt);
		pCell->setPixel(pixel);
	    } else {
		Error("HRich700ThresholdPar", "Slot not found:  %i %i ",
		      fLoc[0], fLoc[1]);
	    }
	} //pix
    } //pmt

}

Bool_t HRich700ThresholdPar::init(HParIo* inp, Int_t* set)
{
    // Initializes the container from an input

    HDetParIo* input = inp->getDetParIo("HRichParIo");
    if (NULL != input) {
	Bool_t returnValue = input->init(this, set);
#if DEBUG_LEVEL > 3
	printParams();
#endif
	return returnValue;
    }
    return kFALSE;
}

Int_t HRich700ThresholdPar::write(HParIo* output)
{
    // Writes the container to an output

    HDetParIo* out = output->getDetParIo("HRichParIo");
    if (NULL != out) {
	return out->write(this);
    }
    return -1;
}

Bool_t HRich700ThresholdPar::readline(const Char_t * buf)
{
    // Decodes one line read from ASCII file I/O and fills the pixels
    Bool_t rc = kFALSE;
    Int_t pmt = 0;
    Int_t pix = 0;
    Double_t t_min = 0.0;
    Double_t t_max = 0.0;
    Double_t tot_min = 0.0;
    Double_t tot_max = 0.0;
    Int_t flag = 0;
    Int_t n = sscanf(buf, "%i %i %lf %lf %lf %lf %i", &pmt, &pix, &t_min, &t_max,
		     &tot_min, &tot_max, &flag);
    // some debug:
    //	printf("HRich700ThresholdPar::readline() sees %d %d %e %e %e %e %d\n",
    //			pmt, pix, t_min, t_max, tot_min, tot_max, flag);

    if (7 == n) {
	rc = setPixelThreshold(pmt, pix, t_min, t_max, tot_min, tot_max, flag);
    } else {
	if (n < 7)
	    Error("readline", "Not enough values in line %s\n", buf);
	else
	    Error("readline", "Too many values in line %s\n", buf);
    }
    return rc;
}

void HRich700ThresholdPar::write(fstream& fout)
{
    // Writes the Rich Calibration Parameters to an ASCII file.

    HRich700PixelThreshold* pCell = NULL;
    for (Int_t pmt = 1; pmt <= RICH700_MAX_PMT; ++pmt) {
	fLoc[0] = pmt;
	for (Int_t pixel = 1; pixel <= RICH700_MAX_PMTPIXELS; ++pixel) {
	    fLoc[1] = pixel;
	    pCell = static_cast<HRich700PixelThreshold*>(fParamsTable.getSlot(
									      fLoc));
	    if (NULL != pCell) {
		if (-1 != pCell->getFlag()) {
		    fout.width(4); // pmt
		    fout << left << pCell->getPMT();
		    fout.width(4); // pix
		    fout << left << pCell->getPixel();
		    fout.width(10); // tmin
		    fout << left << pCell->getT_Min();
		    fout.width(10); // tmax
		    fout << left << pCell->getT_Max();
		    fout.width(10); // totmin
		    fout << left << pCell->getTot_Min();
		    fout.width(10); // totmax
		    fout << left << pCell->getTot_Max();
		    fout.width(4); // flag
		    fout << left << pCell->getFlag();
		    fout << endl;
		} // flag -1, is non initialized slot

	    } else {
		Error("HRich700ThresholdPar::write ", "Slot not found:  %i %i ",
		      fLoc[0], fLoc[1]);
	    }
	} //pix
    } //pmt

}

Bool_t HRich700ThresholdPar::setPixelThreshold(Int_t pmt, Int_t pix,
					       Double_t tmin, Double_t tmax, Double_t totmin, Double_t totmax,
					       Short_t flag)
{
    // IMPORTANT NOTE: first used object index in table is 1
    if ((pmt <= 0) || (pmt > RICH700_MAX_PMT) || (pix <= 0)
	|| (pix > RICH700_MAX_PMTPIXELS)) {
	Error("setPixelThreshold", "Wrong pixel coordinates");
	return kFALSE;
    }

    HRich700PixelThreshold* pCell = NULL;

    fLoc[0] = pmt;
    fLoc[1] = pix;

    pCell = static_cast<HRich700PixelThreshold*>(fParamsTable.getSlot(fLoc));
    if (NULL != pCell) {
	pCell->setParams(tmin, tmax, totmin, totmax, flag);
    } else {
	Error("HRich700ThresholdPar::setPixelThreshold", "Cell not found.");
	return kFALSE;
    }
    return kTRUE;
}

void HRich700ThresholdPar::printParams()
{
    // Prints the lookup table

    HRich700PixelThreshold* pCell = NULL;
    for (Int_t pmt = 1; pmt <= RICH700_MAX_PMT; ++pmt) {
	fLoc[0] = pmt;
	for (Int_t pixel = 1; pixel <= RICH700_MAX_PMTPIXELS; ++pixel) {
	    fLoc[1] = pixel;
	    pCell = static_cast<HRich700PixelThreshold*>(fParamsTable.getSlot(
									      fLoc));
	    if (NULL != pCell) {
		if (-1 != pCell->getFlag()) {
		    std::cout.width(4); // pmt
		    std::cout << left << pCell->getPMT(); // real pmt object index, not array index!
		    std::cout.width(4); // pix
		    std::cout << left << pCell->getPixel(); // real pmt pixel index, not array index!
		    std::cout.width(10); // tmin
		    std::cout << left << pCell->getT_Min();
		    std::cout.width(10); // tmax
		    std::cout << left << pCell->getT_Max();
		    std::cout.width(10); // totmin
		    std::cout << left << pCell->getTot_Min();
		    std::cout.width(10); // totmax
		    std::cout << left << pCell->getTot_Max();
		    std::cout.width(4); // flag
		    std::cout << left << pCell->getFlag();
		    std::cout << endl;
		} // flag -1, is non initialized slot

	    } else {
		Error("HRich700ThresholdPar::write ", "Slot not found:  %i %i ",
		      fLoc[0], fLoc[1]);
	    }
	} //pix
    } //pmt

    cout
	<< "#########################################################################"
	<< endl;

}

void HRich700ThresholdPar::putAsciiHeader(TString & header) {
    // puts the ASCII header to the string used in HDetParAsciiFileIo
    header =
	"# Rich700 trb3 unpacker time threshold parameters\n"
	"# Format:\n"
	"# PMT \tPixel \tT_min (ns) \tT_max (ns) \tTot_min (ns) \tTot_max (ns) \tFlag (0=OK, 1=suppress pixel)\n";
}

HRich700PixelThreshold* HRich700ThresholdPar::getSlot(HLocation &loc) {
    return static_cast<HRich700PixelThreshold*>(fParamsTable.getSlot(loc));
}

HRich700PixelThreshold* HRich700ThresholdPar::getObject(HLocation &loc) {
    return static_cast<HRich700PixelThreshold*>(fParamsTable.getObject(loc));
}

 hrich700thresholdpar.cc:1
 hrich700thresholdpar.cc:2
 hrich700thresholdpar.cc:3
 hrich700thresholdpar.cc:4
 hrich700thresholdpar.cc:5
 hrich700thresholdpar.cc:6
 hrich700thresholdpar.cc:7
 hrich700thresholdpar.cc:8
 hrich700thresholdpar.cc:9
 hrich700thresholdpar.cc:10
 hrich700thresholdpar.cc:11
 hrich700thresholdpar.cc:12
 hrich700thresholdpar.cc:13
 hrich700thresholdpar.cc:14
 hrich700thresholdpar.cc:15
 hrich700thresholdpar.cc:16
 hrich700thresholdpar.cc:17
 hrich700thresholdpar.cc:18
 hrich700thresholdpar.cc:19
 hrich700thresholdpar.cc:20
 hrich700thresholdpar.cc:21
 hrich700thresholdpar.cc:22
 hrich700thresholdpar.cc:23
 hrich700thresholdpar.cc:24
 hrich700thresholdpar.cc:25
 hrich700thresholdpar.cc:26
 hrich700thresholdpar.cc:27
 hrich700thresholdpar.cc:28
 hrich700thresholdpar.cc:29
 hrich700thresholdpar.cc:30
 hrich700thresholdpar.cc:31
 hrich700thresholdpar.cc:32
 hrich700thresholdpar.cc:33
 hrich700thresholdpar.cc:34
 hrich700thresholdpar.cc:35
 hrich700thresholdpar.cc:36
 hrich700thresholdpar.cc:37
 hrich700thresholdpar.cc:38
 hrich700thresholdpar.cc:39
 hrich700thresholdpar.cc:40
 hrich700thresholdpar.cc:41
 hrich700thresholdpar.cc:42
 hrich700thresholdpar.cc:43
 hrich700thresholdpar.cc:44
 hrich700thresholdpar.cc:45
 hrich700thresholdpar.cc:46
 hrich700thresholdpar.cc:47
 hrich700thresholdpar.cc:48
 hrich700thresholdpar.cc:49
 hrich700thresholdpar.cc:50
 hrich700thresholdpar.cc:51
 hrich700thresholdpar.cc:52
 hrich700thresholdpar.cc:53
 hrich700thresholdpar.cc:54
 hrich700thresholdpar.cc:55
 hrich700thresholdpar.cc:56
 hrich700thresholdpar.cc:57
 hrich700thresholdpar.cc:58
 hrich700thresholdpar.cc:59
 hrich700thresholdpar.cc:60
 hrich700thresholdpar.cc:61
 hrich700thresholdpar.cc:62
 hrich700thresholdpar.cc:63
 hrich700thresholdpar.cc:64
 hrich700thresholdpar.cc:65
 hrich700thresholdpar.cc:66
 hrich700thresholdpar.cc:67
 hrich700thresholdpar.cc:68
 hrich700thresholdpar.cc:69
 hrich700thresholdpar.cc:70
 hrich700thresholdpar.cc:71
 hrich700thresholdpar.cc:72
 hrich700thresholdpar.cc:73
 hrich700thresholdpar.cc:74
 hrich700thresholdpar.cc:75
 hrich700thresholdpar.cc:76
 hrich700thresholdpar.cc:77
 hrich700thresholdpar.cc:78
 hrich700thresholdpar.cc:79
 hrich700thresholdpar.cc:80
 hrich700thresholdpar.cc:81
 hrich700thresholdpar.cc:82
 hrich700thresholdpar.cc:83
 hrich700thresholdpar.cc:84
 hrich700thresholdpar.cc:85
 hrich700thresholdpar.cc:86
 hrich700thresholdpar.cc:87
 hrich700thresholdpar.cc:88
 hrich700thresholdpar.cc:89
 hrich700thresholdpar.cc:90
 hrich700thresholdpar.cc:91
 hrich700thresholdpar.cc:92
 hrich700thresholdpar.cc:93
 hrich700thresholdpar.cc:94
 hrich700thresholdpar.cc:95
 hrich700thresholdpar.cc:96
 hrich700thresholdpar.cc:97
 hrich700thresholdpar.cc:98
 hrich700thresholdpar.cc:99
 hrich700thresholdpar.cc:100
 hrich700thresholdpar.cc:101
 hrich700thresholdpar.cc:102
 hrich700thresholdpar.cc:103
 hrich700thresholdpar.cc:104
 hrich700thresholdpar.cc:105
 hrich700thresholdpar.cc:106
 hrich700thresholdpar.cc:107
 hrich700thresholdpar.cc:108
 hrich700thresholdpar.cc:109
 hrich700thresholdpar.cc:110
 hrich700thresholdpar.cc:111
 hrich700thresholdpar.cc:112
 hrich700thresholdpar.cc:113
 hrich700thresholdpar.cc:114
 hrich700thresholdpar.cc:115
 hrich700thresholdpar.cc:116
 hrich700thresholdpar.cc:117
 hrich700thresholdpar.cc:118
 hrich700thresholdpar.cc:119
 hrich700thresholdpar.cc:120
 hrich700thresholdpar.cc:121
 hrich700thresholdpar.cc:122
 hrich700thresholdpar.cc:123
 hrich700thresholdpar.cc:124
 hrich700thresholdpar.cc:125
 hrich700thresholdpar.cc:126
 hrich700thresholdpar.cc:127
 hrich700thresholdpar.cc:128
 hrich700thresholdpar.cc:129
 hrich700thresholdpar.cc:130
 hrich700thresholdpar.cc:131
 hrich700thresholdpar.cc:132
 hrich700thresholdpar.cc:133
 hrich700thresholdpar.cc:134
 hrich700thresholdpar.cc:135
 hrich700thresholdpar.cc:136
 hrich700thresholdpar.cc:137
 hrich700thresholdpar.cc:138
 hrich700thresholdpar.cc:139
 hrich700thresholdpar.cc:140
 hrich700thresholdpar.cc:141
 hrich700thresholdpar.cc:142
 hrich700thresholdpar.cc:143
 hrich700thresholdpar.cc:144
 hrich700thresholdpar.cc:145
 hrich700thresholdpar.cc:146
 hrich700thresholdpar.cc:147
 hrich700thresholdpar.cc:148
 hrich700thresholdpar.cc:149
 hrich700thresholdpar.cc:150
 hrich700thresholdpar.cc:151
 hrich700thresholdpar.cc:152
 hrich700thresholdpar.cc:153
 hrich700thresholdpar.cc:154
 hrich700thresholdpar.cc:155
 hrich700thresholdpar.cc:156
 hrich700thresholdpar.cc:157
 hrich700thresholdpar.cc:158
 hrich700thresholdpar.cc:159
 hrich700thresholdpar.cc:160
 hrich700thresholdpar.cc:161
 hrich700thresholdpar.cc:162
 hrich700thresholdpar.cc:163
 hrich700thresholdpar.cc:164
 hrich700thresholdpar.cc:165
 hrich700thresholdpar.cc:166
 hrich700thresholdpar.cc:167
 hrich700thresholdpar.cc:168
 hrich700thresholdpar.cc:169
 hrich700thresholdpar.cc:170
 hrich700thresholdpar.cc:171
 hrich700thresholdpar.cc:172
 hrich700thresholdpar.cc:173
 hrich700thresholdpar.cc:174
 hrich700thresholdpar.cc:175
 hrich700thresholdpar.cc:176
 hrich700thresholdpar.cc:177
 hrich700thresholdpar.cc:178
 hrich700thresholdpar.cc:179
 hrich700thresholdpar.cc:180
 hrich700thresholdpar.cc:181
 hrich700thresholdpar.cc:182
 hrich700thresholdpar.cc:183
 hrich700thresholdpar.cc:184
 hrich700thresholdpar.cc:185
 hrich700thresholdpar.cc:186
 hrich700thresholdpar.cc:187
 hrich700thresholdpar.cc:188
 hrich700thresholdpar.cc:189
 hrich700thresholdpar.cc:190
 hrich700thresholdpar.cc:191
 hrich700thresholdpar.cc:192
 hrich700thresholdpar.cc:193
 hrich700thresholdpar.cc:194
 hrich700thresholdpar.cc:195
 hrich700thresholdpar.cc:196
 hrich700thresholdpar.cc:197
 hrich700thresholdpar.cc:198
 hrich700thresholdpar.cc:199
 hrich700thresholdpar.cc:200
 hrich700thresholdpar.cc:201
 hrich700thresholdpar.cc:202
 hrich700thresholdpar.cc:203
 hrich700thresholdpar.cc:204
 hrich700thresholdpar.cc:205
 hrich700thresholdpar.cc:206
 hrich700thresholdpar.cc:207
 hrich700thresholdpar.cc:208
 hrich700thresholdpar.cc:209
 hrich700thresholdpar.cc:210
 hrich700thresholdpar.cc:211
 hrich700thresholdpar.cc:212
 hrich700thresholdpar.cc:213
 hrich700thresholdpar.cc:214
 hrich700thresholdpar.cc:215
 hrich700thresholdpar.cc:216
 hrich700thresholdpar.cc:217
 hrich700thresholdpar.cc:218
 hrich700thresholdpar.cc:219
 hrich700thresholdpar.cc:220
 hrich700thresholdpar.cc:221
 hrich700thresholdpar.cc:222
 hrich700thresholdpar.cc:223
 hrich700thresholdpar.cc:224
 hrich700thresholdpar.cc:225
 hrich700thresholdpar.cc:226
 hrich700thresholdpar.cc:227
 hrich700thresholdpar.cc:228
 hrich700thresholdpar.cc:229
 hrich700thresholdpar.cc:230
 hrich700thresholdpar.cc:231
 hrich700thresholdpar.cc:232
 hrich700thresholdpar.cc:233
 hrich700thresholdpar.cc:234
 hrich700thresholdpar.cc:235
 hrich700thresholdpar.cc:236
 hrich700thresholdpar.cc:237
 hrich700thresholdpar.cc:238
 hrich700thresholdpar.cc:239
 hrich700thresholdpar.cc:240
 hrich700thresholdpar.cc:241
 hrich700thresholdpar.cc:242
 hrich700thresholdpar.cc:243
 hrich700thresholdpar.cc:244
 hrich700thresholdpar.cc:245
 hrich700thresholdpar.cc:246
 hrich700thresholdpar.cc:247
 hrich700thresholdpar.cc:248
 hrich700thresholdpar.cc:249
 hrich700thresholdpar.cc:250
 hrich700thresholdpar.cc:251
 hrich700thresholdpar.cc:252
 hrich700thresholdpar.cc:253
 hrich700thresholdpar.cc:254