]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/MUON/OnlineAnalysis/AliHLTMUONCalculations.cxx
Porting old TriggerSource to the AliRoot-HLT framework proper.
[u/mrichter/AliRoot.git] / HLT / MUON / OnlineAnalysis / AliHLTMUONCalculations.cxx
index 303c8ab5d3f49ba4aa66b3e32704ebb2eb5ca719..6fa48f02b6b4ba9ec72b732c6ba2de0b86e563fe 100644 (file)
 #include "AliHLTMUONCalculations.h"
 #include <cmath>
 
+AliHLTFloat32_t AliHLTMUONCalculations::fgZf = -975.0;
+AliHLTFloat32_t AliHLTMUONCalculations::fgQBL = 3.0;
+AliHLTMUONParticleSign AliHLTMUONCalculations::fgSign = kSignUnknown;
+AliHLTFloat32_t AliHLTMUONCalculations::fgPx = 0;
+AliHLTFloat32_t AliHLTMUONCalculations::fgPy = 0;
+AliHLTFloat32_t AliHLTMUONCalculations::fgPz = 0;
+
+
+bool AliHLTMUONCalculations::ComputeMomentum(
+               AliHLTFloat32_t x1,
+               AliHLTFloat32_t y1, AliHLTFloat32_t y2,
+               AliHLTFloat32_t z1, AliHLTFloat32_t z2
+       )
+{
+       AliHLTFloat64_t z2mz1 = z2 - z1;
+       if (z2mz1 == 0 or z1 == 0)
+       {
+               fgSign = kSignUnknown;
+               fgPx = fgPy = fgPz = 0;
+               return false;
+       }
+       AliHLTFloat64_t thetaTimesZf = (y1*z2 - y2*z1) / z2mz1;
+       AliHLTFloat64_t xf = x1 * fgZf / z1;
+       AliHLTFloat64_t yf = y2 - ((y2-y1) * (z2-fgZf)) / z2mz1;
+
+       if (thetaTimesZf == 0)
+       {
+               fgSign = kSignUnknown;
+               fgPx = fgPy = fgPz = 0;
+               return false;
+       }
+       // Note: 2.99792458e8/1e9 is the conversion factor for GeV.
+       // It is c/1e9, where c is the speed of light.
+       AliHLTFloat64_t pDivZf = (fgQBL * /*2.99792458e8/1e9*/0.3 / thetaTimesZf);
+       AliHLTFloat64_t p = pDivZf * fgZf;
+       pDivZf = fabs(pDivZf);
+       
+       if (p < 0)
+               fgSign = kSignMinus;
+       else if (p > 0)
+               fgSign = kSignPlus;
+       else
+               fgSign = kSignUnknown;
+       
+       fgPx = AliHLTFloat32_t( pDivZf * xf );
+       fgPy = AliHLTFloat32_t( pDivZf * yf );
+       fgPz = AliHLTFloat32_t( sqrt(p*p - fgPx*fgPx - fgPy*fgPy) );
+       // fgPz must be the same sign as fgZf else it could not have been measured.
+       if (fgZf < 0) fgPz = -fgPz;
+
+       return true;
+}
+
 
 AliHLTFloat32_t AliHLTMUONCalculateSignedPt(
                register AliHLTFloat32_t x1,