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