#include <DemoSnarlList.h>
Inheritance diagram for DemoSnarlList:
Public Member Functions | |
DemoSnarlList () | |
JobCResult | Ana (const MomNavigator *mom) |
void | Report () |
void | HandleCommand (JobCommand *command) |
void | AddRunSnarl (int r, int s) |
void | RemoveRunSnarl (int r, int s) |
void | AddUsingFile (const char *f) |
void | RemoveUsingFile (const char *f) |
Private Member Functions | |
std::string | Key (int r, int s) |
Private Attributes | |
bool | fIsSorted |
std::list< std::string > | fSnarlList |
|
Definition at line 26 of file DemoSnarlList.cxx.
00026 : fIsSorted(false) { } |
|
Definition at line 119 of file DemoSnarlList.cxx. References fIsSorted, fSnarlList, and s(). Referenced by AddUsingFile(), and HandleCommand().
00120 { 00121 //====================================================================== 00122 // Add the run/snarl (r,s) to the list of records to pass 00123 //====================================================================== 00124 std::string k(this->Key(r,s)); 00125 fSnarlList.push_back(k); 00126 fIsSorted = false; 00127 } |
|
Definition at line 146 of file DemoSnarlList.cxx. References AddRunSnarl(), and run(). Referenced by HandleCommand().
00147 { 00148 //====================================================================== 00149 // Add all the run/snarls from the file f to the list. Assumes format 00150 // is run<space>snarl 00151 //====================================================================== 00152 std::ifstream ifs(f); 00153 int run, snarl; 00154 while (ifs) { 00155 ifs >> run >> snarl; 00156 this->AddRunSnarl(run,snarl); 00157 } 00158 } |
|
Implement this for read only access to the MomNavigator Reimplemented from JobCModule. Definition at line 30 of file DemoSnarlList.cxx. References MomNavigator::At(), fIsSorted, fSnarlList, RawRecord::GetRawHeader(), RawDaqHeader::GetRun(), RawDaqSnarlHeader::GetSnarl(), and run().
00031 { 00032 //====================================================================== 00033 // Are there records in mom whose run/snarl number matchs one in the 00034 // list? 00035 //====================================================================== 00036 TObject* obj; 00037 for (int i=0; (obj=mom->At(i)); ++i) { 00038 const RawRecord* rr = dynamic_cast<RawRecord*>(obj); 00039 if (rr) { 00040 const RawDaqSnarlHeader* 00041 rdsh = dynamic_cast<const RawDaqSnarlHeader*>(rr->GetRawHeader()); 00042 if (rdsh) { 00043 int run = rdsh->GetRun(); 00044 int snarl = rdsh->GetSnarl(); 00045 std::string k(this->Key(run,snarl)); 00046 if (fIsSorted==false) { // Make sure we're sorted prior to search... 00047 fSnarlList.sort(); 00048 fIsSorted = true; 00049 } 00050 if (std::binary_search(fSnarlList.begin(),fSnarlList.end(),k)) { 00051 return JobCResult::kPassed; 00052 } 00053 } 00054 } 00055 } 00056 return JobCResult::kFailed; 00057 } |
|
Implement to handle a JobCommand Reimplemented from JobCModule. Definition at line 76 of file DemoSnarlList.cxx. References AddRunSnarl(), AddUsingFile(), JobCommand::HaveOpt(), UtilString::IsInt(), MSG, JobCommand::PopCmd(), JobCommand::PopOpt(), RemoveRunSnarl(), RemoveUsingFile(), and run().
00077 { 00078 std::string c = cmd->PopCmd(); 00079 if (!(c=="Add"||c=="Remove")) { 00080 MSG("Demo",Msg::kWarning) << 00081 "Only: Add [run#] [snarl#] [filename] and \n" << 00082 " Remove [run#] [snarl#] [filename] are supported.\n"; 00083 return; 00084 } 00085 00086 int run = -1; 00087 int snarl = -1; 00088 while (cmd->HaveOpt()) { 00089 std::string opt = cmd->PopOpt(); 00090 if (UtilString::IsInt(opt.c_str())) { 00091 if (run!=-1) { 00092 snarl = atoi(opt.c_str()); 00093 if (c=="Add") { 00094 this->AddRunSnarl(run,snarl); 00095 } 00096 else { 00097 this->RemoveRunSnarl(run,snarl); 00098 } 00099 run = -1; 00100 snarl = -1; 00101 } 00102 else { 00103 run = atoi(opt.c_str()); 00104 } 00105 } 00106 else { // Assume all strings are file names 00107 if (c=="Add") { 00108 this->AddUsingFile(opt.c_str()); 00109 } 00110 else { 00111 this->RemoveUsingFile(opt.c_str()); 00112 } 00113 } 00114 } 00115 } |
|
Definition at line 178 of file DemoSnarlList.cxx. References run().
00179 { 00180 //====================================================================== 00181 // Construct a sortable key using run and snarl numbers 00182 //====================================================================== 00183 char k[1024]; 00184 sprintf(k,"%12d.%12.12d",run,snarl); 00185 return k; 00186 } |
|
Definition at line 131 of file DemoSnarlList.cxx. References find(), fSnarlList, and s(). Referenced by HandleCommand(), and RemoveUsingFile().
00132 { 00133 //====================================================================== 00134 // Remove the run/snarl (r,s) to the list of records to pass 00135 //====================================================================== 00136 std::string k(this->Key(r,s)); 00137 std::list<std::string>::iterator itr; 00138 itr = std::find(fSnarlList.begin(), fSnarlList.end(), k); 00139 if (itr!=fSnarlList.end()) { 00140 fSnarlList.erase(itr); 00141 } 00142 } |
|
Definition at line 162 of file DemoSnarlList.cxx. References RemoveRunSnarl(), and run(). Referenced by HandleCommand().
00163 { 00164 //====================================================================== 00165 // Remove all the run/snarls from the file f to the list. Assumes format 00166 // is run<space>snarl 00167 //====================================================================== 00168 std::ifstream ifs(f); 00169 int run, snarl; 00170 while (ifs) { 00171 ifs >> run >> snarl; 00172 this->RemoveRunSnarl(run,snarl); 00173 } 00174 } |
|
Implement to spew end of running report Reimplemented from JobCModule. Definition at line 61 of file DemoSnarlList.cxx. References fSnarlList, and MSG.
00062 { 00063 //====================================================================== 00064 // Print the snarl numbers in the list 00065 //====================================================================== 00066 std::list<std::string>::iterator itr(fSnarlList.begin()); 00067 std::list<std::string>::iterator itrEnd(fSnarlList.end()); 00068 MSG("Demo",Msg::kInfo) << "Snarls in list:\n"; 00069 for (; itr!=itrEnd; ++itr) { 00070 MSG("Demo",Msg::kInfo) << (*itr) << "\n"; 00071 } 00072 } |
|
Definition at line 39 of file DemoSnarlList.h. Referenced by AddRunSnarl(), and Ana(). |
|
Definition at line 40 of file DemoSnarlList.h. Referenced by AddRunSnarl(), Ana(), RemoveRunSnarl(), and Report(). |