CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/RecoLocalTracker/SiPixelRecHits/interface/SiPixelTemplateReco.h

Go to the documentation of this file.
00001 //
00002 //  SiPixelTemplateReco.cc (Version 8.25)
00003 //
00004 //  Add goodness-of-fit to algorithm, include single pixel clusters in chi2 calculation
00005 //  Try "decapitation" of large single pixels
00006 //  Add correction for (Q_F-Q_L)/(Q_F+Q_L) bias
00007 //  Add cot(beta) reflection to reduce y-entries and more sophisticated x-interpolation
00008 //  Fix small double pixel bug with decapitation (2.41 5-Mar-2007).
00009 //  Fix pseudopixel bug causing possible memory overwrite (2.42 12-Mar-2007)
00010 //  Adjust template binning to span 3 (or 4) central pixels and implement improved (faster) chi2min search
00011 //  Replace internal containers with static arrays
00012 //  Add external threshold to calls to ysigma2 and xsigma2, use sorted signal heights to guarrantee min clust size = 2
00013 //  Use denser search over larger bin range for clusters with big pixels.
00014 //  Use single calls to template object to load template arrays (had been many)
00015 //  Add speed switch to trade-off speed and robustness
00016 //  Add qmin and re-define qbin to flag low-q clusters
00017 //  Add qscale to match charge scales
00018 //  Return error if no pixels in cluster
00019 //  Replace 4 cout's with LogError's
00020 //  Add LogDebug I/O to report various common errors
00021 //  Incorporate "cluster repair" to handle dead pixels
00022 //  Take truncation size from new pixmax information
00023 //  Change to allow template sizes to be changed at compile time
00024 //  Move interpolation range error to LogDebug
00025 //  Add qbin = 5 and change 1-pixel probability to use new template info
00026 //  Add floor for probabilities (no exact zeros)
00027 //  Replace asserts with exceptions in CMSSW
00028 //  Change calling sequence to handle cot(beta)<0 for FPix cosmics
00029 //
00030 //  V7.00 - Decouple BPix and FPix information into separate templates
00031 //  Pass all containers by alias to prevent excessive cpu-usage (v7.01)
00032 //  Slightly modify search bin range to avoid problem with single pixel clusters + large Lorentz drift (V7.02)
00033 //
00034 //  V8.00 - Add 2D probabilities, take pixel sizes from the template
00035 //  V8.05 - Shift 2-D cluster to center on the buffer
00036 //  V8.06 - Add locBz to the 2-D template (causes failover to the simple template when the cotbeta-locBz correlation is incorrect ... ie for non-IP tracks).
00037 //        - include minimum value for prob2D (1.e-30)
00038 //  V8.07 - Tune 2-d probability: consider only pixels above threshold and use threshold value for zero signal pixels (non-zero template)
00039 //  V8.10 - Remove 2-d probability for ineffectiveness and replace with simple cluster charge probability
00040 //  V8.11 - Change probQ to upper tail probability always (rather than two-sided tail probability)
00041 //  V8.20 - Use template cytemp/cxtemp methods to center the data cluster in the right place when the template becomes asymmetric after irradiation
00042 //  V8.25 - Incorporate VIs speed improvements
00043 //
00044 //
00045 //
00046 //  Created by Morris Swartz on 10/27/06.
00047 //
00048 //
00049 
00050 #ifndef SiPixelTemplateReco_h
00051 #define SiPixelTemplateReco_h 1
00052 
00053 #include "RecoLocalTracker/SiPixelRecHits/interface/SiPixelTemplateDefs.h"
00054 
00055 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
00056 #include "RecoLocalTracker/SiPixelRecHits/interface/SiPixelTemplate.h"
00057 #else
00058 #include "SiPixelTemplate.h"
00059 #endif
00060 
00061 #define N2D 500
00062 
00063 #include <vector>
00064 #include "boost/multi_array.hpp"
00065 
00066 
00067 namespace SiPixelTemplateReco 
00068  {
00069  
00070     typedef boost::multi_array<float, 2> array_2d;
00071 
00072         int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, array_2d& cluster, 
00073                                 std::vector<bool>& ydouble, std::vector<bool>& xdouble, 
00074                                 SiPixelTemplate& templ, 
00075                                 float& yrec, float& sigmay, float& proby, float& xrec, float& sigmax, float& probx, int& qbin, int speed, bool deadpix, std::vector<std::pair<int, int> >& zeropix,
00076                                 float& probQ);
00077 
00078         int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, array_2d& cluster, 
00079                                 std::vector<bool>& ydouble, std::vector<bool>& xdouble, 
00080                                 SiPixelTemplate& templ, 
00081                                 float& yrec, float& sigmay, float& proby, float& xrec, float& sigmax, float& probx, int& qbin, int speed,
00082                                 float& probQ);
00083          
00084          int PixelTempReco2D(int id, float cotalpha, float cotbeta, array_2d& cluster, 
00085                                                  std::vector<bool>& ydouble, std::vector<bool>& xdouble, 
00086                                                  SiPixelTemplate& templ, 
00087                                                  float& yrec, float& sigmay, float& proby, float& xrec, float& sigmax, float& probx, int& qbin, int speed,
00088                                                  float& probQ);
00089          
00090          int PixelTempReco2D(int id, float cotalpha, float cotbeta, array_2d& cluster, 
00091                                                                 std::vector<bool>& ydouble, std::vector<bool>& xdouble, 
00092                                                                 SiPixelTemplate& templ, 
00093                                                                 float& yrec, float& sigmay, float& proby, float& xrec, float& sigmax, float& probx, int& qbin, int speed);
00094  }
00095                                 
00096 #endif