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.9 2010/01/02 23:43: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) << " SUBRUN START TIME : " << fStartTime << endl;
01106 MSG("FillNearRunQuality",Msg::kInfo) << " SUBRUN END TIME : " << fEndTime << endl;
01107 MSG("FillNearRunQuality",Msg::kInfo) << " SUBRUN DURATION : " << fSubrunLength << " s." << endl;
01108
01109
01110
01111 if(fTimeFrames > 0){
01112 Int_t oldtotal = 0;
01113 Int_t newtotal = 0;
01114 Int_t middletotal = (Int_t)(0.5*fTimeFrames);
01115
01116 for(Int_t i=0; i<1001; i++){
01117 oldtotal = newtotal;
01118 newtotal += fSnarlRates[i];
01119 if( oldtotal<=middletotal && middletotal<newtotal ){
01120 fSnarlRateMedian = (float)i - 0.5;
01121 if( newtotal-oldtotal>0 )
01122 fSnarlRateMedian += (float)(middletotal-oldtotal)/(float)(newtotal-oldtotal);
01123 }
01124 }
01125 if(fSnarlRateMedian < fSnarlRateMin) fSnarlRateMedian=fSnarlRateMin;
01126 if(fSnarlRateMedian > fSnarlRateMax) fSnarlRateMedian=fSnarlRateMax;
01127 fSnarlRateMean = ((float)(fSnarls))/((float)(fTimeFrames));
01128 MSG("FillNearRunQuality",Msg::kInfo) << endl << " SNARL RATES SUMMARY " << endl
01129 << " MIN : " << fSnarlRateMin << endl
01130 << " MED : " << fSnarlRateMedian << endl
01131 << " MEAN : " << fSnarlRateMean << endl
01132 << " MAX : " << fSnarlRateMax << endl;
01133 }
01134
01135
01136
01137 MSG("FillNearRunQuality",Msg::kInfo) << endl << " TRIGGER SUMMARY " << endl
01138 << " SGATE Triggers : " << fTriggersSpill << endl
01139 << " Plane Triggers : " << fTriggersPlane << endl
01140 << " Activity Triggers : " << fTriggersActivity << endl
01141 << " Total Snarls : " << fSnarls << endl;
01142
01143
01144
01145 if (fSubrunLength > 0) fLIRate = (Float_t)fNbLIChan / fSubrunLength;
01146 else fLIRate = 0.;
01147 MSG("FillNearRunQuality",Msg::kDebug) << endl << " LI RATE " << endl
01148 << fNbLIChan << " hits in the subrun, making an averaged frequency of " << fLIRate << " Hz" << endl;
01149
01150
01151
01152
01153 Float_t avgadc = 0.;
01154 Float_t caperr = fCapidErrorCut * fSubrunLength;
01155 Float_t parerr = fParityErrorCut* fSubrunLength;
01156 Float_t miserr = fMiscountErrorCut* fSubrunLength;
01157 Float_t trcerr = fPriorTruncErrorCut* fSubrunLength;
01158 Float_t menerr = fSameMenuErrorCut* fSubrunLength;
01159 Float_t minerr = fSharedMinderErrorCut* fSubrunLength;
01160 Float_t trserr = fTransfMinderErrorCut* fSubrunLength;
01161
01162 for(int i=0; i<8; ++i)
01163 for(int j=0; j<16; ++j)
01164 for(int k=0; k<8; ++k)
01165 for(int l=0; l<16; ++l){
01166 if(fTriggersSpill > 0) avgadc = (Float_t)vAverageAdc[i][j][k][l] / fTriggersSpill;
01167 if ( avgadc > fHighAdcCut )
01168 { if (i<2) ++fHighAdcSpec; else ++fHighAdcCal; }
01169 if ( vCapidChannel[i][j][k][l] > caperr )
01170 { if (i<2) ++fNbCapidSpec; else ++fNbCapidCal; }
01171 if ( vParityChannel[i][j][k][l] > parerr )
01172 { if (i<2) ++fNbParitySpec; else ++fNbParityCal; }
01173 if ( vMisCntChannel[i][j][k][l] > miserr )
01174 { if (i<2) ++fNbMisCountSpec; else ++fNbMisCountCal; }
01175 if ( vPrTruncChannel[i][j][k][l] > trcerr )
01176 { if (i<2) ++fNbPriorityTruncSpec; else ++fNbPriorityTruncCal; }
01177 if ( vCapMenuChannel[i][j][k][l] > menerr )
01178 { if (i<2) ++fNbSameMenuSpec; else ++fNbSameMenuCal; }
01179 if ( vCapMindChannel[i][j][k][l] > minerr )
01180 { if (i<2) ++fNbSharedMinderSpec; else ++fNbSharedMinderCal; }
01181 if ( vTransferChannel[i][j][k][l] > trserr )
01182 { if (i<2) ++fNbTransferMinderSpec; else ++fNbTransferMinderCal; }
01183 }
01184
01185 MSG("FillNearRunQuality",Msg::kInfo) << endl << " ERROR SUMMARY" << endl
01186 << " " << fNbCapidSpec+fNbCapidCal << " Channels with more than "
01187 << fCapidErrorCut << " CAPID Errors" << endl
01188 << " " << fNbParitySpec+fNbParityCal << " Channels with more than "
01189 << fParityErrorCut << " Parity Errors." << endl
01190 << " " << fNbMisCountSpec+fNbMisCountCal << " Channels with more than "
01191 << fMiscountErrorCut << " MisCount Errors." << endl
01192 << " " << fNbPriorityTruncSpec+fNbPriorityTruncCal << " Channels with more than "
01193 << fPriorTruncErrorCut << " PriorityTruncate Errors." << endl
01194 << " " << fNbSameMenuSpec+fNbSameMenuCal << " Channels with more than "
01195 << fSameMenuErrorCut << " CapIdSameMenu Errors." << endl
01196 << " " << fNbSharedMinderSpec+fNbSharedMinderCal << " Channels with more than "
01197 << fSharedMinderErrorCut << " CapIdSharedMinder Errors." << endl
01198 << " " << fNbTransferMinderSpec+fNbTransferMinderCal << " Channels with more than "
01199 << fTransfMinderErrorCut << " TransferSharedMinder Errors." << endl;
01200
01201
01202
01203 if( fLow-fLowCutoff>0 ) fAvgLow = ((Float_t)cntLow) / (fLow-fLowCutoff);
01204 if( fHighCutoff-fHigh>0 ) fAvgHigh = ((Float_t)cntHigh) / (fHighCutoff-fHigh);
01205 fAvgGate = ((Float_t)cntGate) / 520;
01206
01207
01208
01209
01210 Int_t timeCounter = 0;
01211
01212
01213
01214 for(int i=(NbConnMenusCal-1);i>0;i--){
01215 timeCounter += arrayTimeCountColdMenusCal[i];
01216 if(timeCounter>=fTimeframeArrayCounter){
01217 fTimeCountMaxColdMenusCal = i; break;}
01218 }
01219
01220 timeCounter = 0;
01221 for(int i=(NbConnMindersCal-1);i>0;i--){
01222 timeCounter += arrayTimeCountColdMindersCal[i];
01223 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMindersCal = i; break;}
01224 }
01225
01226 timeCounter = 0;
01227 for(int i=(NbConnMenusCal-1);i>0;i--){
01228 timeCounter += arrayTimeCountHotMenusCal[i];
01229 if(timeCounter>=fTimeframeArrayCounter){
01230 fTimeCountMaxHotMenusCal = i; break;}
01231 }
01232
01233
01234
01235 timeCounter = 0;
01236 for(int i=(NbConnMenusSpec-1);i>0;i--){
01237 timeCounter += arrayTimeCountColdMenusSpec[i];
01238 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMenusSpec = i; break;}
01239 }
01240
01241 timeCounter = 0;
01242 for(int i=(NbConnMindersSpec-1);i>0;i--){
01243 timeCounter += arrayTimeCountColdMindersSpec[i];
01244 if(timeCounter>=fTimeframeArrayCounter){fTimeCountMaxColdMindersSpec = i; break;}
01245 }
01246
01247 timeCounter = 0;
01248 for(int i=799;i>0;i--){
01249 timeCounter += arrayTimeCountHotMenusSpec[i];
01250 if(timeCounter>=fTimeframeArrayCounter){
01251 fTimeCountMaxHotMenusSpec = i; break;}
01252 }
01253
01254
01255
01256 if( fStartTime>=0 && fEndTime>=0
01257 && fSubrunLength>0 && fTimeFrames>0 ){
01258 this->WriteSubRun();
01259 }
01260 else{
01261 MSG("FillNearRunQuality",Msg::kWarning) << " *** Run has no timeframes, no database entry will be created *** " << endl;
01262 }
01263
01264 return;
01265 }
01266
01267
01268 void FillNearRunQuality::WriteSubRun()
01269 {
01270 MSG("FillNearRunQuality",Msg::kInfo) << endl << " *** FillNearRunQuality::WriteSubRun() *** " << endl;
01271
01272
01273
01274 if( fWriteOutDatabaseVariables ) {
01275 fReadWrite = 0;
01276 this->WriteOutDatabaseVariables();
01277 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Write ROOT file... End." << endl;
01278 }
01279
01280
01281
01282 if( fWriteToDatabase ){
01283 this->WriteToDatabase();
01284 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Write To Database... End." << endl;
01285
01286
01287
01288
01289 }
01290
01291
01292
01293 if( fReadFromDatabase ){
01294 this->ReadFromDatabase();
01295 MSG("FillNearRunQuality",Msg::kDebug) << endl << "... EndSubRun : Read From Database... End." << endl;
01296
01297
01298
01299
01300 }
01301
01302 }
01303
01304
01305 void FillNearRunQuality::WriteOutDatabaseVariables()
01306 {
01307 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::WriteOutDatabaseVariables() *** " << endl;
01308
01309 if( !fDatabaseFile ){
01310 TDirectory* tmpd = gDirectory;
01311 TString filename(fOutputLocation.Data());
01312 filename.Append("/dataquality.databasevariables");
01313 if( fName.Length()>0 ){
01314 filename.Append(".");
01315 filename.Append(fName.Data());
01316 }
01317 filename.Append(".root");
01318 MSG("FillNearRunQuality",Msg::kInfo) << " opening file: " << filename << endl;
01319 fDatabaseFile = new TFile(filename.Data(),"RECREATE");
01320 fDatabaseTree = new TTree("DatabaseVariables","DatabaseVariables");
01321 fDatabaseTree->SetAutoSave(100);
01322 fDatabaseTree->Branch("Run",&fRun,"Run/I");
01323 fDatabaseTree->Branch("Subrun",&fSubRun,"Subrun/I");
01324 fDatabaseTree->Branch("StartTime",&fStartTime,"StartTime/I");
01325 fDatabaseTree->Branch("EndTime",&fEndTime,"EndTime/I");
01326 fDatabaseTree->Branch("Duration",&fSubrunLength,"Duration/I");
01327 fDatabaseTree->Branch("PhysicsRun", &fPhysicsRun,"PhysicsRun/I");
01328 fDatabaseTree->Branch("ModifiedRun", &fModifiedRun,"ModifiedRun/I");
01329 fDatabaseTree->Branch("TestRun", &fTestRun,"TestRun/I");
01330 fDatabaseTree->Branch("TriggersPlane", &fTriggersPlane,"TriggersPlane/I");
01331 fDatabaseTree->Branch("TriggersActivity", &fTriggersActivity,"TriggersActivity/I");
01332 fDatabaseTree->Branch("TriggersSpill", &fTriggersSpill,"TriggersSpill/I");
01333 fDatabaseTree->Branch("RopMask",&fRopMask,"RopMask/I");
01334 fDatabaseTree->Branch("TriggerMask",&fTriggerMask,"TriggerMask/I");
01335 fDatabaseTree->Branch("ColdCrates",&fMaxNbColdCrates,"ColdCrates/I");
01336 fDatabaseTree->Branch("ColdMindersCal",&fMaxNbColdMindersCal,"ColdMindersCal/I");
01337 fDatabaseTree->Branch("ColdMindersSpec",&fMaxNbColdMindersSpec,"ColdMindersSpec/I");
01338 fDatabaseTree->Branch("ColdMenusCal",&fMaxNbColdMenusCal,"ColdMenusCal/I");
01339 fDatabaseTree->Branch("ColdMenusSpec",&fMaxNbColdMenusSpec,"ColdMenusSpec/I");
01340 fDatabaseTree->Branch("HotMenusCal",&fMaxNbHotMenusCal,"HotMenusCal/I");
01341 fDatabaseTree->Branch("HotMenusSpec",&fMaxNbHotMenusSpec,"HotMenusSpec/I");
01342 fDatabaseTree->Branch("TimeCountHotMenusSpec",&fTimeCountMaxHotMenusSpec,"TimeCountHotMenusSpec/I");
01343 fDatabaseTree->Branch("TimeCountHotMenusCal",&fTimeCountMaxHotMenusCal,"TimeCountHotMenusCal/I");
01344 fDatabaseTree->Branch("TimeCountColdMenusSpec",&fTimeCountMaxColdMenusSpec,"TimeCountColdMenusSpec/I");
01345 fDatabaseTree->Branch("TimeCountColdMenusCal",&fTimeCountMaxColdMenusCal,"TimeCountColdMenusCal/I");
01346 fDatabaseTree->Branch("TimeCountColdMindersSpec",&fTimeCountMaxColdMindersSpec,"TimeCountColdMindersSpec/I");
01347 fDatabaseTree->Branch("TimeCountColdMindersCal",&fTimeCountMaxColdMindersCal,"TimeCountColdMindersCal/I");
01348 fDatabaseTree->Branch("LIRate",&fLIRate,"LIRate/F");
01349 fDatabaseTree->Branch("HighAdcSpec",&fHighAdcSpec,"HighAdcSpec/I");
01350 fDatabaseTree->Branch("HighAdcCal",&fHighAdcCal,"HighAdcCal/I");
01351 fDatabaseTree->Branch("CapidSpec",&fNbCapidSpec,"CapidSpec/I");
01352 fDatabaseTree->Branch("CapidCal",&fNbCapidCal,"CapidCal/I");
01353 fDatabaseTree->Branch("ParitySpec",&fNbParitySpec,"ParitySpec/I");
01354 fDatabaseTree->Branch("ParityCal",&fNbParityCal,"ParityCal/I");
01355 fDatabaseTree->Branch("MiscountSpec",&fNbMisCountSpec,"MiscountSpec/I");
01356 fDatabaseTree->Branch("MiscountCal",&fNbMisCountCal,"MiscountCal/I");
01357 fDatabaseTree->Branch("PriorTruncSpec",&fNbPriorityTruncSpec,"PriorTruncSpec/I");
01358 fDatabaseTree->Branch("PriorTruncCal",&fNbPriorityTruncCal,"PriorTruncCal/I");
01359 fDatabaseTree->Branch("SameMenuSpec",&fNbSameMenuSpec,"SameMenuSpec/I");
01360 fDatabaseTree->Branch("SameMenuCal",&fNbSameMenuCal,"SameMenuCal/I");
01361 fDatabaseTree->Branch("SharedMinderSpec",&fNbSharedMinderSpec,"SharedMinderSpec/I");
01362 fDatabaseTree->Branch("SharedMinderCal",&fNbSharedMinderCal,"SharedMinderCal/I");
01363 fDatabaseTree->Branch("TransferMinderSpec",&fNbTransferMinderSpec,"TransferMinderSpec/I");
01364 fDatabaseTree->Branch("TransferMinderCal",&fNbTransferMinderCal,"TransferMinderCal/I");
01365 fDatabaseTree->Branch("TimingAvgLow",&fAvgLow,"TimingAvgLow/F");
01366 fDatabaseTree->Branch("TimingAvgHigh",&fAvgHigh,"TimingAvgHigh/F");
01367 fDatabaseTree->Branch("TimingAvgGate",&fAvgGate,"TimingAvgGate/F");
01368 fDatabaseTree->Branch("SnarlRateMin",&fSnarlRateMin,"SnarlRateMin/I");
01369 fDatabaseTree->Branch("SnarlRateMax",&fSnarlRateMax,"SnarlRateMax/I");
01370 fDatabaseTree->Branch("SnarlRateMedian",&fSnarlRateMedian,"SnarlRateMedian/F");
01371 fDatabaseTree->Branch("SnarlRateMean",&fSnarlRateMean,"SnarlRateMean/F");
01372 fDatabaseTree->Branch("ReadWrite",&fReadWrite,"ReadWrite/I");
01373 gDirectory = tmpd;
01374 }
01375
01376 if( fDatabaseFile ){
01377 TDirectory* tmpd = gDirectory;
01378 fDatabaseFile->cd();
01379 fDatabaseTree->Fill();
01380 gDirectory = tmpd;
01381 }
01382
01383 return;
01384 }
01385
01386 void FillNearRunQuality::WriteOutFile()
01387 {
01388 if(fDatabaseFile){
01389 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::WriteOutFile() *** " << endl;
01390 TDirectory* tmpd = gDirectory;
01391 fDatabaseFile->cd();
01392 fDatabaseTree->Write();
01393 fDatabaseFile->Close();
01394 gDirectory = tmpd;
01395 MSG("FillNearRunQuality",Msg::kInfo) << " closing file. " << endl;
01396 }
01397 }
01398
01399 void FillNearRunQuality::Reset()
01400 {
01401 MSG("FillNearRunQuality",Msg::kInfo) << " *** FillNearRunQuality::Reset() *** " << endl;
01402
01403 fWriteOutDatabaseVariables = 0;
01404 fDatabaseFile = 0;
01405 fDatabaseTree = 0;
01406 fName = "";
01407 fOutputLocation = ".";
01408 fCapidErrorCut = 100;
01409 fParityErrorCut = 10;
01410 fMiscountErrorCut = 10;
01411 fPriorTruncErrorCut = 10;
01412 fSameMenuErrorCut = 30;
01413 fSharedMinderErrorCut = 10;
01414 fTransfMinderErrorCut = 10;
01415 fHighAdcCut = 1000;
01416
01417 fRecCounter = 0;
01418 fCounter = -1;
01419 fGoodCounter = 0;
01420 fSnarls = 0;
01421 fGoodSnarls = 0;
01422 fTimeFrames = 0;
01423 fSnarlRateMin = -1;
01424 fSnarlRateMax = -1;
01425 fSnarlRateMean = -999.9;
01426 fSnarlRateMedian = -999.9;
01427 fTriggersPlane = 0;
01428 fTriggersActivity = 0;
01429 fTriggersSpill = 0;
01430 fRopMask = -1;
01431 fTriggerMask = -1;
01432
01433 fRun = -1;
01434 fSubRun = -1;
01435 fRunType = -1;
01436 fSnarl = 0;
01437 fTrigSrc = -1;
01438 fDigits = -1;
01439 fTrigTime = -1;
01440 fTrigBaseTime = -1;
01441 fTimeFrame = -1;
01442 fTime = -1;
01443 fAdc = -1;
01444 fTdc = -1;
01445 fDeltatdc = -1;
01446 fCrate = -1;
01447 fMaster = -1;
01448 fMinder = -1;
01449 fMenu = -1;
01450 fCratet0sec = -1;
01451 fCratet0nsec = -1;
01452 fDatatype = -1;
01453 fErrorcode = -1;
01454 fRate = -1;
01455 fNearReadoutInt = -1;
01456 fRopMask = -1;
01457 fTriggerMask = -1;
01458
01459 fPhysicsRun = -1;
01460 fModifiedRun = -1;
01461 fTestRun = -1;
01462 fStartTime = -1;
01463 fEndTime = -1;
01464 fSubrunLength = -1;
01465 fMinTdc = 0;
01466 fMaxTdc = 0;
01467
01468 fNbCratesReadout = 0;
01469 fNTimeframesBadCrates = 0;
01470 fMaxNbColdMindersCal = 0;
01471 fMaxNbColdMindersSpec = 0;
01472 fMaxNbColdCrates = 0;
01473 fMaxNbColdMenusCal = 0;
01474 fMaxNbColdMenusSpec = 0;
01475 fInstrumType = kError;
01476
01477 for(int i=0;i<8;i++){
01478 for(int j=0;j<16;j++){
01479 for(int k=0;k<8;k++){
01480 arrayColdMindersCal[i][j][k] = 0;
01481 arrayColdMindersSpec[i][j][k] = 0;
01482 }
01483 }
01484 }
01485 for(int i=0;i<NbConnMenusSpec;i++) arrayTimeCountColdMenusSpec[i] = 0;
01486 for(int i=0;i<NbConnMindersSpec;i++) arrayTimeCountColdMindersSpec[i] = 0;
01487 for(int i=0;i<NbConnMenusCal;i++) arrayTimeCountColdMenusCal[i] = 0;
01488 for(int i=0;i<NbConnMindersCal;i++) arrayTimeCountColdMindersCal[i] = 0;
01489 for(int i=0;i<NbConnMenusSpec;i++) arrayTimeCountHotMenusSpec[i] = 0;
01490 for(int i=0;i<NbConnMenusCal;i++) arrayTimeCountHotMenusCal[i] = 0;
01491
01492
01493 fMaxNbHotMenusSpec = 0;
01494 fMaxNbHotMenusCal = 0;
01495 fTimeCountMaxHotMenusSpec = 0;
01496 fTimeCountMaxHotMenusCal = 0;
01497 fTimeCountMaxColdMenusSpec = 0;
01498 fTimeCountMaxColdMenusCal = 0;
01499 fTimeCountMaxColdMindersSpec = 0;
01500 fTimeCountMaxColdMindersCal = 0;
01501
01502 fNbLIChan = 0;
01503 fLIRate = 0.;
01504 fHighAdcSpec = 0;
01505 fHighAdcCal = 0;
01506 fNbCapidSpec = 0;
01507 fNbCapidCal = 0;
01508 fNbParitySpec = 0;
01509 fNbParityCal = 0;
01510 fNbMisCountSpec = 0;
01511 fNbMisCountCal = 0;
01512 fNbPriorityTruncSpec = 0;
01513 fNbPriorityTruncCal = 0;
01514 fNbSameMenuSpec = 0;
01515 fNbSameMenuCal = 0;
01516 fNbSharedMinderSpec = 0;
01517 fNbSharedMinderCal = 0;
01518 fNbTransferMinderSpec = 0;
01519 fNbTransferMinderCal = 0;
01520
01521 fLowCutoff = 0;
01522 fLow = 0;
01523 fHigh = 0;
01524 fHighCutoff = 0;
01525
01526 cntLow = 0;
01527 cntGate = 0;
01528 cntHigh = 0;
01529
01530 for(int i=0; i<8; ++i)
01531 for(int j=0; j<16; ++j)
01532 for(int k=0; k<8; ++k)
01533 for(int l=0; l<16; ++l){
01534 vCapidChannel[i][j][k][l] = 0;
01535 vParityChannel[i][j][k][l] = 0;
01536 vMisCntChannel[i][j][k][l] = 0;
01537 vPrTruncChannel[i][j][k][l] = 0;
01538 vCapMenuChannel[i][j][k][l] = 0;
01539 vCapMindChannel[i][j][k][l] = 0;
01540 vTransferChannel[i][j][k][l] = 0;
01541 vAdcPerSnarl[i][j][k][l] = 0;
01542 vAverageAdc[i][j][k][l] = 0;
01543 }
01544 }
01545
01546