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; // wafers range 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++) { // West or East 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; // barrel, ladder, wafer is missing 00098 if (p) { 00099 iOK = 0; 00100 if (TMath::Abs(-1500 - p->hvVolt) > 2) iOK += 1; // bad voltage 00101 if (p->lvFault) iOK += 2; // RDO fail 00102 if (! iOK && fDate && fDelay) {// Check time 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; // out of date 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 doxygen 1.3.7