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

AlignmentRunSummary.cxx

Go to the documentation of this file.
00001 
00002 //
00003 //
00004 // Simple class to track variations in reconstructed track quantities
00005 //
00006 // Package: DetectorAlignment
00007 //
00008 // Contact: rustem@fnal.gov
00009 //
00010 // Created on: Mon Jul 25 21:26:05 2005
00011 //
00013 
00014 //Local
00015 #include "AlignmentRunSummary.h"
00016 #include "NtpAlignmentRecord.h"
00017 
00018 //MINOS
00019 #include "MessageService/MsgService.h"
00020 #include "MessageService/MsgFormat.h"
00021 
00022 //ROOT
00023 #include "TFile.h"
00024 #include "TTree.h"
00025 
00026 using namespace std;
00027 
00028 CVSID("$Id: AlignmentRunSummary.cxx,v 1.2 2005/08/10 21:07:39 rustem Exp $");
00029 
00030 //____________________________________________________________________________________________
00031 AlignmentRunSummary::AlignmentRunSummary()
00032    :fNumberOfSubRuns(0),
00033     fCurrentRun(0),
00034     fCurrentSubRun(0)
00035 {
00036 }
00037 
00038 //____________________________________________________________________________________________
00039 void AlignmentRunSummary::Fill(const NtpAlignmentRecord *ntprec)
00040 {
00041    if(!ntprec) return;
00042 
00043    const RecCandHeader candheader = ntprec -> GetHeader();      
00044    const int run    = candheader.GetRun();
00045    const int subrun = candheader.GetSubRun();
00046 
00047    if(fNumberOfSubRuns == 0 && fCurrentRun == 0 && fCurrentSubRun == 0)
00048    {
00049       fCurrentRun    = run;
00050       fCurrentSubRun = subrun;
00051    }
00052 
00053    if(fCurrentRun != run || fCurrentSubRun != subrun)
00054    {
00055       fNumberOfSubRuns++;  
00056       
00057       FillSummary(fNumberOfSubRuns, fVCandNStrip, fVCandNStripSummary);
00058       FillSummary(fNumberOfSubRuns, fUCandNStrip, fUCandNStripSummary);
00059       FillSummary(fNumberOfSubRuns, fVCandCharge, fVCandChargeSummary);
00060       FillSummary(fNumberOfSubRuns, fUCandCharge, fUCandChargeSummary);
00061       
00062       FillSummary(fNumberOfSubRuns, fVTrackNStrip, fVTrackNStripSummary);
00063       FillSummary(fNumberOfSubRuns, fUTrackNStrip, fUTrackNStripSummary);
00064       FillSummary(fNumberOfSubRuns, fVTrackCharge, fVTrackChargeSummary);
00065       FillSummary(fNumberOfSubRuns, fUTrackCharge, fUTrackChargeSummary);
00066 
00067       //const VldContext *vldc = ntprec -> GetHeader() -> GetVldContext());
00068       VldContext vldc(candheader.GetVldContext());
00069       
00070       pair<unsigned int, VldContext> p_vld(fNumberOfSubRuns, vldc);
00071       fmSubsetVldContext.insert(p_vld);
00072       
00073       pair<unsigned int, int> p_run(fNumberOfSubRuns, run);
00074       fmSubsetRunNumber.insert(p_run);
00075       
00076       pair<unsigned int, int> p_subrun(fNumberOfSubRuns, subrun);
00077       fmSubsetSubRunNumber.insert(p_subrun);
00078       
00079       fCurrentRun    = run;
00080       fCurrentSubRun = subrun;
00081    }
00082    
00083    fVCandNStrip.Fill(ntprec -> ncandvstrip);
00084    fUCandNStrip.Fill(ntprec -> ncandustrip);
00085    fVCandCharge.Fill(ntprec -> vcandcharge);
00086    fUCandCharge.Fill(ntprec -> ucandcharge);
00087    
00088    fVTrackNStrip.Fill(ntprec -> ntrackvstrip);
00089    fUTrackNStrip.Fill(ntprec -> ntrackustrip);
00090    fVTrackCharge.Fill(ntprec -> vcharge);
00091    fUTrackCharge.Fill(ntprec -> ucharge);
00092 }
00093 
00094 //____________________________________________________________________________________________
00095 void AlignmentRunSummary::FillSummary(const unsigned int n, SubsetStat &stat, 
00096                                       map<unsigned int, SubsetSummary> &summary_map)
00097 {
00098    SubsetSummary summary;
00099    summary.mean  = stat.GetMean();
00100    summary.sigma = stat.GetSigma();
00101    summary.size  = stat.GetSize();
00102    summary.sum   = stat.GetSum();
00103 
00104    pair<unsigned int, SubsetSummary> p(n, summary);
00105    summary_map.insert(p);
00106    stat.Reset();
00107 }
00108 
00109 //____________________________________________________________________________________________
00110 TTree* AlignmentRunSummary::FillSummaryTree(TFile *rootfile)
00111 {
00112    if(!rootfile)
00113    {
00114       MSG("Align", Msg::kError) << "Invalid root file pointer. Bailing out." << endl;
00115       return 0;
00116    }
00117    
00118    TTree *tree = new TTree("RunSummary","run summary");
00119    tree -> SetDirectory(rootfile);
00120    
00121    Int_t run, subrun;   
00122    Int_t second, date, time;
00123    UInt_t number_of_records, entry_number;
00124 
00125    Double_t mean_of_vtrack_nstrip,  mean_of_utrack_nstrip;
00126    Double_t mean_of_vtrack_charge,  mean_of_utrack_charge;
00127    Double_t sigma_of_vtrack_nstrip, sigma_of_utrack_nstrip;
00128    Double_t sigma_of_vtrack_charge, sigma_of_utrack_charge;
00129    Double_t sum_of_vtrack_nstrip,  sum_of_utrack_nstrip;
00130    Double_t sum_of_vtrack_charge,  sum_of_utrack_charge;
00131 
00132    Double_t mean_of_vcandnstrip,  mean_of_ucandnstrip;
00133    Double_t mean_of_vcandcharge,  mean_of_ucandcharge;
00134    Double_t sigma_of_vcandnstrip, sigma_of_ucandnstrip;
00135    Double_t sigma_of_vcandcharge, sigma_of_ucandcharge;
00136    Double_t sum_of_vcandnstrip,  sum_of_ucandnstrip;
00137    Double_t sum_of_vcandcharge,  sum_of_ucandcharge;
00138  
00139    tree -> Branch("run", &run, "run/I");
00140    tree -> Branch("subrun", &subrun, "subrun/I");
00141    tree -> Branch("second", &second, "second/I");
00142    tree -> Branch("date", &date, "date/I");
00143    tree -> Branch("time", &time, "time/I");
00144    tree -> Branch("entry_number", &entry_number, "entry_number/i");
00145    tree -> Branch("number_of_records", &number_of_records, "number_of_records/i");
00146 
00147    tree -> Branch("mean_of_vtrack_nstrip",  &mean_of_vtrack_nstrip,  "mean_of_vtrack_nstrip/D");
00148    tree -> Branch("mean_of_utrack_nstrip",  &mean_of_utrack_nstrip,  "mean_of_utrack_nstrip/D");
00149    tree -> Branch("mean_of_vtrack_charge",  &mean_of_vtrack_charge,  "mean_of_vtrack_charge/D");
00150    tree -> Branch("mean_of_utrack_charge",  &mean_of_utrack_charge,  "mean_of_utrack_charge/D");
00151    
00152    tree -> Branch("sum_of_vtrack_nstrip",  &sum_of_vtrack_nstrip,  "sum_of_vtrack_nstrip/D");
00153    tree -> Branch("sum_of_utrack_nstrip",  &sum_of_utrack_nstrip,  "sum_of_utrack_nstrip/D");
00154    tree -> Branch("sum_of_vtrack_charge",  &sum_of_vtrack_charge,  "sum_of_vtrack_charge/D");
00155    tree -> Branch("sum_of_utrack_charge",  &sum_of_utrack_charge,  "sum_of_utrack_charge/D");
00156   
00157    tree -> Branch("sigma_of_vtrack_nstrip", &sigma_of_vtrack_nstrip, "sigma_of_vtrack_nstrip/D");
00158    tree -> Branch("sigma_of_utrack_nstrip", &sigma_of_utrack_nstrip, "sigma_of_utrack_nstrip/D");
00159    tree -> Branch("sigma_of_vtrack_charge", &sigma_of_vtrack_charge, "sigma_of_vtrack_charge/D");
00160    tree -> Branch("sigma_of_utrack_charge", &sigma_of_utrack_charge, "sigma_of_utrack_charge/D");
00161 
00162    tree -> Branch("mean_of_vcandnstrip",  &mean_of_vcandnstrip,  "mean_of_vcandnstrip/D");
00163    tree -> Branch("mean_of_ucandnstrip",  &mean_of_ucandnstrip,  "mean_of_ucandnstrip/D");
00164    tree -> Branch("mean_of_vcandcharge",  &mean_of_vcandcharge,  "mean_of_vcandcharge/D");
00165    tree -> Branch("mean_of_ucandcharge",  &mean_of_ucandcharge,  "mean_of_ucandcharge/D");
00166 
00167    tree -> Branch("sum_of_vcandnstrip",  &sum_of_vcandnstrip,  "sum_of_vcandnstrip/D");
00168    tree -> Branch("sum_of_ucandnstrip",  &sum_of_ucandnstrip,  "sum_of_ucandnstrip/D");
00169    tree -> Branch("sum_of_vcandcharge",  &sum_of_vcandcharge,  "sum_of_vcandcharge/D");
00170    tree -> Branch("sum_of_ucandcharge",  &sum_of_ucandcharge,  "sum_of_ucandcharge/D");
00171 
00172    tree -> Branch("sigma_of_vcandnstrip", &sigma_of_vcandnstrip, "sigma_of_vcandnstrip/D");
00173    tree -> Branch("sigma_of_ucandnstrip", &sigma_of_ucandnstrip, "sigma_of_ucandnstrip/D");
00174    tree -> Branch("sigma_of_vcandcharge", &sigma_of_vcandcharge, "sigma_of_vcandcharge/D");
00175    tree -> Branch("sigma_of_ucandcharge", &sigma_of_ucandcharge, "sigma_of_ucandcharge/D");
00176    
00177    for(map<unsigned int, VldContext>::const_iterator vit = fmSubsetVldContext.begin();
00178        vit !=  fmSubsetVldContext.end(); ++vit)
00179    {
00180       entry_number = vit -> first;
00181       const VldContext vldc  = vit -> second;
00182       const VldTimeStamp vts = vldc.GetTimeStamp();
00183       second = vts.GetSec();
00184       date   = vts.GetDate();
00185       time   = vts.GetTime();
00186       
00187 
00188       map<unsigned int, int>:: const_iterator run_it = fmSubsetRunNumber.find(entry_number);
00189       if(run_it == fmSubsetRunNumber.end())
00190       {
00191          MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00192          run = -1;
00193       }else
00194          run = run_it -> second;
00195       
00196       run_it = fmSubsetSubRunNumber.find(entry_number);
00197       if(run_it == fmSubsetSubRunNumber.end())
00198       {
00199          MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00200          subrun = -1;
00201       }else
00202          subrun = run_it -> second;
00203 
00204       number_of_records = GetSubsetSize(entry_number, fVTrackNStripSummary);
00205       
00206       //strips on track
00207       mean_of_vtrack_nstrip = GetSubsetMean(entry_number, fVTrackNStripSummary);
00208       mean_of_utrack_nstrip = GetSubsetMean(entry_number, fUTrackNStripSummary);
00209 
00210       mean_of_vtrack_charge = GetSubsetMean(entry_number, fVTrackChargeSummary);
00211       mean_of_utrack_charge = GetSubsetMean(entry_number, fUTrackChargeSummary);
00212 
00213       sum_of_vtrack_nstrip = GetSubsetSum(entry_number, fVTrackNStripSummary);
00214       sum_of_utrack_nstrip = GetSubsetSum(entry_number, fUTrackNStripSummary);
00215 
00216       sum_of_vtrack_charge = GetSubsetSum(entry_number, fVTrackChargeSummary);
00217       sum_of_utrack_charge = GetSubsetSum(entry_number, fUTrackChargeSummary);
00218 
00219       sigma_of_vtrack_nstrip = GetSubsetSigma(entry_number, fVTrackNStripSummary);
00220       sigma_of_utrack_nstrip = GetSubsetSigma(entry_number, fUTrackNStripSummary);
00221 
00222       sigma_of_vtrack_charge = GetSubsetSigma(entry_number, fVTrackChargeSummary); 
00223       sigma_of_utrack_charge = GetSubsetSigma(entry_number, fUTrackChargeSummary);
00224       
00225       //strips not on track
00226       mean_of_vcandnstrip = GetSubsetMean(entry_number, fVCandNStripSummary);
00227       mean_of_ucandnstrip = GetSubsetMean(entry_number, fUCandNStripSummary);
00228 
00229       mean_of_vcandcharge = GetSubsetMean(entry_number, fVCandChargeSummary);
00230       mean_of_ucandcharge = GetSubsetMean(entry_number, fUCandChargeSummary);
00231 
00232       sum_of_vcandnstrip = GetSubsetSum(entry_number, fVCandNStripSummary);
00233       sum_of_ucandnstrip = GetSubsetSum(entry_number, fUCandNStripSummary);
00234 
00235       sum_of_vcandcharge = GetSubsetSum(entry_number, fVCandChargeSummary);
00236       sum_of_ucandcharge = GetSubsetSum(entry_number, fUCandChargeSummary);
00237 
00238       sigma_of_vcandnstrip = GetSubsetSigma(entry_number, fVCandNStripSummary);
00239       sigma_of_ucandnstrip = GetSubsetSigma(entry_number, fUCandNStripSummary);
00240 
00241       sigma_of_vcandcharge = GetSubsetSigma(entry_number, fVCandChargeSummary);
00242       sigma_of_ucandcharge = GetSubsetSigma(entry_number, fUCandChargeSummary);
00243 
00244       tree -> Fill();
00245    }
00246    
00247    return tree;
00248 }
00249 
00250 //____________________________________________________________________________________________
00251 double AlignmentRunSummary::GetSubsetMean(const unsigned int nsubset, 
00252                                           const map<unsigned int, SubsetSummary> &summary) const
00253 {
00254    map<unsigned int, SubsetSummary>::const_iterator fit = summary.find(nsubset);
00255    if(fit == summary.end())
00256    {
00257       MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00258       return -1.0;
00259    }
00260    
00261    const SubsetSummary &s = fit -> second;
00262    return s.mean;
00263 }
00264 
00265 //____________________________________________________________________________________________
00266 double AlignmentRunSummary::GetSubsetSigma(const unsigned int nsubset, 
00267                                            const map<unsigned int, SubsetSummary> &summary) const
00268 {
00269    map<unsigned int, SubsetSummary>::const_iterator fit = summary.find(nsubset);
00270    if(fit == summary.end())
00271    {
00272       MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00273       return -1.0;
00274    }
00275    
00276    const SubsetSummary &s = fit -> second;
00277    return s.sigma;
00278 }
00279 
00280 //____________________________________________________________________________________________
00281 unsigned int AlignmentRunSummary::GetSubsetSize(const unsigned int nsubset, 
00282                                                 const map<unsigned int, SubsetSummary> &summary) const
00283 {
00284    map<unsigned int, SubsetSummary>::const_iterator fit = summary.find(nsubset);
00285    if(fit == summary.end())
00286    {
00287       MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00288       return 0;
00289    }
00290    
00291    const SubsetSummary &s = fit -> second;
00292    return s.size;
00293 }  
00294 
00295 //____________________________________________________________________________________________
00296 double AlignmentRunSummary::GetSubsetSum(const unsigned int nsubset, 
00297                                          const map<unsigned int, SubsetSummary> &summary) const
00298 {
00299    map<unsigned int, SubsetSummary>::const_iterator fit = summary.find(nsubset);
00300    if(fit == summary.end())
00301    {
00302       MSG("Align", Msg::kError) << "Failed to find map item." << endl;
00303       return 0;
00304    }
00305    
00306    const SubsetSummary &s = fit -> second;
00307    return s.sum;
00308 }  
00309 
00310 //____________________________________________________________________________________________
00311 AlignmentRunSummary::~AlignmentRunSummary()
00312 {
00313 }

Generated on Mon Feb 15 11:06:21 2010 for loon by  doxygen 1.3.9.1