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

HoughTrans.cxx

Go to the documentation of this file.
00001 
00002 //
00003 // HoughTrans
00004 //
00005 // Mark's hough transform.
00006 //
00007 // Created:  M. Dorman -- May, 2005
00008 //
00009 // $Author: kordosky $ 
00010 //
00011 // $Revision: 1.3 $
00012 // 
00013 // $Name:  $
00014 //
00015 // $Id: HoughTrans.cxx,v 1.3 2005/08/02 11:22:56 kordosky Exp $
00016 //
00018 
00019 #include "HoughTrans.h"
00020 #include <iostream>
00021 #include <cmath>
00022 
00023 HoughTrans::HoughTrans()//:houghSpace("houghSpace","houghSpace",80,-2.0,2.0,80,-4.0,4.0),vtxz(0)
00024 {
00025   houghSpace = new TH2F("houghSpace","houghSpace",80,-2.0,2.0,80,-4.0,4.0);
00026   houghSpace->SetDirectory(0);
00027   vtxz = 0.0;
00028 }
00029 
00030 HoughTrans::~HoughTrans(){
00031   // Mark, you need to delete histograms created with new!!!
00032   delete houghSpace; houghSpace=0;
00033 
00034 }
00035 
00036 HoughTrans::HoughTrans(Int_t numSamps,Float_t lowGrad,Float_t highGrad)//:
00037 //houghSpace("houghSpace","houghSpace",numSamps,lowGrad,highGrad,numSamps,-4.0,4.0),vtxz(0)
00038 {
00039   
00040   houghSpace = new TH2F("houghSpace","houghSpace",numSamps,lowGrad,highGrad,numSamps,-4.0,4.0);
00041   houghSpace->SetDirectory(0);
00042   vtxz = 0.0;
00043 }
00044 
00045 HoughTrans::HoughTrans(Int_t numSamps,Float_t lowGrad,Float_t highGrad,Float_t lowIcept,Float_t highIcept)//:
00046 //houghSpace("houghSpace","houghSpace",numSamps,lowGrad,highGrad,numSamps,lowIcept,highIcept),vtxz(0)
00047 {
00048   houghSpace = new TH2F("houghSpace","houghSpace",numSamps,lowGrad,highGrad,numSamps,lowIcept,highIcept);
00049   houghSpace->SetDirectory(0);
00050   vtxz = 0.0;
00051 }
00052 
00053 void HoughTrans::SetVtxz(Float_t vertz)
00054 {
00055   vtxz=vertz;
00056 }
00057 
00058 void HoughTrans::FillHough(NtpSRStrip* stp)
00059 {
00060   FillHough(stp->z,stp->tpos);
00061 }
00062 
00063 void HoughTrans::FillHough(Float_t zPos, Float_t tPos)
00064 {
00065   if(zPos<vtxz) return;
00066   for(Int_t i=1;i<houghSpace->GetNbinsX();i++){
00067     Float_t gradient=(houghSpace->GetXaxis())->GetBinCenter(i);
00068     Float_t icept=tPos-gradient*(zPos-vtxz);
00069     if(icept>4.0 || icept<-4.0) continue; //max MINOS transverse dimensions
00070     houghSpace->Fill(gradient,icept);
00071   }
00072 }
00073 
00074 void HoughTrans::ResetHough()
00075 {
00076   houghSpace->Reset();
00077 }
00078 
00079 void HoughTrans::DeleteHough()
00080 {
00081   delete houghSpace;
00082 }
00083 
00084 Int_t HoughTrans::GetPeakHeight()
00085 {
00086   Int_t binmax = static_cast<Int_t>(houghSpace->GetBinContent(houghSpace->GetMaximumBin()));
00087   return binmax;
00088 }
00089 
00090 Int_t HoughTrans::GetPeakGradBin()
00091 {
00092   Int_t x=0;
00093   Int_t y=0;
00094   Int_t z=0;
00095   houghSpace->GetMaximumBin(x,y,z);
00096   return x;
00097 }
00098 
00099 Int_t HoughTrans::GetPeakIceptBin()
00100 {
00101   Int_t x=0;
00102   Int_t y=0;
00103   Int_t z=0;
00104   houghSpace->GetMaximumBin(x,y,z);
00105   return y;
00106 }
00107 
00108 Float_t HoughTrans::GetPeakGradVal()
00109 {
00110   Int_t x=0;
00111   Int_t y=0;
00112   Int_t z=0;
00113   houghSpace->GetMaximumBin(x,y,z);
00114   return (houghSpace->GetXaxis())->GetBinCenter(x);
00115 }
00116 
00117 Float_t HoughTrans::GetPeakIceptVal()
00118 {
00119   Int_t x=0;
00120   Int_t y=0;
00121   Int_t z=0;
00122   houghSpace->GetMaximumBin(x,y,z);
00123   return (houghSpace->GetYaxis())->GetBinCenter(y);
00124 }
00125 
00126 Float_t HoughTrans::GetRms(Float_t frac)
00127 {
00128   Int_t bincount = 0;
00129   Int_t mRmsInput[6400];
00130   Int_t cRmsInput[6400];
00131   for(Int_t mBin=1;mBin<houghSpace->GetNbinsX();mBin++){
00132     for(Int_t cBin=1;cBin<houghSpace->GetNbinsY();cBin++){
00133       if(houghSpace->GetBinContent(mBin,cBin)>=frac*GetPeakHeight()){
00134         mRmsInput[bincount]=mBin;
00135         cRmsInput[bincount]=cBin;
00136         bincount++;
00137       }
00138     }
00139   }
00140   if(bincount==0) return 0;
00141   Float_t squaresum = 0;
00142   for (Int_t count=0;count<bincount;count++) {
00143     squaresum+=(pow(static_cast<Float_t>((mRmsInput[count]-GetPeakGradBin())),2)+pow(static_cast<Float_t>((cRmsInput[count]-GetPeakIceptBin())),2));
00144   }
00145   Float_t Rms = sqrt(squaresum/bincount);
00146   return Rms;
00147 }

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