RetrieveAndCompare.cpp

00001 #include "SctData/TimeWalkTestResult.h"
00002 #include "../../AnalysisTestFramework.h"
00003 #include "../../CutUtils.h"
00004 #include "../../TestFileUtil.h"
00005 #include "ipc/core.h"
00006 
00007 struct Info {
00008     unsigned int runNumber;
00009     unsigned int scanNumber;
00010     unsigned int chip;
00011     unsigned int nScans;
00012     char serial[15];    
00013 };
00014 string InfoStr = "Run/i:Scan:Chip:NScans:Serial/C";
00015 
00016 struct SDData {
00017     double timeWalk;
00018     double calibration;
00019     int pass;
00020 };
00021 string DataStr = "TimeWalk/D:Calibration:Pass/I";
00022 
00023 //Globals variables:
00024 SDData RodDaq;                    //Our data
00025 SDData SctDaq;                    //SCTDAQ data
00026 struct Info info;                          //Some info
00027 
00028 //Noise Occupancy stuff
00029 string Ext = "_TimeWalk.dat";
00030 string Output = "${SCT_DAQ_ROOT}/SystemTests/logs/TimeWalk.root";
00031 string Arg = "-9";
00032 
00033 class TimeWalkCompare : public AnalysisTestFramework<TimeWalkTestResult> {
00034 public:
00035     virtual void publishData();
00036     virtual void downloadData(string serialNumber);
00037     virtual void compare(const TimeWalkTestResult& t); 
00038     virtual void summaryOutput();
00039     virtual void setup();
00040 };
00041 
00042 
00043 string getFileName(string serial) {
00044     ostringstream oss;
00045     oss << serial << Ext;
00046     
00047     return oss.str();
00048 }
00049 
00050 void TimeWalkCompare::compare(const TimeWalkTestResult& sd) {
00051     strncpy(info.serial, sd.getModuleName().c_str(), 14);
00052     info.runNumber = sd.getRunNumber();
00053     info.scanNumber = sd.getScanNumberAt(0);
00054     info.nScans = sd.getNScans();
00055     
00056     string fileName = getFileName(sd.getModuleName());
00057     ifstream file (fileName.c_str());
00058     if (!file.good())
00059         throw IllegalStateError("Failed to open comparison file: " + fileName, __FILE__, __LINE__);
00060     
00061     SctDaq.pass = TestFileUtil::getPass(file);
00062     TestFileUtil::skipHeader(file);
00063 
00064     for (unsigned int chip = 0; chip<nChipModule; ++chip) {
00065     string chipStr;
00066     info.chip = chip;
00067     file >> chipStr >> SctDaq.timeWalk >> SctDaq.calibration;
00068     //Ignore rest of line
00069     file.ignore(256, '\n');
00070 
00071     RodDaq.timeWalk = sd.getChipResult(chip).timewalk;
00072     RodDaq.calibration = sd.getChipResult(chip).calibration;
00073     RodDaq.pass = sd.getPassed();
00074 
00075         tree->Fill();
00076     }
00077 }
00078 
00079 
00080 void TimeWalkCompare::summaryOutput() {
00081     if (cut(*tree, "timewalk", "(RodDaq.TimeWalk-SctDaq.TimeWalk)/SctDaq.TimeWalk*100", 1, 2, 10) > 0) {
00082     ++exitCode;
00083     cout << "Failed timewalk tail check" << endl;
00084     }
00085     if (cut(*tree, "calibration", "(RodDaq.Calibration-SctDaq.Calibration)/SctDaq.Calibration*100", 0.3, 0.5, 2) > 0) {
00086     ++exitCode;
00087     cout << "Failed calibration tail check" << endl;
00088     }
00089     exitCode += errorCode;
00090 }
00091 
00092 
00096 void TimeWalkCompare::setup() {
00097     string name = Env::substituteVariables(Output);
00098     file = new TFile(name.c_str(), "RECREATE");
00099     tree = new TTree("TWData", "TimeWalk Comparison Data");
00100     tree->Branch("RodDaq", &RodDaq, DataStr.c_str());
00101     tree->Branch("SctDaq", &SctDaq, DataStr.c_str());
00102     tree->Branch("Info", &info, InfoStr.c_str());
00103     info.serial[14] = '\0';
00104 }
00105 
00109 void TimeWalkCompare::downloadData(string serialNumber) {
00110     ostringstream oss;
00111     SctTest::TestInfo info = moduleData.getTimeWalkInfo(serialNumber);
00112     oss << "java -Dtdaq.ipc.init.ref=$TDAQ_IPC_INIT_REF ProdDatabase/getDBfiles " << Arg << " -d -r " << info.runNumber << " -s " << info.scanNumber << "  " << serialNumber;
00113     system(oss.str().c_str());
00114 }
00115 
00120 void TimeWalkCompare::publishData() {
00121     highLevelApi->timeWalk();
00122 }
00123 
00124 
00125 int main(int argc, char** argv) {
00126         IPCCore::init(argc,argv);
00127     TimeWalkCompare sdc;
00128     sdc.analyzeAll(argc, argv);
00129     return sdc.getExitCode();
00130 }
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 

Generated on Mon Feb 6 14:01:26 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6