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

AlignmentHistograms.cxx

Go to the documentation of this file.
00001 
00002 //
00003 //
00004 // AlignmentHistograms
00005 //
00006 // Package: DetectorAlignment
00007 //
00008 // Main alignment histograms class
00009 //
00010 // Contact: rustem@fnal.gov
00011 //
00012 // Created on: Fri Sep 24 15:26:05 2004
00013 //
00015 
00016 //Local package headers
00017 #include "AlignmentHistograms.h"
00018 #include "NtpAlignmentRecord.h"
00019 #include "AlignmentStrip.h"
00020 
00021 //MINOS headers
00022 #include "MessageService/MsgService.h"
00023 #include "MessageService/MsgFormat.h"
00024 #include "UgliGeometry/UgliGeomHandle.h"
00025 #include "Validity/VldContext.h"
00026 
00027 //ROOT headers
00028 #include "TH1.h"
00029 #include "TH2.h"
00030 #include "TF1.h"
00031 #include "TProfile.h"
00032 #include "TFile.h"
00033 #include "TTree.h"
00034 
00035 //C++ headers
00036 #include <cassert>
00037 #include <vector>
00038 #include <map>
00039 #include <list>
00040 #include <cmath>
00041 #include <iostream>
00042 #include <string>
00043 #include <sstream>
00044 
00045 using namespace std;
00046 
00047 CVSID("$Id: AlignmentHistograms.cxx,v 1.6 2009/02/28 21:46:10 gmieg Exp $");
00048 
00049 AlignmentHistograms::AlignmentHistograms(TFile *rootfile, const VldContext &vld)
00050    :fRootFile(rootfile),
00051     fnplanes(0),
00052     fnstrips(0),
00053     fNResidualBins(400),
00054     fResidualLimit(0.2),
00055     fResidualStripBinWidth(0.001),
00056     fResidualMdlBinWidth(0.001),
00057     fNResidualBinsStrip(60),
00058     fResidualLimitStrip(0.12),
00059     fNChargeBins(1000),
00060     fChargeLimit(10000.0),
00061     fNTrackChargeBins(2000),
00062     fTrackChargeLimit(100000.0),
00063     fNHitsBins(100),
00064     fTrackResidualRMSBins(1000),
00065     fTrackResidualRMSLimit(0.2),
00066     fNCosBins(600),
00067     //Histograms from here down
00068     fhCharge2dTracksU(0),
00069     fhCharge2dTracksV(0),
00070     fhCharge2dTracksDiffNorm(0),
00071     fhNStrip2dTracksU(0),
00072     fhNStrip2dTracksV(0),
00073     fhNStrip2dTracksDiffNorm(0),
00074     fhSigmaOfTPosVview(0),
00075     fhSigmaOfTPosUview(0),
00076     fhSigmaOfTPosDiffNorm(0),
00077     fChargesInAllHitStrip(0),
00078     fChargevsResidualHitStrips(0),  
00079     fResidualAllStrips(0), 
00080     fResidualVStrips(0), 
00081     fResidualUStrips(0), 
00082     fTrackResidualRMSVview(0),
00083     fTrackResidualRMSUview(0),
00084     fChargeRatioOf2dTracks(0),
00085     fhTrackHoughCosU(0),
00086     fhTrackHoughCosV(0),
00087     fhTrackHoughCosZ(0),
00088     fhTrackChargeOverTotalChargeRatio(0),
00089     //2D histograms from here down        
00090     f2hNumberOfTrackHitsPerStrip(0), 
00091     f2hNumberOfTrackHitsPerModule(0), 
00092     f2hChargevsResidualHitStrips(0),  
00093     f2hResidualvsPlane(0),
00094     f2hMeanChargePlaneStrip(0),
00095     f2hMeanPathCorrChargePlaneStrip(0),
00096     //Track TProfile histograms from here down
00097     fpTPosSigmavsCosZVview(0),
00098     fpTPosSigmavsCosZUview(0),
00099     fpTPosSigmavsTrackChargeVview(0),
00100     fpTPosSigmavsTrackChargeUview(0),
00101     fpTPosSigmavsTrackNStripsVview(0),
00102     fpTPosSigmavsTrackNStripsUview(0),
00103     fpTPosSigmavsTrackChargeRatioVview(0),
00104     fpTPosSigmavsTrackChargeRatioUview(0),
00105     fp3dTrackChargevsTrackChargeRatio(0),
00106     fp3dTrackChargevsTrackCosz(0),
00107     fp3dTrackNStripsvsCosz(0),
00108     fp3dTrackChargevsNStrips(0),
00109     fp3dTrackChargeRatiovsCosz(0),
00110     //Strip TProfile histograms
00111     fpResidualvsPlane(0),
00112     fpResidualvsCosZVview(0),
00113     fpResidualvsCosZUview(0),
00114     fpResidualvsTPosSigmaVview(0),
00115     fpResidualvsTPosSigmaUview(0),
00116     fpResidualvsStripChargeVview(0),
00117     fpResidualvsStripChargeUview(0),
00118     fpResidualvsTrackChargeVview(0),
00119     fpResidualvsTrackChargeUview(0),
00120     fpResidualvsTrackNStripsVview(0),
00121     fpResidualvsTrackNStripsUview(0),
00122     fpResidualvsTrackChargeRatioVview(0),
00123     fpResidualvsTrackChargeRatioUview(0),
00124     fpMeanStripResponsevsResidual(0)
00125 {
00126 
00127    MSG("Align", Msg::kInfo) << "Constructor AlignmentHistograms() " << endl;
00128 
00129    if(!fRootFile)
00130    {
00131       MSG("Align", Msg::kFatal) << "ROOT file pointer is zero. Abort()" <<endl;
00132       abort();
00133    }
00134 
00135    fRootFile -> cd();   
00136 
00137    fPlanePlexDirectory       = new TDirectory("PlanePlex","PlanePlex");
00138    fResidualSummaryDirectory = new TDirectory("ResidualSummary","ResidualSummary");   
00139    fTrackDirectory           = new TDirectory("TrackData","TrackData");   
00140 
00141    UgliGeomHandle ugh(vld);
00142    vector<UgliScintPlnHandle> uph  = ugh.GetScintPlnHandleVector();
00143    for(vector<UgliScintPlnHandle>::iterator it = uph.begin(); it != uph.end(); ++it)
00144    {
00145       const int plane = it -> GetPlaneNumber();
00146       if(plane > fnplanes)
00147          fnplanes = plane;
00148 
00149       vector<UgliStripHandle> ushv = it -> GetStripHandleVector();
00150       for(vector<UgliStripHandle>::iterator sit = ushv.begin(); sit != ushv.end(); ++sit)
00151       {
00152          const int strip = (sit -> GetSEId()).GetStrip();
00153          if(strip > fnstrips)
00154             fnstrips = strip;
00155       }
00156       
00157       const int nstrip = it -> NumberOfStrips();
00158       char name[100], title[100];
00159       
00160       sprintf(name,"PlexChargeRatioPlane%03d", plane);
00161       sprintf(title,"cand strip charge over trackv strip charge plane %03d", plane);
00162       TH2D *h_ratio = new TH2D(name, title, nstrip, 0, nstrip, nstrip, 0, nstrip);
00163       h_ratio -> SetDirectory(fPlanePlexDirectory);
00164       SetAxisLabels(h_ratio, "track strip #", "candidate strip #");
00165       f2hPlanePlexChargeRatio[plane] = h_ratio;
00166 
00167       sprintf(name,"PlexHitsPlane%03d", plane);
00168       sprintf(title,"Number of entries in each bin plane %03d", plane);
00169       TH2D *h_hits = new TH2D(name, title, nstrip, 0, nstrip, nstrip, 0, nstrip);
00170       h_hits -> SetDirectory(fPlanePlexDirectory);
00171       SetAxisLabels(h_hits, "track strip #", "candidate strip #");
00172       f2hPlanePlexHits[plane] = h_hits; 
00173    }
00174    
00175    fChargesInAllHitStrip = new TH1D("ChargesInAllHitStrip",
00176                                     "Charge in all hit strips",
00177                                     fNChargeBins, 0, fChargeLimit); 
00178    SetAxisLabels(fChargesInAllHitStrip, "Raw ADC", 0);
00179    
00180 
00181    fChargevsResidualHitStrips = new TH1D("ChargevsResidualHitStrips2h", "Charge of hit strip vs fited residual",
00182                                          2*fNResidualBins , -fResidualLimit, fResidualLimit);
00183    SetAxisLabels(fChargevsResidualHitStrips, "residual (m)", "Raw ADC");
00184    
00185    f2hChargevsResidualHitStrips = new TH2D("ChargevsResidualHitStrips", "Charge of hit strip vs fited residual",
00186                                            2*fNResidualBins , -fResidualLimit, fResidualLimit,
00187                                            fNChargeBins, 0, fChargeLimit);
00188    SetAxisLabels(f2hChargevsResidualHitStrips, "residual (m)", "Raw ADC");
00189    
00190    fResidualSummaryDirectory -> cd();
00191    
00192    fResidualAllStrips = new TH1D("ResidualAllStrips", "Residuals of all strips",
00193                                  2*fNResidualBins , -fResidualLimit, fResidualLimit);   
00194    SetAxisLabels(fResidualAllStrips,"residual (m)",0);
00195    
00196    fResidualUStrips = new TH1D("ResidualUStrips", "Residuals of U strips",
00197                                2*fNResidualBins , -fResidualLimit, fResidualLimit);   
00198    SetAxisLabels(fResidualUStrips, "residual (m)",0);
00199    
00200    fResidualVStrips = new TH1D("ResidualVStrips",
00201                                "Residuals of V strips",
00202                                2*fNResidualBins , -fResidualLimit, fResidualLimit);   
00203    fResidualVStrips -> GetXaxis() -> SetTitle("residual (m)");
00204    fResidualVStrips -> GetXaxis() -> CenterTitle();
00205    
00206    f2hResidualvsPlane = new TH2D("ResidualvsPlane",
00207                                  "Residual vs plane number, all events",
00208                                  fnplanes, 0, fnplanes,
00209                                  2*fNResidualBins , -fResidualLimit, fResidualLimit); 
00210    SetAxisLabels(f2hResidualvsPlane, "residual (m)","plane number");
00211    
00212    fRootFile -> cd();   
00213    
00214    f2hNumberOfTrackHitsPerStrip = new TH2D("NumberOfTrackHitsPerStrip", "Strip vs plane for track hits",
00215                                            fnplanes, 0, fnplanes, fnstrips, 0, fnstrips);
00216    SetAxisLabels(f2hNumberOfTrackHitsPerStrip,"plane number", "strip number");
00217    
00218    
00219    f2hNumberOfTrackHitsPerModule = new TH2D("NumberOfTrackHitsPerModule",
00220                                           "Module vs plane for track hits",
00221                                           fnplanes, 0, fnplanes,
00222                                           5, 0, 5);
00223    SetAxisLabels(f2hNumberOfTrackHitsPerModule, "plane number", "module number");
00224 
00225    fResidualSummaryDirectory -> cd();   
00226    
00227    //____________________________________________________________________________________________
00228    fpMeanStripResponsevsResidual = new TProfile("MeanStripResponsevsResidual", 
00229                                                 "Response of scintilator vs residual, path length corrected",
00230                                                 2*fNResidualBins , -fResidualLimit, fResidualLimit);   
00231    SetAxisLabels(fpMeanStripResponsevsResidual, "residual (m)", "charge (ADC)");
00232 
00233    //_______________________________________________________________________________
00234    fpResidualvsPlane = new TProfile("ProfileResidualvsPlane", "Residual vs plane number", 
00235                                     fnplanes, 0.0, fnplanes, "s");
00236    SetAxisLabels(fpResidualvsPlane, "residual (m)");
00237    
00238    //_______________________________________________________________________________
00239    fpResidualvsCosZVview = new TProfile("ResidualvsCosZVview", 
00240                                         "Residual vs cos with Z axis V planes", 
00241                                         100, -1.0, 1.0);
00242    SetAxisLabels(fpResidualvsCosZVview, "residual (m)");
00243    
00244    fpResidualvsCosZUview = new TProfile("ResidualvsCosZUview", 
00245                                         "Residual vs cos with Z axis U plane", 
00246                                         100, -1.0, 1.0);
00247    SetAxisLabels(fpResidualvsCosZUview, "residual (m)");
00248    
00249    //____________________________________________________________________________________________
00250    fpResidualvsTPosSigmaVview = new TProfile("ResidualvsTPosSigmaVview", 
00251                                              "Residual vs tpos error V planes", 
00252                                              100, 0, 0.05);
00253    SetAxisLabels(fpResidualvsTPosSigmaVview, "residual (m)","error in tpos (m)");
00254 
00255    fpResidualvsTPosSigmaUview = new TProfile("ResidualvsTPosSigmaUview", 
00256                                              "Residual vs tpos error U planes", 
00257                                              100, 0, 0.05);
00258    SetAxisLabels(fpResidualvsTPosSigmaUview, "residual (m)", "error in tpos (m)");
00259 
00260    //____________________________________________________________________________________________
00261    fpResidualvsStripChargeVview = new TProfile("ResidualvsStripChargeVview", 
00262                                                "Residual vs strip charge V planes", 
00263                                                200, 0, 10000);
00264    SetAxisLabels(fpResidualvsStripChargeVview, "residual (m)", "strip charge (ADC)");
00265 
00266    fpResidualvsStripChargeUview = new TProfile("ResidualvsStripChargeUview", 
00267                                                "Residual vs strip charge U planes", 
00268                                                200, 0, 10000);
00269    SetAxisLabels(fpResidualvsStripChargeUview, "residual (m)", "strip charge (ADC)");
00270 
00271    //____________________________________________________________________________________________
00272    fpResidualvsTrackChargeVview = new TProfile("ResidualvsTrackChargeVview", 
00273                                                "Residual vs track charge V planes", 
00274                                                100, 0, 60000);
00275    SetAxisLabels(fpResidualvsTrackChargeVview, "residual (m)", "track charge (ADC)");
00276    
00277    fpResidualvsTrackChargeUview = new TProfile("ResidualvsTrackChargeUview", 
00278                                                "Residual vs track charge U planes", 
00279                                                100, 0, 60000);
00280    SetAxisLabels(fpResidualvsTrackChargeUview, "residual (m)", "track charge (ADC)");
00281 
00282    //____________________________________________________________________________________________
00283    fpResidualvsTrackNStripsVview = new TProfile("ResidualvsTrackNStripsVview", 
00284                                                 "Residual vs # of strips in track V planes", 
00285                                                 100, 0.0, 100.0);
00286    SetAxisLabels(fpResidualvsTrackNStripsVview, "residual (m)", "#strips");
00287    
00288    fpResidualvsTrackNStripsUview = new TProfile("ResidualvsTrackNStripsUview", 
00289                                                 "Residual vs # of strips in track U planes", 
00290                                                 100, 0.0, 100.0);
00291    SetAxisLabels(fpResidualvsTrackNStripsUview, "residual (m)", "#strips");
00292 
00293    //____________________________________________________________________________________________
00294    fpResidualvsTrackChargeRatioVview = new TProfile("ResidualvsTrackChargeRatioVview", 
00295                                                     "Error in tpos vs # track/cand charge V planes", 
00296                                                     100, 0.0, 1.0);
00297    SetAxisLabels(fpResidualvsTrackChargeRatioVview, "error in tpos (m)");
00298 
00299    fpResidualvsTrackChargeRatioUview = new TProfile("ResidualvsTrackChargeRatioUview", 
00300                                                     "Error in tpos vs # track/cand charge U planes", 
00301                                                     100, 0.0, 1.0);
00302    SetAxisLabels(fpResidualvsTrackChargeRatioUview, "error in tpos (m)");
00303 
00304    fRootFile -> cd();
00305 
00306 }
00307 
00308 
00309 //__________________________________________________________________________________________________
00310 void AlignmentHistograms::Fill(const AlignmentStrip& astrip, const NtpAlignmentRecord* ntprec)
00311 {
00312    PlexStripEndId plexid(astrip.plexseid);
00313 
00314    fChargesInAllHitStrip          -> Fill(astrip.charge);
00315    f2hNumberOfTrackHitsPerStrip   -> Fill(plexid.GetPlane(), plexid.GetStrip(), 1.0);
00316    f2hNumberOfTrackHitsPerModule  -> Fill(plexid.GetPlane(), plexid.GetScintMdlId().GetModule(), 1.0);
00317    fChargevsResidualHitStrips     -> Fill(astrip.residual, astrip.charge); 
00318    f2hChargevsResidualHitStrips   -> Fill(astrip.residual, astrip.charge, 1.0);
00319    fResidualAllStrips             -> Fill(astrip.residual);
00320    f2hResidualvsPlane             -> Fill(plexid.GetPlane(), astrip.residual);
00321    fpResidualvsPlane              -> Fill(plexid.GetPlane(), astrip.residual);
00322    fpMeanStripResponsevsResidual  -> Fill(astrip.residual, astrip.charge*fabs(ntprec->hcosz), 1.0);      
00323 
00324    double sum = ntprec->vcharge + ntprec->ucharge + ntprec->vcandcharge + ntprec->ucandcharge;
00325    double ratio = -1.0;
00326    if(sum>1.0)
00327       ratio = (ntprec->vcharge + ntprec->ucharge)/sum;
00328 
00329    if(plexid.GetPlaneView() == PlaneView::kV)
00330    {
00331       fResidualVStrips -> Fill(astrip.residual);
00332       fpResidualvsStripChargeVview    -> Fill(astrip.charge, astrip.residual);
00333       fpResidualvsTPosSigmaVview      -> Fill(ntprec->vsigmaoftpos, astrip.residual);
00334       fpResidualvsCosZVview           -> Fill(ntprec->hcosz, astrip.residual);
00335       fpResidualvsTrackChargeVview    -> Fill(ntprec->vcharge, astrip.residual);
00336       fpResidualvsTrackNStripsVview   -> Fill(ntprec->ntrackvstrip, astrip.residual);
00337       fpResidualvsTrackChargeRatioVview  -> Fill(ratio, astrip.residual);
00338    } else 
00339    {
00340       fResidualUStrips -> Fill(astrip.residual);
00341       fpResidualvsStripChargeUview    -> Fill(astrip.charge, astrip.residual);
00342       fpResidualvsTPosSigmaUview      -> Fill(ntprec->usigmaoftpos, astrip.residual);
00343       fpResidualvsCosZUview           -> Fill(ntprec->hcosz, astrip.residual);
00344       fpResidualvsTrackChargeUview    -> Fill(ntprec->ucharge, astrip.residual);
00345       fpResidualvsTrackNStripsUview   -> Fill(ntprec->ntrackustrip, astrip.residual);
00346       fpResidualvsTrackChargeRatioUview -> Fill(ratio, astrip.residual);
00347    }
00348    
00349    FillTrackInfo(ntprec);
00350    FillHits(plexid);
00351 }
00352 
00353 
00354 //__________________________________________________________________________________________________
00355 void AlignmentHistograms::FillHits(PlexStripEndId &plexid)
00356 {
00357    map<PlexStripEndId, unsigned int>::iterator sit = fNStripHits.find(plexid);
00358    if(sit ==  fNStripHits.end())
00359       fNStripHits[plexid] = 1;
00360    else 
00361       sit->second += 1;
00362    
00363    PlexScintMdlId plexmdlid = plexid.GetScintMdlId();   
00364    map<PlexScintMdlId, unsigned int>::iterator mit = fNMdlHits.find(plexmdlid);
00365    if(mit ==  fNMdlHits.end())
00366       fNMdlHits[plexmdlid] = 1;
00367    else 
00368       mit->second += 1;
00369 }
00370 
00371 
00372 //__________________________________________________________________________________________________
00373 void AlignmentHistograms::FillTrackInfo(const NtpAlignmentRecord* ntprec)
00374 {
00375    if(!fhCharge2dTracksV){
00376       fTrackDirectory -> cd();
00377       
00378       fp3dTrackChargevsTrackChargeRatio = new TProfile("TrackChargevsTrackChargeRatio",
00379                                                        "3d track charge vs track charge/record charge",
00380                                                        200, 0.0, 1.0);
00381       
00382       fp3dTrackChargeRatiovsCosz = new TProfile("TrackChargeRatiovsCosz",
00383                                                 "3d track charge/record charge vs Hough CosZ",
00384                                                 200, -1.0, 1.0);
00385       
00386       fp3dTrackChargevsTrackCosz = new TProfile("TrackChargevsTrackCosz",
00387                                                 "3d track charge vs Hough CosZ",
00388                                                 200, -1.0, 1.0);
00389       
00390       fp3dTrackChargevsNStrips = new TProfile("TrackChargevsNStrips",
00391                                               "3d track charge vs # of strips",
00392                                               100, 0.0, 100.0);
00393       
00394       fp3dTrackNStripsvsCosz = new TProfile("TrackNStripsvsCosz",
00395                                             "3d track # of strip vs Hough CosZ",
00396                                             200, -1.0, 1.0);
00397       
00398       fpTPosSigmavsCosZVview = new TProfile("TPosSigmavsCosZVview", 
00399                                             "Error in tpos vs cosz V planes", 
00400                                             100, -1.0, 1.0);
00401       SetAxisLabels(fpTPosSigmavsCosZVview, "error in tpos (m)");
00402       
00403       fpTPosSigmavsCosZUview = new TProfile("TPosSigmavsCosZUview", 
00404                                             "Error in tpos vs cosz U planes", 
00405                                             100, -1.0, 1.0);
00406       SetAxisLabels(fpTPosSigmavsCosZUview, "error in tpos (m)");
00407 
00408       fpTPosSigmavsTrackChargeVview = new TProfile("TPosSigmavsTrackChargeVview", 
00409                                                    "Error in tpos vs track charge V planes", 
00410                                                    1000, 0.0, 100000);
00411       SetAxisLabels(fpTPosSigmavsTrackChargeVview, "error in tpos (m)", "2d track charge (ADC)");
00412       
00413       fpTPosSigmavsTrackChargeUview = new TProfile("TPosSigmavsTrackChargeUview", 
00414                                                    "Error in tpos vs # track charge U planes", 
00415                                                    1000, 0.0, 100000);
00416       SetAxisLabels(fpTPosSigmavsTrackChargeUview, "error in tpos (m)", "2d track charge (ADC)");
00417 
00418       fpTPosSigmavsTrackNStripsVview = new TProfile("TPosSigmavsTrackNStripsVview", 
00419                                                     "Error in tpos vs # of track V strips", 
00420                                                     100, 0.0, 100);
00421       SetAxisLabels(fpTPosSigmavsTrackNStripsVview, "error in tpos (m)", "#strips");
00422       
00423       fpTPosSigmavsTrackNStripsUview = new TProfile("TPosSigmavsTrackNStripsUview", 
00424                                                     "Error in tpos vs # of track U strips", 
00425                                                     100, 0.0, 100);
00426       SetAxisLabels(fpTPosSigmavsTrackNStripsUview, "error in tpos (m)", "#strips");
00427       
00428       fpTPosSigmavsTrackChargeRatioVview = new TProfile("TPosSigmavsTrackChargeRatioVview", 
00429                                                         "Error in tpos vs # track/record charge V planes", 
00430                                                         100, 0.0, 1.0);
00431       SetAxisLabels(fpTPosSigmavsTrackChargeRatioVview, "error in tpos (m)");
00432       
00433       fpTPosSigmavsTrackChargeRatioUview = new TProfile("TPosSigmavsTrackChargeRatioUview", 
00434                                                         "Error in tpos vs # track/record charge U planes", 
00435                                                         100, 0.0, 1.0);
00436       SetAxisLabels(fpTPosSigmavsTrackChargeRatioUview, "error in tpos (m)");
00437       
00438       fhTrackChargeOverTotalChargeRatio = new TH1D("TrackChargeOverTotalChargeRatio",
00439                                                    "Ratio of 3d track charge over total record charge",
00440                                                    200, 0.0, 1.0); 
00441       
00442       fhCharge2dTracksV = new TH1D("Charge2dTracksV",
00443                                    "Charge in 2d V view tracks",
00444                                    fNTrackChargeBins, 0, fTrackChargeLimit); 
00445       SetAxisLabels(fhCharge2dTracksV, "Raw ADC");
00446 
00447       fhCharge2dTracksU = new TH1D("Charge2dTracksU",
00448                                    "Charge in 2d U view tracks",
00449                                    fNTrackChargeBins, 0, fTrackChargeLimit); 
00450       SetAxisLabels(fhCharge2dTracksU, "Raw ADC");
00451       
00452       fhCharge2dTracksDiffNorm = new TH1D("Charge2dTracksDiffNorm",
00453                                           "(vcharge - ucharge)/(vcharge + ucharge)",
00454                                           100, -1.0, 1.0);
00455 
00456       fhNStrip2dTracksV = new TH1D("NStrip2dTracksV", "Number of strips in 2d V view tracks", 80, 0, 80); 
00457       SetAxisLabels(fhNStrip2dTracksV, "Raw ADC");
00458 
00459       fhNStrip2dTracksU = new TH1D("NStrip2dTracksU",  "Number of strips in 2d U view tracks", 80, 0, 80); 
00460       SetAxisLabels(fhNStrip2dTracksU, "Raw ADC");
00461 
00462       fhNStrip2dTracksDiffNorm = new TH1D("NStrip2dTracksDiffNorm",
00463                                           "(vnstrip - unstrip)/(vnstrip + unstrip)",
00464                                           100, -1.0, 1.0);
00465       
00466       fhTrackHoughCosU = new TH1D("TrackHoughCosU", "Residual rms of 2d tracks in V view",
00467                                   fNCosBins, -1, 1); 
00468       fhTrackHoughCosV = new TH1D("TrackHoughCosV",
00469                                   "Residual rms of 2d tracks in V view",
00470                                   fNCosBins, -1, 1); 
00471       fhTrackHoughCosZ = new TH1D("TrackHoughCosZ",
00472                                   "Residual rms of 2d tracks in V view",
00473                                   fNCosBins, -1, 1);       
00474       fhSigmaOfTPosVview = new TH1D("SigmaOfTPosVview",
00475                                     "Error in tpos from fit in V view",
00476                                     fTrackResidualRMSBins, 0, fTrackResidualRMSLimit); 
00477       SetAxisLabels(fhSigmaOfTPosVview, "tpos uncertainty (m)");
00478 
00479       fhSigmaOfTPosUview = new TH1D("SigmaOfTPosUview",
00480                                     "Error in tpos from fit in U view",
00481                                     fTrackResidualRMSBins, 0, fTrackResidualRMSLimit); 
00482       SetAxisLabels(fhSigmaOfTPosUview, "tpos uncertainty (m)");
00483 
00484       fTrackResidualRMSVview = new TH1D ("TrackResidualRMSVview",
00485                                         "Roughly RMS of residuals along V view tracks",
00486                                         fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00487       SetAxisLabels(fTrackResidualRMSVview, "track rms residual (m)");
00488 
00489       fhSigmaOfTPosDiffNorm = new TH1D("SigmaOfTPosDiffNorm",
00490                                        "(vsigma - usigma)/(vsigma + usigma)",
00491                                        100, -1.0, 1.0);
00492 
00493       fTrackResidualRMSUview = new TH1D ("TrackResidualRMSUview",
00494                                         "Roughly RMS of residuals along U view tracks",
00495                                         fTrackResidualRMSBins, 0, fTrackResidualRMSLimit);
00496       SetAxisLabels(fTrackResidualRMSUview, "track rms residual (m)");
00497 
00498       fChargeRatioOf2dTracks = new TH1D ("ChargeRatioOf2dTracks",
00499                                          "Ratio of track charge, V over U",
00500                                          100, 0, 5);
00501       fRootFile->cd();
00502    } 
00503 
00504 
00505    const Double_t &ucharge      = ntprec -> ucharge;
00506    const Double_t &vcharge      = ntprec -> vcharge;
00507    const Double_t &vcandcharge  = ntprec -> vcandcharge;
00508    const Double_t &ucandcharge  = ntprec -> ucandcharge;
00509    const Double_t &vnstrip      = ntprec -> ntrackvstrip;
00510    const Double_t &unstrip      = ntprec -> ntrackustrip;
00511    const Double_t &vsigmaoftpos = ntprec -> vsigmaoftpos;
00512    const Double_t &usigmaoftpos = ntprec -> usigmaoftpos;
00513 
00514    fhCharge2dTracksV      -> Fill(vcharge);
00515    fhCharge2dTracksU      -> Fill(ucharge);
00516    fhNStrip2dTracksV      -> Fill(vnstrip);
00517    fhNStrip2dTracksU      -> Fill(unstrip);
00518    fhSigmaOfTPosVview     -> Fill(vsigmaoftpos);
00519    fhSigmaOfTPosUview     -> Fill(usigmaoftpos);
00520    fTrackResidualRMSVview -> Fill(ntprec -> vtrackrms);
00521    fTrackResidualRMSUview -> Fill(ntprec -> utrackrms);
00522    fhTrackHoughCosV       -> Fill(ntprec -> hcosv);
00523    fhTrackHoughCosU       -> Fill(ntprec -> hcosu);
00524    fhTrackHoughCosZ       -> Fill(ntprec -> hcosz);
00525 
00526    if(vcharge + ucharge > 0.0)
00527       fhCharge2dTracksDiffNorm -> Fill((vcharge-ucharge)/(vcharge+ucharge));
00528    
00529    if(vnstrip + unstrip > 0.0) 
00530       fhNStrip2dTracksDiffNorm -> Fill((vnstrip-unstrip)/(vnstrip+unstrip));
00531    
00532    if(vsigmaoftpos + usigmaoftpos > 0.0)
00533       fhSigmaOfTPosDiffNorm    -> Fill((vsigmaoftpos-usigmaoftpos)/(vsigmaoftpos+usigmaoftpos));
00534    
00535    if(ucharge > 1.0)
00536       fChargeRatioOf2dTracks -> Fill(vcharge/ucharge);   
00537 
00538    const double sum = vcharge + ucharge + vcandcharge + ucandcharge;
00539    if(sum < 1.0){
00540       MSG("Align", Msg::kError) << "Total record charge is less than 1.0."<< endl;
00541       return;
00542    }   
00543 
00544    const double ratio = (vcharge+ucharge)/sum;
00545    fhTrackChargeOverTotalChargeRatio -> Fill(ratio);      
00546 
00547    //Fill TProfile histograms
00548    fpTPosSigmavsCosZVview             -> Fill(ntprec->hcosz,   vsigmaoftpos);
00549    fpTPosSigmavsCosZUview             -> Fill(ntprec->hcosz,   usigmaoftpos);
00550    fpTPosSigmavsTrackChargeVview      -> Fill(ntprec->vcharge, vsigmaoftpos);
00551    fpTPosSigmavsTrackChargeUview      -> Fill(ntprec->ucharge, usigmaoftpos);
00552    fpTPosSigmavsTrackNStripsVview     -> Fill(vnstrip,         vsigmaoftpos);
00553    fpTPosSigmavsTrackNStripsUview     -> Fill(unstrip,         usigmaoftpos);
00554    fpTPosSigmavsTrackChargeRatioVview -> Fill(ratio,           vsigmaoftpos);
00555    fpTPosSigmavsTrackChargeRatioUview -> Fill(ratio,           usigmaoftpos);
00556    fp3dTrackChargevsTrackChargeRatio  -> Fill(ratio,           vcharge+ucharge);
00557    fp3dTrackChargevsTrackCosz         -> Fill(ntprec->hcosz,   vcharge+ucharge);
00558    fp3dTrackNStripsvsCosz             -> Fill(ntprec->hcosz,   vnstrip+unstrip);
00559    fp3dTrackChargevsNStrips           -> Fill(vnstrip+unstrip, vcharge+ucharge);
00560    fp3dTrackChargeRatiovsCosz         -> Fill(ntprec->hcosz,   ratio);
00561 }
00562 
00563 //__________________________________________________________________________________________________
00564 void AlignmentHistograms::FillPlanePlex(const vector<AlignmentStrip> &track_strips,
00565                                         const vector<AlignmentStrip> &cand_strips)
00566 {
00567    
00568    //for(unsigned int i = 0; i < fTrackVStrip.size(); ++i)
00569    for(vector<AlignmentStrip>::const_iterator it = track_strips.begin();
00570        it != track_strips.end(); ++it)
00571    {
00572       const AlignmentStrip &track_strip = *it;
00573 
00574       if(track_strip.charge < 0.1) continue;
00575       
00576       for(vector<AlignmentStrip>::const_iterator cit = cand_strips.begin();
00577           cit != cand_strips.end(); ++cit)
00578       {
00579          const AlignmentStrip &cand_strip = *cit;
00580          if(track_strip.plane == cand_strip.plane)
00581          {
00582             const double ratio = cand_strip.charge/track_strip.charge;
00583             map<int, TH2D *>::iterator fit_r = f2hPlanePlexChargeRatio.find(track_strip.plane);
00584             if(fit_r != f2hPlanePlexChargeRatio.end())
00585                fit_r -> second ->  Fill(track_strip.strip, cand_strip.strip, ratio);
00586             map<int, TH2D *>::iterator fit_h = f2hPlanePlexHits.find(track_strip.plane);
00587             if(fit_h != f2hPlanePlexHits.end())
00588                fit_h -> second ->  Fill(track_strip.strip, cand_strip.strip, ratio);
00589          }
00590       }
00591    }
00592 }
00593 
00594 //____________________________________________________________________________________________
00595 void AlignmentHistograms::SetAxisLabels(TH1 *h, const char *xlabel, const char *ylabel)
00596 {
00597    MSG("Align", Msg::kVerbose) << "AlignmentHistograms::SetAxisLabels()" << endl;
00598 
00599    if(!h) return;
00600 
00601    if(xlabel)
00602    {
00603       h -> GetXaxis() -> SetTitle(xlabel);
00604       h -> GetXaxis() -> CenterTitle();
00605    }
00606 
00607    if(ylabel)
00608    {
00609       h -> GetYaxis() -> SetTitle(ylabel);
00610       h -> GetYaxis() -> CenterTitle();
00611    }
00612 }
00613 
00614 
00615 //____________________________________________________________________________________________
00616 AlignmentHistograms::~AlignmentHistograms()
00617 {
00618    MSG("Align", Msg::kInfo) << "Destructor ~AlignmentHistograms()" << endl;
00619 
00620    TTree *stree = new TTree("StripHits","Number of track hits per strip");
00621    stree -> SetDirectory(fRootFile);
00622    Int_t plane, strip, module;
00623    UInt_t plexseid, plexmdlid, nhits;
00624    stree -> Branch("nhits", &nhits, "nhits/i");
00625    stree -> Branch("plane", &plane, "plane/I");
00626    stree -> Branch("strip", &strip, "strip/I");
00627    stree -> Branch("plexseid", &plexseid, "plexseid/i");
00628 
00629    for(map<PlexStripEndId, unsigned int>::const_iterator sit = fNStripHits.begin();
00630        sit != fNStripHits.end(); ++sit)
00631    {
00632       PlexStripEndId plexid = sit -> first;
00633       plane    = plexid.GetPlane();
00634       strip    = plexid.GetStrip();
00635       plexseid = plexid.GetEncoded();
00636       nhits    = sit -> second;
00637       stree -> Fill();
00638    }
00639 
00640    TTree *mtree = new TTree("MdlHits","Number of track hits per module");
00641    stree -> SetDirectory(fRootFile);
00642    mtree -> Branch("nhits", &nhits, "nhits/i");
00643    mtree -> Branch("plane", &plane, "plane/I");
00644    mtree -> Branch("module", &module, "module/I");
00645    mtree -> Branch("plexmdlid", &plexmdlid, "plexmdlid/i"); 
00646 
00647    for(map<PlexScintMdlId, unsigned int>::const_iterator mit = fNMdlHits.begin(); 
00648        mit != fNMdlHits.end(); ++mit)
00649    {
00650       PlexScintMdlId plexid = mit -> first;
00651       plane     = plexid.GetPlane();
00652       module    = plexid.GetModule();
00653       plexmdlid = plexid.GetEncoded();
00654       nhits     = mit -> second;
00655       mtree -> Fill();
00656    }
00657    MSG("Align", Msg::kInfo) << "Destructor ~AlignmentHistograms().. Done" << endl;
00658 }

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