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

OltBlockScan.cxx

Go to the documentation of this file.
00001 
00002 // $Id: OltBlockScan.cxx,v 1.13 2003/10/03 13:32:58 phil.adamson Exp $
00003 //
00004 // OltBlockScan.cxx
00005 //
00006 // Block Scan
00007 //
00008 // Author: Phil Adamson 5/2002
00010 
00011 #include "JobControl/JobCModuleRegistry.h"
00012 #include "MinosObjectMap/MomNavigator.h"
00013 #include "OfflineTrigger/OltBlockScan.h"
00014 #include "MessageService/MsgService.h"
00015 #include "RawData/RawRecord.h"
00016 #include "RawData/RawHeader.h"
00017 #include "RawData/RawDataBlock.h"
00018 #include "RawData/RawDaqHeaderBlock.h"
00019 #include "RawData/RawSnarlHeaderBlock.h"
00020 #include "RawData/RawChannelId.h"
00021 #include "RawData/RawVaDigit.h"
00022 #include "RawData/RawQieDigit.h"
00023 #include "RawData/RawDigitDataBlock.h"
00024 #include "RawData/RawRunCommentBlock.h"
00025 #include "RawData/RawRunConfigBlock.h"
00026 
00027 #include "Persistency/PerOutputStreamManager.h"
00028 #include "Persistency/PerOutputStream.h"
00029 #include "Rotorooter/RotoObjectifier.h"
00030 #include "Plex/PlexHandle.h"
00031 #include "Plex/PlexSEIdAltL.h"
00032 #include "Validity/VldContext.h"
00033 
00034 #include "TString.h"
00035 #include "TFile.h"
00036 #include "TTree.h"
00037 #include <string>
00038 
00039 #include <algorithm>
00040 #include <cstdio>
00041 #include <cstring>
00042 #include <iostream>
00043 #include <fstream>
00044 #ifndef __CINT__
00045 #include "OnlineUtil/mdBlockDefinitions.h"
00046 #endif
00047 ClassImp(OltBlockScan)
00048 
00049   // ......
00050 
00051 CVSID("$Id: OltBlockScan.cxx,v 1.13 2003/10/03 13:32:58 phil.adamson Exp $");
00052 JOBMODULE(OltBlockScan,"OltBlockScan","The Offline Trigger Block Scanner");
00053 
00054 
00055 OltBlockScan::OltBlockScan()
00056 {
00057   fRecord = 0;
00058   TDirectory *save = gDirectory;
00059   fFile = new TFile("/home/pa/bs.root","RECREATE");
00060   fTree = new TTree("tree","Timing Summary");
00061   fTree->Branch("crate",&fTreeCrate,"crate/I");
00062   fTree->Branch("time",&fTreeTime,"time/I");
00063   fTree->Branch("sec",&fCrateSec,"sec/I");
00064   fTree->Branch("nsec",&fCrateNSec,"nsec/I");
00065   fTree->Branch("tf",&fTreeTF,"tf/I");
00066   fTree->Branch("index",&fTreeIndex,"index/I");
00067   save->cd();
00068 }
00069 
00070 OltBlockScan::~OltBlockScan()
00071 {
00072   TDirectory *save = gDirectory;
00073   fFile->cd();
00074   fTree->Write();
00075   fFile->Close();
00076   save->cd();
00077 }
00078 
00079 JobCResult OltBlockScan::Reco(MomNavigator* mom)
00080 {
00081   //MSG("Olt",Msg::kVerbose) << "OltModule::Reco()\n";
00082   // Find RawRecord fragment in MOM.
00083   TIter iter = mom->FragmentIter();
00084   while (TObject *obj = iter.Next()) {
00085     RawRecord *rawrec = dynamic_cast<RawRecord *>(obj);
00086     if (rawrec) {
00087       ++fRecord;
00088       MSG("Olt",Msg::kInfo) <<"---------------New Record---------------"<<endl;
00089       TIter recit = rawrec->GetRawBlockIter();
00090       while (TObject *obj = recit.Next()) {
00091         RawDataBlock *rawdata = dynamic_cast<RawDataBlock *>(obj);
00092         if (rawdata) {
00093           if (rawdata->InheritsFrom("RawDaqHeaderBlock")) {
00094             RawDaqHeaderBlock *rshb =dynamic_cast<RawDaqHeaderBlock *>(rawdata);
00095             MSG("Olt",Msg::kInfo)<<rshb->GetRun()<<" "<<rshb->GetSubRun()<<" "<<rshb->GetTimeStamp()<<endl;
00096           }
00097           if (rawdata->InheritsFrom("RawSnarlHeaderBlock")) {
00098             RawSnarlHeaderBlock *rshb =dynamic_cast<RawSnarlHeaderBlock *>(rawdata);
00099             fTreeTF = rshb->GetTimeFrameNo();
00100             MSG("Olt",Msg::kInfo) <<"Timeframe  "<<rshb->GetTriggerTime()<<endl;
00101             MSG("Olt",Msg::kInfo) <<"Run  "<<rshb->GetRun()<<" subrun "
00102 << rshb->GetSubRun()<<endl;
00103             MSG("Olt",Msg::kInfo) <<"Timeframe  "<<fTreeTF<<endl;
00104           } 
00105           fTreeIndex = 0;
00106           MSG("Olt",Msg::kInfo) <<fRecord<<": "<<rawdata->GetBlockId()<<endl;
00107           if (fDump) {
00108             RawDigitDataBlock *rddb = dynamic_cast<RawDigitDataBlock *>(rawdata);
00109             if (rddb) {
00110               if (fTreeTF>fStartTF) {
00111                 TIter it = rddb->GetDatumIter();
00112                 int vnumber = 0;
00113                 int qnumber = 0;
00114                 while (TObject *obj = it.Next()) {
00115                   RawVaDigit *rvd = dynamic_cast<RawVaDigit *>(obj);
00116                   if (rvd) {
00117                   ++vnumber;
00118                   if (fNumDump>0 && vnumber>fNumDump) continue;
00119                     MSG("Olt",Msg::kInfo)<<fTreeTF<<" "<<*rvd<<endl;
00120                     fTreeCrate = 0;
00121                     fTreeTime = rvd->GetTDC();
00122                     fCrateSec = rvd->GetCrateT0().GetSec();
00123                     fCrateNSec = rvd->GetCrateT0().GetNanoSec();
00124                     //fTreeTF = fRecord;
00125                     TDirectory *save = gDirectory;
00126                     if (fDoTree) {
00127                       fFile->cd();
00128                       fTree->Fill();
00129                       save->cd();
00130                     }
00131                     ++fTreeIndex;
00132                   }
00133                   RawQieDigit *rqd = dynamic_cast<RawQieDigit *>(obj);
00134                   if (rqd) {
00135                   ++qnumber;
00136                   if (fNumDump>0 && qnumber>fNumDump) break;
00137                     MSG("Olt",Msg::kInfo)<<fTreeTF<<" "<<*rqd<<endl;
00138                 RawChannelId rcid = rqd->GetChannel();
00139                 fTreeCrate = rcid.GetCrate();
00140 //                  fTreeCrate = 1;
00141                     fTreeTime = rqd->GetTDC();
00142                     fCrateSec = rqd->GetCrateT0().GetSec();
00143                     fCrateNSec = rqd->GetCrateT0().GetNanoSec();
00144                     //fTreeTF = fRecord;
00145                     if (fDoTree) {
00146                       TDirectory *save = gDirectory;
00147                       fFile->cd();
00148                       fTree->Fill();
00149                       save->cd();
00150                     }
00151                     ++fTreeIndex;
00152                   }
00153                 }
00154               }
00155             }   
00156           }  
00157           RawRunCommentBlock *rc = dynamic_cast<RawRunCommentBlock *>(rawdata);
00158           if (rc) cout<<rc->GetRunComment()<<endl;
00159           RawRunConfigBlock *rcc = dynamic_cast<RawRunConfigBlock *>(rawdata);
00160           if (rcc) cout<<rcc->GetRunConfig()<<endl;
00161         }
00162       }
00163       
00164     }
00165   }
00166   return JobCResult::kAOK;
00167 
00168 }
00169 
00170 
00171  
00172 const Registry& OltBlockScan::DefaultConfig() const
00173 {
00174 
00175   static Registry r; // Default configuration for module
00176 
00177 
00178   std::string name = this->JobCModule::GetName();
00179   name += ".config.default";
00180   r.SetName(name.c_str());
00181 
00182   // Set values in configuration
00183   r.UnLockValues();
00184   r.Set("DumpData", true);
00185   r.Set("NumDump",10);
00186   r.Set("DoTree", false);
00187   r.Set("StartTF",0);
00188   r.LockValues();
00189 
00190   return r;
00191 }
00192 
00193 //......................................................................
00194 
00195 void OltBlockScan::Config(const Registry& r)
00196 {
00197   int   tmpb;
00198   cout<<"Teapots\n";
00199   cout<<r<<endl;
00200   if (r.Get("DumpData",tmpb)) { cout<<"Hello "<<tmpb<<endl;fDump = bool(tmpb); }  
00201   if (r.Get("DoTree",tmpb)) fDoTree = bool(tmpb);
00202   if (r.Get("StartTF",tmpb)) fStartTF = tmpb;
00203   if (r.Get("NumDump",tmpb)) fNumDump = tmpb;
00204 }
00205 

Generated on Mon Feb 15 11:07:17 2010 for loon by  doxygen 1.3.9.1