Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DbuNearRunQuality.cxx

Go to the documentation of this file.
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 }

Generated on Mon Feb 15 11:06:35 2010 for loon by  doxygen 1.3.9.1