CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/RecoLocalTracker/SiStripRecHitConverter/src/StripCPEfromTrackAngle.cc

Go to the documentation of this file.
00001 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPEfromTrackAngle.h"
00002 #include "Geometry/CommonTopologies/interface/StripTopology.h"                                                           
00003 
00004 #include "vdt/vdtMath.h"
00005 
00006 namespace {
00007   inline
00008   float stripErrorSquared(const unsigned N, const float uProj) {
00009     if( (float(N)-uProj) > 3.5f )  
00010       return float(N*N)/12.f;
00011     else {
00012       typedef float Float;
00013       constexpr Float P1=-0.339;
00014       constexpr Float P2=0.90;
00015       constexpr Float P3=0.279;
00016       const float uerr = P1*uProj*vdt::fast_expf(-uProj*P2)+P3;
00017       // const Float uerr = P1*uProj*std::exp(-uProj*P2)+P3;
00018       return uerr*uerr;
00019     }
00020   }
00021 }
00022 
00023 StripClusterParameterEstimator::LocalValues StripCPEfromTrackAngle::
00024 localParameters( const SiStripCluster& cluster, const GeomDetUnit& det, const LocalTrajectoryParameters& ltp) const {
00025   
00026   StripCPE::Param const & p = param(det);
00027   
00028   LocalVector track = ltp.momentum();
00029   track *= 
00030     (track.z()<0) ?  std::abs(p.thickness/track.z()) : 
00031     (track.z()>0) ? -std::abs(p.thickness/track.z()) :  
00032                          p.maxLength/track.mag() ;
00033 
00034   const unsigned N = cluster.amplitudes().size();
00035   const float fullProjection = p.coveredStrips( track+p.drift, ltp.position());
00036   const float uerr2 = stripErrorSquared( N, std::abs(fullProjection) );
00037   const float strip = cluster.barycenter() -  0.5f*(1.f-shift[p.moduleGeom]) * fullProjection
00038     + 0.5f*p.coveredStrips(track, ltp.position());
00039   
00040   return std::make_pair( p.topology->localPosition(strip, ltp.vector()),
00041                          p.topology->localError(strip, uerr2, ltp.vector()) );
00042 }
00043