Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

StatisticalFluctuations.cxx

Go to the documentation of this file.
00001 
00002 //
00003 //
00004 // Simple class to track variations on strip and module residuals
00005 // and strip charges between subsets of data
00006 //
00007 // Package: DetectorAlignment
00008 //
00009 // Contact: rustem@fnal.gov
00010 //
00011 // Created on: Mon Jul 25 21:26:05 2005
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    //fill strip residual sample
00043    FillStripSubsetStat(fmStripResidualCurrentSubset, plexseid, astrip.residual);
00044    
00045    //fill strip charge sample
00046    FillStripSubsetStat(fmStripChargeCurrentSubset, plexseid, astrip.charge);
00047    
00048    //fill module residual sample
00049    FillModuleSubsetStat(fmMdlResidualCurrentSubset, plexmdlid, astrip.residual);
00050 }
00051 
00052 //____________________________________________________________________________________________
00053 void StatisticalFluctuations::Reset(const VldContext &vldc, const int ntracks)
00054 {
00055    fNumberOfSubsets++;
00056 
00057    //Get mean, sigm and size for current strip residual subset
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       //create and fill stat summary struct  
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    //Get mean, sigm and size for current strip charge subset
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       //create and fill stat summary struct      
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    //Get mean, sigm and size for current module residual subset
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       //create and fill stat summary struct  
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    //insert validity context for time subset was reset
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    //clear subset maps
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    //create and insert SubsetStat object if it does not exist
00163    //otherwise fill with strip residual
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    //create and insert SubsetStat object if it does not exist
00185    //otherwise fill with strip residual
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 }

Generated on Mon Feb 15 11:07:39 2010 for loon by  doxygen 1.3.9.1