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

AlignHists.cxx

Go to the documentation of this file.
00001 #include "Alignment/AlignHists.h"
00002 
00003 #include "TH2.h"
00004 #include "TFile.h"
00005 #include "TSystem.h"
00006 
00007 #include <vector>
00008 #include <iostream>
00009 using std::cerr;
00010 using std::endl;
00011 
00012 
00013 AlignHists::AlignHists(int nplanes, int nmdlperplane, const char* histname)
00014     : fIteration(0)
00015       ,fHistName(histname)
00016 {
00017     cerr << "AlignHists::AlignHists("
00018          << nplanes << "," << nmdlperplane << ")\n";
00019 
00020     fNumberOfTracks[0] = new TH2D("NumberOfTracksU",
00021                                   "Number of tracks per scint module, U view",
00022                                   nplanes,0,nplanes,
00023                                   nmdlperplane,0,nmdlperplane);
00024     fNumberOfTracks[1] = new TH2D("NumberOfTracksV",
00025                                   "Number of tracks per scint module, V view",
00026                                   nplanes,0,nplanes,
00027                                   nmdlperplane,0,nmdlperplane);
00028     fNumberOfTracksStrips[0] = new TH2D("NumberOfTracksStripsU",
00029                                   "Number of tracks per strip, U view",
00030                                   nplanes,0,nplanes,
00031                                   192,0,192);
00032     fNumberOfTracksStrips[1] = new TH2D("NumberOfTracksStripsV",
00033                                   "Number of tracks per strip, V view",
00034                                   nplanes,0,nplanes,
00035                                   192,0,192);
00036 
00037     for (int view = 0; view < 2; ++view) {
00038         char view_char = 'U';
00039         if (view) view_char = 'V';
00040 
00041         for (int itt = 0; itt < 20; ++ itt) {
00042             char name[80];
00043             char title[80];
00044             sprintf(name,"ResidHist%c%02d",view_char,itt);
00045             sprintf(title,"Per Module Residuals %c view, iter %02d",
00046                     view_char,itt);
00047 
00048             fResidHist[view][itt] = new TH2D(name, title,
00049                                              nplanes,0,nplanes,
00050                                              nmdlperplane,0,nmdlperplane);
00051             fResidHist[view][itt]->Sumw2();
00052             sprintf(name,"ResidSqrHist%c%02d",view_char,itt);
00053             sprintf(title,"Per Module Residuals**2 %c view, iter %02d",
00054                     view_char,itt);
00055 
00056             fResidSqrHist[view][itt] = new TH2D(name, title,
00057                                                 nplanes,0,nplanes,
00058                                                 nmdlperplane,0,nmdlperplane);
00059         }
00060     }
00061 
00062     cerr << "AlignHists::AlignHists() done\n";
00063 }
00064 
00065 AlignHists::AlignHists(const char* filename) 
00066     : fIteration(0)
00067       ,fHistName(filename)
00068 {
00069     cerr << "AlignHists::AlignHists("<<filename<<")\n";
00070 
00071     fNumberOfTracks[0] = new TH2D("NumberOfTracksU",
00072                                   "Number of tracks per scint module, U view",
00073                                   500,0,500,8,0,8);
00074     fNumberOfTracks[1] = new TH2D("NumberOfTracksV",
00075                                   "Number of tracks per scint module, V view",
00076                                   500,0,500, 8,0,8);
00077     fNumberOfTracksStrips[0] = new TH2D("NumberOfTracksStripsU",
00078                                   "Number of tracks per strip, U view",
00079                                   500,0,500, 192,0,192);
00080     fNumberOfTracksStrips[1] = new TH2D("NumberOfTracksStripsV",
00081                                   "Number of tracks per strip, V view",
00082                                   500,0,500, 192,0,192);
00083 
00084     for (int view = 0; view < 2; ++view) {
00085         char view_char = 'U';
00086         if (view) view_char = 'V';
00087 
00088         for (int itt = 0; itt < 20; ++ itt) {
00089             char name[80];
00090             char title[80];
00091             sprintf(name,"ResidHist%c%02d",view_char,itt);
00092             sprintf(title,"Per Module Residuals %c view, iter %02d",
00093                     view_char,itt);
00094 
00095             fResidHist[view][itt] = new TH2D(name, title,500,0,500,8,0,8);
00096             fResidHist[view][itt]->Sumw2();
00097             sprintf(name,"ResidSqrHist%c%02d",view_char,itt);
00098             sprintf(title,"Per Module Residuals**2 %c view, iter %02d",
00099                     view_char,itt);
00100 
00101             fResidSqrHist[view][itt] = new TH2D(name, title,500,0,500,8,0,8);
00102         }
00103     }
00104 
00105 
00106 }
00107 
00108 void AlignHists::LoadFromFile(const char* histname)
00109 {
00110     TFile* leak = new TFile(histname);
00111     fNumberOfTracks[0] = (TH2D*)leak->Get("NumberOfTracksU");
00112     fNumberOfTracks[1] = (TH2D*)leak->Get("NumberOfTracksV");
00113 
00114     for (int view = 0; view < 2; ++view) {
00115         char view_char = 'U';
00116         if (view) view_char = 'V';
00117 
00118         for (int itt = 0; itt < 20; ++ itt) {
00119             char name[80];
00120 
00121             sprintf(name,"ResidHist%c%02d",view_char,itt);
00122             fResidHist[view][itt] = (TH2D*)leak->Get(name);
00123 
00124             sprintf(name,"ResidSqrHist%c%02d",view_char,itt);
00125             fResidSqrHist[view][itt] = (TH2D*)leak->Get(name);
00126         }
00127     }
00128     fNumberOfTracksStrips[0] = (TH2D*)leak->Get("NumberOfTracksStripsU");
00129     fNumberOfTracksStrips[1] = (TH2D*)leak->Get("NumberOfTracksStripsV");    
00130 }
00131 
00132 static void add2d(TH2D* h1, TH2D* h2)
00133 {
00134     int nx = h2->GetNbinsX(), ny = h2->GetNbinsY();
00135     for (int x=1; x<=nx; ++x) {
00136         for (int y=1; y<=ny; ++y) {
00137             h1->SetBinContent(x,y,
00138                               h1->GetBinContent(x,y) +
00139                               h2->GetBinContent(x,y));
00140             h1->SetEntries(h1->GetEntries()+h2->GetEntries());
00141         }
00142     }
00143 }
00144 
00145 void AlignHists::ReadHists(const char* filename) 
00146 {
00147     TFile file(filename);
00148 
00149     add2d(fNumberOfTracks[0],(TH2D*)file.Get("NumberOfTracksU"));
00150     add2d(fNumberOfTracks[1],(TH2D*)file.Get("NumberOfTracksV"));
00151 
00152     add2d(fNumberOfTracksStrips[0],(TH2D*)file.Get("NumberOfTracksStripsU"));
00153     add2d(fNumberOfTracksStrips[1],(TH2D*)file.Get("NumberOfTracksStripsV"));
00154 
00155     for (int view = 0; view < 2; ++view) {
00156         char view_char = 'U';
00157         if (view) view_char = 'V';
00158 
00159         for (int itt = 0; itt < 20; ++ itt) {
00160             char name[80];
00161 
00162             sprintf(name,"ResidHist%c%02d",view_char,itt);
00163             add2d(fResidHist[view][itt],(TH2D*)file.Get(name));
00164 
00165             sprintf(name,"ResidSqrHist%c%02d",view_char,itt);
00166             add2d(fResidSqrHist[view][itt],(TH2D*)file.Get(name));
00167         }
00168     }
00169     
00170 }
00171 
00172 
00173 AlignHists::~AlignHists()
00174 {
00175     // dump hists to file?
00176     if (!fHistName) fHistName = "alignment-hists.root";
00177     TFile userFile(fHistName,"RECREATE");
00178     for (int view = 0; view < 2; ++view) {
00179         for (int itt = 0; itt < 20; ++ itt) {
00180 //            fResidHist[view][itt]->Divide(fNumberOfTracks[view]);
00181 //            fResidSqrHist[view][itt]->Divide(fNumberOfTracks[view]);
00182 
00183             fResidHist[view][itt]->Write();
00184             fResidSqrHist[view][itt]->Write();
00185         }
00186         fNumberOfTracks[view]->Write();
00187         fNumberOfTracksStrips[view]->Write();
00188     }
00189 }
00190 
00191 void AlignHists::ApplyTrack(PlaneView::PlaneView_t the_view,
00192                             std::vector<int>& strip,
00193                             std::vector<int>& plane, std::vector<int>& mdl, 
00194                             std::vector<double>& resid)
00195 {
00196     static int count=0;
00197     ++count;
00198 
00199 
00200     int view=0;
00201     if (the_view == PlaneView::kV) view = 1;
00202     cerr << "AlignHists::ApplyTrack " << resid.size() << " points,"
00203          << " iteration=" << fIteration << endl;
00204     for (unsigned int ind = 0; ind < resid.size(); ++ind) {
00205         cerr << ".";
00206         TH2D* hist;
00207 
00208         hist = fResidHist[view][fIteration];
00209         hist->Fill(plane[ind],mdl[ind],resid[ind]);
00210 
00211         hist = fResidSqrHist[view][fIteration];
00212         hist->Fill(plane[ind],mdl[ind],resid[ind]*resid[ind]);
00213 
00214         if (!fIteration) {
00215             fNumberOfTracks[view]->Fill(plane[ind],mdl[ind],1.0);
00216             fNumberOfTracksStrips[view]->Fill(plane[ind],strip[ind],1.0);
00217         }
00218     }
00219     cerr << endl;
00220 }
00221 
00222 
00223 ClassImp(AlignHists)

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