Demonstrates usage of TEveTrackPRopagator with different magnetic field configurations.
Needs to be run in compiled mode. root
void track(Int_t mode = 5, Bool_t isRungeKutta = kTRUE) Modes are 0. B = 0, no difference btween signed and charge particles;
#if defined(__CINT__) && !defined(__MAKECINT__)
{
"Has to be run in compiled mode, esp. if you want to pass parameters.");
track();
}
#else
#include <iostream>
{
public:
~GappedField(){};
{
}
};
{
bool m_magnetIsOn;
bool m_reverse;
bool m_simpleModel;
public:
CmsMagField():
m_magnetIsOn(true),
m_simpleModel(true){}
virtual ~CmsMagField(){}
void setMagnetState( bool state )
{
if (state != m_magnetIsOn)
{
if ( state )
std::cout << "Magnet state is changed to ON" << std::endl;
else
std::cout << "Magnet state is changed to OFF" << std::endl;
}
m_magnetIsOn = state;
}
bool isMagnetOn() const { return m_magnetIsOn;}
void setReverseState(bool state) { m_reverse = state; }
bool isReverse() const { return m_reverse;}
void setSimpleModel(bool simpleModel) { m_simpleModel = simpleModel; }
bool isSimpleModel() const { return m_simpleModel;}
{
double R =
sqrt(x*x+y*y);
{
if ( m_simpleModel ||
( R>461.0 && R<490.5 ) ||
( R>534.5 && R<597.5 ) ||
( R>637.0 && R<700.0 ) )
} else {
if (m_simpleModel)
{
if ( z > 0 )
return TEveVectorD(x/R*field/3.8*2.0, y/R*field/3.8*2.0, 0);
else
return TEveVectorD(-x/R*field/3.8*2.0, -y/R*field/3.8*2.0, 0);
}
{
if ( z > 0 )
return TEveVectorD(x/R*field/3.8*2.0, y/R*field/3.8*2.0, 0);
else
return TEveVectorD(-x/R*field/3.8*2.0, -y/R*field/3.8*2.0, 0);
}
}
}
};
{
rc->
fV.Set(0.028558, -0.000918, 3.691919);
rc->
fP.Set(0.767095, -2.400006, -0.313103);
pm1->
fV.Set(1.479084, -4.370661, 3.119761);
pm2->
fV.Set(57.72345, -89.77011, -9.783746);
return track;
}
{
#if defined (__CINT__)
Error(
"track.C",
"Must be run in compiled mode!");
return;
#endif
if (isRungeKutta)
{
}
else
{
}
switch (mode)
{
case 0:
{
track = make_track(prop, 1);
break;
}
case 1:
{
track = make_track(prop, 1);
break;
}
case 2:
{
track = make_track(prop, 1);
break;
}
case 3:
{
rc->
fV.Set(0.028558, -0.000918, 3.691919);
rc->
fP.Set(0.767095, -0.400006, 2.313103);
break;
}
case 4:
{
CmsMagField* mf = new CmsMagField;
mf->setReverseState(true);
rc->
fV.Set(0.027667, 0.007919, 0.895964);
rc->
fP.Set(3.903134, 2.252232, -3.731366);
TEveVectorD(3.576755e+00, 2.080579e+00, -2.507230e+00)));
TEveVectorD(8.440379e+01, 6.548286e+01, -8.788129e+01)));
TEveVectorD(1.841321e+02, 3.915693e+02, -3.843072e+02)));
TEveVectorD(1.946167e+02, 4.793932e+02, -4.615060e+02)));
TEveVectorD(2.249656e+02, 5.835767e+02, -5.565275e+02)));
break;
}
case 5:
{
CmsMagField* mf = new CmsMagField;
mf->setReverseState(true);
mf->setSimpleModel(false);
rc->
fV.Set(-16.426592, 16.403185, -19.782692);
rc->
fP.Set(3.631100, 3.643450, 0.682254);
TEveVectorD(-1.642659e+01, 1.640318e+01, -1.978269e+01),
TEveVectorD(-1.859987e+00, 3.172243e+01, -1.697866e+01),
TEveVectorD(4.847579e+01, 9.871711e+01, -5.835719e+00),
TEveVectorD(1.342045e+02, 4.203950e+02, 3.846268e+01)));
TEveVectorD(1.483827e+02, 5.124750e+02, 5.064311e+01)));
TEveVectorD(1.674676e+02, 6.167731e+02, 6.517403e+01)));
TEveVectorD(1.884976e+02, 7.202000e+02, 7.919290e+01)));
break;
}
case 6:
{
rc->
fV.Set(57.1068, 31.2401, -7.07629);
rc->
fP.Set(4.82895, 2.35083, -0.611757);
TEveVectorD(1.692235e+02, 7.047929e+01, -2.064785e+01)));
TEveVectorD(5.806180e+02, 6.990633e+01, -6.450000e+01)));
TEveVectorD(6.527213e+02, 1.473249e+02, -8.348498e+01)));
break;
}
};
if (isRungeKutta)
else
}
#endif