StDbUtilities/St_svtRDOstrippedC.cxx
00001
#include <assert.h>
00002
#include "TMath.h"
00003
#include "TDatime.h"
00004
#include "TString.h"
00005
#include "Stiostream.h"
00006
#include "St_svtRDOstrippedC.h"
00007 ClassImp(St_svtRDOstrippedC);
00008 St_svtRDOstrippedC *St_svtRDOstrippedC::fgsvtRDOstrippedC = 0;
00009
struct RDO_t {
00010 Char_t *name;
00011 Int_t ladNum, barNum;
00012 Char_t *rdo;
00013 Int_t ndet1, ndet2;
00014 };
00015
static const Int_t NRDOS = 72;
00016
static const RDO_t RDOS[NRDOS] = {
00017 {
"L01B1E", 1,1,
"E1",1,2},{
"L02B1E", 2,1,
"E2",1,2},{
"L03B1E", 3,1,
"E4",1,2},{
"L04B1E", 4,1,
"E5",1,2},{
"L05B1E", 5,1,
"E7",1,2},
00018 {
"L06B1E", 6,1,
"E8",1,2},{
"L07B1E", 7,1,
"E10",1,2},{
"L08B1E", 8,1,
"E11",1,2},
00019
00020 {
"L01B2E", 1,2,
"E3",1,3},{
"L02B2E", 2,2,
"E3",1,3},
00021 {
"L03B2E", 3,2,
"E3",1,3},{
"L04B2E", 4,2,
"E6",1,3},{
"L05B2E", 5,2,
"E6",1,3},{
"L06B2E", 6,2,
"E6",1,3},{
"L07B2E", 7,2,
"E9",1,3},
00022 {
"L08B2E", 8,2,
"E9",1,3},{
"L09B2E", 9,2,
"E9",1,3},{
"L10B2E",10,2,
"E12",1,3},{
"L11B2E",11,2,
"E12",1,3},{
"L12B2E",12,2,
"E12",1,3},
00023
00024 {
"L01B3E", 1,3,
"E1",1,3},{
"L02B3E", 2,3,
"E1",1,4},{
"L03B3E", 3,3,
"E2",1,3},{
"L04B3E", 4,3,
"E2",1,4},{
"L05B3E", 5,3,
"E4",1,3},
00025 {
"L06B3E", 6,3,
"E4",1,4},{
"L07B3E", 7,3,
"E5",1,3},{
"L08B3E", 8,3,
"E5",1,4},{
"L09B3E", 9,3,
"E7",1,3},{
"L10B3E",10,3,
"E7",1,4},
00026 {
"L11B3E",11,3,
"E8",1,3},{
"L12B3E",12,3,
"E8",1,4},{
"L13B3E",13,3,
"E10",1,3},{
"L14B3E",14,3,
"E10",1,4},{
"L15B3E",15,3,
"E11",1,3},
00027 {
"L16B3E",16,3,
"E11",1,4},
00028
00029 {
"L01B1W", 1,1,
"W1",3,4},{
"L02B1W", 2,1,
"W2",3,4},{
"L03B1W", 3,1,
"W4",3,4},{
"L04B1W", 4,1,
"W5",3,4},{
"L05B1W", 5,1,
"W7",3,4},
00030 {
"L06B1W", 6,1,
"W8",3,4},{
"L07B1W", 7,1,
"W10",3,4},{
"L08B1W", 8,1,
"W11",3,4},
00031
00032 {
"L01B2W", 1,2,
"W3",4,6},{
"L02B2W", 2,2,
"W3",4,6},
00033 {
"L03B2W", 3,2,
"W3",4,6},{
"L04B2W", 4,2,
"W6",4,6},{
"L05B2W", 5,2,
"W6",4,6},{
"L06B2W", 6,2,
"W6",4,6},{
"L07B2W", 7,2,
"W9",4,6},
00034 {
"L08B2W", 8,2,
"W9",4,6},{
"L09B2W", 9,2,
"W9",4,6},{
"L10B2W",10,2,
"W12",4,6},{
"L11B2W",11,2,
"W12",4,6},{
"L12B2W",12,2,
"W12",4,6},
00035
00036 {
"L01B3W", 1,3,
"W1",4,7},{
"L02B3W", 2,3,
"W1",5,7},{
"L03B3W", 3,3,
"W2",4,7},{
"L04B3W", 4,3,
"W2",5,7},{
"L05B3W", 5,3,
"W4",4,7},
00037 {
"L06B3W", 6,3,
"W4",5,7},{
"L07B3W", 7,3,
"W5",4,7},{
"L08B3W", 8,3,
"W5",5,7},{
"L09B3W", 9,3,
"W7",4,7},{
"L10B3W",10,3,
"W7",5,7},
00038 {
"L11B3W",11,3,
"W8",4,7},{
"L12B3W",12,3,
"W8",5,7},{
"L13B3W",13,3,
"W10",4,7},{
"L14B3W",14,3,
"W10",5,7},{
"L15B3W",15,3,
"W11",4,7},
00039 {
"L16B3W",16,3,
"W11",5,7}
00040 };
00041
static const Int_t NB = 3;
00042
static const Int_t NL = 16;
00043
static const Int_t NWmax = 7;
00044
static svtRDOstripped_st *pointers[3][16][7];
00045
static svtRDOstripped_st *DataOld = 0;
00046
static Int_t _debug = 0;
00047
00048 St_svtRDOstrippedC::St_svtRDOstrippedC (St_svtRDOstripped *table) : TChair(table), fDate(0), fDelay(0), fSwitchedOff(0) {
00049
if (fgsvtRDOstrippedC)
delete fgsvtRDOstrippedC; fgsvtRDOstrippedC =
this;
00050 Init();
00051 }
00052
00053
void St_svtRDOstrippedC::Init() {
00054 memset (&pointers[0][0][0], 0, NB*NL*NWmax*
sizeof(svtRDOstripped_st *));
00055 St_svtRDOstripped *Table = (St_svtRDOstripped *) GetThisTable();
00056
if (Table) {
00057 svtRDOstripped_st *Data = Table->GetTable();
00058 DataOld = Data;
00059 Int_t N = Table->GetNRows();
00060 TString rdo, RDO;
00061 Int_t i, j;
00062
for (j = 0; j < N; j++) {
00063 Int_t barrel = Data[j].barNum;
00064 Int_t ladder = Data[j].ladNum;
00065 Int_t NW = NWmax;
00066
if (barrel == 1) NW = 4;
00067
if (barrel == 2) NW = 6;
00068 rdo = Data[j].rdo;
00069
for (Int_t wafer = 1; wafer <= NW; wafer++) {
00070 Int_t k = -1;
00071
for (i = 0; i < NRDOS; i++) {
00072 RDO = RDOS[i].rdo;
00073
if (RDOS[i].barNum == barrel &&
00074 RDOS[i].ladNum == ladder &&
00075 rdo == RDO &&
00076 RDOS[i].ndet1 <= wafer && wafer <= RDOS[i].ndet2) {k = i;
break;}
00077 }
00078
if (k >= 0)
00079 pointers[barrel-1][ladder-1][wafer-1] = Data + j;
00080 }
00081 }
00082 }
00083 }
00084
00085 svtRDOstripped_st *St_svtRDOstrippedC::pRDO(Int_t barrel, Int_t ladder, Int_t wafer) {
00086 svtRDOstripped_st *p = 0;
00087
if (! GetThisTable())
return p;
00088
if (((St_svtRDOstripped *)GetThisTable())->GetTable() != DataOld) Init();
00089
if (barrel >= 1 && barrel <= NB &&
00090 ladder >= 1 && ladder <= NL &&
00091 wafer >= 1 && wafer <= NWmax) p = pointers[barrel-1][ladder-1][wafer-1];
00092
return p;
00093 }
00094
00095 Int_t St_svtRDOstrippedC::svtRDOstrippedStatus(Int_t barrel, Int_t ladder, Int_t wafer) {
00096 svtRDOstripped_st *p = pRDO(barrel, ladder, wafer);
00097 Int_t iOK = 8;
00098
if (p) {
00099 iOK = 0;
00100
if (TMath::Abs(-1500 - p->hvVolt) > 2) iOK += 1;
00101
if (p->lvFault) iOK += 2;
00102
if (! iOK && fDate && fDelay) {
00103
if (_debug) {
00104 TDatime t; t.Set(fDate);
00105 cout <<
" fSwitchedOff " << fSwitchedOff
00106 <<
" fDelay " << fDelay <<
"\t"; t.Print();
00107 }
00108 Int_t utOff = 0;
00109
if (p->dateOff > 0) {
00110 TDatime tOff(p->dateOff,p->timeOff);
00111
if (_debug) {cout <<
" tOff "; tOff.Print();}
00112 utOff = tOff.Convert();
00113 }
00114 Int_t utOn = 0;
00115
if (p->date > 0) {
00116 TDatime tOn(p->date,p->time);
00117 utOn = tOn.Convert();
00118
if (_debug) {cout <<
" tOn "; tOn.Print();}
00119 }
00120 Int_t DifOffOn = utOn - utOff;
00121
if (DifOffOn > fSwitchedOff) {
00122 Int_t DifOn = fDate - utOn;
00123
if (_debug) {cout <<
"DiffOffOn " << DifOffOn <<
"\tDifOn " << DifOn << endl;}
00124
if (DifOn < fDelay) {
00125 iOK += 4;
00126 }
00127 }
00128 }
00129 }
00130
return iOK;
00131 }
00132
00133
void St_svtRDOstrippedC::PrintRDOmap() {
00134 Int_t status = -1;
00135 Int_t N = NRDOS/2;
00136 cout <<
"Half Ladder L/B RDO ndet1 ndet2 sta: 0 - o.k.; 1 - bad voltage; 2 - RDO fail; 4 - out of date; 8 - barrel, ladder, wafer is missing" << endl;
00137 St_svtRDOstrippedC *svtRDOS = St_svtRDOstrippedC::instance();
00138
for (Int_t i = 0; i < N; i++) {
00139
if (svtRDOS) status = svtRDOS->svtRDOstrippedStatus(RDOS[i].barNum,RDOS[i].ladNum,RDOS[i].ndet1);
00140 cout << Form(
"%11s %2i/%1i %3s %3i %3i %3i", RDOS[i].name, RDOS[i].ladNum, RDOS[i].barNum, RDOS[i].rdo, RDOS[i].ndet1,RDOS[i].ndet2,status);
00141 cout << Form(
"%11s %2i/%1i %3s %3i %3i %3i", RDOS[N+i].name, RDOS[N+i].ladNum, RDOS[N+i].barNum, RDOS[N+i].rdo, RDOS[N+i].ndet1, RDOS[i].ndet2,status)
00142 << endl;
00143 }
00144 }
00145
Generated on Sun Mar 15 04:51:20 2009 for StRoot by
1.3.7