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

FarmListModule.cxx

Go to the documentation of this file.
00001 
00002 // $Id: FarmListModule.cxx,v 1.8 2008/01/17 20:34:22 bspeak Exp $
00003 //
00004 // FarmListModule build lists for Howie Rubin to use for FNAL batch farm
00005 //
00006 // Author: B. Speakman 2004.12.10
00007 //
00009 #include <fstream>
00010 #include <iostream>
00011 #include <iomanip>
00012 #include <sstream>
00013 #include <math.h>
00014 
00015 #include "TFile.h"
00016 #include "TString.h"
00017 #include "TTimeStamp.h"
00018 
00019 #include "JobControl/JobCModuleRegistry.h"
00020 #include "MessageService/MsgService.h"
00021 #include "MinosObjectMap/MomNavigator.h"
00022 #include "OnlineUtil/mdTriggerCodes.h"
00023 #include "Plex/PlexSEIdAltL.h"
00024 #include "Plex/PlexHandle.h"
00025 
00026 #include "RawData/RawRecord.h"
00027 #include "RawData/RawDaqSnarlHeader.h"
00028 #include "RawData/RawDigit.h"
00029 #include "RawData/RawDigitDataBlock.h"
00030 #include "RawData/RawDaqHeaderBlock.h"
00031 #include "RawData/RawRunConfigBlock.h"
00032 
00033 #include "FarmListModule.h"
00034 #include "RSM.h"
00035 #include "UtilRSM.h"
00036 
00037 using namespace std;
00038 
00039 ClassImp(FarmListModule)
00040 
00041 CVSID("$Id: FarmListModule.cxx,v 1.8 2008/01/17 20:34:22 bspeak Exp $");
00042 JOBMODULE(FarmListModule, "FarmListModule",
00043           "Module to generate batch farm lists");
00044 
00045 FarmListModule::FarmListModule()
00046 {
00047   RSMSyn << "FarmListModule::FarmListModule" << endl;
00048   fRun = 0;
00049   fSubRun = 0;
00050 
00051   fNTrigPlane = 0;
00052   fNTrigActivity = 0;
00053   fNTrigE4 = 0;
00054   fNTrigSpill = 0;
00055   fNTrigSpillIP = 0;
00056 
00057   fNSnarl = 0;
00058   fMaxPlane[0] = 0;
00059   fMaxPlane[1] = 0;
00060   fMaxPlane[2] = 0;
00061 
00062   fStartTime=VldTimeStamp((time_t) 0, 0);
00063   fEndTime=VldTimeStamp((time_t) 0, 0);
00064 
00065   fRunOUT = false;
00066 
00067   fMFileOutMode = ios::out | ios::app;
00068   fSFileOutMode = ios::out | ios::app;
00069 }
00070 
00071 FarmListModule::~FarmListModule()
00072 {
00073   RSMSyn << "FarmListModule::~FarmListModule" << endl;
00074 }
00075 
00076 void FarmListModule::FarmFileOUT()
00077 {
00078   RSMDeb << "FarmListModule::FarmFileOUT" << endl;
00079 
00080   if (fRunOUT) {
00081     RSMErr << "Multiple output attempt for: " <<
00082       fRun << "-" << fSubRun << endl;
00083     return;
00084   }
00085 
00086   if (fRun==0 && fSubRun==0) {
00087     RSMDeb << "Output attempt for: " <<
00088       fRun << "-" << fSubRun << endl;
00089     return;
00090   }
00091 
00092   Bool_t Passed = true;
00093 
00094   UInt_t SecondsPassed = fEndTime.GetSec() - fStartTime.GetSec();
00095   Passed = Passed && (SecondsPassed>=fMinSecond);
00096   Passed = Passed && (fNSnarl>=fMinSnarl);
00097   Passed = Passed && (fNTrigPlane>=fMinTrigPlane);
00098   Passed = Passed && (fNTrigActivity>=fMinTrigActivity);
00099   Passed = Passed && (fNTrigE4>=fMinTrigE4);
00100   Passed = Passed && (fNTrigSpill>=fMinTrigSpill);
00101   Passed = Passed && (fNTrigSpillIP>=fMinTrigSpillIP);
00102 
00103   Int_t Year = fEndTime.GetDate()/10000;
00104   Int_t Month = fEndTime.GetDate()/100 - 100*Year;
00105 
00106   if (fMFileName != "") {
00107     string fdir = fMFileDir;
00108     if(fMonthlyMFileDir) fdir += Form("/%04d_%02d/", Year, Month);
00109     if(!UtilRSM::CheckDir(fdir.c_str())) exit(0);
00110 
00111     string fname = fMFileName;
00112     if(!Passed) fname += ".sup";
00113 
00114     ofstream fout((fdir+fname).c_str(), fMFileOutMode);
00115 
00116     RSMInf << "Writing to " << fname << " in " << fdir << endl;
00117 
00118     ostringstream ThisLine;
00119     if (fDet==Detector::kFar) {
00120       fout << Form("F%08d_%04d", fRun, fSubRun) << "  "
00121            << Form("% 4d-%02d", Year, Month)
00122            << Form("% 8d", fNSnarl)
00123            << Form("% 5d", fMaxPlane[0]) << endl;
00124     }
00125     else if(fDet==Detector::kNear) {
00126       fout << Form("N%08d_%04d", fRun, fSubRun) << "  "
00127            << Form("% 4d-%02d", Year, Month)
00128            << Form("% 8d", fNSnarl) << endl;
00129     }
00130     else {
00131       RSMWar << "Can't use this detector: " 
00132              << Detector::AsString(fDet) << endl;
00133       return;
00134     }
00135 
00136     if (SecondsPassed < fMinSecond) {
00137       fout << "  Failed MinSeconds >= " << fMinSecond
00138            << " with " << SecondsPassed << endl;
00139     }
00140     if (fNSnarl < fMinSnarl) {
00141       fout << "  Failed MinSnarl >= " << fMinSnarl
00142            << " with " << fNSnarl << endl;
00143     }
00144     if (fNTrigPlane < fMinTrigPlane) {
00145       fout << "  Failed MinTrigPlane >= " << fMinTrigPlane
00146            << " with " << fNTrigPlane << endl;
00147     }
00148     if (fNTrigActivity < fMinTrigActivity) {
00149       fout << "  Failed MinTrigActivity >= " << fMinTrigActivity
00150            << " with " << fNTrigActivity << endl;
00151     }
00152     if (fNTrigE4 < fMinTrigE4) {
00153       fout << "  Failed MinTrigE4 >= " << fMinTrigE4
00154            << " with " << fNTrigE4 << endl;
00155     }
00156     if (fNTrigSpill < fMinTrigSpill) {
00157       fout << "  Failed MinTrigSpill >= " << fMinTrigSpill
00158            << " with " << fNTrigSpill << endl;
00159     }
00160     if (fNTrigSpillIP < fMinTrigSpillIP) {
00161       fout << "  Failed MinTrigSpillIP >= " << fMinTrigSpillIP
00162            << " with " << fNTrigSpillIP << endl;
00163     }
00164 
00165     fout.close();
00166   }
00167 
00168   if (fSFileName != "") {
00169     string fdir = fSFileDir;
00170     if(fMonthlySFileDir) fdir += Form("/%04d_%02d/", Year, Month);
00171     if(!UtilRSM::CheckDir(fdir.c_str())) exit(0);
00172 
00173     string fname = fSFileName;
00174     if(!Passed) fname += ".sup";
00175 
00176     ofstream fout((fdir+fname).c_str(), fSFileOutMode);
00177 
00178     RSMInf << "Writing to " << fname << " in " << fdir << endl;
00179 
00180     ostringstream ThisLine;
00181     if (fDet==Detector::kFar) {
00182       fout << Form("F%08d_%04d", fRun, fSubRun) << endl;
00183     }
00184     else if(fDet==Detector::kNear) {
00185       fout << Form("N%08d_%04d", fRun, fSubRun) << endl;
00186     }
00187     else {
00188       RSMWar << "Can't use this detector: " 
00189              << Detector::AsString(fDet) << endl;
00190       return;
00191     }
00192 
00193     fout.close();
00194   }
00195 
00196   RSMDeb << "--Counters-- (" << SecondsPassed << " seconds)" << endl
00197          << "  NSnarl: " << fNSnarl << endl
00198          << "  NTrigPlane: " << fNTrigPlane << endl
00199          << "  NTrigActivity: " << fNTrigActivity << endl
00200          << "  NTrigE4: " << fNTrigE4 << endl
00201          << "  NTrigSpill: " << fNTrigSpill << endl
00202          << "  NTrigSpillIP: " << fNTrigSpillIP << endl;
00203 
00204   fNTrigPlane = 0;
00205   fNTrigActivity = 0;
00206   fNTrigE4 = 0;
00207   fNTrigSpill = 0;
00208   fNTrigSpillIP = 0;
00209 
00210   fNSnarl = 0;
00211   fMaxPlane[0] = 0;
00212   fMaxPlane[1] = 0;
00213   fMaxPlane[2] = 0;
00214 
00215   fRunOUT = true;
00216   return;
00217 }
00218 
00219 JobCResult FarmListModule::Ana(const MomNavigator *mom)
00220 {
00221   RSMVer << "FarmListModule::Ana" << endl;
00222 
00223   const char* rcInStr = 0;
00224   RawRecord*  rawrec  = 0;
00225   RawDigitDataBlock* dblock = 0;
00226   RawDigit* digit = 0;
00227   //RawRunConfigBlock* rrcfgb = 0;
00228 
00229   TIter momitr = const_cast<MomNavigator*>(mom)->FragmentIter();
00230   TObject* momobj = 0;
00231   while ((momobj=momitr())) {
00232     rawrec=dynamic_cast<RawRecord*>(momobj);
00233     if(! rawrec) continue;
00234     const RawDaqHeader* dhdr =
00235       dynamic_cast<const RawDaqHeader*>(rawrec->GetRawHeader());
00236 
00237     VldContext vldc = dhdr->GetVldContext();
00238     if (fRun!=dhdr->GetRun() || fSubRun!=dhdr->GetSubRun()) {
00239       RSMDeb << "Run change: " <<
00240         fRun << "-" << fSubRun << " -> " <<
00241         dhdr->GetRun() << "-" << dhdr->GetSubRun() << endl;
00242       FarmFileOUT();
00243 
00244       fRunOUT = false;
00245       fRun = dhdr->GetRun();
00246       fSubRun = dhdr->GetSubRun();
00247       fDet = dhdr->GetVldContext().GetDetector();
00248       fStartTime = dhdr->GetVldContext().GetTimeStamp();
00249       fEndTime = dhdr->GetVldContext().GetTimeStamp();
00250     }
00251     //If we can't determine the stream of the RawRecord, skip it.
00252     if(!rawrec->GetTempTags().Get("stream",rcInStr)) continue;
00253 
00254     if(fEndTime<vldc.GetTimeStamp() &&
00255        vldc.GetTimeStamp()>fStartTime) {
00256       fEndTime = vldc.GetTimeStamp();
00257     }
00258 
00259     PlexHandle ph(vldc);
00260     TIter rawitr = rawrec->GetRawBlockIter(); rawitr.Reset();
00261     TObject *rawobj = 0;
00262     while ((rawobj=rawitr())) {
00263       if ((dblock = dynamic_cast<RawDigitDataBlock*>(rawobj))) {
00264         fNSnarl++;
00265 
00266         const RawSnarlHeaderBlock* hdrblk =
00267           dynamic_cast<const RawSnarlHeaderBlock*>
00268           (rawrec->FindRawBlock("RawSnarlHeaderBlock"));
00269         int TrigSrc = hdrblk->GetTriggerSource();
00270 
00271         if(TrigSrc&TRIGGER_BIT_PLANE) fNTrigPlane++;
00272         if(TrigSrc&TRIGGER_BIT_ACTIVITY) fNTrigActivity++;
00273         if(TrigSrc&TRIGGER_BIT_E4) fNTrigE4++;
00274         if(TrigSrc&TRIGGER_BIT_SPILL) fNTrigSpill++;
00275         if(TrigSrc&TRIGGER_BIT_SPILL_IP) fNTrigSpillIP++;
00276 
00277         //Don't do all the plane max crap for near
00278         if (fDet==Detector::kNear) continue;
00279 
00280         VldTimeStamp trigger_time = hdrblk->GetTriggerTime();
00281         TIter digitr = dblock->GetDatumIter();
00282         TObject *digobj = 0;
00283         while ((digobj=digitr())) {
00284           digit=dynamic_cast<RawDigit*>(digobj);
00285           if(!digit) continue; //Only Deal with RawDigit objects
00286           RawChannelId rawid =  digit->GetChannel();
00287 
00288           VldTimeStamp vt_T0 = digit->GetCrateT0();
00289           vt_T0.Add(VldTimeStamp(0,(Int_t)(1.5625*digit->GetTDC())));
00290           if(vt_T0 < trigger_time) continue;
00291 
00292           PlexSEIdAltL seidl = ph.GetSEIdAltL(rawid);
00293           if (!(seidl.IsVetoShield()) && seidl.IsValid()) {
00294 
00295             Int_t planenum = seidl.GetPlane();
00296 
00297             Int_t view_index = ((Int_t)seidl.GetEnd()) - 1;
00298             if (view_index<0 || view_index>1) {
00299               RSMWar << "Bad View Index " << view_index << endl;
00300               continue;
00301             }
00302 
00303             if (planenum<=MAXSMPLANE) {
00304               if (planenum>fMaxPlane[view_index+1]) {
00305                 fMaxPlane[view_index+1] = planenum;
00306               }
00307               if (planenum>fMaxPlane[0]) {
00308                 fMaxPlane[0] = planenum;
00309               }
00310             }
00311             else {
00312               cout << "Weird Plane" << endl;
00313               cout << seidl << endl;
00314               cout << rawid.AsString("e") << endl;
00315             }
00316           }
00317         }//digititr()
00318       }//RawDigitDataBlock
00319     }//rawitr()
00320   }//momitr()
00321   return JobCResult::kPassed;
00322 }
00323 
00324 void FarmListModule::BeginJob()
00325 {
00326   RSMSyn << "FarmListModule::BeginJob" << endl;
00327   fRun = 0;
00328   fSubRun = 0;
00329 
00330   fNSnarl = 0;
00331   fMaxPlane[0] = 0;
00332   fMaxPlane[1] = 0;
00333   fMaxPlane[2] = 0;
00334 
00335   fNTrigPlane = 0;
00336   fNTrigActivity = 0;
00337   fNTrigE4 = 0;
00338   fNTrigSpill = 0;
00339   fNTrigSpillIP = 0;
00340 
00341   fStartTime=VldTimeStamp( static_cast<time_t>(0), 0);
00342   fEndTime=VldTimeStamp( static_cast<time_t>(0), 0);
00343 
00344   fRunOUT = false;
00345 
00346   //ios_base::openmode fMFileOutMode;
00347   fMFileOutMode = ios::out | ios::app;
00348   if(!fAppendMFile) fMFileOutMode = ios::out;
00349 }
00350 
00351 void FarmListModule::EndJob()
00352 {
00353   RSMSyn << "FarmListModule::EndJob" << endl;
00354 
00355   RSMDeb << "Final output in EndJob: " << fRun
00356          << "-" << fSubRun << endl;
00357   FarmFileOUT();
00358 }
00359 
00360 const Registry& FarmListModule::DefaultConfig() const
00361 {
00362   RSMSyn << "FarmListModule::DefaultConfig" << endl;
00363 
00364   static Registry r;
00365 
00366   string name = this->JobCModule::GetName();
00367   r.SetName((name+".config.default").c_str());
00368   r.UnLockValues();
00369 
00370   r.Set("MinSecond",10);
00371 
00372   r.Set("MinSnarl",0);
00373   r.Set("MinTrigPlane",0);
00374   r.Set("MinTrigE4",0);
00375   r.Set("MinTrigActivity",0);
00376   r.Set("MinTrigSpill",0);
00377   r.Set("MinTrigSpillIP",0);
00378 
00379   r.Set("MFileName","summary.mail");
00380   r.Set("MFileDir","./");
00381   r.Set("MonthlyMFileDir",0);
00382   r.Set("AppendMFile",1);
00383 
00384   r.Set("SFileName","summary.simple");
00385   r.Set("SFileDir","./");
00386   r.Set("MonthlySFileDir",0);
00387   r.Set("AppendSFile",1);
00388 
00389   r.Set("MonthlyDir",0);
00390   r.Set("AppendFiles",1);
00391 
00392   r.LockValues();
00393 
00394   return r;
00395 }
00396 
00397 void FarmListModule::Config(const Registry& r)
00398 {
00399   RSMSyn << "FarmListModule::Config" << endl;
00400   int tmpi = 0;
00401   const char* tmps = 0;
00402 
00403   if(r.Get("MinSecond",tmpi)) fMinSecond=tmpi;
00404   if(r.Get("MinSnarl",tmpi)) fMinSnarl=tmpi;
00405   if(r.Get("MinTrigPlane",tmpi)) fMinTrigPlane=tmpi;
00406   if(r.Get("MinTrigE4",tmpi)) fMinTrigE4=tmpi;
00407   if(r.Get("MinTrigActivity",tmpi)) fMinTrigActivity=tmpi;
00408   if(r.Get("MinTrigSpill",tmpi)) fMinTrigSpill=tmpi;
00409   if(r.Get("MinTrigSpillIP",tmpi)) fMinTrigSpillIP=tmpi;
00410 
00411   if(r.Get("MFileName",tmps)) fMFileName=tmps;
00412   if(r.Get("MFileDir",tmps)) fMFileDir=tmps;
00413   if(r.Get("MonthlyMFileDir",tmpi)) fMonthlyMFileDir=static_cast<bool>(tmpi);
00414   if(r.Get("AppendMFile",tmpi)) fAppendMFile=static_cast<bool>(tmpi);
00415 
00416   if(r.Get("SFileName",tmps)) fSFileName=tmps;
00417   if(r.Get("SFileDir",tmps)) fSFileDir=tmps;
00418   if(r.Get("MonthlySFileDir",tmpi)) fMonthlySFileDir=static_cast<bool>(tmpi);
00419   if(r.Get("AppendSFile",tmpi)) fAppendSFile=static_cast<bool>(tmpi);
00420 
00421   if (r.Get("MonthlyDir",tmpi)) {
00422     fMonthlyMFileDir=static_cast<bool>(tmpi);
00423     fMonthlySFileDir=static_cast<bool>(tmpi);
00424   }
00425 
00426   if (r.Get("AppendFiles",tmpi)) {
00427     fAppendMFile=static_cast<bool>(tmpi);
00428     fAppendSFile=static_cast<bool>(tmpi);
00429   }
00430 
00431   if(!fAppendMFile) fMFileOutMode = ios::out;
00432   else fMFileOutMode = ios::out | ios::app;
00433 
00434   if(!fAppendSFile) fSFileOutMode = ios::out;
00435   else fSFileOutMode = ios::out | ios::app;
00436 }

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