Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

RetrieveAndCompare.cpp

00001 #include "SctData/PipelineTestResult.h"
00002 #include "../../AnalysisTestFramework.h"
00003 #include "../../CutUtils.h"
00004 #include "../../TestFileUtil.h"
00005 
00006 struct Info {
00007     unsigned int runNumber;
00008     unsigned int scanNumber;
00009     unsigned int chip;
00010     unsigned int nScans;
00011     char serial[15];    
00012 };
00013 string InfoStr = "Run/i:Scan:Chip:NScans:Serial/C";
00014 
00015 struct SDData {
00016     int ngood;
00017     int pass;
00018 };
00019 string DataStr = "NGood/I:Pass/I";
00020 
00021 //Globals variables:
00022 SDData RodDaq;                    //Our data
00023 SDData SctDaq;                    //SCTDAQ data
00024 Info info;                          //Some info
00025 
00026 //Noise Occupancy stuff
00027 string Ext = "_Pipeline.dat";
00028 string Output = "${SCT_DAQ_ROOT}/SystemTests/logs/Pipeline.root";
00029 string Arg = "-3";
00030 
00031 class PipelineCompare : public AnalysisTestFramework<PipelineTestResult> {
00032 public:
00033     virtual void publishData(SctTestApiStatus* status);
00034     virtual void downloadData(string serialNumber);
00035     virtual void compare(const PipelineTestResult& t);      
00036     virtual void setup();
00037     virtual void summaryOutput();
00038 };
00039 
00040 
00041 string getFileName(string serial) {
00042     ostringstream oss;
00043     oss << serial << Ext;
00044     
00045     return oss.str();
00046 }
00047 
00048 void PipelineCompare::compare(const PipelineTestResult& sd) {
00049     strncpy(info.serial, sd.getModuleName().c_str(), 14);
00050     info.runNumber = sd.getRunNumber();
00051     info.scanNumber = sd.getScanNumberAt(0);
00052     info.nScans = sd.getNScans();
00053     
00054     string fileName = getFileName(sd.getModuleName());
00055     ifstream file (fileName.c_str());
00056     if (!file.good())
00057         throw IllegalStateError("Failed to open comparison file: " + fileName, __FILE__, __LINE__);
00058     
00059     SctDaq.pass = TestFileUtil::getPass(file);
00060     TestFileUtil::skipHeader(file);
00061 
00062     for (unsigned int chip = 0; chip<nChipModule; ++chip) {
00063     string chipStr;
00064     info.chip = chip;
00065     file >> chipStr >> SctDaq.ngood;
00066     //Ignore rest of line
00067     file.ignore(256, '\n');
00068 
00069     RodDaq.ngood = nChannelChip - sd.getDefects().getDefectsAffectingElement(ModuleElement::Chip(chip))->getAllDefects().size();
00070     RodDaq.pass = sd.getPassed();
00071 
00072         tree->Fill();
00073     }
00074 }
00075 
00076 
00077 void PipelineCompare::summaryOutput() {
00078     if (cut(*tree, "ngood", "(RodDaq.NGood-SctDaq.NGood)", 0.01, 0.01, 0.01) > 0) {
00079     ++exitCode;
00080     cout << "Failed ngood tail check" << endl;
00081     }   
00082     if (cut(*tree, "pass", "(RodDaq.Pass-SctDaq.Pass)", 0.01, 0.01, 0.01) > 0) {
00083     ++exitCode;
00084     cout << "Failed pass tail check" << endl;
00085     }
00086     exitCode += errorCode;
00087 }
00088 
00092 void PipelineCompare::setup() {
00093     string name = Env::substituteVariables(Output);
00094     file = new TFile(name.c_str(), "RECREATE");
00095     tree = new TTree("PipeData", "Pipeline Comparison Data");
00096     tree->Branch("RodDaq", &RodDaq, DataStr.c_str());
00097     tree->Branch("SctDaq", &SctDaq, DataStr.c_str());
00098     tree->Branch("Info", &info, InfoStr.c_str());
00099     info.serial[14] = '\0';
00100 }
00101 
00105 void PipelineCompare::downloadData(string serialNumber) {
00106     ostringstream oss;
00107     TestInfo info = moduleData.getPipelineInfo(serialNumber);
00108     oss << "java ProdDatabase/getDBfiles " << Arg << " -d -r " << info.runNumber << " -s " << info.scanNumber << "  " << serialNumber;
00109     system(oss.str().c_str());
00110 }
00111 
00116 void PipelineCompare::publishData(SctTestApiStatus* status) {
00117     highLevelApi->pipeline(status);
00118 }
00119 
00120 
00121 int main(int argc, char** argv) {
00122     PipelineCompare sdc;
00123     sdc.analyzeAll(argc, argv);
00124     return sdc.getExitCode();
00125 }
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 

Generated on Thu Jul 15 09:50:51 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5