![]() |
![]() |
#include <RecoLocalTracker/SiPixelRecHits/interface/PixelCPETemplateReco.h>
Public Member Functions | |
LocalError | localError (const SiPixelCluster &cl, const GeomDetUnit &det) const |
LocalPoint | localPosition (const SiPixelCluster &cluster, const GeomDetUnit &det) const |
MeasurementPoint | measurementPosition (const SiPixelCluster &, const GeomDetUnit &det) const |
PixelCPETemplateReco (edm::ParameterSet const &conf, const MagneticField *, const SiPixelLorentzAngle *) | |
~PixelCPETemplateReco () | |
Protected Member Functions | |
float | xpos (const SiPixelCluster &) const |
float | ypos (const SiPixelCluster &) const |
Private Attributes | |
bool | DoCosmics_ |
int | ierr |
int | speed_ |
SiPixelTemplate | templ_ |
int | templID_ |
float | templProbX_ |
float | templProbY_ |
int | templQbin_ |
float | templSigmaX_ |
float | templSigmaY_ |
float | templXrec_ |
float | templYrec_ |
bool | UseClusterSplitter_ |
Definition at line 32 of file PixelCPETemplateReco.h.
PixelCPETemplateReco::PixelCPETemplateReco | ( | edm::ParameterSet const & | conf, | |
const MagneticField * | mag, | |||
const SiPixelLorentzAngle * | lorentzAngle | |||
) |
Definition at line 43 of file PixelCPETemplateReco.cc.
References DoCosmics_, edm::ParameterSet::getParameter(), MagneticField::inTesla(), LogDebug, PV3DBase< T, PVType, FrameType >::mag(), PixelCPEBase::magfield_, SiPixelTemplate::pushfile(), speed_, templ_, templID_, and UseClusterSplitter_.
00045 : PixelCPEBase(conf, mag, lorentzAngle) 00046 { 00047 // &&& initialize the templates, etc. 00048 00049 //-- Use Magnetic field at (0,0,0) to select a template ID [Morris, 6/25/08] (temporary until we implement DB access) 00050 00051 GlobalPoint center(0.0, 0.0, 0.0); 00052 float field_magnitude = magfield_->inTesla(center).mag(); 00053 00054 DoCosmics_ = conf.getParameter<bool>("DoCosmics"); 00055 00056 if ( field_magnitude > 3.9 ) 00057 { 00058 templID_ = 4; 00059 } 00060 else 00061 { 00062 if ( field_magnitude > 1.0 ) 00063 { 00064 if ( DoCosmics_ ) 00065 templID_ = 10; 00066 else 00067 templID_ = 1; 00068 } 00069 else 00070 { 00071 //--- allow for zero field operation with new template ID=12 00072 templID_ = 12; 00073 } 00074 } 00075 00076 //cout << "DoCosmics_ = " << DoCosmics_ << endl; 00077 //cout << "----------------------------------------- field_magnitude = " << field_magnitude << endl; 00078 //cout << "--------------------------------------------- templID_ = " << templID_ << endl; 00079 00080 // Initialize template store to the selected ID [Morris, 6/25/08] 00081 00082 templ_.pushfile( templID_ ); 00083 00084 00085 00086 //cout << "About to read speed..." << endl; 00087 speed_ = conf.getParameter<int>( "speed"); 00088 LogDebug("PixelCPETemplateReco::PixelCPETemplateReco:") << 00089 "Template speed = " << speed_ << "\n"; 00090 00091 UseClusterSplitter_ = conf.getParameter<bool>("UseClusterSplitter"); 00092 00093 }
PixelCPETemplateReco::~PixelCPETemplateReco | ( | ) |
LocalError PixelCPETemplateReco::localError | ( | const SiPixelCluster & | cl, | |
const GeomDetUnit & | det | |||
) | const [virtual] |
Implements PixelCPEBase.
Definition at line 437 of file PixelCPETemplateReco.cc.
References Exception, ierr, RectangularPixelTopology::isItEdgePixelInX(), RectangularPixelTopology::isItEdgePixelInY(), LogDebug, SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), micronsToCm, SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, PixelCPEBase::setTheDet(), SiPixelCluster::sizeX(), SiPixelCluster::sizeY(), funct::sqrt(), templSigmaX_, templSigmaY_, PixelCPEBase::thePart, PixelCPEBase::thePitchX, PixelCPEBase::thePitchY, PixelCPEBase::theTopol, and PixelCPEBase::theVerboseLevel.
00438 { 00439 setTheDet( det ); 00440 00441 //--- Default is the maximum error used for edge clusters. 00442 float xerr = thePitchX / sqrt(12.0); 00443 float yerr = thePitchY / sqrt(12.0); 00444 00445 int maxPixelCol = cluster.maxPixelCol(); 00446 int maxPixelRow = cluster.maxPixelRow(); 00447 int minPixelCol = cluster.minPixelCol(); 00448 int minPixelRow = cluster.minPixelRow(); 00449 00450 //--- Are we near either of the edges? 00451 bool edgex = ( theTopol->isItEdgePixelInX( minPixelRow ) || theTopol->isItEdgePixelInX( maxPixelRow ) ); 00452 bool edgey = ( theTopol->isItEdgePixelInY( minPixelCol ) || theTopol->isItEdgePixelInY( maxPixelCol ) ); 00453 00454 // if ( edgex || edgey || ierr !=0 ) 00455 if ( ierr !=0 ) 00456 { 00457 // If reconstruction fails the hit position is calculated from cluster center of gravity 00458 // corrected in x by average Lorentz drift. 00459 // Assign huge errors. 00460 //xerr = 10.0 * (float)cluster.sizeX() * xerr; 00461 //yerr = 10.0 * (float)cluster.sizeY() * yerr; 00462 00463 // Assign better errors based on the residuals for failed template cases 00464 if ( thePart == GeomDetEnumerators::PixelBarrel ) 00465 { 00466 xerr = 55.0 * micronsToCm; 00467 yerr = 36.0 * micronsToCm; 00468 } 00469 else if ( thePart == GeomDetEnumerators::PixelEndcap ) 00470 { 00471 xerr = 42.0 * micronsToCm; 00472 yerr = 39.0 * micronsToCm; 00473 } 00474 else 00475 throw cms::Exception("PixelCPETemplateReco::localError :") << "A non-pixel detector type in here?" ; 00476 00477 return LocalError(xerr*xerr, 0, yerr*yerr); 00478 } 00479 else if ( edgex || edgey ) 00480 { 00481 // for edge pixels assign errors according to observed residual RMS 00482 if ( edgex && !edgey ) 00483 { 00484 xerr = 23.0 * micronsToCm; 00485 yerr = 39.0 * micronsToCm; 00486 } 00487 else if ( !edgex && edgey ) 00488 { 00489 xerr = 24.0 * micronsToCm; 00490 yerr = 96.0 * micronsToCm; 00491 } 00492 else if ( edgex && edgey ) 00493 { 00494 xerr = 31.0 * micronsToCm; 00495 yerr = 90.0 * micronsToCm; 00496 } 00497 else 00498 { 00499 throw cms::Exception(" PixelCPETemplateReco::localError: Something wrong with pixel edge flag !!!"); 00500 } 00501 } 00502 else 00503 { 00504 // &&& need a class const 00505 const float micronsToCm = 1.0e-4; 00506 00507 xerr = templSigmaX_ * micronsToCm; 00508 yerr = templSigmaY_ * micronsToCm; 00509 00510 // &&& should also check ierr (saved as class variable) and return 00511 // &&& nonsense (another class static) if the template fit failed. 00512 } 00513 00514 if (theVerboseLevel > 9) 00515 { 00516 LogDebug("PixelCPETemplateReco") << 00517 " Sizex = " << cluster.sizeX() << " Sizey = " << cluster.sizeY() << " Edgex = " << edgex << " Edgey = " << edgey << 00518 " ErrX = " << xerr << " ErrY = " << yerr; 00519 } 00520 00521 return LocalError(xerr*xerr, 0, yerr*yerr); 00522 } 00523
LocalPoint PixelCPETemplateReco::localPosition | ( | const SiPixelCluster & | cluster, | |
const GeomDetUnit & | det | |||
) | const [virtual] |
< take the template ID that was selected by the constructor [Morris, 6/25/2008]
< barrel(false) or forward(true)
Reimplemented from PixelCPEBase.
Definition at line 121 of file PixelCPETemplateReco.cc.
References cluster_matrix_size_x, cluster_matrix_size_y, PixelCPEBase::cotalpha_, PixelCPEBase::cotbeta_, Exception, icol, ierr, int, RectangularPixelTopology::isItBigPixelInX(), RectangularPixelTopology::isItBigPixelInY(), RectangularPixelTopology::localPosition(), RectangularPixelTopology::localX(), RectangularPixelTopology::localY(), LogDebug, lp, micronsToCm, SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, SiPixelCluster::pixels(), SiPixelTemplateReco::PixelTempReco2D(), SiPixelTemplateReco::PixelTempSplit(), PixelCPEBase::probabilityX_, PixelCPEBase::probabilityY_, PixelCPEBase::qBin_, PixelCPEBase::setTheDet(), speed_, funct::sqrt(), templ_, templID_, templProbX_, templProbY_, templQbin_, templSigmaX_, templSigmaY_, templXrec_, templYrec_, PixelCPEBase::thePart, PixelCPEBase::theTopol, PixelCPEBase::trk_lp_x, PixelCPEBase::trk_lp_y, UseClusterSplitter_, SiPixelCluster::x(), and SiPixelCluster::y().
Referenced by measurementPosition().
00122 { 00123 00124 setTheDet( det ); 00125 00126 //int ierr; //!< return status 00127 int ID = templID_; 00128 00129 00130 bool fpix; 00131 if ( thePart == GeomDetEnumerators::PixelBarrel ) 00132 fpix = false; // no, it's not forward -- it's barrel 00133 else 00134 fpix = true; // yes, it's forward 00135 00136 // Make cot(alpha) and cot(be10ta)... cot(x) = 1.0/tan(x); 00137 // No longer need these. cotalpha_and cotbeta_ are calculated in PixelCPEBase 00138 //float cotalpha = 1.0/tan(alpha_); 00139 //float cotbeta = 1.0/tan(beta_); 00140 00141 // Make from cluster (a SiPixelCluster) a boost multi_array_2d called 00142 // clust_array_2d. 00143 boost::multi_array<float, 2> clust_array_2d(boost::extents[cluster_matrix_size_x][cluster_matrix_size_y]); 00144 00145 // Preparing to retrieve ADC counts from the SiPixelCluster. In the cluster, 00146 // we have the following: 00147 // int minPixelRow(); // Minimum pixel index in the x direction (low edge). 00148 // int maxPixelRow(); // Maximum pixel index in the x direction (top edge). 00149 // int minPixelCol(); // Minimum pixel index in the y direction (left edge). 00150 // int maxPixelCol(); // Maximum pixel index in the y direction (right edge). 00151 // So the pixels from minPixelRow() will go into clust_array_2d[0][*], 00152 // and the pixels from minPixelCol() will go into clust_array_2d[*][0]. 00153 int row_offset = cluster.minPixelRow(); 00154 int col_offset = cluster.minPixelCol(); 00155 00156 // Store the coordinates of the center of the (0,0) pixel of the array that 00157 // gets passed to PixelTempReco2D 00158 // Will add these values to the output of PixelTempReco2D 00159 float tmp_x = float(cluster.minPixelRow()) + 0.5; 00160 float tmp_y = float(cluster.minPixelCol()) + 0.5; 00161 00162 // Store these offsets (to be added later) in a LocalPoint after tranforming 00163 // them from measurement units (pixel units) to local coordinates (cm) 00164 LocalPoint lp = theTopol->localPosition( MeasurementPoint(tmp_x, tmp_y) ); 00165 00166 const std::vector<SiPixelCluster::Pixel> & pixVec = cluster.pixels(); 00167 std::vector<SiPixelCluster::Pixel>::const_iterator 00168 pixIter = pixVec.begin(), pixEnd = pixVec.end(); 00169 00170 // Visualize large clusters --------------------------------------------------------- 00171 // From Petar: maybe this should be moved into a method in the base class? 00172 /* 00173 char cluster_matrix[100][100]; 00174 for (int i=0; i<100; i++) 00175 for (int j=0; j<100; j++) 00176 cluster_matrix[i][j] = '.'; 00177 00178 if ( cluster.sizeX()>cluster_matrix_size_x || cluster.sizeY()>cluster_matrix_size_y ) 00179 //if ( cluster.sizeX()>0 || cluster.sizeY()>0 ) 00180 { 00181 cout << "cluster.size() = " << cluster.size() << endl; 00182 cout << "cluster.sizeX() = " << cluster.sizeX() << endl; 00183 cout << "cluster.sizeY() = " << cluster.sizeY() << endl; 00184 00185 for ( std::vector<SiPixelCluster::Pixel>::const_iterator pix = pixVec.begin(); pix != pixVec.end(); ++pix ) 00186 { 00187 int i = (int)(pix->x) - row_offset; 00188 int j = (int)(pix->y) - col_offset; 00189 cluster_matrix[i][j] = '*'; 00190 } 00191 00192 for (int i=0; i<(int)cluster.sizeX()+2; i++) 00193 { 00194 for (int j=0; j<(int)cluster.sizeY()+2; j++) 00195 cout << cluster_matrix[i][j]; 00196 cout << endl; 00197 } 00198 } // if ( cluster.sizeX()>cluster_matrix_size_x || cluster.sizeY()>cluster_matrix_size_y ) 00199 */ 00200 // End Visualize clusters --------------------------------------------------------- 00201 00202 00203 // Copy clust's pixels (calibrated in electrons) into clust_array_2d; 00204 for ( ; pixIter != pixEnd; ++pixIter ) 00205 { 00206 // *pixIter dereferences to Pixel struct, with public vars x, y, adc (all float) 00207 // 02/13/2008 ggiurgiu@fnal.gov: type of x, y and adc has been changed to unsigned char, unsigned short, unsigned short 00208 // in DataFormats/SiPixelCluster/interface/SiPixelCluster.h so the type cast to int is redundant. Leave it there, it 00209 // won't hurt. 00210 int irow = int(pixIter->x) - row_offset; // &&& do we need +0.5 ??? 00211 int icol = int(pixIter->y) - col_offset; // &&& do we need +0.5 ??? 00212 00213 // Gavril : what do we do here if the row/column is larger than cluster_matrix_size_x/cluster_matrix_size_y = 13/21 ? 00214 // Ignore them for the moment... 00215 if ( irow<cluster_matrix_size_x && icol<cluster_matrix_size_y ) 00216 // 02/13/2008 ggiurgiu@fnal.gov typecast pixIter->adc to float 00217 clust_array_2d[irow][icol] = (float)pixIter->adc; 00218 //else 00219 //cout << " ----- Cluster is too large" << endl; 00220 } 00221 00222 // Make and fill the bool arrays flagging double pixels 00223 00224 std::vector<bool> ydouble(cluster_matrix_size_y), xdouble(cluster_matrix_size_x); 00225 // x directions (shorter), rows 00226 for (int irow = 0; irow < cluster_matrix_size_x; ++irow) 00227 { 00228 xdouble[irow] = RectangularPixelTopology::isItBigPixelInX( irow+row_offset ); 00229 } 00230 00231 // y directions (longer), columns 00232 for (int icol = 0; icol < cluster_matrix_size_y; ++icol) 00233 { 00234 ydouble[icol] = RectangularPixelTopology::isItBigPixelInY( icol+col_offset ); 00235 } 00236 00237 // Output: 00238 float nonsense = -99999.9; // nonsense init value 00239 templXrec_ = templYrec_ = templSigmaX_ = templSigmaY_ = nonsense; 00240 templProbY_ = templProbX_ = nonsense; 00241 00242 float templYrec1_ = nonsense; 00243 float templXrec1_ = nonsense; 00244 float templYrec2_ = nonsense; 00245 float templXrec2_ = nonsense; 00246 00247 // ****************************************************************** 00248 // Do it! Use cotalpha_ and cotbeta_ calculated in PixelCPEBase 00249 00250 ierr = 00251 PixelTempReco2D( ID, fpix, cotalpha_, cotbeta_, 00252 clust_array_2d, ydouble, xdouble, 00253 templ_, 00254 templYrec_, templSigmaY_, templProbY_, 00255 templXrec_, templSigmaX_, templProbX_, 00256 templQbin_, 00257 speed_ ); 00258 // ****************************************************************** 00259 00260 // Check exit status 00261 if ( ierr != 0 ) 00262 { 00263 //cout << "Error from PixelTempReco2D" << endl; 00264 00265 LogDebug("PixelCPETemplateReco::localPosition") << 00266 "reconstruction failed with error " << ierr << "\n"; 00267 00268 // Gavril: what do we do in this case ? For now, just return the cluster center of gravity in microns 00269 // In the x case, apply a rough Lorentz drift average correction 00270 // To do: call PixelCPEGeneric whenever PixelTempReco2D fails 00271 double lorentz_drift = -999.9; 00272 if ( thePart == GeomDetEnumerators::PixelBarrel ) 00273 lorentz_drift = 60.0; // in microns 00274 else if ( thePart == GeomDetEnumerators::PixelEndcap ) 00275 lorentz_drift = 10.0; // in microns 00276 else 00277 throw cms::Exception("PixelCPETemplateReco::localPosition :") 00278 << "A non-pixel detector type in here?" << "\n"; 00279 00280 templXrec_ = theTopol->localX( cluster.x() ) - lorentz_drift * micronsToCm; // very rough Lorentz drift correction 00281 templYrec_ = theTopol->localY( cluster.y() ); 00282 00283 } 00284 else if ( UseClusterSplitter_ && templQbin_ == 0 ) 00285 { 00286 //cout << "PixelTempReco2D returned without error and templQbin_ == 0" << endl; 00287 00288 ierr = 00289 PixelTempSplit( ID, fpix, cotalpha_, cotbeta_, 00290 clust_array_2d, ydouble, xdouble, 00291 templ_, 00292 templYrec1_, templYrec2_, templSigmaY_, templProbY_, 00293 templXrec1_, templXrec2_, templSigmaX_, templProbX_, 00294 templQbin_ ); 00295 00296 if ( ierr != 0 ) 00297 { 00298 //cout << "Error from PixelTempSplit" << endl; 00299 00300 LogDebug("PixelCPETemplateReco::localPosition") 00301 << "reconstruction failed with error " << ierr << "\n"; 00302 00303 // Gavril: what do we do in this case ? For now, just return the cluster center of gravity in microns 00304 // In the x case, apply a rough Lorentz drift average correction 00305 // To do: call PixelCPEGeneric whenever PixelTempReco2D fails 00306 double lorentz_drift = -999.9; 00307 if ( thePart == GeomDetEnumerators::PixelBarrel ) 00308 lorentz_drift = 60.0; // in microns 00309 else if ( thePart == GeomDetEnumerators::PixelEndcap ) 00310 lorentz_drift = 10.0; // in microns 00311 else 00312 throw cms::Exception("PixelCPETemplateReco::localPosition :") 00313 << "A non-pixel detector type in here?" << "\n"; 00314 00315 templXrec_ = theTopol->localX( cluster.x() ) - lorentz_drift * micronsToCm; // very rough Lorentz drift correction 00316 templYrec_ = theTopol->localY( cluster.y() ); 00317 } 00318 else 00319 { 00320 //cout << "PixelTempSplit returned without error " << endl; 00321 00322 // go from micrometer to centimeter 00323 templXrec1_ *= micronsToCm; 00324 templYrec1_ *= micronsToCm; 00325 templXrec2_ *= micronsToCm; 00326 templYrec2_ *= micronsToCm; 00327 00328 // go back to the module coordinate system 00329 templXrec1_ += lp.x(); 00330 templYrec1_ += lp.y(); 00331 templXrec2_ += lp.x(); 00332 templYrec2_ += lp.y(); 00333 00334 //cout << "templXrec1_ = " << templXrec1_ << endl; 00335 //cout << "templYrec1_ = " << templYrec1_ << endl; 00336 //cout << "templXrec2_ = " << templXrec2_ << endl; 00337 //cout << "templYrec2_ = " << templYrec2_ << endl; 00338 //cout << "trk_lp_x = " << trk_lp_x << endl; 00339 //cout << "trk_lp_y = " << trk_lp_y << endl; 00340 00341 // calculate distance from each hit to the track and choose the 00342 // hit closest to the track 00343 float distance11 = sqrt( (templXrec1_ - trk_lp_x)*(templXrec1_ - trk_lp_x) + 00344 (templYrec1_ - trk_lp_y)*(templYrec1_ - trk_lp_y) ); 00345 00346 float distance12 = sqrt( (templXrec1_ - trk_lp_x)*(templXrec1_ - trk_lp_x) + 00347 (templYrec2_ - trk_lp_y)*(templYrec2_ - trk_lp_y) ); 00348 00349 float distance21 = sqrt( (templXrec2_ - trk_lp_x)*(templXrec2_ - trk_lp_x) + 00350 (templYrec1_ - trk_lp_y)*(templYrec1_ - trk_lp_y) ); 00351 00352 float distance22 = sqrt( (templXrec2_ - trk_lp_x)*(templXrec2_ - trk_lp_x) + 00353 (templYrec2_ - trk_lp_y)*(templYrec2_ - trk_lp_y) ); 00354 00355 //cout << "distance11 = " << distance11 << endl; 00356 //cout << "distance12 = " << distance12 << endl; 00357 //cout << "distance21 = " << distance21 << endl; 00358 //cout << "distance22 = " << distance22 << endl; 00359 00360 int index_dist = -999; 00361 float min_templXrec_ = -999.9; 00362 float min_templYrec_ = -999.9; 00363 float distance_min = 9999999999.9; 00364 if ( distance11 < distance_min ) 00365 { 00366 distance_min = distance11; 00367 min_templXrec_ = templXrec1_; 00368 min_templYrec_ = templYrec1_; 00369 index_dist = 1; 00370 } 00371 if ( distance12 < distance_min ) 00372 { 00373 distance_min = distance12; 00374 min_templXrec_ = templXrec1_; 00375 min_templYrec_ = templYrec2_; 00376 index_dist = 2; 00377 } 00378 if ( distance21 < distance_min ) 00379 { 00380 distance_min = distance21; 00381 min_templXrec_ = templXrec2_; 00382 min_templYrec_ = templYrec1_; 00383 index_dist = 3; 00384 } 00385 if ( distance22 < distance_min ) 00386 { 00387 distance_min = distance22; 00388 min_templXrec_ = templXrec2_; 00389 min_templYrec_ = templYrec2_; 00390 index_dist = 4; 00391 } 00392 00393 //cout << "index_dist = " << index_dist << endl; 00394 00395 templXrec_ = min_templXrec_; 00396 templYrec_ = min_templYrec_; 00397 } 00398 } // else if ( UseClusterSplitter_ && templQbin_ == 0 ) 00399 else 00400 { 00401 //cout << "PixelTempReco2D returned without error and templQbin_ != 0" << endl; 00402 00403 // go from micrometer to centimeter 00404 templXrec_ *= micronsToCm; 00405 templYrec_ *= micronsToCm; 00406 00407 // go back to the module coordinate system 00408 templXrec_ += lp.x(); 00409 templYrec_ += lp.y(); 00410 } 00411 00412 00413 //cout << endl; 00414 //cout << "with_track_angle = " << (int)with_track_angle << endl; 00415 //cout << "templXrec_ = " << templXrec_ << endl; 00416 //cout << "templYrec_ = " << templYrec_ << endl; 00417 00418 // Save probabilities and qBin in the quantities given to us by the base class 00419 // (for which there are also inline getters). &&& templProbX_ etc. should be retired... 00420 probabilityX_ = templProbX_; 00421 probabilityY_ = templProbY_; 00422 qBin_ = templQbin_; 00423 00424 00425 LocalPoint template_lp = LocalPoint( nonsense, nonsense ); 00426 template_lp = LocalPoint( templXrec_, templYrec_ ); 00427 00428 return template_lp; 00429 00430 } 00431
MeasurementPoint PixelCPETemplateReco::measurementPosition | ( | const SiPixelCluster & | cluster, | |
const GeomDetUnit & | det | |||
) | const |
Reimplemented from PixelCPEBase.
Definition at line 105 of file PixelCPETemplateReco.cc.
References localPosition(), lp, RectangularPixelTopology::measurementPosition(), and PixelCPEBase::theTopol.
00107 { 00108 LocalPoint lp = localPosition(cluster,det); 00109 return theTopol->measurementPosition(lp); 00110 }
float PixelCPETemplateReco::xpos | ( | const SiPixelCluster & | ) | const [inline, protected, virtual] |
float PixelCPETemplateReco::ypos | ( | const SiPixelCluster & | ) | const [inline, protected, virtual] |
bool PixelCPETemplateReco::DoCosmics_ [mutable, private] |
int PixelCPETemplateReco::ierr [mutable, private] |
Definition at line 78 of file PixelCPETemplateReco.h.
Referenced by localError(), and localPosition().
int PixelCPETemplateReco::speed_ [mutable, private] |
Definition at line 76 of file PixelCPETemplateReco.h.
Referenced by localPosition(), and PixelCPETemplateReco().
SiPixelTemplate PixelCPETemplateReco::templ_ [mutable, private] |
Definition at line 59 of file PixelCPETemplateReco.h.
Referenced by localPosition(), and PixelCPETemplateReco().
int PixelCPETemplateReco::templID_ [mutable, private] |
Definition at line 63 of file PixelCPETemplateReco.h.
Referenced by localPosition(), and PixelCPETemplateReco().
float PixelCPETemplateReco::templProbX_ [mutable, private] |
float PixelCPETemplateReco::templProbY_ [mutable, private] |
int PixelCPETemplateReco::templQbin_ [mutable, private] |
float PixelCPETemplateReco::templSigmaX_ [mutable, private] |
Definition at line 68 of file PixelCPETemplateReco.h.
Referenced by localError(), and localPosition().
float PixelCPETemplateReco::templSigmaY_ [mutable, private] |
Definition at line 69 of file PixelCPETemplateReco.h.
Referenced by localError(), and localPosition().
float PixelCPETemplateReco::templXrec_ [mutable, private] |
float PixelCPETemplateReco::templYrec_ [mutable, private] |
bool PixelCPETemplateReco::UseClusterSplitter_ [mutable, private] |
Definition at line 80 of file PixelCPETemplateReco.h.
Referenced by localPosition(), and PixelCPETemplateReco().