00001 #include "DbuNearRunQuality.h" 00002 #include "MessageService/MsgService.h" 00003 #include "DatabaseInterface/DbiOutRowStream.h" 00004 #include "DatabaseInterface/DbiResultSet.h" 00005 #include "DatabaseInterface/DbiValidityRec.h" 00006 00007 ClassImp(DbuNearRunQuality) 00008 00009 CVSID("$Id: DbuNearRunQuality.cxx,v 1.5 2009/11/16 17:58:02 blake Exp $"); 00010 00011 #include "DatabaseInterface/DbiResultPtr.tpl" 00012 template class DbiResultPtr<DbuNearRunQuality>; 00013 00014 #include "DatabaseInterface/DbiWriter.tpl" 00015 template class DbiWriter<DbuNearRunQuality>; 00016 00017 00018 Bool_t DbuNearRunQuality::IsOK(Int_t itask) const 00019 { 00020 if( this->GoodRunType(itask) 00021 && this->GoodReadout(itask) 00022 && !this->Short(itask) 00023 && !this->LowRate(itask) 00024 && !this->HighRate(itask) 00025 && !this->LIRate(itask) 00026 && !this->ColdReadout(itask) 00027 && !this->HotReadout(itask) 00028 && !this->BadReadoutErrors(itask) 00029 && !this->BadSpillWindow(itask) 00030 && !this->HighADC(itask) 00031 ){ 00032 return 1; 00033 } 00034 return 0; 00035 } 00036 00037 Bool_t DbuNearRunQuality::GoodRunType(Int_t itask) const 00038 { 00039 if( itask>=0 && itask<=1 ){ // any task 00040 if( fRun>=0 00041 && fPhysicsRun==1 && fTestRun==0 ) return 1; 00042 } 00043 return 0; 00044 } 00045 00046 Bool_t DbuNearRunQuality::LowRate(Int_t itask) const 00047 { 00048 if( itask>=0 && itask<=1 ){ // any task 00049 if( fTriggersPlane+fTriggersSpill<400 ) return 1; 00050 } 00051 return 0; 00052 } 00053 00054 Bool_t DbuNearRunQuality::HighRate(Int_t itask) const 00055 { 00056 if( itask>=0 && itask<=1 ){ // any task 00057 if( fSnarlRateMedian>50 00058 || fSnarlRateMax>500 ) return 1; 00059 } 00060 return 0; 00061 } 00062 00063 Bool_t DbuNearRunQuality::Short(Int_t itask) const 00064 { 00065 if( itask>=0 && itask<=1 ){ // any task 00066 if( fSubrunLength<400 ) return 1; 00067 } 00068 return 0; 00069 } 00070 00071 Bool_t DbuNearRunQuality::GoodReadout(Int_t itask) const 00072 { 00073 if( itask>=0 && itask<=1 ){ // any task 00074 if( fColdCrates==0 ) return 1; 00075 } 00076 return 0; 00077 } 00078 00079 Bool_t DbuNearRunQuality::LIRate(Int_t itask) const 00080 { 00081 if( itask==1 ){ 00082 if( fLIRate>1.0 ) return 1; 00083 } 00084 else if( itask==0 ){ 00085 if( fLIRate>0.0 ) return 1; 00086 } 00087 return 0; 00088 } 00089 00090 Bool_t DbuNearRunQuality::ColdReadout(Int_t itask) const 00091 { 00092 if( itask==1 ){ 00093 if( fTimeCountColdMenusCal>96 00094 || fTimeCountColdMenusSpec>96 00095 || fTimeCountColdMindersCal>4 00096 || fTimeCountColdMindersSpec>4 ) return 1; 00097 } 00098 else if( itask==0 ){ 00099 if( fTimeCountColdMenusCal>320 00100 || fTimeCountColdMenusSpec>120 00101 || fTimeCountColdMindersCal>4 00102 || fTimeCountColdMindersSpec>4 ) return 1; 00103 } 00104 return 0; 00105 } 00106 00107 Bool_t DbuNearRunQuality::HotReadout(Int_t itask) const 00108 { 00109 if( itask==1 ){ 00110 if( fTimeCountHotMenusCal>640 ) return 1; 00111 } 00112 else if( itask==0 ){ 00113 if( fTimeCountHotMenusCal>640 ) return 1; 00114 } 00115 return 0; 00116 } 00117 00118 Bool_t DbuNearRunQuality::BadSpillWindow(Int_t itask) const 00119 { 00120 if( itask==1 ){ 00121 if( fAvgGate>100 00122 && ( fAvgLow/fAvgGate>1.05 00123 || fAvgHigh/fAvgGate>1.05 ) ) return 1; 00124 } 00125 else if( itask==0 ){ 00126 if ( fAvgGate>200 00127 && (fAvgLow-fAvgGate)>200 ) return 1; 00128 } 00129 return 0; 00130 } 00131 00132 //Summary method for errors 00133 Bool_t DbuNearRunQuality::BadReadoutErrors(Int_t itask) const 00134 { 00135 if ( this->BadCapidError(itask) 00136 || this->BadParityError(itask) 00137 || this->BadMisCountError(itask) 00138 || this->BadPriorityTruncateError(itask) 00139 || this->BadSameMenuError(itask) 00140 || this->BadSharedMinderError(itask) 00141 || this->BadTransferMinderError(itask) 00142 ){ 00143 return 1; 00144 } 00145 return 0; 00146 } 00147 00148 // 00149 // Next 7 methods 00150 // Cut on nb of channels with more than: 00151 // CAL SPEC 00152 // capid 15 5 00153 // parity 10 5 00154 // miscount 10 5 00155 // priority truncate 10 5 00156 // same menu 10 5 00157 // shared minder 10 5 00158 // transfer minder 10 5 00159 // (per second) 00160 // 00161 Bool_t DbuNearRunQuality::BadCapidError(Int_t itask) const 00162 { 00163 if( itask>=0 && itask<=1 ){ // any task 00164 if ( fNbCapidSpec>5 00165 || fNbCapidCal>15 ) return 1; 00166 } 00167 return 0; 00168 } 00169 00170 Bool_t DbuNearRunQuality::BadParityError(Int_t itask) const 00171 { 00172 if( itask>=0 && itask<=1 ){ // any task 00173 if ( fNbParitySpec>5 00174 || fNbParityCal>10 ) return 1; 00175 } 00176 return 0; 00177 } 00178 00179 Bool_t DbuNearRunQuality::BadMisCountError(Int_t itask) const 00180 { 00181 if( itask>=0 && itask<=1 ){ // any task 00182 if ( fNbMisCountSpec>5 00183 || fNbMisCountCal>10 ) return 1; 00184 } 00185 return 0; 00186 } 00187 00188 Bool_t DbuNearRunQuality::BadPriorityTruncateError(Int_t itask) const 00189 { 00190 if( itask==1 ){ 00191 if ( fNbPriorityTruncSpec>25 00192 || fNbPriorityTruncCal>50 ) return 1; 00193 } 00194 else if( itask==0 ){ 00195 if ( fNbPriorityTruncSpec>5 00196 || fNbPriorityTruncCal>10 ) return 1; 00197 } 00198 return 0; 00199 } 00200 00201 Bool_t DbuNearRunQuality::BadSameMenuError(Int_t itask) const 00202 { 00203 if( itask==1 ){ 00204 if ( fNbSameMenuSpec>25 00205 || fNbSameMenuCal>50 ) return 1; 00206 } 00207 else if( itask==0 ){ 00208 if ( fNbSameMenuSpec>5 00209 || fNbSameMenuCal>10 ) return 1; 00210 } 00211 return 0; 00212 } 00213 00214 Bool_t DbuNearRunQuality::BadSharedMinderError(Int_t itask) const 00215 { 00216 if( itask==1 ){ 00217 if ( fNbSharedMinderSpec>25 00218 || fNbSharedMinderCal>50 ) return 1; 00219 } 00220 else if( itask==0 ){ 00221 if ( fNbSharedMinderSpec>5 00222 || fNbSharedMinderCal>10 ) return 1; 00223 } 00224 return 0; 00225 } 00226 00227 Bool_t DbuNearRunQuality::BadTransferMinderError(Int_t itask) const 00228 { 00229 if( itask==1 ){ 00230 if ( fNbTransferMinderSpec>25 00231 || fNbTransferMinderCal>50 ) return 1; 00232 } 00233 else if( itask==0 ){ 00234 if ( fNbTransferMinderSpec>5 00235 || fNbTransferMinderCal>10 ) return 1; 00236 } 00237 return 0; 00238 } 00239 00240 //Cut on the nb of channels with more than 00241 //1000 adc counts per spill trigger 00242 Bool_t DbuNearRunQuality::HighADC(Int_t itask) const 00243 { 00244 if( itask>=0 && itask<=1 ){ // any task 00245 if ( fHighAdcSpec>200 00246 || fHighAdcCal>200 ) return 1; 00247 } 00248 return 0; 00249 } 00250 00251 UInt_t DbuNearRunQuality::GetIndex(Int_t run, Int_t subrun) 00252 { 00253 if( run>=0 && subrun>=0 && subrun<1000 ){ 00254 return 1000*run+subrun; 00255 } 00256 return 0; 00257 } 00258 00259 void DbuNearRunQuality::Fill(DbiResultSet& rs, const DbiValidityRec* /*vrec*/) 00260 { 00261 if ( rs.TableName() == "DBUNEARRUNQUALITY" ) { 00262 rs >> fRun 00263 >> fSubRun 00264 >> fStartTime 00265 >> fEndTime 00266 >> fSubrunLength 00267 >> fPhysicsRun 00268 >> fModifiedRun 00269 >> fTestRun 00270 >> fTriggersPlane 00271 >> fTriggersActivity 00272 >> fTriggersSpill 00273 >> fRopMask 00274 >> fTriggerMask 00275 >> fColdCrates 00276 >> fColdMindersSpec 00277 >> fColdMenusSpec 00278 >> fColdMindersCal 00279 >> fColdMenusCal 00280 >> fHotMenusSpec 00281 >> fHotMenusCal 00282 >> fTimeCountHotMenusSpec 00283 >> fTimeCountHotMenusCal 00284 >> fTimeCountColdMenusSpec 00285 >> fTimeCountColdMenusCal 00286 >> fTimeCountColdMindersSpec 00287 >> fTimeCountColdMindersCal 00288 >> fLIRate 00289 >> fHighAdcSpec 00290 >> fHighAdcCal 00291 >> fNbCapidSpec 00292 >> fNbCapidCal 00293 >> fNbParitySpec 00294 >> fNbParityCal 00295 >> fNbMisCountSpec 00296 >> fNbMisCountCal 00297 >> fNbPriorityTruncSpec 00298 >> fNbPriorityTruncCal 00299 >> fNbSameMenuSpec 00300 >> fNbSameMenuCal 00301 >> fNbSharedMinderSpec 00302 >> fNbSharedMinderCal 00303 >> fNbTransferMinderSpec 00304 >> fNbTransferMinderCal 00305 >> fAvgLow 00306 >> fAvgHigh 00307 >> fAvgGate 00308 >> fSnarlRateMin 00309 >> fSnarlRateMax 00310 >> fSnarlRateMedian 00311 >> fSnarlRateMean; 00312 } 00313 else { 00314 Int_t numCol = rs.NumCols(); 00315 for (Int_t curCol = 2; curCol <= numCol; ++curCol) { 00316 string colName = rs.CurColName(); 00317 if( colName == "RUN" ) rs >> fRun; 00318 else if ( colName == "SUBRUN" ) rs >> fSubRun; 00319 else if ( colName == "STARTTIME" ) rs >> fStartTime; 00320 else if ( colName == "ENDTIME" ) rs >> fEndTime; 00321 else if ( colName == "SUBRUNLENGTH" ) rs >> fSubrunLength; 00322 else if ( colName == "PHYSICSRUN" ) rs >> fPhysicsRun; 00323 else if ( colName == "MODIFIEDRUN" ) rs >> fModifiedRun; 00324 else if ( colName == "TESTRUN" ) rs >> fTestRun; 00325 else if ( colName == "TRIGGERSPLANE" ) rs >> fTriggersPlane; 00326 else if ( colName == "TRIGGERSACTIVITY" ) rs >> fTriggersActivity; 00327 else if ( colName == "TRIGGERSSPILL" ) rs >> fTriggersSpill; 00328 else if ( colName == "ROPMASK" ) rs >> fRopMask; 00329 else if ( colName == "TRIGGERMASK" ) rs >> fTriggerMask; 00330 else if ( colName == "COLDCRATES" ) rs >> fColdCrates; 00331 else if ( colName == "COLDMINDERSSPEC" ) rs >> fColdMindersSpec; 00332 else if ( colName == "COLDMENUSSPEC" ) rs >> fColdMenusSpec; 00333 else if ( colName == "COLDMINDERSCAL" ) rs >> fColdMindersCal; 00334 else if ( colName == "COLDMENUSCAL" ) rs >> fColdMenusCal; 00335 else if ( colName == "HOTMENUSSPEC" ) rs >> fHotMenusSpec; 00336 else if ( colName == "HOTMENUSCAL" ) rs >> fHotMenusCal; 00337 else if ( colName == "TIMECOUNTHOTMENUSSPEC" ) rs >> fTimeCountHotMenusSpec; 00338 else if ( colName == "TIMECOUNTHOTMENUSCAL" ) rs >> fTimeCountHotMenusCal; 00339 else if ( colName == "TIMECOUNTCOLDMENUSSPEC" ) rs >> fTimeCountColdMenusSpec; 00340 else if ( colName == "TIMECOUNTCOLDMENUSCAL" ) rs >> fTimeCountColdMenusCal; 00341 else if ( colName == "TIMECOUNTCOLDMINDERSSPEC" ) rs >> fTimeCountColdMindersSpec; 00342 else if ( colName == "TIMECOUNTCOLDMINDERSCAL" ) rs >> fTimeCountColdMindersCal; 00343 else if ( colName == "LIRATE" ) rs >> fLIRate; 00344 else if ( colName == "HIGHADCSPEC" ) rs >> fHighAdcSpec; 00345 else if ( colName == "HIGHADCCAL" ) rs >> fHighAdcCal; 00346 else if ( colName == "NBCAPIDSPEC" ) rs >> fNbCapidSpec; 00347 else if ( colName == "NBCAPIDCAL" ) rs >> fNbCapidCal; 00348 else if ( colName == "NBPARITYSPEC" ) rs >> fNbParitySpec; 00349 else if ( colName == "NBPARITYCAL" ) rs >> fNbParityCal; 00350 else if ( colName == "NBMISCOUNTSPEC" ) rs >> fNbMisCountSpec; 00351 else if ( colName == "NBMISCOUNTCAL" ) rs >> fNbMisCountCal; 00352 else if ( colName == "NBPRIORITYTRUNCSPEC" ) rs >> fNbPriorityTruncSpec; 00353 else if ( colName == "NBPRIORITYTRUNCCAL" ) rs >> fNbPriorityTruncCal; 00354 else if ( colName == "NBSAMEMENUSPEC" ) rs >> fNbSameMenuSpec; 00355 else if ( colName == "NBSAMEMENUCAL" ) rs >> fNbSameMenuCal; 00356 else if ( colName == "NBSHAREDMINDERSPEC" ) rs >> fNbSharedMinderSpec; 00357 else if ( colName == "NBSHAREDMINDERCAL" ) rs >> fNbSharedMinderCal; 00358 else if ( colName == "NBTRANSFERMINDERSPEC" ) rs >> fNbTransferMinderSpec; 00359 else if ( colName == "NBTRANSFERMINDERCAL" ) rs >> fNbTransferMinderCal; 00360 else if ( colName == "AVGLOW" ) rs >> fAvgLow; 00361 else if ( colName == "AVGHIGH" ) rs >> fAvgHigh; 00362 else if ( colName == "AVGGATE" ) rs >> fAvgGate; 00363 else if ( colName == "SNARLRATEMIN" ) rs >> fSnarlRateMin; 00364 else if ( colName == "SNARLRATEMAX" ) rs >> fSnarlRateMax; 00365 else if ( colName == "SNARLRATEMEDIAN" ) rs >> fSnarlRateMedian; 00366 else if ( colName == "SNARLRATEMEAN" ) rs >> fSnarlRateMean; 00367 else { 00368 MSG("NearRunQuality",Msg::kDebug) << "Ignoring column " 00369 << curCol 00370 << "(" << colName << ")" << endl; 00371 rs.IncrementCurCol(); 00372 } 00373 } 00374 } 00375 }//EOFUNCTION 00376 00377 void DbuNearRunQuality::Store(DbiOutRowStream& ors, const DbiValidityRec* /*vrec*/) const 00378 { 00379 ors << fRun 00380 << fSubRun 00381 << fStartTime 00382 << fEndTime 00383 << fSubrunLength 00384 << fPhysicsRun 00385 << fModifiedRun 00386 << fTestRun 00387 << fTriggersPlane 00388 << fTriggersActivity 00389 << fTriggersSpill 00390 << fRopMask 00391 << fTriggerMask 00392 << fColdCrates 00393 << fColdMindersSpec 00394 << fColdMenusSpec 00395 << fColdMindersCal 00396 << fColdMenusCal 00397 << fHotMenusSpec 00398 << fHotMenusCal 00399 << fTimeCountHotMenusSpec 00400 << fTimeCountHotMenusCal 00401 << fTimeCountColdMenusSpec 00402 << fTimeCountColdMenusCal 00403 << fTimeCountColdMindersSpec 00404 << fTimeCountColdMindersCal 00405 << fLIRate 00406 << fHighAdcSpec 00407 << fHighAdcCal 00408 << fNbCapidSpec 00409 << fNbCapidCal 00410 << fNbParitySpec 00411 << fNbParityCal 00412 << fNbMisCountSpec 00413 << fNbMisCountCal 00414 << fNbPriorityTruncSpec 00415 << fNbPriorityTruncCal 00416 << fNbSameMenuSpec 00417 << fNbSameMenuCal 00418 << fNbSharedMinderSpec 00419 << fNbSharedMinderCal 00420 << fNbTransferMinderSpec 00421 << fNbTransferMinderCal 00422 << fAvgLow 00423 << fAvgHigh 00424 << fAvgGate 00425 << fSnarlRateMin 00426 << fSnarlRateMax 00427 << fSnarlRateMedian 00428 << fSnarlRateMean; 00429 }
1.3.9.1