int cal_kin() { /* var */ double x, Gamma1; int i; /* code */ k.P1 = T2P(k.T1, k.M1); k.P2 = T2P(k.T2, k.M2); k.Beta = (k.P1 + k.P2)/(k.M1 + k.M2 + k.T1 + k.T2); x = 2. * (k.M2*k.T1 + k.M1*k.T2 + k.T1*k.T2 - k.P1*k.P2)/((k.M1+k.M2) * (k.M1+k.M2)); k.TCMin = (k.M1 + k.M2) * x / (1. + sqrt(1. + x)); k.ECM = k.M1 + k.M2 + k.TCMin; Gamma1 = (k.T1 + k.T2 - k.TCMin) / k.ECM; k.Gamma = Gamma1 + 1.; k.Q = k.M1 + k.M2 - k.M3 - k.M4; if ((k.Q < 1E-10) && (k.Q > -1E-10)) /* little dirty trick to */ k.Q = -1E-10; /* avoid numeric problems */ if ((k.TCMout = k.TCMin + k.Q) < 0) /* energetic impossible */ return FALSE; k.T1CM = 0.5 * k.TCMin * (k.TCMin + 2. * k.M2) / k.ECM; k.T2CM = 0.5 * k.TCMin * (k.TCMin + 2. * k.M1) / k.ECM; k.T3CM = 0.5 * k.TCMout * (k.TCMout + 2. * k.M4) / k.ECM; k.T4CM = 0.5 * k.TCMout * (k.TCMout + 2. * k.M3) / k.ECM; k.Beta1CM = T2B(k.T1CM, k.M1); k.Beta2CM = T2B(k.T2CM, k.M2); k.Beta3CM = T2B(k.T3CM, k.M3); k.Beta4CM = T2B(k.T4CM, k.M4); k.PCMin = T2P(k.T2CM, k.M2); k.PCMout = T2P(k.T3CM, k.M3); return TRUE; }
double MidEnergy(double MT, /* Masses of the projektil ... */ double MP, /* ... the target (1st one normaly) ... */ double MProd, /* ... the product (of intrest)... */ double MRes, /* ... and the last one */ double T1, /* Target energy */ double T2, /* Energy of projektile */ double Angle) /* Angle in lab for Product */ { /* var */ /* code */ k.M1 = U2MeV(MT); k.M2 = U2MeV(MP); k.M3 = U2MeV(MProd); k.M4 = U2MeV(MRes); k.T1 = T1; k.T2 = T2; if (! cal_kin()) /* impossible reaction */ return 0.0; return (k.Gamma-1)*k.M3 + k.Gamma*k.T3CM + k.Gamma * k.Beta * T2P(k.T3CM,k.M3) * cos(Angle/180.0*PI); }
double MinEnergy(double MT, /* Masses of the projektil ... */ double MP, /* ... the target (1st one normaly) ... */ double MProd, /* ... the product (of intrest)... */ double MRes, /* ... and the last one */ double T1, /* Energy of target (usualy 0) */ double T2, /* Energy of projektile */ double Angle) /* Angle in the Lab */ { /* var */ /* code */ k.M1 = U2MeV(MT); k.M2 = U2MeV(MP); k.M3 = U2MeV(MProd); k.M4 = U2MeV(MRes); k.T1 = T1; k.T2 = T2; if (! cal_kin()) /* impossible reaction */ return 0.0; if (MaxAngle(MT, MP, MProd, MRes, T1, T2) < Angle) return 0.0; if (k.Beta3CM > k.Beta) /* there is no backward solution! */ return 0.0; return (k.Gamma-1)*k.M3 + k.Gamma*k.T3CM + k.Gamma * k.Beta * T2P(k.T3CM,k.M3) * cos(AngLab2CM2(Angle)); }
/* ==================== DoDrag ==================== */ VOID BrushLozenge::DoDrag(const Vector3& pt) { GUARD(BrushLozenge::DoDrag); I32 px, py, tx, ty; px = U2P(pt[0]); py = U2P(pt[1]); P2T(tx, ty, px, py); T2P(px, py, tx, ty); mPos.set(P2U(px), P2U(py),0.0f); UNGUARD; }
/* ==================== Draw ==================== */ VOID Map2D::Draw(Graph *gc) { GUARD(Map2D::Draw); for(U32 j = mViewport[1]; j < mViewport[3]; j++) { for(U32 i = mViewport[0]; i < mViewport[2]; i++) { Chunk2DPtr& chunk = mChunks[i+j*mWidth]; AUTO_LOCK_WORLD(gc); I32 px, py; T2P(px, py, i, j); gc->world(Matrix::makeTranslate(P2U(px),P2U(py),0)*gc->world()); chunk->Draw(gc); } } UNGUARD; }