Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:26:23

0001 //
0002 //  SiPixelTemplateReco.cc (Version 10.00)
0003 //
0004 //  Add goodness-of-fit to algorithm, include single pixel clusters in chi2 calculation
0005 //  Try "decapitation" of large single pixels
0006 //  Add correction for (Q_F-Q_L)/(Q_F+Q_L) bias
0007 //  Add cot(beta) reflection to reduce y-entries and more sophisticated x-interpolation
0008 //  Fix small double pixel bug with decapitation (2.41 5-Mar-2007).
0009 //  Fix pseudopixel bug causing possible memory overwrite (2.42 12-Mar-2007)
0010 //  Adjust template binning to span 3 (or 4) central pixels and implement improved (faster) chi2min search
0011 //  Replace internal containers with static arrays
0012 //  Add external threshold to calls to ysigma2 and xsigma2, use sorted signal heights to guarrantee min clust size = 2
0013 //  Use denser search over larger bin range for clusters with big pixels.
0014 //  Use single calls to template object to load template arrays (had been many)
0015 //  Add speed switch to trade-off speed and robustness
0016 //  Add qmin and re-define qbin to flag low-q clusters
0017 //  Add qscale to match charge scales
0018 //  Return error if no pixels in cluster
0019 //  Replace 4 cout's with LogError's
0020 //  Add LogDebug I/O to report various common errors
0021 //  Incorporate "cluster repair" to handle dead pixels
0022 //  Take truncation size from new pixmax information
0023 //  Change to allow template sizes to be changed at compile time
0024 //  Move interpolation range error to LogDebug
0025 //  Add qbin = 5 and change 1-pixel probability to use new template info
0026 //  Add floor for probabilities (no exact zeros)
0027 //  Replace asserts with exceptions in CMSSW
0028 //  Change calling sequence to handle cot(beta)<0 for FPix cosmics
0029 //
0030 //  V7.00 - Decouple BPix and FPix information into separate templates
0031 //  Pass all containers by alias to prevent excessive cpu-usage (v7.01)
0032 //  Slightly modify search bin range to avoid problem with single pixel clusters + large Lorentz drift (V7.02)
0033 //
0034 //  V8.00 - Add 2D probabilities, take pixel sizes from the template
0035 //  V8.05 - Shift 2-D cluster to center on the buffer
0036 //  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).
0037 //        - include minimum value for prob2D (1.e-30)
0038 //  V8.07 - Tune 2-d probability: consider only pixels above threshold and use threshold value for zero signal pixels (non-zero template)
0039 //  V8.10 - Remove 2-d probability for ineffectiveness and replace with simple cluster charge probability
0040 //  V8.11 - Change probQ to upper tail probability always (rather than two-sided tail probability)
0041 //  V8.20 - Use template cytemp/cxtemp methods to center the data cluster in the right place when the template becomes asymmetric after irradiation
0042 //  V8.25 - Incorporate VIs speed improvements
0043 //  V8.26 - Fix centering problem for small signals
0044 //  V9.00 - Set QProb = Q/Q_avg when calcultion is turned off, use fbin definitions of Qbin
0045 //  V10.00 - Use new template object to reco Phase 1 FPix hits
0046 //
0047 //
0048 //
0049 //  Created by Morris Swartz on 10/27/06.
0050 //
0051 //
0052 
0053 #ifndef SiPixelTemplateReco_h
0054 #define SiPixelTemplateReco_h 1
0055 
0056 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
0057 #include "CondFormats/SiPixelTransient/interface/SiPixelTemplateDefs.h"
0058 #include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h"
0059 #else
0060 #include "SiPixelTemplateDefs.h"
0061 #include "SiPixelTemplate.h"
0062 #endif
0063 
0064 #define N2D 500
0065 
0066 #include <vector>
0067 
0068 #ifndef SiPixelTemplateClusMatrix
0069 #define SiPixelTemplateClusMatrix 1
0070 
0071 namespace SiPixelTemplateReco {
0072 
0073   struct ClusMatrix {
0074     float& operator()(int x, int y) { return matrix[mcol * x + y]; }
0075     float operator()(int x, int y) const { return matrix[mcol * x + y]; }
0076     float* matrix;
0077     bool const* xdouble;
0078     bool const* ydouble;
0079     int mrow, mcol;
0080   };
0081 #endif
0082 
0083   int PixelTempReco1D(int id,
0084                       float cotalpha,
0085                       float cotbeta,
0086                       float locBz,
0087                       float locBx,
0088                       ClusMatrix& cluster,
0089                       SiPixelTemplate& templ,
0090                       float& yrec,
0091                       float& sigmay,
0092                       float& proby,
0093                       float& xrec,
0094                       float& sigmax,
0095                       float& probx,
0096                       int& qbin,
0097                       int speed,
0098                       bool deadpix,
0099                       std::vector<std::pair<int, int> >& zeropix,
0100                       float& probQ,
0101                       int& nypix,
0102                       int& nxpix);
0103 
0104   int PixelTempReco1D(int id,
0105                       float cotalpha,
0106                       float cotbeta,
0107                       float locBz,
0108                       float locBx,
0109                       ClusMatrix& cluster,
0110                       SiPixelTemplate& templ,
0111                       float& yrec,
0112                       float& sigmay,
0113                       float& proby,
0114                       float& xrec,
0115                       float& sigmax,
0116                       float& probx,
0117                       int& qbin,
0118                       int speed,
0119                       float& probQ);
0120 
0121   int PixelTempReco1D(int id,
0122                       float cotalpha,
0123                       float cotbeta,
0124                       ClusMatrix& cluster,
0125                       SiPixelTemplate& templ,
0126                       float& yrec,
0127                       float& sigmay,
0128                       float& proby,
0129                       float& xrec,
0130                       float& sigmax,
0131                       float& probx,
0132                       int& qbin,
0133                       int speed,
0134                       float& probQ);
0135 
0136   int PixelTempReco1D(int id,
0137                       float cotalpha,
0138                       float cotbeta,
0139                       ClusMatrix& cluster,
0140                       SiPixelTemplate& templ,
0141                       float& yrec,
0142                       float& sigmay,
0143                       float& proby,
0144                       float& xrec,
0145                       float& sigmax,
0146                       float& probx,
0147                       int& qbin,
0148                       int speed);
0149 }
0150 
0151 #endif