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

FarDetDataQualityModule.cxx

Go to the documentation of this file.
00001 
00002 #include "FarDetDataQualityModule.h"
00003 
00004 #include "FarDetDataQualityHandle.h"
00005 #include "FarDetDeadChipHandle.h"
00006 #include "SnarlHeader.h"
00007 #include "LiHeader.h"
00008 #include "VarcErrHeader.h"
00009 #include "SpillServHeader.h"
00010 
00011 #include "Algorithm/AlgConfig.h"
00012 #include "Algorithm/AlgFactory.h"
00013 #include "Algorithm/AlgHandle.h"
00014 
00015 #include "MessageService/MsgService.h"     
00016 #include "MinosObjectMap/MomNavigator.h"   
00017 #include "JobControl/JobCommand.h"         
00018 #include "JobControl/JobCModuleRegistry.h" 
00019 
00020 #include "RawData/RawRecord.h"
00021 #include "RawData/RawHeader.h"
00022 #include "RawData/RawDaqHeader.h"
00023 #include "RawData/RawDaqSnarlHeader.h"
00024 #include "RawData/RawDigit.h"
00025 #include "RawData/RawChannelId.h"
00026 
00027 #include "RawData/RawDaqHeaderBlock.h"
00028 #include "RawData/RawSnarlHeaderBlock.h"
00029 #include "RawData/RawRunStartBlock.h"
00030 #include "RawData/RawRunEndBlock.h"
00031 #include "RawData/RawSubRunEndBlock.h"
00032 #include "RawData/RawTpSinglesSummaryBlock.h"
00033 #include "RawData/RawVarcErrorInTfBlock.h"
00034 #include "RawData/RawSpillServerMonitorBlock.h"
00035 #include "RawData/RawLiTpmtDigitsBlock.h"
00036 #include "RawData/RawLIAdcSummaryBlock.h"
00037 #include "RawData/RawDigitDataBlock.h"
00038 
00039 #include "CandData/CandRecord.h"
00040 #include "CandData/CandHeader.h"
00041 #include "Candidate/CandContext.h"
00042 
00043 #include "Validity/VldContext.h"
00044 #include "Validity/VldTimeStamp.h"
00045 
00046 #include "TDirectory.h"
00047 #include "TString.h"
00048 
00049 #include "VaChip.h"
00050 
00051 
00052 ClassImp(FarDetDataQualityModule)
00053 
00054 CVSID("$Id: FarDetDataQualityModule.cxx,v 1.2 2006/04/21 17:40:11 blake Exp $");
00055 
00056 JOBMODULE(FarDetDataQualityModule,"FarDetDataQualityModule","FarDetDataQualityModule");
00057 
00058 FarDetDataQualityModule::FarDetDataQualityModule() :
00059   fDataQualityFile(0),
00060   fDataQualityTree(0),
00061   fRunSummaryFile(0),
00062   fRunSummaryTree(0),
00063   fFilterOnOff(0),
00064   fSummaryOnOff(0),
00065   fReducedSummaryOnOff(0),
00066   fRun(-1),
00067   fSubRun(-1),
00068   fSnarl(0),
00069   fTimeFrame(-1),
00070   fEnd(0),
00071   fUpdate(0),
00072   fFilter(0),
00073   fFilterMinCrateMask(32),
00074   fFilterMinChannels(10),
00075   fFilterMaxChannels(1000),
00076   fFilterMaxBadChips(20),
00077   fFilterMaxLiChannels(500),
00078   fSnarlHeader(0),
00079   fLiHeader(0),
00080   fVarcErrHeader(0),
00081   fSpillServHeader(0),
00082   fBusyChipList(0),
00083   fBadChipList(0),
00084   fTpmtChipList(0)
00085 {
00086   MSG("FarDetDataQualityModule",Msg::kInfo) << " *** FarDetDataQualityModule::FarDetDataQualityModule() *** " << endl;
00087   fSnarlHeader = new SnarlHeader();
00088   fLiHeader = new LiHeader();
00089   fVarcErrHeader = new VarcErrHeader();
00090   fSpillServHeader = new SpillServHeader();
00091   fBusyChipList = new TObjArray();
00092   fBadChipList = new TObjArray();
00093   fTpmtChipList = new TObjArray();  
00094 
00095   fCratePlnRates = new Int_t[32];
00096   RScratePlnRates = new Int_t[32];
00097   cratePlnRates = new Int_t[32];
00098 }
00099 
00100 FarDetDataQualityModule::~FarDetDataQualityModule()
00101 {
00102   if(fSnarlHeader) delete fSnarlHeader; 
00103   if(fLiHeader) delete fLiHeader;
00104   if(fVarcErrHeader) delete fVarcErrHeader;
00105   if(fSpillServHeader) delete fSpillServHeader;
00106   if(fBusyChipList){ fBusyChipList->Delete(); delete fBusyChipList; }
00107   if(fBadChipList){ fBadChipList->Delete(); delete fBadChipList; }
00108   if(fTpmtChipList){ fTpmtChipList->Delete(); delete fTpmtChipList; }
00109 
00110   delete [] fCratePlnRates;
00111   delete [] RScratePlnRates;
00112   delete [] cratePlnRates;
00113 }
00114 
00115 void FarDetDataQualityModule::BeginJob()
00116 {
00117   MSG("FarDetDataQualityModule",Msg::kInfo) << " *** FarDetDataQualityModule::BeginJob() *** " << endl;
00118 
00119   /*
00120   AlgFactory &af = AlgFactory::GetInstance();
00121   af.Register("AlgFarDetDataQuality","default","libFarDetDataQuality.so","AlgConfig");
00122   af.Register("AlgFarDetDeadChip","default","libFarDetDataQuality.so","AlgConfig");
00123   */
00124 
00125   Int_t tmpPlnMask[16][24]={
00126    { 1, 5, 9, 13, 17, -1, 
00127     21, 25, 29, 33, 37, 41, 
00128     45, 49, 53, 57, 61, -999, 
00129     -1, -1, -1, -1, -1, -1 },
00130    { 45, 49, 53, 57, 61, -999, 
00131     21, 25, 29, 33, 37, 41, 
00132     1, 5, 9, 13, 17, -1, 
00133     -1, -1, -1, -1, -1, -1 },
00134    { 65, 69, 73, 77, 81, -1, 
00135     85, 89, 93, 97, 101, 105, 
00136     109, 113, 117, 121, 125, -999, 
00137     -1, -1, -1, -1, -1, -1 },
00138    { 109, 113, 117, 121, 125, -999, 
00139     85, 89, 93, 97, 101, 105, 
00140     65, 69, 73, 77, 81, -1, 
00141     -1, -1, -1, -1, -1, -1 },
00142    { 129, 133, 137, 141, 145, -1, 
00143     149, 153, 157, 161, 165, 169, 
00144     173, 177, 181, 185, 189, -999, 
00145     -1, -1, -1, -1, -1, -1 },
00146    { 173, 177, 181, 185, 189, -999, 
00147     149, 153, 157, 161, 165, 169, 
00148     129, 133, 137, 141, 145, -1, 
00149     -1, -1, -1, -1, -1, -1 },
00150    { 193, 197, 201, 205, 209, -1, 
00151     213, 217, 221, 225, 229, -1, 
00152     233, 237, 241, 245, -1, -999, 
00153     -1, -1, -1, -1, -1, -1 },
00154    { 233, 237, 241, 245, -1, -999, 
00155     213, 217, 221, 225, 229, -1, 
00156     193, 197, 201, 205, 209, -1, 
00157     -1, -1, -1, -1, -1, -1 },
00158    { 250, 254, 258, 262, 266, -999, 
00159     270, 274, 278, 282, 286, 290, 
00160     294, 298, 302, 306, 310, -1, 
00161     -1, -1, -1, -1, -1, -1 },
00162    { 294, 298, 302, 306, 310, -1, 
00163     270, 274, 278, 282, 286, 290, 
00164     250, 254, 258, 262, 266, -999, 
00165     -1, -1, -1, -1, -1, -1 },
00166    { 314, 318, 322, 326, 330, -1, 
00167     334, 338, 342, 346, 350, 354, 
00168     358, 362, 366, 370, 374, -999, 
00169     -1, -1, -1, -1, -1, -1 },
00170    { 358, 362, 366, 370, 374, -1, 
00171     334, 338, 342, 346, 350, 354, 
00172     314, 318, 322, 326, 330, -999, 
00173     -1, -1, -1, -1, -1, -1 },
00174    { 378, 382, 386, 390, 394, -1, 
00175     398, 402, 406, 410, 414, 418, 
00176     422, 426, 430, 434, 438, -999, 
00177     -1, -1, -1, -1, -1, -1 },
00178    { 422, 426, 430, 434, 438, -1, 
00179     398, 402, 406, 410, 414, 418, 
00180     378, 382, 386, 390, 394, -999, 
00181     -1, -1, -1, -1, -1, -1 },
00182    { 442, 446, 450, 454, 458, -999, 
00183     462, 466, 470, 474, 478, 482, 
00184     -1, -1, -1, -1, -1, -1, 
00185     -1, -1, -1, -1, -1, -1 },
00186    { -1, -1, -1, -1, -1, -1, 
00187     462, 466, 470, 474, 478, 482, 
00188     442, 446, 450, 454, 458, -999, 
00189     -1, -1, -1, -1, -1, -1 },
00190   };
00191 
00192   for(Int_t i=0;i<16;i++){
00193     for(Int_t j=0;j<24;j++){
00194       PlnMask[i][j]=tmpPlnMask[i][j];
00195     }
00196   }
00197 
00198   Int_t tmpShldMask[16][6]={
00199     { 12,-1,-1,10,11,11 },
00200     { 12,-1,-1,10,11,11 },
00201     { 22,-1,-1,20,21,21 },
00202     { 22,-1,-1,20,21,21 },
00203     { 12,-1,-1,10,11,11 },
00204     { 12,-1,-1,10,11,11 },
00205     { 22,-1,-1,20,21,21 },
00206     { 22,-1,-1,20,21,21 },
00207     { 32,-1,-1,30,31,31 },
00208     { 32,-1,-1,30,31,31 },
00209     { 40,41,41,42,-1,-1 },
00210     { 40,41,41,42,-1,-1 },
00211     { 32,-1,-1,30,31,31 },
00212     { 32,-1,-1,30,31,31 },
00213     { 40,41,41,42,-1,-1 },
00214     { 40,41,41,42,-1,-1 },
00215   };
00216 
00217   for(Int_t i=0;i<16;i++){
00218     for(Int_t j=0;j<6;j++){
00219       ShldMask[i][j]=tmpShldMask[i][j];
00220     }
00221   }
00222 
00223   Int_t tmpLiBoxMask[22]={
00224     -1, -1,
00225     14, 1, 7, 8,
00226     4, 10, 13, 3,
00227     11, 5, 2, 12,
00228     0, 6, 9, 15,
00229     -1, -1, -1, -1 
00230   };
00231 
00232   for(Int_t i=0;i<22;i++){
00233     LiBoxMask[i]=tmpLiBoxMask[i];
00234   }
00235 }
00236 
00237 JobCResult FarDetDataQualityModule::Reco(MomNavigator *mom) 
00238 {
00239   MSG("FarDetDataQualityModule",Msg::kDebug) << " *** FarDetDataQualityModule::Reco(...) *** " << endl;
00240 
00241   fSnarl=0; fFilter=0; fUpdate=0;
00242   JobCResult result(JobCResult::kPassed);
00243 
00244   // process data blocks
00245   VldContext vldc;
00246   Int_t foundit = 0;
00247   TObject* momobject = 0;
00248   TIter momitr(mom->FragmentIter());
00249   while((momobject = momitr())){
00250     if(momobject->InheritsFrom("RawRecord")){
00251       foundit=1;
00252       MSG("FarDetDataQualityModule",Msg::kDebug) << "  *** FOUND RAW RECORD ***  " << endl;
00253       RawRecord* rawrec = dynamic_cast<RawRecord*>(momobject);
00254 
00255       // process the raw header
00256       vldc = rawrec->GetRawHeader()->GetVldContext();
00257       this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00258 
00259       // process the raw blocks
00260       TIter rawrecitr = rawrec->GetRawBlockIter();
00261       TObject* tob = 0;
00262       while((tob = rawrecitr())){
00263         MSG("FarDetDataQualityModule",Msg::kDebug) << tob->GetName() << endl;
00264         this->ProcessBlock(tob);
00265       }
00266 
00267     }
00268   }
00269 
00270   if( !foundit ){
00271     MSG("FarDetDataQualityModule",Msg::kWarning) << "  *** FAILED TO FIND RAW RECORD ***  " << endl; 
00272     return result.SetFailed();
00273   }
00274 
00275   // make data quality handle
00276   if( fSnarl ){
00277     MSG("FarDetDataQualityModule",Msg::kDebug) << "  *** MAKE HANDLE *** " << endl;
00278     run=fSnarlHeader->GetRun(); 
00279     snarl=fSnarlHeader->GetSnarl();
00280  
00281     CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00282     if(candrec==0) {
00283       CandHeader *head = new CandHeader(vldc,run,snarl);
00284       candrec = new CandRecord(head);
00285       candrec->SetName("PrimaryCandidateRecord");
00286       candrec->SetTitle("Created from RawRecord.");
00287       mom->AdoptFragment(candrec);
00288     }
00289 
00290     AlgFactory &af = AlgFactory::GetInstance();
00291     AlgHandle ah = af.GetAlgHandle("AlgFarDetDataQuality", "default");
00292   
00293     TObjArray* mycx = new TObjArray();    
00294     mycx->Add(fSnarlHeader); 
00295     mycx->Add(fBadChipList); 
00296     mycx->Add(fBusyChipList);
00297     mycx->Add(fLiHeader); 
00298     mycx->Add(fTpmtChipList);
00299     mycx->Add(fVarcErrHeader);
00300     mycx->Add(fSpillServHeader);
00301 
00302     CandContext cx(this, mom);
00303     cx.SetCandRecord(candrec);
00304     cx.SetDataIn(mycx);
00305     FarDetDataQualityHandle fardet = FarDetDataQuality::MakeCandidate(ah,cx);
00306     fardet.SetName("FarDetDataQualityHandle");
00307     fardet.SetTitle(TString("Created by FarDetDataQualityModule"));
00308 
00309     candrec->SecureCandHandle(fardet);
00310 
00311     delete mycx;
00312   }
00313 
00314   // timeframe summary
00315   if( fSummaryOnOff ){    
00316 
00317     if(fUpdate){ // THIS GETS SET AFTER TPSINGLES,(SUB)RUNEND BLOCKS
00318                  // BUT THERE MUST BE A BETTER WAY OF DOING IT
00319                  // DOESN'T WORK ON MONTE CARLO
00320       MSG("FarDetDataQualityModule",Msg::kDebug) << "  *** TIMEFRAME SUMMARY *** " << endl;
00321 
00322       if(fRunSummaryFile){
00323         run=RSrun; 
00324         subrun=RSsubrun;
00325         date=RSdate;
00326         time=RStime;
00327         timeframe=RStimeframe; 
00328         hotPlnChips=RShotPlnChips;
00329         coldPlnChips=RScoldPlnChips;
00330         coldPlnChipsSM1=RScoldPlnChipsSM1;
00331         coldPlnChipsSM2=RScoldPlnChipsSM2;
00332         coldShldChips=RScoldShldChips;
00333         coldShldChipsSM1=RScoldShldChipsSM1;
00334         coldShldChipsSM2=RScoldShldChipsSM2;
00335         snarlRate=RSsnarlRate; 
00336         passRate=RSpassRate; 
00337         liBox=RSlibox;
00338         liLed=RSliled;
00339         sparsErrors=RSsparsErrors;
00340         etcErrors=RSetcErrors;
00341         for(Int_t myint=0; myint<32; myint++){
00342           cratePlnRates[myint]=RScratePlnRates[myint];
00343         }
00344 
00345         TDirectory* tmpddd = gDirectory;
00346         fRunSummaryFile->cd();
00347         fRunSummaryTree->Fill();
00348         gDirectory = tmpddd;
00349 
00350         MSG("FarDetDataQualityModule",Msg::kDebug) 
00351           << "  *** Run Summary *** " << endl
00352           << "   run = " << run << endl
00353           << "   subrun = " << subrun << endl
00354           << "   date = " << date << endl
00355           << "   time = " << time << endl
00356           << "   timeframe = " << timeframe << endl
00357           << "   snarlRate = " << snarlRate << endl
00358           << "   passRate = " << passRate << endl
00359           << "   liBox = " << liBox << endl
00360           << "   liLed = " << liLed << endl
00361           << "   hotPlnChips = " << hotPlnChips << endl
00362           << "   coldPlnChips = " << coldPlnChips << endl
00363           << "   coldPlnChipsSM1 = " << coldPlnChipsSM1 << endl
00364           << "   coldPlnChipsSM2 = " << coldPlnChipsSM2 << endl
00365           << "   coldShldChips = " << coldShldChips << endl
00366           << "   coldShldChipsSM1 = " << coldShldChipsSM1 << endl
00367           << "   coldShldChipsSM2 = " << coldShldChipsSM2 << endl
00368           << "   sparsErrors = " << sparsErrors << endl
00369           << "   etcErrors = " << etcErrors << endl; 
00370 
00371       }
00372 
00373       if(!fRunSummaryFile){
00374         TDirectory* tmpddd = gDirectory;
00375         // TString mystring("results/fardet.summary");
00376         // mystring.Append("."); mystring+=fRun; 
00377         // mystring.Append(".root");
00378         TString mystring("fardet.summary.root");
00379         MSG("FarDetDataQualityModule",Msg::kDebug) << "    ... creating new file : " << mystring.Data() << endl;
00380         fRunSummaryFile = new TFile(mystring.Data(),"RECREATE");
00381         fRunSummaryTree = new TTree("RunSummary","RunSummary");
00382         fRunSummaryTree->SetAutoSave(60);
00383         MSG("FarDetDataQualityModule",Msg::kDebug) << "        recording livetime info ... " << endl;
00384         fRunSummaryTree->Branch("run",&run,"run/I");
00385         fRunSummaryTree->Branch("subrun",&subrun,"subrun/I");
00386         fRunSummaryTree->Branch("date",&date,"date/I");
00387         fRunSummaryTree->Branch("time",&time,"time/I");
00388         fRunSummaryTree->Branch("timeframe",&timeframe,"timeframe/I");
00389         if( !fReducedSummaryOnOff ){
00390           MSG("FarDetDataQualityModule",Msg::kDebug) << "       recording data quality info ... " << mystring.Data() << endl;
00391           fRunSummaryTree->Branch("snarlRate",&snarlRate,"snarlRate/I");
00392           fRunSummaryTree->Branch("passRate",&passRate,"passRate/I");
00393           fRunSummaryTree->Branch("hotPlnChips",&hotPlnChips,"hotPlnChips/I");
00394           fRunSummaryTree->Branch("coldPlnChips",&coldPlnChips,"coldPlnChips/I");
00395           fRunSummaryTree->Branch("coldPlnChipsSM1",&coldPlnChipsSM1,"coldPlnChipsSM1/I");
00396           fRunSummaryTree->Branch("coldPlnChipsSM2",&coldPlnChipsSM2,"coldPlnChipsSM2/I");
00397           fRunSummaryTree->Branch("coldShldChips",&coldShldChips,"coldShldChips/I");
00398           fRunSummaryTree->Branch("coldShldChipsSM1",&coldShldChipsSM1,"coldShldChipsSM1/I");
00399           fRunSummaryTree->Branch("coldShldChipsSM2",&coldShldChipsSM2,"coldShldChipsSM2/I");
00400           fRunSummaryTree->Branch("cratePlnRates",cratePlnRates,"cratePlnRates[32]/I");
00401           fRunSummaryTree->Branch("sparsErrors",&sparsErrors,"sparsErrors/I");
00402           fRunSummaryTree->Branch("etcErrors",&etcErrors,"etcErrors/I");
00403           fRunSummaryTree->Branch("liBox",&liBox,"liBox/I");
00404           fRunSummaryTree->Branch("liLed",&liLed,"liLed/I");
00405         }
00406         gDirectory = tmpddd;
00407       }
00408 
00409       RSrun=fSnarlHeader->GetRun(); 
00410       RSsubrun=fSnarlHeader->GetSubRun(); 
00411       RSdate=fSnarlHeader->GetDate();
00412       RStime=fSnarlHeader->GetTime();
00413       RStimeframe=fSnarlHeader->GetTimeFrame();
00414 
00415       RShotPlnChips=fHotPlnChips;
00416       RScoldPlnChips=fColdPlnChips;
00417       RScoldPlnChipsSM1=fColdPlnChipsSM1;
00418       RScoldPlnChipsSM2=fColdPlnChipsSM2;
00419       RScoldShldChips=fColdShldChips;
00420       RScoldShldChipsSM1=fColdShldChipsSM1;
00421       RScoldShldChipsSM2=fColdShldChipsSM2;
00422       
00423       for(Int_t myint=0; myint<32; myint++){
00424         RScratePlnRates[myint]=fCratePlnRates[myint];
00425       }
00426 
00427       RSsnarlRate=0;
00428       RSpassRate=0;
00429 
00430       RSlibox=-1; 
00431       RSliled=-1;
00432       if(fLiHeader->GetTimeFrame()==fTimeFrame){
00433         if( RSlibox<0 ){
00434           RSlibox=fLiHeader->GetBox(); RSliled=fLiHeader->GetLed();
00435         }
00436         if( RSlibox<0 ){
00437           RSlibox=fLiHeader->GetTpmtBox(); RSliled=-1;
00438         }
00439       }
00440 
00441       RSetcErrors=0;
00442       RSsparsErrors=0;
00443       if(fVarcErrHeader->GetTimeFrame()==fTimeFrame){
00444         RSetcErrors=fEtcErrors;
00445         RSsparsErrors=fSparsErrors;
00446       }
00447 
00448     }
00449   }
00450 
00451   // data quality filter
00452   if( fSnarl ){
00453     MSG("FarDetDataQualityModule",Msg::kDebug) << "  *** QUALITY FILTER... " << endl;
00454 
00455     CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00456     if( candrec ){
00457       FarDetDataQualityHandle* fardet = dynamic_cast<FarDetDataQualityHandle*>(candrec->FindCandHandle("FarDetDataQualityHandle"));
00458       if( fardet ){
00459         fFilter = this->ApplyFilter(fardet);
00460       }
00461     }
00462   }
00463 
00464   // count pass/fail events
00465   if( fSummaryOnOff ){
00466     if( fSnarl ){
00467       RSsnarlRate++; if( fFilter ) RSpassRate++;
00468     }
00469   }
00470 
00471   // apply filter
00472   if( fFilterOnOff ){
00473     MSG("FarDetDataQualityModule",Msg::kDebug) << "  *** APPLY FILTER *** " << endl;
00474   
00475     if( fFilter ){
00476       MSG("FarDetDataQualityModule",Msg::kDebug) << "   *** PASSED FILTER *** " << endl;      
00477       return result.SetPassed(); 
00478     }
00479     else{
00480       MSG("FarDetDataQualityModule",Msg::kDebug) << "   *** FAILED FILTER *** " << endl;      
00481       return result.SetFailed();
00482     } 
00483   }
00484 
00485   return result;
00486 }
00487 
00488 JobCResult FarDetDataQualityModule::Ana(const MomNavigator *mom) 
00489 {
00490 
00491   MSG("FarDetDataQualityModule",Msg::kDebug) << " *** FarDetDataQualityModule::Ana(...) *** " << endl;
00492 
00493   JobCResult result(JobCResult::kPassed);
00494 
00495   CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00496   if( candrec ){
00497     FarDetDataQualityHandle* fardet = dynamic_cast<FarDetDataQualityHandle*>(candrec->FindCandHandle("FarDetDataQualityHandle"));
00498     if( fardet ){
00499 
00500       if(!fDataQualityFile){
00501         // TString mystring("./results/fardet.quality");
00502         // mystring.Append("."); mystring+=fRun; 
00503         // mystring.Append(".root");
00504         TString mystring("fardet.quality.root");
00505         TDirectory* tmpddd = gDirectory;
00506         fDataQualityFile = new TFile(mystring.Data(),"RECREATE");
00507         fDataQualityTree = new TTree("QualityTree","QualityTree");
00508         fDataQualityTree->SetAutoSave(300);
00509         fDataQualityTree->Branch("run",&run,"run/I");
00510         fDataQualityTree->Branch("subrun",&subrun,"subrun/I");
00511         fDataQualityTree->Branch("snarl",&snarl,"snarl/I");
00512         fDataQualityTree->Branch("date",&date,"date/I");
00513         fDataQualityTree->Branch("time",&time,"time/I");
00514         fDataQualityTree->Branch("timeframe",&timeframe,"timeframe/I");
00515         fDataQualityTree->Branch("microsec",&microsec,"microsec/I");
00516         fDataQualityTree->Branch("nanosec",&nanosec,"nanosec/I");
00517         fDataQualityTree->Branch("crateMask",&crateMask,"crateMask/I");
00518         fDataQualityTree->Branch("deadPlnChips",&deadPlnChips,"deadPlnChips/I");
00519         fDataQualityTree->Branch("hotPlnChips",&hotPlnChips,"hotPlnChips/I");
00520         fDataQualityTree->Branch("coldPlnChips",&coldPlnChips,"coldPlnChips/I");
00521         fDataQualityTree->Branch("busyPlnChips",&busyPlnChips,"busyPlnChips/I");
00522         fDataQualityTree->Branch("deadShldChips",&deadShldChips,"deadShldChips/I");
00523         fDataQualityTree->Branch("hotShldChips",&hotShldChips,"hotShldChips/I");
00524         fDataQualityTree->Branch("coldShldChips",&coldShldChips,"coldShldChips/I");
00525         fDataQualityTree->Branch("busyShldChips",&busyShldChips,"busyShldChips/I");
00526         fDataQualityTree->Branch("liBox",&liBox,"liBox/I");
00527         fDataQualityTree->Branch("liLed",&liLed,"liLed/I");
00528         fDataQualityTree->Branch("liPulseHeight",&liPulseHeight,"liPulseHeight/I");
00529         fDataQualityTree->Branch("liPulseWidth",&liPulseWidth,"liPulseWidth/I");
00530         fDataQualityTree->Branch("tpmtBox",&tpmtBox,"tpmtBox/I");
00531         fDataQualityTree->Branch("tpmtNanosec",&tpmtNanosec,"tpmtNanosec/I");
00532         fDataQualityTree->Branch("sparsErrors",&sparsErrors,"sparsErrors/I");
00533         fDataQualityTree->Branch("etcErrors",&etcErrors,"etcErrors/I");
00534         fDataQualityTree->Branch("spillStatus",&spillStatus,"spillStatus/I");
00535         fDataQualityTree->Branch("spillType",&spillType,"spillType/I");
00536         fDataQualityTree->Branch("spillGpsError",&spillGpsError,"spillGpsError/I");
00537         fDataQualityTree->Branch("liChannels",&liChannels,"liChannels/I");
00538         fDataQualityTree->Branch("hitPlnChannels",&hitPlnChannels,"hitPlnChannels/I");
00539         fDataQualityTree->Branch("hitShldChannels",&hitShldChannels,"hitShldChannels/I");
00540         gDirectory = tmpddd;
00541       }
00542 
00543       if(fDataQualityFile){
00544         run=fardet->GetRun();
00545         subrun=fardet->GetSubRun();
00546         snarl=fardet->GetSnarl();
00547         date=fardet->GetDate();
00548         time=fardet->GetTime();
00549         timeframe=fardet->GetTimeFrame();
00550         microsec=fardet->GetMicrosec();
00551         nanosec=fardet->GetNanosec();
00552         crateMask=fardet->GetCrateMask();
00553         deadPlnChips=fardet->GetDeadPlnChips();
00554         hotPlnChips=fardet->GetHotPlnChips();
00555         coldPlnChips=fardet->GetColdPlnChips();
00556         busyPlnChips=fardet->GetBusyPlnChips();
00557         deadShldChips=fardet->GetDeadShldChips();
00558         hotShldChips=fardet->GetHotShldChips();
00559         coldShldChips=fardet->GetColdShldChips();
00560         busyShldChips=fardet->GetBusyShldChips();
00561         liBox=fardet->GetLiBox();
00562         liLed=fardet->GetLiLed();
00563         liPulseHeight=fardet->GetLiPulseHeight();
00564         liPulseWidth=fardet->GetLiPulseWidth();
00565         tpmtBox=fardet->GetTpmtBox();
00566         tpmtNanosec=fardet->GetTpmtNanosec();
00567         sparsErrors=fardet->GetSparsErrors();
00568         etcErrors=fardet->GetEtcErrors();
00569         spillStatus=fardet->GetSpillStatus();
00570         spillType=fardet->GetSpillType();
00571         spillGpsError=fardet->GetSpillGpsError();
00572         liChannels=fardet->GetLiChannels();
00573         hitPlnChannels=fardet->GetHitPlnChannels();
00574         hitShldChannels=fardet->GetHitShldChannels();
00575 
00576         TDirectory* tmpddd = gDirectory;
00577         fDataQualityFile->cd();
00578         fDataQualityTree->Fill();
00579         gDirectory = tmpddd;
00580 
00581         MSG("FarDetDataQualityModule",Msg::kDebug) 
00582           << "  *** Data Quality *** " << endl
00583           << "   run = " << run << endl
00584           << "   subrun = " << subrun << endl
00585           << "   snarl = " << snarl << endl
00586           << "   date = " << date << endl
00587           << "   time = " << time << endl
00588           << "   timeframe = " << timeframe << endl
00589           << "   microsec = " << microsec << endl
00590           << "   nanosec = " << nanosec << endl
00591           << "   crateMask = " << crateMask << endl
00592           << "   deadPlnChips = " << deadPlnChips << endl
00593           << "   hotPlnChips = " << hotPlnChips << endl
00594           << "   coldPlnChips = " << coldPlnChips << endl
00595           << "   busyPlnChips = " << busyPlnChips << endl
00596           << "   deadShldChips = " << deadShldChips << endl
00597           << "   hotShldChips = " << hotShldChips << endl
00598           << "   coldShldChips = " << coldShldChips << endl
00599           << "   busyShldChips = " << busyShldChips << endl
00600           << "   liBox = " << liBox << endl
00601           << "   liLed = " << liLed << endl
00602           << "   liPulseHeight = " << liPulseHeight << endl
00603           << "   liPulseWidth = " << liPulseWidth << endl
00604           << "   tpmtBox = " << tpmtBox << endl
00605           << "   tpmtNanosec = " << tpmtNanosec << endl
00606           << "   sparsErrors = " << sparsErrors << endl
00607           << "   etcErrors = " << etcErrors << endl
00608           << "   spillStatus = " << spillStatus << endl
00609           << "   spillType = " << spillType << endl
00610           << "   spillGpsError = " << spillGpsError << endl
00611           << "   liChannels = " << liChannels << endl
00612           << "   hitPlnChannels = " << hitPlnChannels << endl
00613           << "   hitShldChannels = " << hitShldChannels << endl;
00614       }
00615 
00616     }
00617   }
00618 
00619   return result;
00620 }
00621 
00622 const Registry& FarDetDataQualityModule::DefaultConfig() const
00623 {
00624   MSG("FarDetDataQualityModule",Msg::kInfo) << " *** FarDetDataQualityModule::DefaultConfig() *** " << endl;
00625 
00626   static Registry r;
00627   r.SetName("FarDetDataQualityModule.config.default");
00628   r.UnLockValues();
00629   r.Set("FilterOnOff",fFilterOnOff);
00630   r.Set("FilterMinChannels",fFilterMinChannels);
00631   r.Set("FilterMaxChannels",fFilterMaxChannels);
00632   r.Set("FilterMaxBadChips",fFilterMaxBadChips);
00633   r.Set("FilterMaxLiChannels",fFilterMaxLiChannels);
00634   r.Set("SummaryOnOff",fSummaryOnOff);
00635   r.Set("ReducedSummaryOnOff",fReducedSummaryOnOff);
00636   r.LockValues();
00637 
00638   return r;
00639 }
00640   
00641 void FarDetDataQualityModule::Config(const Registry &r)
00642 {
00643   MSG("FarDetDataQualityModule",Msg::kInfo) << " *** FarDetDataQualityModule::Config() *** " << endl;
00644 
00645   Int_t tmpint;
00646 
00647   if(r.Get("FilterOnOff",tmpint)) fFilterOnOff = tmpint;
00648   if(r.Get("FilterMinChannels",tmpint)) fFilterMinChannels = tmpint;
00649   if(r.Get("FilterMaxChannels",tmpint)) fFilterMaxChannels = tmpint;
00650   if(r.Get("FilterMaxBadChips",tmpint)) fFilterMaxBadChips = tmpint;
00651   if(r.Get("FilterMaxLiChannels",tmpint)) fFilterMaxLiChannels = tmpint;
00652   if(r.Get("SummaryOnOff",tmpint)) fSummaryOnOff = tmpint;
00653   if(r.Get("ReducedSummaryOnOff",tmpint)) fReducedSummaryOnOff = tmpint;
00654 
00655   MSG("FarDetDataQualityModule",Msg::kInfo) 
00656     << "  configuration: " << endl
00657     << "     FilterOnOff=" << fFilterOnOff << endl
00658     << "     FilterMinChannels=" << fFilterMinChannels << endl
00659     << "     FilterMaxChannels=" << fFilterMaxChannels << endl
00660     << "     FilterMaxBadChips=" << fFilterMaxBadChips << endl
00661     << "     FilterMaxLiChannels=" << fFilterMaxLiChannels << endl
00662     << "     SummaryOnOff=" << fSummaryOnOff << endl
00663     << "     ReducedSummaryOnOff=" << fReducedSummaryOnOff << endl;
00664 
00665   return;
00666 }
00667  
00668 void FarDetDataQualityModule::HandleCommand(JobCommand *command)
00669 {
00670   TString cmd = command->PopCmd();
00671   if(cmd=="Set"){
00672     TString opt = command->PopOpt();
00673 
00674   }
00675 }
00676 
00677 void FarDetDataQualityModule::EndJob() 
00678 {
00679   MSG("FarDetDataQualityModule",Msg::kInfo) << " *** FarDetDataQualityModule::EndJob() *** " << endl;
00680 
00681   if(fDataQualityFile){
00682     MSG("FarDetDataQualityModule",Msg::kDebug) << " *** saving DATA QUALITY INFO to file *** " << endl;
00683     TDirectory* tmpddd = gDirectory;
00684     fDataQualityFile->cd();
00685     fDataQualityTree->Write();
00686     fDataQualityFile->Close();
00687     gDirectory = tmpddd;
00688     MSG("FarDetDataQualityModule",Msg::kDebug) << "    ... data saved to file " << endl;
00689   }
00690 
00691   if(fRunSummaryFile){
00692     MSG("FarDetDataQualityModule",Msg::kDebug) << " *** saving RUN SUMMARY INFO to file *** " << endl;
00693     TDirectory* tmpddd = gDirectory;
00694     fRunSummaryFile->cd();
00695     fRunSummaryTree->Write();
00696     fRunSummaryFile->Close();
00697     gDirectory = tmpddd;
00698     MSG("FarDetDataQualityModule",Msg::kDebug) << "    ... data saved to file *** " << endl;
00699   }
00700 
00701 }
00702 
00703 void FarDetDataQualityModule::ProcessHeader(TObject* obj)
00704 {
00705   // Daq Header
00706   if(obj->InheritsFrom("RawDaqHeader")){
00707     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawDaqHeader " << endl;
00708     RawDaqHeader* hdr = (RawDaqHeader*)(obj);
00709     run = hdr->GetRun();
00710     subrun = hdr->GetSubRun();
00711     snarl = -1;
00712     timeframe = hdr->GetTimeFrameNum();
00713     date = (((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetSec()-1059696000)/(3600*24);
00714     time = (((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetSec()-1059696000)%(3600*24);
00715     nanosec = (Int_t)(1.000*((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetNanoSec()); 
00716     microsec = (Int_t)(0.001*((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetNanoSec()); 
00717     fSnarlHeader->SetHeader(run,subrun,snarl,date,time,timeframe,microsec,nanosec);
00718     if(fRun<0||run!=fRun){
00719       fRun=run;
00720       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** RUN = " << fRun << " *** " << endl;
00721     }
00722     if(fSubRun<0||subrun!=fSubRun){
00723       fSubRun=subrun;
00724       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** SUBRUN = " << fSubRun << " *** " << endl;
00725     }
00726     if(fTimeFrame<0||timeframe!=fTimeFrame){
00727       fTimeFrame=timeframe;
00728       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** " << fTimeFrame << " seconds *** " << endl;
00729     }
00730   }
00731 
00732   // DaqSnarl Header
00733   if(obj->InheritsFrom("RawDaqSnarlHeader")){
00734     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawDaqSnarlHeader " << endl;
00735     RawDaqSnarlHeader* hdr = (RawDaqSnarlHeader*)(obj);
00736     run = hdr->GetRun();
00737     subrun = hdr->GetSubRun();
00738     snarl = hdr->GetSnarl();
00739     timeframe = hdr->GetTimeFrameNum();
00740     date = (((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetSec()-1059696000)/(3600*24);
00741     time = (((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetSec()-1059696000)%(3600*24);
00742     nanosec = (Int_t)(1.000*((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetNanoSec()); 
00743     microsec = (Int_t)(0.001*((VldTimeStamp)(hdr->GetVldContext().GetTimeStamp())).GetNanoSec()); 
00744     fSnarlHeader->SetHeader(run,subrun,snarl,date,time,timeframe,microsec,nanosec);
00745     if(fRun<0||run!=fRun){
00746       fRun=run;
00747       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** RUN = " << fRun << " *** " << endl;    
00748     }
00749     if(fSubRun<0||subrun!=fSubRun){
00750       fSubRun=subrun;
00751       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** SUBRUN = " << fSubRun << " *** " << endl;
00752     }
00753     if(fTimeFrame<0||timeframe!=fTimeFrame){
00754       fTimeFrame=timeframe;
00755       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** " << fTimeFrame << " seconds *** " << endl;
00756     }
00757   }
00758 
00759   return;
00760 }
00761 
00762 void FarDetDataQualityModule::ProcessBlock(TObject* obj)
00763 {
00764   Int_t id,chid;
00765   Int_t plane,shld;
00766   Int_t crate,varc,vmm,vaadc,vachip,vachannel;
00767   Int_t vaparam,vatime;
00768   Int_t calibpoint,calibtype,box,led,pulseheight,pulsewidth;
00769   UShort_t timeBlock,crateid,varcId,etcId,errCode;
00770   Int_t spillstatus,spilltype,spillerror;
00771   Int_t licrate,liflag;
00772 
00773   /***********************************
00774    * S T A R T / E N D   B L O C K S *
00775    ***********************************/
00776 
00777   if(obj->InheritsFrom("RawRunStartBlock")){
00778      MSG("FarDetDataQualityModule",Msg::kDebug) << " *** START OF RUN *** " << endl; 
00779     fEnd=0;
00780   }
00781 
00782   if(obj->InheritsFrom("RawRunEndBlock")){
00783     MSG("FarDetDataQualityModule",Msg::kDebug) << " *** END OF RUN *** " << endl; 
00784     if(fEnd==0){ fEnd=1; fUpdate=1; }
00785   }
00786 
00787   if(obj->InheritsFrom("RawSubRunEndBlock")){
00788     MSG("FarDetDataQualityModule",Msg::kDebug) << " *** END OF SUBRUN *** " << endl; 
00789     if(fEnd==0){ fEnd=1; fUpdate=1; }
00790   }
00791 
00792   /*****************************
00793    * H E A D E R   B L O C K S *
00794    *****************************/  
00795 
00796   if(obj->InheritsFrom("RawDaqHeaderBlock")){
00797     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawDaqHeaderBlock " << endl;
00798     RawDaqHeaderBlock* rdb = (RawDaqHeaderBlock*)(obj);
00799     run = rdb->GetRun();
00800     subrun = rdb->GetSubRun();
00801     snarl = -1;
00802     timeframe = rdb->GetTimeFrameNum();
00803     date = (((VldTimeStamp)(rdb->GetTimeStamp())).GetSec()-1059696000)/(3600*24);
00804     time = (((VldTimeStamp)(rdb->GetTimeStamp())).GetSec()-1059696000)%(3600*24);
00805     nanosec = (Int_t)(1.000*((VldTimeStamp)(rdb->GetTimeStamp())).GetNanoSec()); 
00806     microsec = (Int_t)(0.001*((VldTimeStamp)(rdb->GetTimeStamp())).GetNanoSec()); 
00807     fSnarlHeader->SetHeader(run,subrun,snarl,date,time,timeframe,microsec,nanosec);
00808     if(fRun<0||run!=fRun){
00809       fRun=run;
00810       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** RUN = " << fRun << " *** " << endl;  
00811     }
00812     if(fSubRun<0||subrun!=fSubRun){
00813       fSubRun=subrun;
00814       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** SUBRUN = " << fSubRun << " *** " << endl;
00815     }
00816     if(fTimeFrame<0||timeframe!=fTimeFrame){
00817       fTimeFrame=timeframe;
00818       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** " << fTimeFrame << " seconds *** " << endl;
00819     }
00820   }
00821 
00822   if(obj->InheritsFrom("RawSnarlHeaderBlock")){
00823     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawSnarlHeaderBlock " << endl;
00824     RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(obj);
00825     run = rdb->GetRun();
00826     subrun = rdb->GetSubRun();
00827     snarl = rdb->GetSnarl();
00828     timeframe = rdb->GetTimeFrameNum();
00829     date = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)/(3600*24);
00830     time = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)%(3600*24);
00831     nanosec = (Int_t)(1.000*((VldTimeStamp)(rdb->GetTriggerTime())).GetNanoSec()); 
00832     microsec = (Int_t)(0.001*((VldTimeStamp)(rdb->GetTriggerTime())).GetNanoSec()); 
00833     fSnarlHeader->SetHeader(run,subrun,snarl,date,time,timeframe,microsec,nanosec);
00834     if(fRun<0||run!=fRun){
00835       fRun=run;
00836       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** RUN = " << fRun << " *** " << endl;
00837     }
00838     if(fSubRun<0||subrun!=fSubRun){
00839       fSubRun=subrun;
00840       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** SUBRUN = " << fSubRun << " *** " << endl;
00841     }
00842     if(fTimeFrame<0||timeframe!=fTimeFrame){
00843       fTimeFrame=timeframe;
00844       MSG("FarDetDataQualityModule",Msg::kInfo) << "    *** " << fTimeFrame << " seconds *** " << endl;
00845     }
00846   }
00847 
00848   /*******************************
00849    * M O N I T O R   B L O C K S *
00850    *******************************/
00851 
00852   if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00853     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;  
00854     RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00855     fCrateMask=0;
00856     fHotPlnChips=0; 
00857     fColdPlnChips=0; fColdPlnChipsSM1=0; fColdPlnChipsSM2=0;
00858     fColdShldChips=0; fColdShldChipsSM1=0; fColdShldChipsSM2=0;
00859     for( Int_t myint=0; myint<32; myint++){ fCratePlnRates[myint]=0; }
00860     fBadChipList->Delete();
00861     licrate=-1;
00862     if( ( fLiHeader->GetTimeFrame()==fTimeFrame )
00863      && ( fLiHeader->GetBox()>-1 || fLiHeader->GetTpmtBox()>-1 ) ){
00864       if(licrate<0 && fLiHeader->GetBox()>-1) licrate=2*(fLiHeader->GetBox()/2);
00865       if(licrate<0 && fLiHeader->GetTpmtBox()>-1) licrate=2*(fLiHeader->GetTpmtBox()/2);
00866     }
00867     typedef std::map<RawChannelId,UInt_t> RCIdToRateMap;
00868     const RCIdToRateMap& rates = rdb->GetRates();  
00869     RCIdToRateMap::const_iterator rateItr = rates.begin();
00870     RCIdToRateMap::const_iterator rateEnd = rates.end();
00871     while ( rateItr != rateEnd ) {
00872       RawChannelId rawch = rateItr->first;
00873       crate = rawch.GetCrate();
00874       varc = rawch.GetVarcId();
00875       vmm = rawch.GetVmm();
00876       vaadc = rawch.GetVaAdcSel();
00877       vachip = rawch.GetVaChip();
00878       vachannel = -1; 
00879       plane = -1; 
00880       shld = -1;
00881       vaparam = rateItr->second; 
00882       vatime = 0;
00883       if( crate<16 && varc<3 && vmm<6 && vaadc<2 && vachip<3 ){
00884         plane=PlnMask[crate][6*varc+vmm]; liflag=0;
00885         if( plane<-1 ) shld=ShldMask[crate][3*vaadc+vachip];
00886         if( plane>=0 ) fCratePlnRates[2*crate+vaadc]+=vaparam;
00887         if( crate>=licrate && crate<=licrate+1 ) liflag=1;
00888         if( plane>=0 || shld>=0 ){
00889           if( (vaparam<50)||(vaparam>2500&&liflag==0&&shld<0) ){
00890             chid=-1;
00891             for(id=0;id<1+fBadChipList->GetLast();id++){
00892               if(chid<0){
00893                 VaChip* mychip = (VaChip*)(fBadChipList->At(id));
00894                 if(mychip->IsSameVaChip(crate,varc,vmm,vaadc,vachip)) chid=id;
00895               }
00896             }
00897             if(chid<0){
00898               VaChip* mynewchip = new VaChip(crate,varc,vmm,vaadc,vachip,plane,shld,vatime);
00899               if(vaparam<50) mynewchip->SetVaChipStatus(VaChip::kCold);
00900               if(vaparam>2500) mynewchip->SetVaChipStatus(VaChip::kHot);
00901               if(shld>=0){ 
00902                 if(vaparam<50){
00903                   fColdPlnChips++; 
00904                   if( shld<29 ) fColdShldChipsSM1++; if( shld>29 ) fColdShldChipsSM2++; }
00905               }
00906               if(plane>=0){ 
00907                 if(vaparam<50){
00908                   fColdPlnChips++;
00909                   if( plane<249 ) fColdPlnChipsSM1++; if( plane>249 ) fColdPlnChipsSM2++; }
00910                 if(vaparam>2500){
00911                   fHotPlnChips++; } 
00912               }
00913               fBadChipList->Add(mynewchip);
00914               MSG("FarDetDataQualityModule",Msg::kVerbose) << "    ... BAD CHIP " << crate << "-" << varc << "-" << vmm << "-" << vaadc << "-" << vachip << "  " << vaparam << endl;
00915             }
00916           }
00917         }
00918       }   
00919       rateItr++;
00920     }
00921     for( Int_t myint=0; myint<32; myint++){ 
00922       if( fCratePlnRates[myint]>5000 ) fCrateMask++; 
00923     }
00924     fSnarlHeader->SetCrateMask(fCrateMask);
00925     fUpdate=1;
00926   }
00927  
00928   if(obj->InheritsFrom("RawVarcErrorInTfBlock")){
00929     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawVarcErrorInTfBlock" << endl;
00930     RawVarcErrorInTfBlock* rdb = (RawVarcErrorInTfBlock*)(obj);
00931     timeframe=fTimeFrame;
00932     if( timeframe!=fVarcErrHeader->GetTimeFrame() ){
00933       fVarcErrHeader->SetHeader(timeframe);
00934       fSparsErrors=0; fEtcErrors=0;
00935       fVarcErrHeader->SetSparsErrors(0); 
00936       fVarcErrHeader->SetEtcErrors(0);
00937     }
00938     crateid = rdb->GetCrateId()-1792;
00939     crate=crateid;
00940     if( !(crate>=0 && crate<16) ){
00941       MSG("FarDetDataQualityModule",Msg::kWarning) << "   ERROR IN VARC ERROR BLOCK: CRATEID = " << crate << endl;
00942     }
00943     if( crate>=0 && crate<16 ){
00944       fSparsErrors+=rdb->GetNumberOfSparsErrors();
00945       fVarcErrHeader->SetSparsErrors(fSparsErrors);
00946       for(Int_t k=0;k<rdb->GetNumberOfSparsErrors();k++){
00947         rdb->UnpackSparsError(k,timeBlock,varcId,errCode);
00948         // unpack errors here
00949       }
00950       MSG("FarDetDataQualityModule",Msg::kVerbose) << "    ... CRATE: " << crateid << " SPARS ERRORS: " << rdb->GetNumberOfSparsErrors() << " (CURRENT TOTAL IN TF: " << fSparsErrors << ")" << endl;
00951       fEtcErrors+=rdb->GetNumberOfEtcErrors(); 
00952       fVarcErrHeader->SetEtcErrors(fEtcErrors);
00953       for(Int_t k=0;k<rdb->GetNumberOfEtcErrors();k++){
00954         rdb->UnpackEtcError(k,timeBlock,varcId,etcId,errCode);
00955         // unpack errors here
00956       }
00957       MSG("FarDetDataQualityModule",Msg::kVerbose) << "    ... CRATE: " << crateid << " ETC ERRORS: " << rdb->GetNumberOfEtcErrors() << " (CURRENT TOTAL IN TF: " << fEtcErrors << ")" << endl;
00958     }
00959   }
00960 
00961   if(obj->InheritsFrom("RawSpillServerMonitorBlock")){
00962     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawSpillServerMonitorBlock " << endl;
00963     RawSpillServerMonitorBlock* rdb = (RawSpillServerMonitorBlock*)(obj);
00964     timeframe=fTimeFrame;
00965     const mdSpillData_t& spilldata = rdb->GetSpillData();
00966     spillstatus = spilldata.isKnown;
00967     spilltype = spilldata.isSpill;
00968     spillerror = spilldata.spillTimeError_nsec;
00969     fSpillServHeader->SetHeader(timeframe,spillstatus,spilltype,spillerror);
00970     MSG("FarDetDataQualityModule",Msg::kVerbose) << "    ... SPILL:  timeframe=" << timeframe << " status=" << spillstatus << " type=" << spilltype << " error=" << spillerror << endl;
00971   }
00972 
00973   if(obj->InheritsFrom("RawLiTpmtDigitsBlock")){
00974     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawLiTpmtDigitsBlock " << endl; 
00975     RawLiTpmtDigitsBlock* rdb = (RawLiTpmtDigitsBlock*)(obj);
00976     timeframe=fTimeFrame;
00977     calibpoint=-1;
00978     calibtype=-1;
00979     box=-1;
00980     led=-1;
00981     pulseheight=-1;
00982     pulsewidth=-1;
00983     fTpmtChannels=0;
00984     fTpmtBox=-1;
00985     fLiHeader->SetTpmtChannels(0); 
00986     fTpmtChipList->Delete();
00987     for(Int_t n=0;n<rdb->GetNumberOfDigits();n++){
00988       RawDigit* rd = (RawDigit*)(rdb->At(n));
00989       if(rd){
00990         RawChannelId rawch = (RawChannelId)(rd->GetChannel());
00991         crate = rawch.GetCrate();
00992         varc = rawch.GetVarcId();
00993         vmm = rawch.GetVmm();
00994         vaadc = rawch.GetVaAdcSel();
00995         vachip = rawch.GetVaChip();
00996         vachannel = rawch.GetVaChannel();
00997         plane = -1; 
00998         shld = -1;
00999         vaparam = (Int_t)(rd->GetADC());
01000         vatime = (Int_t)(1.5625*rd->GetTDC());
01001         if( crate<16 && varc<3 && vmm<6 && vaadc<2 && vachip<3 
01002          && vachannel>=2 && vachannel<=17 ){
01003           vachannel = LiBoxMask[vachannel];
01004           fTpmtBox=vachannel; box=vachannel;
01005           VaChip* mynewchip = new VaChip(crate,varc,vmm,vaadc,vachip,plane,shld,vatime);
01006           mynewchip->SetVaChipStatus(VaChip::kGood);
01007           mynewchip->AddVaChannel(vachannel,vaparam);
01008           fTpmtChipList->Add(mynewchip);
01009           fTpmtChannels++;
01010         }
01011       }
01012     }
01013     fLiHeader->SetTpmtBox(fTpmtBox);
01014     fLiHeader->SetTpmtChannels(fTpmtChannels);
01015     if( timeframe!=fLiHeader->GetTimeFrame() ){
01016       fLiHeader->SetHeader(timeframe,calibpoint,calibtype,box,led,pulseheight,pulsewidth);
01017     }
01018     MSG("FarDetDataQualityModule",Msg::kDebug) << "    ... TPMT BOX = " << fTpmtBox << endl; 
01019     MSG("FarDetDataQualityModule",Msg::kVerbose) << "      ... tpmt hits " << fTpmtChannels << endl;
01020   }
01021 
01022   /*********************
01023    * L I   B L O C K S *
01024    *********************/
01025 
01026   if(obj->InheritsFrom("RawLIAdcSummaryBlock")){
01027     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawLIAdcSummaryBlock " << endl;
01028     RawLIAdcSummaryBlock* rdb = (RawLIAdcSummaryBlock*)(obj);
01029     timeframe=fTimeFrame;
01030     calibpoint=rdb->GetCalibPoint();
01031     calibtype=rdb->GetCalibType();
01032     box=rdb->GetPulserBox();
01033     led=rdb->GetLed();
01034     pulseheight=rdb->GetPulseHeight();
01035     pulsewidth=rdb->GetPulseWidth();
01036     fLiHeader->SetHeader(timeframe,calibpoint,calibtype,box,led,pulseheight,pulsewidth);
01037     MSG("FarDetDataQualityModule",Msg::kDebug) << "    ... BOX = " << box << " LED = " << led << " " << endl;
01038   }
01039 
01040   /***************************
01041    * S N A R L   B L O C K S *
01042    ***************************/
01043 
01044   if(obj->InheritsFrom("RawDigitDataBlock")){
01045     MSG("FarDetDataQualityModule",Msg::kDebug) << " ... found RawDigitDataBlock " << endl;
01046     RawDigitDataBlock* rdb = (RawDigitDataBlock*)(obj);
01047     fBusyChipList->Delete();
01048     fLiChannels=0; fHitPlnChannels=0; fHitShldChannels=0; 
01049     fSnarlHeader->SetLiChannels(0); 
01050     fSnarlHeader->SetHitPlnChannels(0); fSnarlHeader->SetHitShldChannels(0);
01051     TIter digitr = rdb->GetDatumIter();
01052     while(RawDigit *rd = (RawDigit*)(digitr())){
01053       if(rd){
01054         RawChannelId rawch = (RawChannelId)(rd->GetChannel());
01055         crate = rawch.GetCrate();
01056         varc = rawch.GetVarcId();
01057         vmm = rawch.GetVmm();
01058         vaadc = rawch.GetVaAdcSel();
01059         vachip = rawch.GetVaChip();
01060         vachannel = rawch.GetVaChannel();
01061         plane = -1; 
01062         shld = -1;
01063         vaparam = (Int_t)(rd->GetADC());
01064         vatime = (Int_t)(1.5625*rd->GetTDC());
01065         MSG("FarDetDataQualityModule",Msg::kVerbose) << "    ... RAW DIGIT :  " << crate << "-" << varc << "-" << vmm << "-" << vaadc << "-" << vachip << "-" << vachannel << "  " << vaparam << "  " << vatime << " (" << vatime-fSnarlHeader->GetNanosec() << ") " << endl;
01066         licrate=-1;
01067         if( crate<16 && varc<3 && vmm<6 && vaadc<2 && vachip<3 
01068          && vachannel>=2 && vachannel<=17 ){
01069           plane=PlnMask[crate][6*varc+vmm];  
01070           if(plane<-1) shld=ShldMask[crate][3*vaadc+vachip];
01071           if( plane>=0 || shld>=0 ){
01072             if( vatime-fSnarlHeader->GetNanosec()<-150 ){
01073               chid=-1;
01074               for(id=0;id<1+fBusyChipList->GetLast();id++){
01075                 if(chid<0){
01076                   VaChip* mychip = (VaChip*)(fBusyChipList->At(id));
01077                   if( mychip->IsSameVaChip(crate,varc,vmm,vaadc,vachip)
01078                    && mychip->GetNanosec()-vatime>-100 && mychip->GetNanosec()-vatime<100 ) chid=id;
01079                 }
01080               }
01081               if(chid<0){
01082                 VaChip* mynewchip = new VaChip(crate,varc,vmm,vaadc,vachip,plane,shld,vatime);
01083                 mynewchip->AddVaChannel(vachannel,vaparam);
01084                 mynewchip->SetVaChipStatus(VaChip::kBusy);
01085                 fBusyChipList->Add(mynewchip);
01086               }
01087             }
01088             else{
01089               if( ( plane>=0 && fLiHeader->GetTimeFrame()==fTimeFrame )
01090                && ( fLiHeader->GetBox()>-1 || fLiHeader->GetTpmtBox()>-1 ) ){
01091                 if(licrate<0 && fLiHeader->GetBox()>-1) licrate=2*(fLiHeader->GetBox()/2);
01092                 if(licrate<0 && fLiHeader->GetTpmtBox()>-1) licrate=2*(fLiHeader->GetTpmtBox()/2);
01093                 if(crate>=licrate && crate<=licrate+1) fLiChannels++;
01094               }
01095               if(plane>=0) fHitPlnChannels++; if(shld>=0) fHitShldChannels++;
01096             }
01097           }
01098         }
01099       }
01100     }
01101     fSnarlHeader->SetLiChannels(fLiChannels); 
01102     fSnarlHeader->SetHitPlnChannels(fHitPlnChannels); fSnarlHeader->SetHitShldChannels(fHitShldChannels);
01103     fSnarl=1;
01104   }
01105 
01106   return;
01107 }
01108 
01109 Int_t FarDetDataQualityModule::ApplyFilter(FarDetDataQualityHandle* cdh)
01110 {
01111   Int_t filter=0;
01112 
01113    MSG("FarDetDataQualityModule",Msg::kDebug) 
01114     << "   ... QUALITY FILTER *** " << endl
01115     << "    Hit Channels = " << cdh->GetHitPlnChannels() << endl
01116     << "    Bad Channels = " << cdh->GetDeadPlnChips()+cdh->GetDeadShldChips() << endl
01117     << "    LI Channels = " << cdh->GetLiChannels() << endl;
01118 
01119   if( cdh->GetHitPlnChannels()>fFilterMinChannels
01120    && cdh->GetHitPlnChannels()<fFilterMaxChannels
01121    && cdh->GetDeadPlnChips()+cdh->GetDeadShldChips()<fFilterMaxBadChips
01122    && cdh->GetLiChannels()<fFilterMaxLiChannels 
01123     // DOESN'T WORK ON MONTE CARLO
01124     // && cdh->GetCrateMask()>=fFilterMinCrateMask 
01125   ) filter=1;
01126 
01127   MSG("FarDetDataQualityModule",Msg::kDebug) 
01128     << "     FILTER = " << filter << endl;
01129 
01130   return filter;
01131 }

Generated on Mon Jun 16 14:57:07 2008 for loon by  doxygen 1.3.9.1