00001 #include "ISNPtGainSummaryData.h" 00002 #include "ISSummaryManager.h" 00003 #include "ISNPtGainSummaryWriter.h" 00004 00005 #include "Sct/ISUtilities.h" 00006 #include "Sct/SctParameters.h" 00007 00008 #include "SctData/NPtGainTestResult.h" 00009 #include "SctData/ResponseCurve.h" 00010 #include "SctData/Stat.h" 00011 00012 #include <iomanip> 00013 #include <TF1.h> 00014 #include <string> 00015 00016 namespace SctData { 00017 namespace ISTestSummary{ 00018 using namespace std; 00019 00020 void ISNPtGainSummaryWriter::write(const TestResult& t) const 00021 { 00022 const NPtGainTestResult& result = dynamic_cast<const NPtGainTestResult&>(t); 00023 00024 ISNPtGainSummaryData summary; 00025 00026 writeHeader(result, summary); 00027 00028 summary.gainByChip_size = Sct::nChipModule; 00029 summary.gainByChip = new double[Sct::nChipModule]; 00030 summary.gainRMSByChip_size = Sct::nChipModule; 00031 summary.gainRMSByChip = new double[Sct::nChipModule]; 00032 summary.offsetByChip_size = Sct::nChipModule; 00033 summary.offsetByChip = new double[Sct::nChipModule]; 00034 summary.offsetRMSByChip_size = Sct::nChipModule; 00035 summary.offsetRMSByChip = new double[Sct::nChipModule]; 00036 summary.noiseByChip_size = Sct::nChipModule; 00037 summary.noiseByChip = new double[Sct::nChipModule]; 00038 summary.noiseRMSByChip_size = Sct::nChipModule; 00039 summary.noiseRMSByChip = new double[Sct::nChipModule]; 00040 00041 for (short unsigned ichip=0; ichip<nChipModule; ++ichip){ 00042 Stats<float> gain(nChannelChip); 00043 Stats<float> offset(nChannelChip); 00044 Stats<float> innse(nChannelChip); 00045 00046 for (unsigned ichan=0; ichan<nChannelChip; ++ichan){ 00047 unsigned ichannel = ichan + ichip*nChannelChip; 00048 bool valid=result.getDefects().defectSeverityEncompassingElement(ModuleElement::Channel(ichannel)) < SERIOUS; 00049 00050 gain.modifyAt(ichan).valid = valid; 00051 offset.modifyAt(ichan).valid = valid; 00052 innse.modifyAt(ichan).valid = valid; 00053 00054 gain.modifyAt(ichan).value = result.getChannelData(ichannel).gain; 00055 innse.modifyAt(ichan).value = result.getChannelData(ichannel).noise; 00056 offset.modifyAt(ichan).value = result.getChannelData(ichannel).offset; 00057 } 00058 00059 summary.gainByChip[ichip] = gain.mean(); 00060 summary.gainRMSByChip[ichip] = sqrt(gain.var()); 00061 summary.offsetByChip[ichip] = offset.mean(); 00062 summary.offsetRMSByChip[ichip] = sqrt(offset.var()); 00063 summary.noiseByChip[ichip] = innse.mean(); 00064 summary.noiseRMSByChip[ichip] = sqrt(innse.var()); 00065 00066 } 00067 00068 string name = "ISSummaryData.ISNPtGainSummaryData."; 00069 name += result.getHeader().getModuleName(); 00070 00071 // cout << " I am about to write the ISSummary " << endl; 00072 // cout << " name " << name <<endl; 00073 00074 Sct::ISUtilities::addOrUpdateOrThrow(name,summary,__FILE__,__LINE__, MRS_WARNING ); 00075 00076 } 00077 00078 00079 bool ISNPtGainSummaryWriter::inMap = ISSummaryManager::instance().addWriter("SctData::NPtGainTestResult", shared_ptr<ISSummaryWriter>(new ISNPtGainSummaryWriter())); 00080 } 00081 }