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
00072
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 }