ISNPtGainSummaryWriter.cpp

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 }

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