The problem: the EEmcSmdGeom class has a getIntersection() method which returns a vector pointing to the crossing point of two specified SMD strips. The class made the simplifying assumption that both SMD planes are coplanar. This leads to parralax errors in the reconstructed position of hits in the SMD which are on the order of one strip.
Solution: do it right. Over the summer, a student at VU (Noah Schroeder) wrote a more generalized version of the getIntersection method. Given the two points on an SMD strip and a vertex position, he defines a plane in space. Given a second SMD strip, two planes have been defined. The line of intersection between the two planes defines a vector in space, which is returned.
Math details: Noah provided a detailed derivation.
User interface: The interface remains the same.
EEmcSmdGeom *esmd = EEmcSmdGeom::instance(); // get an instance of the geometry class TVector3 vertex = ... ; // get the event vertex Int_t iu = ... ; // get the SMD-u strip at the center of an EM shower Int_t iv = ... ; // get the SMD-v strip at the center of an EM shower TVector3 cross = esmd->getIntersection( sector, iu, iv, vertex );
Other changes: