00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014 #include <cassert>
00015
00016 #include "StatisticalFluctuations.h"
00017 #include "NtpAlignmentRecord.h"
00018 #include "MessageService/MsgService.h"
00019 #include "MessageService/MsgFormat.h"
00020
00021 #include "TFile.h"
00022 #include "TTree.h"
00023
00024 using namespace std;
00025
00026 CVSID("$Id: StatisticalFluctuations.cxx,v 1.5 2009/02/28 21:46:10 gmieg Exp $");
00027
00028
00029 StatisticalFluctuations::StatisticalFluctuations(const VldContext &vldc)
00030 :fNumberOfSubsets(0)
00031 {
00032 pair<unsigned int, VldContext> p_vld(fNumberOfSubsets, vldc);
00033 fmValidity.insert(p_vld);
00034 }
00035
00036
00037 void StatisticalFluctuations::Fill(const AlignmentStrip &astrip)
00038 {
00039 PlexStripEndId plexseid(astrip.plexseid);
00040 PlexScintMdlId plexmdlid = plexseid.GetScintMdlId();
00041
00042
00043 FillStripSubsetStat(fmStripResidualCurrentSubset, plexseid, astrip.residual);
00044
00045
00046 FillStripSubsetStat(fmStripChargeCurrentSubset, plexseid, astrip.charge);
00047
00048
00049 FillModuleSubsetStat(fmMdlResidualCurrentSubset, plexmdlid, astrip.residual);
00050 }
00051
00052
00053 void StatisticalFluctuations::Reset(const VldContext &vldc, const int ntracks)
00054 {
00055 fNumberOfSubsets++;
00056
00057
00058 map<PlexStripEndId, SubsetSummary> StripResSummary;
00059 for(map<PlexStripEndId, SubsetStat>::const_iterator sit = fmStripResidualCurrentSubset.begin();
00060 sit != fmStripResidualCurrentSubset.end(); ++sit)
00061 {
00062 const SubsetStat stat = sit -> second;
00063
00064
00065 SubsetSummary summary;
00066 summary.mean = stat.GetMean();
00067 summary.sigma = stat.GetSigma();
00068 summary.sum = stat.GetSum();
00069 summary.size = stat.GetSize();
00070
00071 pair<PlexStripEndId, SubsetSummary> p(sit->first, summary);
00072 StripResSummary.insert(p);
00073 }
00074
00075 map<unsigned int, map<PlexStripEndId, SubsetSummary> >::const_iterator fsit =
00076 fmStripResidualSample.find(fNumberOfSubsets);
00077 if(fsit != fmStripResidualSample.end())
00078 abort();
00079 else
00080 {
00081 pair<unsigned int, map<PlexStripEndId, SubsetSummary> > p(fNumberOfSubsets, StripResSummary);
00082 fmStripResidualSample.insert(p);
00083 }
00084
00085
00086 map<PlexStripEndId, SubsetSummary> StripChargeSummary;
00087 for(map<PlexStripEndId, SubsetStat>::const_iterator sit = fmStripChargeCurrentSubset.begin();
00088 sit != fmStripChargeCurrentSubset.end(); ++sit)
00089 {
00090 const SubsetStat stat = sit -> second;
00091
00092
00093 SubsetSummary summary;
00094 summary.mean = stat.GetMean();
00095 summary.sigma = stat.GetSigma();
00096 summary.sum = stat.GetSum();
00097 summary.size = stat.GetSize();
00098
00099 pair<PlexStripEndId, SubsetSummary> p(sit->first, summary);
00100 StripChargeSummary.insert(p);
00101 }
00102
00103
00104 fsit = fmStripChargeSample.find(fNumberOfSubsets);
00105 if(fsit != fmStripChargeSample.end())
00106 abort();
00107 else
00108 {
00109 pair<unsigned int, map<PlexStripEndId, SubsetSummary> > p(fNumberOfSubsets, StripChargeSummary);
00110 fmStripChargeSample.insert(p);
00111 }
00112
00113
00114 map<PlexScintMdlId, SubsetSummary> MdlResSummary;
00115 for(map<PlexScintMdlId, SubsetStat>::const_iterator mit = fmMdlResidualCurrentSubset.begin();
00116 mit != fmMdlResidualCurrentSubset.end(); ++mit)
00117 {
00118 const SubsetStat stat = mit -> second;
00119
00120
00121 SubsetSummary summary;
00122 summary.mean = stat.GetMean();
00123 summary.sigma = stat.GetSigma();
00124 summary.sum = stat.GetSum();
00125 summary.size = stat.GetSize();
00126
00127 pair<PlexScintMdlId, SubsetSummary> p(mit->first, summary);
00128 MdlResSummary.insert(p);
00129 }
00130
00131 map<unsigned int, map<PlexScintMdlId, SubsetSummary> >::const_iterator fmit =
00132 fmMdlResidualSample.find(fNumberOfSubsets);
00133 if(fmit != fmMdlResidualSample.end())
00134 abort();
00135 else
00136 {
00137 pair<unsigned int, map<PlexScintMdlId, SubsetSummary> > p(fNumberOfSubsets, MdlResSummary);
00138 fmMdlResidualSample.insert(p);
00139 }
00140
00141
00142 pair<unsigned int, VldContext> p_vld(fNumberOfSubsets, vldc);
00143 fmValidity.insert(p_vld);
00144
00145
00146 pair<unsigned int, int> p_record(fNumberOfSubsets, ntracks);
00147 fmNRecords.insert(p_record);
00148
00149
00150 fmStripResidualCurrentSubset.clear();
00151 fmStripChargeCurrentSubset.clear();
00152 fmMdlResidualCurrentSubset.clear();
00153 }
00154
00155
00156 void StatisticalFluctuations::FillStripSubsetStat(map<PlexStripEndId, SubsetStat> &set,
00157 const PlexStripEndId &plexseid,
00158 const double &value)
00159 {
00160 map<PlexStripEndId, SubsetStat>::iterator fit = set.find(plexseid);
00161
00162
00163
00164 if(fit == set.end())
00165 {
00166 SubsetStat stat;
00167 stat.Fill(value);
00168 pair<PlexStripEndId, SubsetStat> p(plexseid, stat);
00169 set.insert(p);
00170 }
00171 else
00172 {
00173 (fit -> second).Fill(value);
00174 }
00175 }
00176
00177
00178 void StatisticalFluctuations::FillModuleSubsetStat(map<PlexScintMdlId, SubsetStat> &set,
00179 const PlexScintMdlId &plexmdlid,
00180 const double &value)
00181 {
00182 map<PlexScintMdlId, SubsetStat>::iterator fit = set.find(plexmdlid);
00183
00184
00185
00186 if(fit == set.end())
00187 {
00188 SubsetStat stat;
00189 stat.Fill(value);
00190 pair<PlexScintMdlId, SubsetStat> p(plexmdlid, stat);
00191 set.insert(p);
00192 }
00193 else
00194 {
00195 (fit -> second).Fill(value);
00196 }
00197 }
00198
00199
00200 StatisticalFluctuations::~StatisticalFluctuations()
00201 {
00202 }