Example #1
0
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;

}
Example #2
0
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);

}
Example #3
0
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));
}
Example #4
0
/*
====================
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;
}
Example #5
0
	/*
	====================
	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;
	}