00001 #include "FillNearRunQuality.h"
00002
00003 #include "RunQuality/DbuNearRunQuality.h"
00004
00005 #include "MessageService/MsgService.h"
00006 #include "MinosObjectMap/MomNavigator.h"
00007 #include "JobControl/JobCommand.h"
00008 #include "JobControl/JobCModuleRegistry.h"
00009
00010 #include "DatabaseInterface/DbiResultPtr.h"
00011 #include "DatabaseInterface/DbiSqlContext.h"
00012 #include "DatabaseInterface/DbiValidityRec.h"
00013 #include "DatabaseInterface/DbiCascader.h"
00014 #include "DatabaseInterface/DbiTableProxyRegistry.h"
00015 #include "DatabaseInterface/DbiWriter.h"
00016
00017 #include "RawData/RawRecord.h"
00018 #include "RawData/RawHeader.h"
00019 #include "RawData/RawDaqHeader.h"
00020 #include "RawData/RawDaqSnarlHeader.h"
00021 #include "RawData/RawDigit.h"
00022 #include "RawData/RawChannelId.h"
00023 #include "RawData/RawQieDigit.h"
00024
00025 #include "RawData/RawDaqHeaderBlock.h"
00026 #include "RawData/RawSnarlHeaderBlock.h"
00027 #include "RawData/RawRunStartBlock.h"
00028 #include "RawData/RawRunEndBlock.h"
00029 #include "RawData/RawSubRunEndBlock.h"
00030 #include "RawData/RawTpSinglesSummaryBlock.h"
00031 #include "RawData/RawVarcErrorInTfBlock.h"
00032 #include "RawData/RawSpillServerMonitorBlock.h"
00033 #include "RawData/RawLiTpmtDigitsBlock.h"
00034 #include "RawData/RawLIAdcSummaryBlock.h"
00035 #include "RawData/RawDigitDataBlock.h"
00036 #include "RawData/RawRunConfigBlock.h"
00037 #include "RawData/RawConfigFilesBlock.h"
00038
00039 #include "OnlineUtil/mdRunTypeCodes.h"
00040 #include "OnlineUtil/mdTriggerCodes.h"
00041
00042 #include "Validity/VldContext.h"
00043 #include "Validity/VldTimeStamp.h"
00044
00045 #include <cmath>
00046
00047
00048
00049
00050
00051 ClassImp(FillNearRunQuality)
00052
00053 CVSID("$Id: FillNearRunQuality.cxx,v 1.8 2009/11/17 13:34:32 blake Exp $");
00054
00055 JOBMODULE(FillNearRunQuality,"FillNearRunQuality","FillNearRunQuality");
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 FillNearRunQuality::FillNearRunQuality() :
00066
00067 NbConnMindersSpec(50),
00068 NbConnMenusSpec(800),
00069 NbConnMindersCal(528),
00070 NbConnMenusCal(8448),
00071
00072 fDbiTaskNear(1),
00073
00074 fWriteOutDatabaseVariables(0),
00075 fWriteToDatabase(0),
00076 fReadFromDatabase(0),
00077 fDatabaseFile(0),
00078 fDatabaseTree(0),
00079 fName(""),
00080 fOutputLocation("."),
00081
00082 fCapidErrorCut(100),
00083 fParityErrorCut(10),
00084 fMiscountErrorCut(10),
00085 fPriorTruncErrorCut(10),
00086 fSameMenuErrorCut(30),
00087 fSharedMinderErrorCut(10),
00088 fTransfMinderErrorCut(10),
00089 fHighAdcCut(1000),
00090 fHotLimitCal(1000),
00091 fHotLimitSpec(1000),
00092 fColdLimitCal(1),
00093 fColdLimitSpec(20),
00094
00095 fTimeframeArrayCounter(30),
00096
00097 fRecCounter(0),
00098 fCounter(-1),
00099 fGoodCounter(0),
00100 fSnarls(0),
00101 fGoodSnarls(0),
00102 fTimeFrames(0),
00103 fSnarlRateMin(-1),
00104 fSnarlRateMax(-1),
00105 fSnarlRateMean(-999.9),
00106 fSnarlRateMedian(-999.9),
00107 fTriggersPlane(0),
00108 fTriggersActivity(0),
00109 fTriggersSpill(0),
00110
00111 fRun(-1),
00112 fSubRun(-1),
00113 fRunType(-1),
00114 fTime(-1),
00115 fTimeFrame(-1),
00116 fSnarl(0),
00117 fTrigSrc(-1),
00118 fDigits(-1),
00119 fPhysicsRun(-1),
00120 fModifiedRun(-1),
00121 fTestRun(-1),
00122 fStartTime(-1),
00123 fEndTime(-1),
00124 fSubrunLength(-1),
00125
00126 fTrigBaseTime(-1),
00127 fTrigTime(-1),
00128 fRopMask(-1),
00129 fTriggerMask(-1),
00130 fRate(-1),
00131 fCrate(-1),
00132 fMaster(-1),
00133 fMinder(-1),
00134 fMenu(-1),
00135 fNearReadoutInt(-1),
00136
00137 fAdc(-1),
00138 fTdc(-1),
00139 fDeltatdc(-1),
00140 fCratet0sec(-1),
00141 fCratet0nsec(-1),
00142 fDatatype(-1),
00143 fErrorcode(-1),
00144
00145 fMinTdc(0),
00146 fMaxTdc(0),
00147
00148 fNbCratesReadout(0),
00149 fNTimeframesBadCrates(0),
00150 fMaxNbColdMindersCal(0),
00151 fMaxNbColdMindersSpec(0),
00152 fMaxNbColdCrates(0),
00153 fMaxNbColdMenusCal(0),
00154 fMaxNbColdMenusSpec(0),
00155 fMaxNbHotMenusSpec(0),
00156 fMaxNbHotMenusCal(0),
00157 fTimeCountMaxHotMenusSpec(0),
00158 fTimeCountMaxHotMenusCal(0),
00159 fTimeCountMaxColdMenusSpec(0),
00160 fTimeCountMaxColdMenusCal(0),
00161 fTimeCountMaxColdMindersSpec(0),
00162 fTimeCountMaxColdMindersCal(0),
00163
00164 fNbLIChan(0),
00165 fLIRate(0.),
00166 fHighAdcSpec(0),
00167 fHighAdcCal(0),
00168 fNbCapidSpec(0),
00169 fNbCapidCal(0),
00170 fNbParitySpec(0),
00171 fNbParityCal(0),
00172 fNbMisCountSpec(0),
00173 fNbMisCountCal(0),
00174 fNbPriorityTruncSpec(0),
00175 fNbPriorityTruncCal(0),
00176 fNbSameMenuSpec(0),
00177 fNbSameMenuCal(0),
00178 fNbSharedMinderSpec(0),
00179 fNbSharedMinderCal(0),
00180 fNbTransferMinderSpec(0),
00181 fNbTransferMinderCal(0),
00182
00183 fReadWrite(-1)
00184 {
00185 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::FillNearRunQuality() *** " << endl;
00186
00187 arrayTimeCountColdMindersSpec = new Int_t[NbConnMindersSpec];
00188 arrayTimeCountColdMenusSpec = new Int_t[NbConnMenusSpec];
00189 arrayTimeCountColdMindersCal = new Int_t[NbConnMindersCal];
00190 arrayTimeCountColdMenusCal = new Int_t[NbConnMenusCal];
00191 arrayTimeCountHotMenusSpec = new Int_t[NbConnMenusSpec];
00192 arrayTimeCountHotMenusCal = new Int_t[NbConnMenusCal];
00193
00194 fSnarlRates = new Int_t[1001];
00195
00196 fNearReadout = new NearReadout();
00197
00198 this->Reset();
00199 }
00200
00201
00202 FillNearRunQuality::~FillNearRunQuality()
00203 {
00204 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::~FillNearRunQuality() *** " << endl;
00205
00206 delete[] fSnarlRates;
00207 if(fNearReadout) delete fNearReadout;
00208 delete[] arrayTimeCountColdMindersSpec;
00209 delete[] arrayTimeCountColdMenusSpec;
00210 delete[] arrayTimeCountColdMindersCal;
00211 delete[] arrayTimeCountColdMenusCal;
00212 delete[] arrayTimeCountHotMenusSpec;
00213 delete[] arrayTimeCountHotMenusCal;
00214 }
00215
00216
00217 void FillNearRunQuality::BeginJob()
00218 {
00219 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::BeginJob() *** " << endl;
00220 }
00221
00222
00223 JobCResult FillNearRunQuality::Ana(const MomNavigator *mom)
00224 {
00225 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::Ana(...) [" << fRecCounter << "] *** " << endl;
00226
00227 JobCResult result(JobCResult::kPassed);
00228
00229 VldContext vldc;
00230 TObject* momobject = 0;
00231 Bool_t foundit = 0;
00232
00233
00234
00235
00236
00237
00238
00239 TIter momitr(mom->FragmentIter());
00240 while( (momobject = momitr()) ){
00241 if(momobject->InheritsFrom("RawRecord")){
00242 foundit = 1;
00243 fRecCounter++;
00244 MSG("FillNearRunQuality",Msg::kDebug) << " *** RAW RECORD [" << fRecCounter << "] *** " << endl;
00245 RawRecord* rawrec = dynamic_cast<RawRecord*>(momobject);
00246
00247
00248 vldc = rawrec->GetRawHeader()->GetVldContext();
00249 this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00250
00251
00252
00253 TIter rawrecitr = rawrec->GetRawBlockIter();
00254 TObject* tob = 0;
00255 while((tob = rawrecitr())){
00256 MSG("FillNearRunQuality",Msg::kDebug) << " " << tob->GetName() << endl;
00257 if( fPhysicsRun>0 ) this->ProcessBlock(tob);
00258 }
00259 }
00260 }
00261
00262 if (!foundit){
00263 MSG("FillNearRunQuality", Msg::kWarning) << " *** FAILED TO FIND RAW RECORD *** " << endl;
00264 return result.SetFailed();
00265 }
00266
00267 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::Ana( ) FINISHED *** " << endl;
00268 return result;
00269
00270 }
00271
00272
00273 void FillNearRunQuality::EndJob()
00274 {
00275 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::EndJob() *** " << endl;
00276
00277 this->EndSubRun();
00278
00279 if (fWriteOutDatabaseVariables) this->WriteOutFile();
00280
00281 this->Reset();
00282
00283 }
00284
00285
00286 const Registry& FillNearRunQuality::DefaultConfig() const
00287 {
00288 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::DefaultConfig() *** " << endl;
00289
00290 static Registry r;
00291 r.SetName("FillNearRunQuality.config.default");
00292 r.UnLockValues();
00293 r.Set("DbiTaskNear",fDbiTaskNear);
00294 r.Set("WriteOutDatabaseVariables",fWriteOutDatabaseVariables);
00295 r.Set("WriteToDatabase", fWriteToDatabase);
00296 r.Set("ReadFromDatabase", fReadFromDatabase);
00297 r.Set("CapidErrorCut",fCapidErrorCut);
00298 r.Set("ParityErrorCut",fParityErrorCut);
00299 r.Set("MiscountErrorCut",fMiscountErrorCut);
00300 r.Set("PriorTruncErrorCut",fPriorTruncErrorCut);
00301 r.Set("SameMenuErrorCut",fSameMenuErrorCut);
00302 r.Set("SharedMinderErrorCut",fSharedMinderErrorCut);
00303 r.Set("TransfMinderErrorCut",fTransfMinderErrorCut);
00304 r.Set("CalorimeterHotChannelLimit",fHotLimitCal);
00305 r.Set("SpectrometerHotChannelLimit",fHotLimitSpec);
00306 r.Set("CalorimeterColdChannelLimit",fColdLimitCal);
00307 r.Set("SpectrometerColdChannelLimit",fColdLimitSpec);
00308 r.Set("HighAdcCut",fHighAdcCut);
00309 r.Set("Name",fName.Data());
00310 r.Set("OutputLocation",fOutputLocation.Data());
00311 r.Set("TimeframeCounter",fTimeframeArrayCounter);
00312 r.LockValues();
00313
00314 return r;
00315 }
00316
00317
00318
00319 void FillNearRunQuality::Config(const Registry &r)
00320 {
00321 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::Config() *** " << endl;
00322
00323 Int_t tmpint;
00324 const char* tmpchar = 0;
00325
00326 if(r.Get("DbiTaskNear",tmpint)) fDbiTaskNear = tmpint;
00327 if(r.Get("WriteOutDatabaseVariables",tmpint)) fWriteOutDatabaseVariables = tmpint;
00328 if(r.Get("WriteToDatabase", tmpint)) fWriteToDatabase = tmpint;
00329 if(r.Get("ReadFromDatabase", tmpint)) fReadFromDatabase = tmpint;
00330 if(r.Get("CapidErrorCut",tmpint)) fCapidErrorCut = tmpint;
00331 if(r.Get("ParityErrorCut",tmpint)) fParityErrorCut = tmpint;
00332 if(r.Get("MiscountErrorCut",tmpint)) fMiscountErrorCut = tmpint;
00333 if(r.Get("PriorTruncErrorCut",tmpint)) fPriorTruncErrorCut = tmpint;
00334 if(r.Get("SameMenuErrorCut",tmpint)) fSameMenuErrorCut = tmpint;
00335 if(r.Get("SharedMinderErrorCut",tmpint)) fSharedMinderErrorCut = tmpint;
00336 if(r.Get("TransfMinderErrorCut",tmpint)) fTransfMinderErrorCut = tmpint;
00337 if(r.Get("HighAdcCut",tmpint)) fHighAdcCut = tmpint;
00338 if(r.Get("Name",tmpchar)) fName = tmpchar;
00339 if(r.Get("OutputLocation",tmpchar)) fOutputLocation = tmpchar;
00340 if(r.Get("CalorimeterHotChannelLimit",tmpint)) fHotLimitCal = tmpint;
00341 if(r.Get("SpectrometerHotChannelLimit",tmpint)) fHotLimitSpec = tmpint;
00342 if(r.Get("CalorimeterColdChannelLimit",tmpint)) fColdLimitCal = tmpint;
00343 if(r.Get("SpectrometerColdChannelLimit",tmpint)) fColdLimitSpec = tmpint;
00344 if(r.Get("TimeframeCounter",tmpint)) fTimeframeArrayCounter = tmpint;
00345 return;
00346 }
00347
00348 void FillNearRunQuality::WriteToDatabase()
00349 {
00350 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::WriteToDatabase() *** " << endl;
00351
00352 DbiCascader& cascader = DbiTableProxyRegistry::Instance().GetCascader();
00353
00354
00355
00356 if( !cascader.TableExists("DBUNEARRUNQUALITY") ){
00357 MSG("FillNearRunQuality",Msg::kDebug) << " Creating temporary DBUNEARRUNQUALITY table " << endl;
00358
00359
00360 string tableDescr = "(SEQNO int, RUN int, SUBRUN int, STARTTIME timestamp, ENDTIME timestamp, SUBRUNLENGTH int, PHYSICSRUN int, MODIFIEDRUN int, TESTRUN int, TRIGGERSPLANE int, TRIGGERSACTIVITY int, TRIGGERSSPILL int, ROPMASK int, TRIGGERMASK int, COLDCRATES int, COLDMINDERSSPEC int, COLDMENUSSPEC int, COLDMINDERSCAL int, COLDMENUSCAL int, HOTMENUSSPEC int, HOTMENUSCAL int, TIMECOUNTHOTMENUSSPEC int, TIMECOUNTHOTMENUSCAL int, TIMECOUNTCOLDMENUSSPEC int, TIMECOUNTCOLDMENUSCAL int, TIMECOUNTCOLDMINDERSSPEC int, TIMECOUNTCOLDMINDERSCAL int, LIRATE float, HIGHADCSPEC int, HIGHADCCAL int, NBCAPIDSPEC int, NBCAPIDCAL int, NBPARITYSPEC int, NBPARITYCAL int, NBMISCOUNTSPEC int, NBMISCOUNTCAL int, NBPRIORITYTRUNCSPEC int, NBPRIORITYTRUNCCAL int, NBSAMEMENUSPEC int, NBSAMEMENUCAL int, NBSHAREDMINDERSPEC int, NBSHAREDMINDERCAL int, NBTRANSFERMINDERSPEC int, NBTRANSFERMINDERCAL int, AVGLOW float, AVGHIGH float, AVGGATE float, SNARLRATEMIN int, SNARLRATEMAX int, SNARLRATEMEDIAN float, SNARLRATEMEAN float)";
00361
00362 Int_t dbNoTempDb = cascader.CreateTemporaryTable("DBUNEARRUNQUALITY",tableDescr);
00363
00364 MSG("FillNearRunQuality",Msg::kDebug) << " DbNoTempDb=" << dbNoTempDb << endl;
00365 }
00366
00367
00368
00369
00370 if( cascader.TableExists("DBUNEARRUNQUALITY") ){
00371 MSG("FillNearRunQuality",Msg::kVerbose) << " Writing to DBUNEARRUNQUALITY table... " << endl;
00372
00373 this->PrepareRow();
00374
00375 VldTimeStamp start(fStartTime,0);
00376 VldTimeStamp end(fEndTime+1,0);
00377 TString logentry("Run Quality (Run=");
00378 logentry+=fRun;
00379 logentry.Append("/");
00380 logentry+=fSubRun;
00381 logentry.Append(")");
00382
00383 MSG("FillNearRunQuality",Msg::kVerbose) << " run: " << fRun << "/" << fSubRun << endl;
00384 MSG("FillNearRunQuality",Msg::kVerbose) << " start time: " << start << endl;
00385 MSG("FillNearRunQuality",Msg::kVerbose) << " end time: " << end << endl;
00386 MSG("FillNearRunQuality",Msg::kVerbose) << " log entry: " << logentry.Data() << endl;
00387
00388 VldRange range(Detector::kNear,SimFlag::kData,start,end,logentry.Data());
00389
00390 DbuNearRunQuality row( fRunElements, start, end,
00391 fMaxNbColdCrates, fMaxNbColdMindersSpec, fMaxNbColdMenusSpec,
00392 fMaxNbColdMindersCal, fMaxNbColdMenusCal, fMaxNbHotMenusSpec,
00393 fMaxNbHotMenusCal, fTimeCountMaxHotMenusSpec,
00394 fTimeCountMaxHotMenusCal, fTimeCountMaxColdMenusSpec,
00395 fTimeCountMaxColdMenusCal, fTimeCountMaxColdMindersSpec,
00396 fTimeCountMaxColdMindersCal, fLIRate, fHighAdcSpec,
00397 fHighAdcCal, fNbCapidSpec, fNbCapidCal,
00398 fNbParitySpec, fNbParityCal, fNbMisCountSpec,
00399 fNbMisCountCal, fNbPriorityTruncSpec,
00400 fNbPriorityTruncCal, fNbSameMenuSpec,
00401 fNbSameMenuCal, fNbSharedMinderSpec,
00402 fNbSharedMinderCal, fNbTransferMinderSpec,
00403 fNbTransferMinderCal, fAvgLow, fAvgHigh,
00404 fAvgGate, fSnarlRateMin, fSnarlRateMax,
00405 fSnarlRateMedian, fSnarlRateMean );
00406
00407 fGoodRun = row.GetGoodRun(fDbiTaskNear);
00408
00409 Int_t aggNo = row.GetAggregateNo();
00410 Dbi::Task task = fDbiTaskNear;
00411 VldTimeStamp creationDate;
00412
00413 MSG("FillNearRunQuality",Msg::kVerbose) << " aggNo: " << aggNo << " taskNo: " << task << endl;
00414
00415 DbiWriter<DbuNearRunQuality> writer(range,aggNo,task,creationDate,0,logentry.Data());
00416 writer << row;
00417 writer.Close();
00418
00419 MSG("FillNearRunQuality",Msg::kDebug) << endl
00420 << " WRITING RESULTS: " << endl
00421 << " =============== " << endl
00422 << " Run=" << fRun << endl
00423 << " SubRun=" << fSubRun << endl
00424 << " StartTime=" << fStartTime << endl
00425 << " EndTime=" << fEndTime << endl
00426 << " SubRunLength=" << fSubrunLength << endl
00427 << " PhysicsRun=" << fPhysicsRun << endl
00428 << " ModifiedRun=" << fModifiedRun << endl
00429 << " TestRun=" << fTestRun << endl
00430 << " PlaneTriggers=" << fTriggersPlane << endl
00431 << " TriggerActivity=" << fTriggersActivity<< endl
00432 << " SpillTriggers=" << fTriggersSpill << endl
00433 << " RopMask=" << fRopMask << endl
00434 << " TriggerMask=" << fTriggerMask << endl
00435 << " ColdCrates=" << fMaxNbColdCrates<< endl
00436 << " ColdMindersSpec=" << fMaxNbColdMindersSpec<< endl
00437 << " ColdMenusSpec=" << fMaxNbColdMenusSpec<< endl
00438 << " ColdMindersCal=" << fMaxNbColdMindersCal<< endl
00439 << " ColdMenusCal=" << fMaxNbColdMenusCal << endl
00440 << " HotMenusSpec=" << fMaxNbHotMenusSpec << endl
00441 << " HotMenusCal=" << fMaxNbHotMenusCal << endl
00442 << " TimeCountHotMenusSpec=" << fTimeCountMaxHotMenusSpec << endl
00443 << " TimeCountHotMenusCal=" << fTimeCountMaxHotMenusCal << endl
00444 << " TimeCountColdMenusSpec=" << fTimeCountMaxColdMenusSpec << endl
00445 << " TimeCountColdMenusCal=" << fTimeCountMaxColdMenusCal << endl
00446 << " TimeCountColdMindersSpec=" << fTimeCountMaxColdMindersSpec << endl
00447 << " TimeCountColdMindersCal=" << fTimeCountMaxColdMindersCal << endl
00448 << " LIRate=" << fLIRate << endl
00449 << " HighAdcSpec=" << fHighAdcSpec << endl
00450 << " HighAdcCal=" << fHighAdcCal << endl
00451 << " CapidSpec=" << fNbCapidSpec << endl
00452 << " CapidCal=" << fNbCapidCal << endl
00453 << " ParitySpec=" << fNbParitySpec << endl
00454 << " ParityCal=" << fNbParityCal << endl
00455 << " MisCountSpec=" << fNbMisCountSpec << endl
00456 << " MisCountCal=" << fNbMisCountCal << endl
00457 << " PriorityTruncSpec=" << fNbPriorityTruncSpec << endl
00458 << " PriorityTruncCal=" << fNbPriorityTruncCal << endl
00459 << " SameMenuSpec=" << fNbSameMenuSpec << endl
00460 << " SameMenuCal=" << fNbSameMenuCal << endl
00461 << " SharedMinderSpec=" << fNbSharedMinderSpec << endl
00462 << " SharedMinderCal=" << fNbSharedMinderCal << endl
00463 << " TransferMinderSpec=" << fNbTransferMinderSpec << endl
00464 << " TransferMinderCal=" << fNbTransferMinderCal << endl
00465 << " AvgLow=" << fAvgLow << endl
00466 << " AvgHigh=" << fAvgHigh << endl
00467 << " AvgGate=" << fAvgGate << endl
00468 << " MinSnarlRate=" << fSnarlRateMin << endl
00469 << " MaxSnarlRate=" << fSnarlRateMax << endl
00470 << " MedianSnarlRate=" << fSnarlRateMedian << endl
00471 << " MeanSnarlRate=" << fSnarlRateMean << endl
00472 << " GoodRun=" << fGoodRun << endl;
00473 }
00474 }
00475
00476 void FillNearRunQuality::ReadFromDatabase()
00477 {
00478 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::ReadFromDatabase() *** " << endl;
00479
00480 DbiCascader& cascader = DbiTableProxyRegistry::Instance().GetCascader();
00481
00482 if( cascader.TableExists("DBUNEARRUNQUALITY") ){
00483 MSG("FillNearRunQuality",Msg::kVerbose) << " Reading from DBUNEARRUNQUALITY table... " << endl;
00484 cout << " Reading from DBUNEARRUNQUALITY table... " << endl;
00485
00486 Int_t time = (Int_t)(0.5*((double)fStartTime+(double)fEndTime));
00487 VldTimeStamp timestamp(time,0);
00488 VldContext vldc(Detector::kNear,SimFlag::kData,timestamp);
00489 Dbi::Task task = fDbiTaskNear;
00490
00491 DbiResultPtr<DbuNearRunQuality> resptr("DBUNEARRUNQUALITY",vldc,task);
00492
00493 MSG("FillNearRunQuality",Msg::kVerbose) << " Number Of Rows = " << resptr.GetNumRows() << endl;
00494
00495 if( resptr.GetNumRows()>0 ){
00496 for( unsigned int i=0; i<resptr.GetNumRows(); i++){
00497 const DbuNearRunQuality* rowptr = resptr.GetRow(i);
00498 fRun = rowptr->GetRun();
00499 fSubRun = rowptr->GetSubRun();
00500 fStartTime = rowptr->GetStartTime().GetSec();
00501 fEndTime = rowptr->GetEndTime().GetSec();
00502 fSubrunLength = rowptr->GetSubrunLength();
00503 fPhysicsRun = rowptr->GetPhysicsRun();
00504 fModifiedRun = rowptr->GetModifiedRun();
00505 fTestRun = rowptr->GetTestRun();
00506 fTriggersPlane = rowptr->GetTriggersPlane();
00507 fTriggersActivity = rowptr->GetTriggersActivity();
00508 fTriggersSpill = rowptr->GetTriggersSpill();
00509 fRopMask = rowptr->GetRopMask();
00510 fTriggerMask = rowptr->GetTriggerMask();
00511 fMaxNbColdCrates = rowptr->GetColdCrates();
00512 fMaxNbColdMindersSpec = rowptr->GetColdMindersSpec();
00513 fMaxNbColdMenusSpec = rowptr->GetColdMenusSpec();
00514 fMaxNbColdMindersCal = rowptr->GetColdMindersCal();
00515 fMaxNbColdMenusCal = rowptr->GetColdMenusCal();
00516 fMaxNbHotMenusSpec = rowptr->GetHotMenusSpec();
00517 fMaxNbHotMenusCal = rowptr->GetHotMenusCal();
00518 fTimeCountMaxHotMenusSpec = rowptr->GetTimeCountHotMenusSpec();
00519 fTimeCountMaxHotMenusCal = rowptr->GetTimeCountHotMenusCal();
00520 fTimeCountMaxColdMenusSpec = rowptr->GetTimeCountColdMenusSpec();
00521 fTimeCountMaxColdMenusCal = rowptr->GetTimeCountColdMenusCal();
00522 fTimeCountMaxColdMindersSpec = rowptr->GetTimeCountColdMindersSpec();
00523 fTimeCountMaxColdMindersCal = rowptr->GetTimeCountColdMindersCal();
00524 fLIRate = rowptr->GetLIRate();
00525 fHighAdcSpec = rowptr->GetHighAdcSpec();
00526 fHighAdcCal = rowptr->GetHighAdcCal();
00527 fNbCapidSpec = rowptr->GetNbCapidSpec();
00528 fNbCapidCal = rowptr->GetNbCapidCal();
00529 fNbParitySpec = rowptr->GetNbParitySpec();
00530 fNbParityCal = rowptr->GetNbParityCal();
00531 fNbMisCountSpec = rowptr->GetNbMisCountSpec();
00532 fNbMisCountCal = rowptr->GetNbMisCountCal();
00533 fNbPriorityTruncSpec = rowptr->GetNbPriorityTruncSpec();
00534 fNbPriorityTruncCal = rowptr->GetNbPriorityTruncCal();
00535 fNbSameMenuSpec = rowptr->GetNbSameMenuSpec();
00536 fNbSameMenuCal = rowptr->GetNbSameMenuCal();
00537 fNbSharedMinderSpec = rowptr->GetNbSharedMinderSpec();
00538 fNbSharedMinderCal = rowptr->GetNbSharedMinderCal();
00539 fNbTransferMinderSpec = rowptr->GetNbTransferMinderSpec();
00540 fNbTransferMinderCal = rowptr->GetNbTransferMinderCal();
00541 fAvgLow = rowptr->GetAvgLow();
00542 fAvgHigh = rowptr->GetAvgHigh();
00543 fAvgGate = rowptr->GetAvgGate();
00544 fSnarlRateMin = rowptr->GetSnarlRateMin();
00545 fSnarlRateMax = rowptr->GetSnarlRateMax();
00546 fSnarlRateMedian = rowptr->GetSnarlRateMedian();
00547 fSnarlRateMean = rowptr->GetSnarlRateMean();
00548 fGoodRun = rowptr->GetGoodRun(fDbiTaskNear);
00549
00550 MSG("FillNearRunQuality",Msg::kDebug) << endl
00551 << " READING RESULTS: " << endl
00552 << " =============== " << endl
00553 << " Run=" << fRun << endl
00554 << " SubRun=" << fSubRun << endl
00555 << " StartTime=" << fStartTime << endl
00556 << " EndTime=" << fEndTime << endl
00557 << " SubRunLength=" << fSubrunLength << endl
00558 << " PhysicsRun=" << fPhysicsRun << endl
00559 << " ModifiedRun=" << fModifiedRun << endl
00560 << " TestRun=" << fTestRun << endl
00561 << " PlaneTriggers=" << fTriggersPlane << endl
00562 << " TriggerActivity=" << fTriggersActivity<< endl
00563 << " SpillTriggers=" << fTriggersSpill << endl
00564 << " RopMask=" << fRopMask << endl
00565 << " TriggerMask=" << fTriggerMask << endl
00566 << " ColdCrates=" << fMaxNbColdCrates<< endl
00567 << " ColdMindersSpec=" << fMaxNbColdMindersSpec<< endl
00568 << " ColdMenusSpec=" << fMaxNbColdMenusSpec<< endl
00569 << " ColdMindersCal=" << fMaxNbColdMindersCal<< endl
00570 << " ColdMenusCal=" << fMaxNbColdMenusCal << endl
00571 << " HotMenusSpec=" << fMaxNbHotMenusSpec << endl
00572 << " HotMenusCal=" << fMaxNbHotMenusCal << endl
00573 << " TimeCountHotMenusSpec=" << fTimeCountMaxHotMenusSpec << endl
00574 << " TimeCountHotMenusCal=" << fTimeCountMaxHotMenusCal << endl
00575 << " TimeCountColdMenusSpec=" << fTimeCountMaxColdMenusSpec << endl
00576 << " TimeCountColdMenusCal=" << fTimeCountMaxColdMenusCal << endl
00577 << " TimeCountColdMindersSpec=" << fTimeCountMaxColdMindersSpec << endl
00578 << " TimeCountColdMindersCal=" << fTimeCountMaxColdMindersCal << endl
00579 << " LIRate=" << fLIRate << endl
00580 << " HighAdcSpec=" << fHighAdcSpec << endl
00581 << " HighAdcCal=" << fHighAdcCal << endl
00582 << " CapidSpec=" << fNbCapidSpec << endl
00583 << " CapidCal=" << fNbCapidCal << endl
00584 << " ParitySpec=" << fNbParitySpec << endl
00585 << " ParityCal=" << fNbParityCal << endl
00586 << " MisCountSpec=" << fNbMisCountSpec << endl
00587 << " MisCountCal=" << fNbMisCountCal << endl
00588 << " PriorityTruncSpec=" << fNbPriorityTruncSpec << endl
00589 << " PriorityTruncCal=" << fNbPriorityTruncCal << endl
00590 << " SameMenuSpec=" << fNbSameMenuSpec << endl
00591 << " SameMenuCal=" << fNbSameMenuCal << endl
00592 << " SharedMinderSpec=" << fNbSharedMinderSpec << endl
00593 << " SharedMinderCal=" << fNbSharedMinderCal << endl
00594 << " TransferMinderSpec=" << fNbTransferMinderSpec << endl
00595 << " TransferMinderCal=" << fNbTransferMinderCal << endl
00596 << " AvgLow=" << fAvgLow << endl
00597 << " AvgHigh=" << fAvgHigh << endl
00598 << " AvgGate=" << fAvgGate << endl
00599 << " MinSnarlRate=" << fSnarlRateMin << endl
00600 << " MaxSnarlRate=" << fSnarlRateMax << endl
00601 << " MedianSnarlRate=" << fSnarlRateMedian << endl
00602 << " MeanSnarlRate=" << fSnarlRateMean << endl
00603 << " GoodRun=" << fGoodRun << endl;
00604 }
00605 }
00606 }
00607 }
00608
00609 void FillNearRunQuality::PrepareRow()
00610 {
00611 MSG("FillNearRunQuality",Msg::kDebug) << " *** FillNearRunQuality::PrepareRow() *** " << endl;
00612
00613 fRunElements[0] = fRun;
00614 fRunElements[1] = fSubRun;
00615 fRunElements[2] = fSubrunLength;
00616 fRunElements[3] = fPhysicsRun;
00617 fRunElements[4] = fModifiedRun;
00618 fRunElements[5] = fTestRun;
00619 fRunElements[6] = fTriggersPlane;
00620 fRunElements[7] = fTriggersActivity;
00621 fRunElements[8] = fTriggersSpill;
00622 fRunElements[9] = fRopMask;
00623 fRunElements[10] = fTriggerMask;
00624 }
00625
00626 void FillNearRunQuality::ProcessHeader(TObject* obj)
00627 {
00628 MSG("FillNearRunQuality",Msg::kDebug) << "*** ProcessHeader *** " << endl;
00629
00630
00631
00632 if(obj->InheritsFrom("RawDaqHeader")){
00633 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawDaqHeader " << endl;
00634 RawDaqHeader* hdr = (RawDaqHeader*)(obj);
00635
00636 Int_t time = hdr->GetVldContext().GetTimeStamp().GetSec();
00637 Int_t timeframe = hdr->GetTimeFrameNum();
00638 Int_t run = hdr->GetRun();
00639 Int_t subrun = hdr->GetSubRun();
00640 Int_t runtype = hdr->GetRunType();
00641
00642
00643 if( (fRun >= 0 && fSubRun >= 0)
00644 && !(run == fRun && subrun == fSubRun)
00645 && !(run == fRun && fEndTime-fStartTime < 30) ) {
00646 MSG("FillNearRunQuality",Msg::kInfo) << " closing: " << fRun << "/" << fSubRun << endl;
00647 this->EndSubRun();
00648 this->Reset();
00649 }
00650
00651
00652 if(fRun < 0 || fSubRun < 0){
00653 MSG("FillNearRunQuality",Msg::kInfo) << " opening: " << run << "/" << subrun << endl;
00654 fRun = run;
00655 fSubRun = subrun;
00656 fRunType = runtype;
00657 }
00658
00659
00660 if(fPhysicsRun < 0){
00661 if(fRun >= 0){
00662 fPhysicsRun = 0;
00663 fModifiedRun = 0;
00664 fTestRun = 0;
00665 if(fRunType >= 0){
00666 if( (fRunType == 2) ) fPhysicsRun = 1;
00667 if( (fRunType&RUN_TYPE_PHYSICS) == (RUN_TYPE_PHYSICS) ) fPhysicsRun = 1;
00668 if( (fRunType&RUN_TYPE_MASK_MODIFIED) == (RUN_TYPE_MASK_MODIFIED) ) fModifiedRun = 1;
00669 if( (fRunType&RUN_TYPE_MASK_TEST) == (RUN_TYPE_MASK_TEST) ) fTestRun = 1;
00670 }
00671 }
00672 MSG("FillNearRunQuality",Msg::kInfo) << " physics run = " << fPhysicsRun << endl;
00673 }
00674
00675
00676 if(timeframe >= 0 && time != fTime){
00677 if(time > fTime){
00678 if(fStartTime < 0) fStartTime = time;
00679 if(fEndTime < time) fEndTime = time;
00680 if(fCounter >= 0 ){
00681 if(fSnarlRateMin < 0 || fCounter < fSnarlRateMin) fSnarlRateMin = fCounter;
00682 if(fCounter > fSnarlRateMax) fSnarlRateMax = fCounter;
00683 if(fCounter > 1000) fCounter = 1000;
00684 fSnarls += fCounter;
00685 fGoodSnarls += fGoodCounter;
00686 fSnarlRates[fCounter]++;
00687 fTimeFrames++;
00688 }
00689 }
00690 fCounter = 0;
00691 fGoodCounter = 0;
00692 fTime = time;
00693 fTimeFrame = timeframe;
00694 }
00695
00696
00697 Int_t limitRun = 7719;
00698 if (fRun < limitRun) {
00699 fLowCutoff = 0;
00700 fLow = 20;
00701 fHigh = 540;
00702 fHighCutoff = 640;
00703 }
00704 else {
00705 fLowCutoff = 15;
00706 fLow = 80;
00707 fHigh = 600;
00708 fHighCutoff = 700;
00709 }
00710 }
00711
00712
00713
00714 if(obj->InheritsFrom("RawDaqSnarlHeader")){
00715 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawDaqSnarlHeader " << endl;
00716 RawDaqSnarlHeader* hdr = (RawDaqSnarlHeader*)(obj);
00717
00718 fTrigSrc = hdr->GetTrigSrc();
00719 fSnarl = hdr->GetSnarl();
00720 fDigits = hdr->GetNumRawDigits();
00721
00722
00723 Bool_t good_trigger = 0;
00724 Bool_t plane_trigger = ( (fTrigSrc&TRIGGER_BIT_PLANE) == (TRIGGER_BIT_PLANE) );
00725 Bool_t activity_trigger = ( (fTrigSrc&TRIGGER_BIT_ACTIVITY) == (TRIGGER_BIT_ACTIVITY) );
00726 Bool_t spill_trigger = ( (fTrigSrc&TRIGGER_BIT_SPILL) == (TRIGGER_BIT_SPILL) );
00727
00728 if(plane_trigger) {good_trigger |= 1; fTriggersPlane++; }
00729 if(activity_trigger){good_trigger |= 1; fTriggersActivity++; }
00730 if(spill_trigger) {good_trigger |= 1; fTriggersSpill++; }
00731
00732 if(fCounter>=0){
00733 fCounter++;
00734 if (good_trigger) fGoodCounter++;
00735 }
00736 }
00737 }
00738
00739
00740 void FillNearRunQuality::ProcessBlock(TObject* obj)
00741 {
00742
00743 MSG("FillNearRunQuality",Msg::kDebug) << "*** ProcessBlock *** " << endl;
00744
00745
00746
00747 if( fPhysicsRun<=0 ){
00748 MSG("FillNearRunQuality",Msg::kDebug) << " ProcessBlock : Not a physics run, RETURN" << endl;
00749 return;
00750 }
00751
00752
00753
00754 if(obj->InheritsFrom("RawDaqHeaderBlock")){
00755 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawDaqHeaderBlock " << endl;
00756 RawDaqHeaderBlock* rdb = (RawDaqHeaderBlock*)(obj);
00757 fTrigBaseTime = rdb->GetVldContext().GetTimeStamp().GetNanoSec();
00758 }
00759
00760
00761
00762 if(obj->InheritsFrom("RawSnarlHeaderBlock")){
00763 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawSnarlHeaderBlock " << endl;
00764 RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(obj);
00765 fTrigTime = rdb->GetTriggerTime().GetNanoSec();
00766 }
00767
00768
00769
00770 if(obj->InheritsFrom("RawRunConfigBlock")){
00771 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawRunConfigBlock " << endl;
00772 RawRunConfigBlock* rdb = (RawRunConfigBlock*)(obj);
00773
00774 char* config;
00775 config = (char*)(rdb->GetRunConfig());
00776
00777 MSG("FillNearRunQuality",Msg::kVerbose) << " RUN_CONFIG_BLOCK: " << config << endl;
00778
00779 char* word;
00780 int ctr = 0;
00781 bool cont = 1;
00782 word = strtok(config,";");
00783
00784 while( cont ){
00785 MSG("FillNearRunQuality",Msg::kVerbose) << " (" << ctr << ") " << word << endl;
00786
00787
00788 if( strstr(word,"ropIdMask#") ){
00789 if( (word = strchr(word,'=')) ){
00790 if( strlen(word)>1 ){
00791 word=&(word[1]);
00792 MSG("FillNearRunQuality",Msg::kVerbose) << " word=" << word << endl;
00793 if( fRopMask<0 ) fRopMask = strtol(word,&word,0);
00794 }
00795 }
00796 }
00797
00798
00799 if( strstr(word,"triggerMask#") ){
00800 if( (word = strchr(word,'=')) ){
00801 if( strlen(word)>1 ){
00802 word=&(word[1]);
00803 MSG("FillNearRunQuality",Msg::kVerbose) << " word=" << word << endl;
00804 if( fTriggerMask<0 ) fTriggerMask = strtol(word,&word,0);
00805 }
00806 }
00807 }
00808
00809 cont = ( word = strtok(0,";") );
00810 ctr++;
00811 }
00812
00813
00814 if( fRopMask>=0 ){
00815 Int_t cratemask = 0;
00816 for( Int_t n=0; n<16; n++){
00817 Int_t nbit = ( 1 << n );
00818 if( (fRopMask&nbit)==(nbit) ) cratemask++;
00819 }
00820
00821
00822 }
00823
00824 MSG("FillNearRunQuality",Msg::kDebug) << " RopMask=" << fRopMask << " TriggerMask=" << fTriggerMask << endl;
00825 }
00826
00827
00828
00829 if(obj->InheritsFrom("RawConfigFilesBlock")){
00830 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawConfigFilesBlock " << endl;
00831 RawConfigFilesBlock* rdb = (RawConfigFilesBlock*)(obj);
00832
00833 char* config;
00834 config = (char*)(rdb->GetConfigFile());
00835
00837
00838 }
00839
00840
00841
00842 if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00843
00844 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;
00845 RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00846
00847 Int_t source = rdb->GetSource();
00848 Int_t sourcecheck = 0;
00849
00850 Detector::Detector_t Detector = Detector::kUnknown;
00851
00852 switch( source ){
00853 case 0:
00854 Detector = Detector::kUnknown;
00855 break;
00856 case 1:
00857 Detector = Detector::kFar;
00858 break;
00859 case 2:
00860 Detector = Detector::kFar;
00861 break;
00862 case 3:
00863 Detector = Detector::kFar;
00864 break;
00865 case 4:
00866 Detector = Detector::kUnknown;
00867 break;
00868 case 5:
00869 Detector = Detector::kNear;
00870 break;
00871 case 6:
00872 Detector = Detector::kNear;
00873 break;
00874 case 7:
00875 Detector = Detector::kNear;
00876 sourcecheck = 1;
00877 break;
00878 default:
00879 break;
00880 }
00881
00882 Int_t nbhotmenuscal = 0;
00883 Int_t nbhotmenusspec = 0;
00884
00885
00886 for(int i=0;i<8;i++){
00887 for(int j=0;j<16;j++){
00888 for(int k=0;k<8;k++){
00889 arrayColdMindersCal[i][j][k] = 0;
00890 arrayColdMindersSpec[i][j][k] = 0;
00891 }
00892 }
00893 }
00894
00895
00896
00897 fNbCratesReadout = 0;
00898 Int_t ncrates = rdb->GetNumberOfCrates();
00899
00900 for(int i=0;i<ncrates;i++){
00901 Int_t craterate = rdb->GetHitsPerSecByCrate(i);
00902 if(craterate>0) fNbCratesReadout++;
00903 }
00904
00905
00906
00907 typedef std::map<RawChannelId,UInt_t> RCIdToRateMap;
00908 const RCIdToRateMap& rates = rdb->GetRates();
00909 RCIdToRateMap::const_iterator rateItr = rates.begin();
00910 RCIdToRateMap::const_iterator rateEnd = rates.end();
00911
00912
00913
00914
00915 while(rateItr != rateEnd){
00916
00917 RawChannelId rawch = rateItr->first;
00918 Int_t rawrate = rateItr->second;
00919 fRate = rawrate;
00920 fCrate = rawch.GetCrate();
00921 fMaster = rawch.GetMaster();
00922 fMinder = rawch.GetMinder();
00923 fMenu = rawch.GetMenu();
00924
00925 fNearReadoutInt = fNearReadout->ConnectedMinder(fCrate,fMaster,fMinder);
00926
00927 if(fCrate>1) fInstrumType = kCalorimeter;
00928 else if(fCrate<2) fInstrumType = kSpectrometer;
00929 else fInstrumType = kError;
00930
00931 if(fNearReadoutInt==1){
00932
00933
00934
00935 if( (fInstrumType == kCalorimeter) && fRate < fColdLimitCal){
00936 arrayColdMindersCal[fCrate][fMaster-9][fMinder]++;
00937 }
00938 if( (fInstrumType == kSpectrometer) && fRate < fColdLimitSpec){
00939 arrayColdMindersSpec[fCrate][fMaster-9][fMinder]++;
00940 }
00941
00942
00943
00944 if( (fInstrumType == kCalorimeter) && fRate>fHotLimitCal){
00945 nbhotmenuscal++;
00946 }
00947 if( (fInstrumType == kSpectrometer) && fRate>fHotLimitSpec){
00948 nbhotmenusspec++;
00949 }
00950 }
00951 rateItr++;
00952 }
00953
00954
00955 if(fNbCratesReadout < 8){
00956 fNTimeframesBadCrates++;
00957 }
00958
00959 if(( 8-fNbCratesReadout) > fMaxNbColdCrates) fMaxNbColdCrates = (8-fNbCratesReadout);
00960
00961
00962 Int_t nboffminders = 0;
00963 Int_t nboffchannelstotal = 0;
00964
00965
00966
00967 for(int i=0;i<8;i++){
00968 for(int j=0;j<16;j++){
00969 for(int k=0;k<8;k++){
00970 Int_t offchannels = arrayColdMindersCal[i][j][k];
00971 if(offchannels > 15) nboffminders++;
00972 nboffchannelstotal += offchannels;
00973 }
00974 }
00975 }
00976
00977 if(nboffminders > fMaxNbColdMindersCal) fMaxNbColdMindersCal = nboffminders;
00978 if(nboffchannelstotal > fMaxNbColdMenusCal) fMaxNbColdMenusCal = nboffchannelstotal;
00979 arrayTimeCountColdMenusCal[nboffchannelstotal]++;
00980 arrayTimeCountColdMindersCal[nboffminders]++;
00981
00982 if(nbhotmenuscal > fMaxNbHotMenusCal) fMaxNbHotMenusCal = nbhotmenuscal;
00983 arrayTimeCountHotMenusCal[nbhotmenuscal]++;
00984
00985
00986
00987
00988 nboffminders = 0;
00989 nboffchannelstotal = 0;
00990
00991 for(int i=0;i<8;i++){
00992 for(int j=0;j<16;j++){
00993 for(int k=0;k<8;k++){
00994 Int_t offchannels = arrayColdMindersSpec[i][j][k];
00995 if(offchannels > 15) nboffminders++;
00996 nboffchannelstotal += offchannels;
00997 }
00998 }
00999 }
01000
01001 if(nboffminders > fMaxNbColdMindersSpec) fMaxNbColdMindersSpec = nboffminders;
01002 if(nboffchannelstotal > fMaxNbColdMenusSpec) fMaxNbColdMenusSpec = nboffchannelstotal;
01003 arrayTimeCountColdMenusSpec[nboffchannelstotal]++;
01004 arrayTimeCountColdMindersSpec[nboffminders]++;
01005
01006 if(nbhotmenusspec > fMaxNbHotMenusSpec) fMaxNbHotMenusSpec = nbhotmenusspec;
01007 arrayTimeCountHotMenusSpec[nbhotmenusspec]++;
01008
01009 }
01010
01011
01012
01013
01014 if(obj->InheritsFrom("RawDigitDataBlock")){
01015 MSG("FillNearRunQuality",Msg::kDebug) << " ... found RawDigitDataBlock " << endl;
01016 RawDigitDataBlock* rdb = (RawDigitDataBlock*)(obj);
01017
01018
01019
01020
01021 TIter digitr0 = rdb->GetDatumIter();
01022 Int_t tdc;
01023 Int_t mintdc = 100000000;
01024 Int_t maxtdc = 0;
01025 while(RawDigit *rd = (RawDigit*)(digitr0())){
01026 if (rd){
01027 tdc = (Int_t)(rd->GetTDC());
01028 if( tdc<mintdc ) mintdc = tdc;
01029 if( tdc>maxtdc ) maxtdc = tdc;
01030 }
01031 }
01032 fMinTdc = mintdc;
01033 fMaxTdc = maxtdc;
01034
01035
01036
01037 TIter digitr = rdb->GetDatumIter();
01038 while(RawDigit *rd = (RawDigit*)(digitr())){
01039 if(rd){
01040
01041 RawChannelId rawch = (RawChannelId)(rd->GetChannel());
01042 fCrate = rawch.GetCrate();
01043 fMaster = rawch.GetMaster();
01044 fMinder = rawch.GetMinder();
01045 fMenu = rawch.GetMenu();
01046
01047 fAdc = (Int_t)(rd->GetADC());
01048 fTdc = (Int_t)(rd->GetTDC());
01049 fErrorcode = (Int_t)(rd->GetErrorCode());
01050 fDeltatdc = fTdc - fMinTdc;
01051
01052 fCratet0sec = rd->GetCrateT0().GetSec();
01053 fCratet0nsec = rd->GetCrateT0().GetNanoSec();
01054 fDatatype = rd->GetDataType();
01055
01056
01057 fNearReadoutInt = fNearReadout->ConnectedMinder(fCrate,fMaster,fMinder);
01058
01059
01060 if( (fAdc>100) && (fTrigSrc==65536) ) vAverageAdc[fCrate][fMaster-8][fMinder][fMenu] += fAdc;
01061
01062
01063 if ( fTrigSrc==65536 && fCrate==0 && fMaster==16 && fMinder==0 ) fNbLIChan++;
01064
01065
01066 if( (fErrorcode&0x01)==RawQieDigit::kParityError) vParityChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01067 if( (fErrorcode&0x02)==RawQieDigit::kCapIdError) vCapidChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01068 if( (fErrorcode&0x04)==RawQieDigit::kMisCountError) vMisCntChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01069 if( (fErrorcode&0x08)==RawQieDigit::kPriorityTruncate) vPrTruncChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01070 if( (fErrorcode&0x10)==RawQieDigit::kCapIdSameMenuError) vCapMenuChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01071 if( (fErrorcode&0x20)==RawQieDigit::kCapIdSharedMinderError) vCapMindChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01072 if( (fErrorcode&0x40)==RawQieDigit::kTransferSharedMinderError) vTransferChannel[fCrate][fMaster-8][fMinder][fMenu]++;
01073
01074
01075 if ( (fTrigSrc==65536) && (fAdc>300) ){
01076 if ( fDeltatdc >= fLowCutoff
01077 && fDeltatdc < fLow ) cntLow++;
01078 else if ( fDeltatdc >= fLow
01079 && fDeltatdc < fHigh ) cntGate++;
01080 else if ( fDeltatdc >= fHigh
01081 && fDeltatdc < fHighCutoff ) cntHigh++;
01082 }
01083 }
01084 }
01085 }
01086 return;
01087 }
01088
01089
01090 void FillNearRunQuality::EndSubRun()
01091 {
01092 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::EndSubRun() *** " << endl;
01093 MSG("FillNearRunQuality",Msg::kDebug) << "... EndSubRun : Calculate subrun variables..." << endl;
01094
01095
01096
01097 if( fPhysicsRun<=0 ){
01098 MSG("FillNearRunQuality",Msg::kInfo) << " EndSubRun : Not a physics run, RETURN" << endl;
01099 return;
01100 }
01101
01102
01103
01104 fSubrunLength = fEndTime - fStartTime;
01105 MSG("FillNearRunQuality",Msg::kInfo) << endl << " SUBRUN DURATION : " << fSubrunLength << " s." << endl;
01106
01107
01108
01109 if(fTimeFrames > 0){
01110 Int_t oldtotal = 0;
01111 Int_t newtotal = 0;
01112 Int_t middletotal = (Int_t)(0.5*fTimeFrames);
01113
01114 for(Int_t i=0; i<1001; i++){
01115 oldtotal = newtotal;
01116 newtotal += fSnarlRates[i];
01117 if( oldtotal<=middletotal && middletotal<newtotal ){
01118 fSnarlRateMedian = (float)i - 0.5;
01119 if( newtotal-oldtotal>0 )
01120 fSnarlRateMedian += (float)(middletotal-oldtotal)/(float)(newtotal-oldtotal);
01121 }
01122 }
01123 if(fSnarlRateMedian < fSnarlRateMin) fSnarlRateMedian=fSnarlRateMin;
01124 if(fSnarlRateMedian > fSnarlRateMax) fSnarlRateMedian=fSnarlRateMax;
01125 fSnarlRateMean = ((float)(fSnarls))/((float)(fTimeFrames));
01126 MSG("FillNearRunQuality",Msg::kInfo) << endl << " SNARL RATES SUMMARY " << endl
01127 << " MIN : " << fSnarlRateMin << endl
01128 << " MED : " << fSnarlRateMedian << endl
01129 << " MEAN : " << fSnarlRateMean << endl
01130 << " MAX : " << fSnarlRateMax << endl;
01131 }
01132
01133
01134
01135 MSG("FillNearRunQuality",Msg::kInfo) << endl << " TRIGGER SUMMARY " << endl
01136 << " SGATE Triggers : " << fTriggersSpill << endl
01137 << " Plane Triggers : " << fTriggersPlane << endl
01138 << " Activity Triggers : " << fTriggersActivity << endl
01139 << " Total Snarls : " << fSnarls << endl;
01140
01141
01142
01143 if (fSubrunLength > 0) fLIRate = (Float_t)fNbLIChan / fSubrunLength;
01144 else fLIRate = 0.;
01145 MSG("FillNearRunQuality",Msg::kDebug) << endl << " LI RATE " << endl
01146 << fNbLIChan << " hits in the subrun, making an averaged frequency of " << fLIRate << " Hz" << endl;
01147
01148
01149
01150
01151 Float_t avgadc = 0.;
01152 Float_t caperr = fCapidErrorCut * fSubrunLength;
01153 Float_t parerr = fParityErrorCut* fSubrunLength;
01154 Float_t miserr = fMiscountErrorCut* fSubrunLength;
01155 Float_t trcerr = fPriorTruncErrorCut* fSubrunLength;
01156 Float_t menerr = fSameMenuErrorCut* fSubrunLength;
01157 Float_t minerr = fSharedMinderErrorCut* fSubrunLength;
01158 Float_t trserr = fTransfMinderErrorCut* fSubrunLength;
01159
01160 for(int i=0; i<8; ++i)
01161 for(int j=0; j<16; ++j)
01162 for(int k=0; k<8; ++k)
01163 for(int l=0; l<16; ++l){
01164 if(fTriggersSpill > 0) avgadc = (Float_t)vAverageAdc[i][j][k][l] / fTriggersSpill;
01165 if ( avgadc > fHighAdcCut )
01166 { if (i<2) ++fHighAdcSpec; else ++fHighAdcCal; }
01167 if ( vCapidChannel[i][j][k][l] > caperr )
01168 { if (i<2) ++fNbCapidSpec; else ++fNbCapidCal; }
01169 if ( vParityChannel[i][j][k][l] > parerr )
01170 { if (i<2) ++fNbParitySpec; else ++fNbParityCal; }
01171 if ( vMisCntChannel[i][j][k][l] > miserr )
01172 { if (i<2) ++fNbMisCountSpec; else ++fNbMisCountCal; }
01173 if ( vPrTruncChannel[i][j][k][l] > trcerr )
01174 { if (i<2) ++fNbPriorityTruncSpec; else ++fNbPriorityTruncCal; }
01175 if ( vCapMenuChannel[i][j][k][l] > menerr )
01176 { if (i<2) ++fNbSameMenuSpec; else ++fNbSameMenuCal; }
01177 if ( vCapMindChannel[i][j][k][l] > minerr )
01178 { if (i<2) ++fNbSharedMinderSpec; else ++fNbSharedMinderCal; }
01179 if ( vTransferChannel[i][j][k][l] > trserr )
01180 { if (i<2) ++fNbTransferMinderSpec; else ++fNbTransferMinderCal; }
01181 }
01182
01183 MSG("FillNearRunQuality",Msg::kInfo) << endl << " ERROR SUMMARY" << endl
01184 << " " << fNbCapidSpec+fNbCapidCal << " Channels with more than "
01185 << fCapidErrorCut << " CAPID Errors" << endl
01186 << " " << fNbParitySpec+fNbParityCal << " Channels with more than "
01187 << fParityErrorCut << " Parity Errors." << endl
01188 << " " << fNbMisCountSpec+fNbMisCountCal << " Channels with more than "
01189 << fMiscountErrorCut << " MisCount Errors." << endl
01190 << " " << fNbPriorityTruncSpec+fNbPriorityTruncCal << " Channels with more than "
01191 << fPriorTruncErrorCut << " PriorityTruncate Errors." << endl
01192 << " " << fNbSameMenuSpec+fNbSameMenuCal << " Channels with more than "
01193 << fSameMenuErrorCut << " CapIdSameMenu Errors." << endl
01194 << " " << fNbSharedMinderSpec+fNbSharedMinderCal << " Channels with more than "
01195 << fSharedMinderErrorCut << " CapIdSharedMinder Errors." << endl
01196 << " " << fNbTransferMinderSpec+fNbTransferMinderCal << " Channels with more than "
01197 << fTransfMinderErrorCut << " TransferSharedMinder Errors." << endl;
01198
01199
01200
01201 if( fLow-fLowCutoff>0 ) fAvgLow = ((Float_t)cntLow) / (fLow-fLowCutoff);
01202 if( fHighCutoff-fHigh>0 ) fAvgHigh = ((Float_t)cntHigh) / (fHighCutoff-fHigh);
01203 fAvgGate = ((Float_t)cntGate) / 520;
01204
01205
01206
01207
01208 Int_t timeCounter = 0;
01209
01210
01211
01212 for(int i=(NbConnMenusCal-1);i>0;i--){
01213 timeCounter += arrayTimeCountColdMenusCal[i];
01214 if(timeCounter>=fTimeframeArrayCounter){
01215 fTimeCountMaxColdMenusCal = i; break;}
01216 }
01217
01218 timeCounter = 0;
01219 for(int i=(NbConnMindersCal-1);i>0;i--){
01220 timeCounter += arrayTimeCountColdMindersCal[i];
01221 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMindersCal = i; break;}
01222 }
01223
01224 timeCounter = 0;
01225 for(int i=(NbConnMenusCal-1);i>0;i--){
01226 timeCounter += arrayTimeCountHotMenusCal[i];
01227 if(timeCounter>=fTimeframeArrayCounter){
01228 fTimeCountMaxHotMenusCal = i; break;}
01229 }
01230
01231
01232
01233 timeCounter = 0;
01234 for(int i=(NbConnMenusSpec-1);i>0;i--){
01235 timeCounter += arrayTimeCountColdMenusSpec[i];
01236 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMenusSpec = i; break;}
01237 }
01238
01239 timeCounter = 0;
01240 for(int i=(NbConnMindersSpec-1);i>0;i--){
01241 timeCounter += arrayTimeCountColdMindersSpec[i];
01242 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMindersSpec = i; break;}
01243 }
01244
01245 timeCounter = 0;
01246 for(int i=799;i>0;i--){
01247 timeCounter += arrayTimeCountHotMenusSpec[i];
01248 if(timeCounter>=fTimeframeArrayCounter){
01249 fTimeCountMaxHotMenusSpec = i; break;}
01250 }
01251
01252 this->WriteSubRun();
01253 return;
01254 }
01255
01256
01257 void FillNearRunQuality::WriteSubRun()
01258 {
01259 MSG("FillNearRunQuality",Msg::kInfo) << endl << " *** FillNearRunQuality::WriteSubRun() *** " << endl;
01260
01261
01262
01263 if( fWriteOutDatabaseVariables ) {
01264 fReadWrite = 0;
01265 this->WriteOutDatabaseVariables();
01266 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Write ROOT file... End." << endl;
01267 }
01268
01269
01270
01271 if( fWriteToDatabase ){
01272 this->WriteToDatabase();
01273 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Write To Database... End." << endl;
01274
01275
01276
01277
01278 }
01279
01280
01281
01282 if( fReadFromDatabase ){
01283 this->ReadFromDatabase();
01284 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Read From Database... End." << endl;
01285
01286
01287
01288
01289 }
01290
01291 }
01292
01293
01294 void FillNearRunQuality::WriteOutDatabaseVariables()
01295 {
01296 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::WriteOutDatabaseVariables() *** " << endl;
01297
01298 if( !fDatabaseFile ){
01299 TDirectory* tmpd = gDirectory;
01300 TString filename(fOutputLocation.Data());
01301 filename.Append("/dataquality.databasevariables");
01302 if( fName.Length()>0 ){
01303 filename.Append(".");
01304 filename.Append(fName.Data());
01305 }
01306 filename.Append(".root");
01307 MSG("FillNearRunQuality",Msg::kInfo) << " opening file: " << filename << endl;
01308 fDatabaseFile = new TFile(filename.Data(),"RECREATE");
01309 fDatabaseTree = new TTree("DatabaseVariables","DatabaseVariables");
01310 fDatabaseTree->SetAutoSave(100);
01311 fDatabaseTree->Branch("Run",&fRun,"Run/I");
01312 fDatabaseTree->Branch("Subrun",&fSubRun,"Subrun/I");
01313 fDatabaseTree->Branch("StartTime",&fStartTime,"StartTime/I");
01314 fDatabaseTree->Branch("EndTime",&fEndTime,"EndTime/I");
01315 fDatabaseTree->Branch("Duration",&fSubrunLength,"Duration/I");
01316 fDatabaseTree->Branch("PhysicsRun", &fPhysicsRun,"PhysicsRun/I");
01317 fDatabaseTree->Branch("ModifiedRun", &fModifiedRun,"ModifiedRun/I");
01318 fDatabaseTree->Branch("TestRun", &fTestRun,"TestRun/I");
01319 fDatabaseTree->Branch("TriggersPlane", &fTriggersPlane,"TriggersPlane/I");
01320 fDatabaseTree->Branch("TriggersActivity", &fTriggersActivity,"TriggersActivity/I");
01321 fDatabaseTree->Branch("TriggersSpill", &fTriggersSpill,"TriggersSpill/I");
01322 fDatabaseTree->Branch("RopMask",&fRopMask,"RopMask/I");
01323 fDatabaseTree->Branch("TriggerMask",&fTriggerMask,"TriggerMask/I");
01324 fDatabaseTree->Branch("ColdCrates",&fMaxNbColdCrates,"ColdCrates/I");
01325 fDatabaseTree->Branch("ColdMindersCal",&fMaxNbColdMindersCal,"ColdMindersCal/I");
01326 fDatabaseTree->Branch("ColdMindersSpec",&fMaxNbColdMindersSpec,"ColdMindersSpec/I");
01327 fDatabaseTree->Branch("ColdMenusCal",&fMaxNbColdMenusCal,"ColdMenusCal/I");
01328 fDatabaseTree->Branch("ColdMenusSpec",&fMaxNbColdMenusSpec,"ColdMenusSpec/I");
01329 fDatabaseTree->Branch("HotMenusCal",&fMaxNbHotMenusCal,"HotMenusCal/I");
01330 fDatabaseTree->Branch("HotMenusSpec",&fMaxNbHotMenusSpec,"HotMenusSpec/I");
01331 fDatabaseTree->Branch("TimeCountHotMenusSpec",&fTimeCountMaxHotMenusSpec,"TimeCountHotMenusSpec/I");
01332 fDatabaseTree->Branch("TimeCountHotMenusCal",&fTimeCountMaxHotMenusCal,"TimeCountHotMenusCal/I");
01333 fDatabaseTree->Branch("TimeCountColdMenusSpec",&fTimeCountMaxColdMenusSpec,"TimeCountColdMenusSpec/I");
01334 fDatabaseTree->Branch("TimeCountColdMenusCal",&fTimeCountMaxColdMenusCal,"TimeCountColdMenusCal/I");
01335 fDatabaseTree->Branch("TimeCountColdMindersSpec",&fTimeCountMaxColdMindersSpec,"TimeCountColdMindersSpec/I");
01336 fDatabaseTree->Branch("TimeCountColdMindersCal",&fTimeCountMaxColdMindersCal,"TimeCountColdMindersCal/I");
01337 fDatabaseTree->Branch("LIRate",&fLIRate,"LIRate/F");
01338 fDatabaseTree->Branch("HighAdcSpec",&fHighAdcSpec,"HighAdcSpec/I");
01339 fDatabaseTree->Branch("HighAdcCal",&fHighAdcCal,"HighAdcCal/I");
01340 fDatabaseTree->Branch("CapidSpec",&fNbCapidSpec,"CapidSpec/I");
01341 fDatabaseTree->Branch("CapidCal",&fNbCapidCal,"CapidCal/I");
01342 fDatabaseTree->Branch("ParitySpec",&fNbParitySpec,"ParitySpec/I");
01343 fDatabaseTree->Branch("ParityCal",&fNbParityCal,"ParityCal/I");
01344 fDatabaseTree->Branch("MiscountSpec",&fNbMisCountSpec,"MiscountSpec/I");
01345 fDatabaseTree->Branch("MiscountCal",&fNbMisCountCal,"MiscountCal/I");
01346 fDatabaseTree->Branch("PriorTruncSpec",&fNbPriorityTruncSpec,"PriorTruncSpec/I");
01347 fDatabaseTree->Branch("PriorTruncCal",&fNbPriorityTruncCal,"PriorTruncCal/I");
01348 fDatabaseTree->Branch("SameMenuSpec",&fNbSameMenuSpec,"SameMenuSpec/I");
01349 fDatabaseTree->Branch("SameMenuCal",&fNbSameMenuCal,"SameMenuCal/I");
01350 fDatabaseTree->Branch("SharedMinderSpec",&fNbSharedMinderSpec,"SharedMinderSpec/I");
01351 fDatabaseTree->Branch("SharedMinderCal",&fNbSharedMinderCal,"SharedMinderCal/I");
01352 fDatabaseTree->Branch("TransferMinderSpec",&fNbTransferMinderSpec,"TransferMinderSpec/I");
01353 fDatabaseTree->Branch("TransferMinderCal",&fNbTransferMinderCal,"TransferMinderCal/I");
01354 fDatabaseTree->Branch("TimingAvgLow",&fAvgLow,"TimingAvgLow/F");
01355 fDatabaseTree->Branch("TimingAvgHigh",&fAvgHigh,"TimingAvgHigh/F");
01356 fDatabaseTree->Branch("TimingAvgGate",&fAvgGate,"TimingAvgGate/F");
01357 fDatabaseTree->Branch("SnarlRateMin",&fSnarlRateMin,"SnarlRateMin/I");
01358 fDatabaseTree->Branch("SnarlRateMax",&fSnarlRateMax,"SnarlRateMax/I");
01359 fDatabaseTree->Branch("SnarlRateMedian",&fSnarlRateMedian,"SnarlRateMedian/F");
01360 fDatabaseTree->Branch("SnarlRateMean",&fSnarlRateMean,"SnarlRateMean/F");
01361 fDatabaseTree->Branch("ReadWrite",&fReadWrite,"ReadWrite/I");
01362 gDirectory = tmpd;
01363 }
01364
01365 if( fDatabaseFile ){
01366 TDirectory* tmpd = gDirectory;
01367 fDatabaseFile->cd();
01368 fDatabaseTree->Fill();
01369 gDirectory = tmpd;
01370 }
01371
01372 return;
01373 }
01374
01375 void FillNearRunQuality::WriteOutFile()
01376 {
01377 if(fDatabaseFile){
01378 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::WriteOutFile() *** " << endl;
01379 TDirectory* tmpd = gDirectory;
01380 fDatabaseFile->cd();
01381 fDatabaseTree->Write();
01382 fDatabaseFile->Close();
01383 gDirectory = tmpd;
01384 MSG("FillNearRunQuality",Msg::kInfo) << " closing file. " << endl;
01385 }
01386 }
01387
01388 void FillNearRunQuality::Reset()
01389 {
01390 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::Reset() *** " << endl;
01391
01392 fWriteOutDatabaseVariables = 0;
01393 fDatabaseFile = 0;
01394 fDatabaseTree = 0;
01395 fName = "";
01396 fOutputLocation = ".";
01397 fCapidErrorCut = 100;
01398 fParityErrorCut = 10;
01399 fMiscountErrorCut = 10;
01400 fPriorTruncErrorCut = 10;
01401 fSameMenuErrorCut = 30;
01402 fSharedMinderErrorCut = 10;
01403 fTransfMinderErrorCut = 10;
01404 fHighAdcCut = 1000;
01405
01406 fRecCounter = 0;
01407 fCounter = -1;
01408 fGoodCounter = 0;
01409 fSnarls = 0;
01410 fGoodSnarls = 0;
01411 fTimeFrames = 0;
01412 fSnarlRateMin = -1;
01413 fSnarlRateMax = -1;
01414 fSnarlRateMean = -999.9;
01415 fSnarlRateMedian = -999.9;
01416 fTriggersPlane = 0;
01417 fTriggersActivity = 0;
01418 fTriggersSpill = 0;
01419 fRopMask = -1;
01420 fTriggerMask = -1;
01421
01422 fRun = -1;
01423 fSubRun = -1;
01424 fRunType = -1;
01425 fSnarl = 0;
01426 fTrigSrc = -1;
01427 fDigits = -1;
01428 fTrigTime = -1;
01429 fTrigBaseTime = -1;
01430 fTimeFrame = -1;
01431 fTime = -1;
01432 fAdc = -1;
01433 fTdc = -1;
01434 fDeltatdc = -1;
01435 fCrate = -1;
01436 fMaster = -1;
01437 fMinder = -1;
01438 fMenu = -1;
01439 fCratet0sec = -1;
01440 fCratet0nsec = -1;
01441 fDatatype = -1;
01442 fErrorcode = -1;
01443 fRate = -1;
01444 fNearReadoutInt = -1;
01445 fRopMask = -1;
01446 fTriggerMask = -1;
01447
01448 fPhysicsRun = -1;
01449 fModifiedRun = -1;
01450 fTestRun = -1;
01451 fStartTime = -1;
01452 fEndTime = -1;
01453 fSubrunLength = -1;
01454 fMinTdc = 0;
01455 fMaxTdc = 0;
01456
01457 fNbCratesReadout = 0;
01458 fNTimeframesBadCrates = 0;
01459 fMaxNbColdMindersCal = 0;
01460 fMaxNbColdMindersSpec = 0;
01461 fMaxNbColdCrates = 0;
01462 fMaxNbColdMenusCal = 0;
01463 fMaxNbColdMenusSpec = 0;
01464 fInstrumType = kError;
01465
01466 for(int i=0;i<8;i++){
01467 for(int j=0;j<16;j++){
01468 for(int k=0;k<8;k++){
01469 arrayColdMindersCal[i][j][k] = 0;
01470 arrayColdMindersSpec[i][j][k] = 0;
01471 }
01472 }
01473 }
01474 for(int i=0;i<NbConnMenusSpec;i++) arrayTimeCountColdMenusSpec[i] = 0;
01475 for(int i=0;i<NbConnMindersSpec;i++) arrayTimeCountColdMindersSpec[i] = 0;
01476 for(int i=0;i<NbConnMenusCal;i++) arrayTimeCountColdMenusCal[i] = 0;
01477 for(int i=0;i<NbConnMindersCal;i++) arrayTimeCountColdMindersCal[i] = 0;
01478 for(int i=0;i<NbConnMenusSpec;i++) arrayTimeCountHotMenusSpec[i] = 0;
01479 for(int i=0;i<NbConnMenusCal;i++) arrayTimeCountHotMenusCal[i] = 0;
01480
01481
01482 fMaxNbHotMenusSpec = 0;
01483 fMaxNbHotMenusCal = 0;
01484 fTimeCountMaxHotMenusSpec = 0;
01485 fTimeCountMaxHotMenusCal = 0;
01486 fTimeCountMaxColdMenusSpec = 0;
01487 fTimeCountMaxColdMenusCal = 0;
01488 fTimeCountMaxColdMindersSpec = 0;
01489 fTimeCountMaxColdMindersCal = 0;
01490
01491 fNbLIChan = 0;
01492 fLIRate = 0.;
01493 fHighAdcSpec = 0;
01494 fHighAdcCal = 0;
01495 fNbCapidSpec = 0;
01496 fNbCapidCal = 0;
01497 fNbParitySpec = 0;
01498 fNbParityCal = 0;
01499 fNbMisCountSpec = 0;
01500 fNbMisCountCal = 0;
01501 fNbPriorityTruncSpec = 0;
01502 fNbPriorityTruncCal = 0;
01503 fNbSameMenuSpec = 0;
01504 fNbSameMenuCal = 0;
01505 fNbSharedMinderSpec = 0;
01506 fNbSharedMinderCal = 0;
01507 fNbTransferMinderSpec = 0;
01508 fNbTransferMinderCal = 0;
01509
01510 fLowCutoff = 0;
01511 fLow = 0;
01512 fHigh = 0;
01513 fHighCutoff = 0;
01514
01515 cntLow = 0;
01516 cntGate = 0;
01517 cntHigh = 0;
01518
01519 for(int i=0; i<8; ++i)
01520 for(int j=0; j<16; ++j)
01521 for(int k=0; k<8; ++k)
01522 for(int l=0; l<16; ++l){
01523 vCapidChannel[i][j][k][l] = 0;
01524 vParityChannel[i][j][k][l] = 0;
01525 vMisCntChannel[i][j][k][l] = 0;
01526 vPrTruncChannel[i][j][k][l] = 0;
01527 vCapMenuChannel[i][j][k][l] = 0;
01528 vCapMindChannel[i][j][k][l] = 0;
01529 vTransferChannel[i][j][k][l] = 0;
01530 vAdcPerSnarl[i][j][k][l] = 0;
01531 vAverageAdc[i][j][k][l] = 0;
01532 }
01533 }
01534
01535