Functions | |
| bool | GoodSeed (const MIPPRICHSummary *rich, float ptot) |
| Returns true if RICH summary object is likely to come from a valid ring. | |
| float | CorrectedRad (const MIPPRICHSummary *rich) |
| Returns ring radius corrected for position and radius dependent ripples from geometric effect of missing columns in the RICH. | |
| int | SimpleRadPID (const MIPPEventSummary *evt, const MIPPTrackSummary *trk) |
| bool DSTUtil::RICH::GoodSeed | ( | const MIPPRICHSummary * | rich, | |
| float | ptot | |||
| ) |
Returns true if RICH summary object is likely to come from a valid ring.
Definition at line 1031 of file DSTUtil.cxx.
References MIPPRICHSummary::rad, MIPPRICHSummary::xr, MIPPRICHSummary::xseed, MIPPRICHSummary::yr, and MIPPRICHSummary::yseed.
Referenced by NuMIPID::Fill().
01032 { 01033 if (rich->rad < 8 || rich->rad > 34) return false; 01034 if (ptot < 0.5) return false; 01035 01036 float dx = rich->xseed - rich->xr; 01037 float dy = rich->yseed - rich->yr; 01038 01039 const float coeffX = 360; 01040 const float coeffY = 400; 01041 01042 if (ptot > 120) ptot = 120; 01043 01044 float maxDX = coeffX / ptot; 01045 if (maxDX > 10) maxDX = 10; 01046 float maxDY = coeffY / ptot; 01047 if (maxDY > 10) maxDY = 10; 01048 01049 // Stay within half the window 01050 dx /= 0.5 * maxDX; 01051 dy /= 0.5 * maxDY; 01052 01053 return dx*dx + dy*dy <= 1; 01054 }
| float DSTUtil::RICH::CorrectedRad | ( | const MIPPRICHSummary * | rich | ) |
Returns ring radius corrected for position and radius dependent ripples from geometric effect of missing columns in the RICH.
Definition at line 1060 of file DSTUtil.cxx.
References MIPPRICHSummary::rad, MIPPRICHSummary::xr, and MIPPRICHSummary::yr.
Referenced by NuMIPID::Fill(), main(), and SimpleRadPID().
01061 { 01062 const double kOmegaX = 0.5 * 3.141592 / 1.396746; 01063 01064 // Compute radius-dependent amplitudes 01065 double Ax = -0.1331; 01066 double r = rich->rad; 01067 if (r > 29.5) r = 29.5; 01068 double Ax4 = 7.44922e-02 - 01069 pow((3.01123e+01 - r) * 2.26274e+01, -7.05946e-01); 01070 double Ay = -4.82457e-02 - 01071 pow((3.99752e+01 - r) * 1.08708e-01, -2.13366e+01); 01072 double omegaY = 0.22; 01073 double phaseY = 0.5; 01074 01075 // Compute corrections in x and y 01076 double corrX = Ax * sin(kOmegaX * rich->rad) * cos(kOmegaX * rich->xr) + 01077 Ax4 * cos(kOmegaX * rich->xr * 0.25); 01078 double corrY = Ay * cos(omegaY * rich->yr + phaseY); 01079 01080 return rich->rad - corrX - corrY; 01081 }
| int DSTUtil::RICH::SimpleRadPID | ( | const MIPPEventSummary * | evt, | |
| const MIPPTrackSummary * | trk | |||
| ) |
Definition at line 1085 of file DSTUtil.cxx.
References CorrectedRad(), MIPPEventSummary::GetRICH(), MIPPTrackSummary::irich, PIDDef::kMuon, PIDDef::kProton, PIDDef::kRBmass, PIDDef::kUndef, RICH::L, p, and MIPPTrackSummary::ptot.
Referenced by main().
01086 { 01087 MIPPRICHSummary* rich = evt->GetRICH(trk->irich); 01088 if (!rich) return PIDDef::kUndef; 01089 01090 double p = trk->ptot; 01091 double r = DSTUtil::RICH::CorrectedRad(rich); 01092 //const double dr = 1; 01093 //const double dp = 5; 01094 01095 double L = 990.0; // Length of RICH radiator volume in cm 01096 double n = 1.00045;// Index of Refraction for this run 01097 double Theta; // Cerenkov angle 01098 double Beta; // p/E for particle 01099 double masssqr; // Particle mass^2 01100 Theta = asin(r/L); 01101 Beta = 1. / n / (1. - 0.5*pow(Theta, 2)); 01102 01103 masssqr = (pow(p/Beta, 2) - pow(p, 2)); 01104 01105 int id=PIDDef::kUndef; 01106 for (int i=PIDDef::kProton; i!=PIDDef::kMuon; --i) { 01107 double msq = PIDDef::kRBmass[i] * PIDDef::kRBmass[i]; 01108 if (fabs(1-masssqr/msq) < 0.05) { 01109 id = i; 01110 break; 01111 } 01112 } 01113 01114 return id; 01115 }
1.4.7