CMS 3D CMS Logo

PixelCPETemplateReco Class Reference

#include <RecoLocalTracker/SiPixelRecHits/interface/PixelCPETemplateReco.h>

Inheritance diagram for PixelCPETemplateReco:

PixelCPEBase ClusterParameterEstimator< SiPixelCluster >

List of all members.

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_


Detailed Description

Definition at line 32 of file PixelCPETemplateReco.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 98 of file PixelCPETemplateReco.cc.

00099 {
00100   // &&& delete template store?
00101 }


Member Function Documentation

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]

Implements PixelCPEBase.

Definition at line 54 of file PixelCPETemplateReco.h.

00056 { return -999000.0; }  // &&& should abort

float PixelCPETemplateReco::ypos ( const SiPixelCluster  )  const [inline, protected, virtual]

Implements PixelCPEBase.

Definition at line 55 of file PixelCPETemplateReco.h.

00056 { return -999000.0; }  // &&& should abort


Member Data Documentation

bool PixelCPETemplateReco::DoCosmics_ [mutable, private]

Definition at line 82 of file PixelCPETemplateReco.h.

Referenced by PixelCPETemplateReco().

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]

Definition at line 72 of file PixelCPETemplateReco.h.

Referenced by localPosition().

float PixelCPETemplateReco::templProbY_ [mutable, private]

Definition at line 73 of file PixelCPETemplateReco.h.

Referenced by localPosition().

int PixelCPETemplateReco::templQbin_ [mutable, private]

Definition at line 74 of file PixelCPETemplateReco.h.

Referenced by localPosition().

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]

Definition at line 66 of file PixelCPETemplateReco.h.

Referenced by localPosition().

float PixelCPETemplateReco::templYrec_ [mutable, private]

Definition at line 67 of file PixelCPETemplateReco.h.

Referenced by localPosition().

bool PixelCPETemplateReco::UseClusterSplitter_ [mutable, private]

Definition at line 80 of file PixelCPETemplateReco.h.

Referenced by localPosition(), and PixelCPETemplateReco().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:30:00 2009 for CMSSW by  doxygen 1.5.4