00001 #include "AtlfastEvent/TransportedMonopole.h"
00002 #include "AtlfastEvent/ChargeService.h"
00003 #include "AtlfastEvent/MagField.h"
00004
00005 #include <iostream>
00006
00007 namespace Atlfast {
00008
00009 void TransportedMonopole::deflect(){
00010
00011
00012 using std::abs;
00013 using std::cout;
00014 using std::endl;
00015
00016
00017 double eta=m_eta;
00018
00019
00020 double charge;
00021 ChargeService cs;
00022 try{
00023 charge=cs(m_particle);
00024 }catch(std::string errMsg){
00025 throw errMsg;
00026 }
00027
00028
00029 MagField *bfield = MagField::Instance();
00030
00031 if( bfield->is_on() && !(charge==0.) ) {
00032
00033 assert(std::abs(charge)>0.5);
00034
00035 double def=0.;
00036 double pt = m_particle->momentum().perp();
00037
00038
00039 if (abs(eta) < 1.7) {
00040
00041
00042
00043
00044 double equ1 = sqrt(0.25*pt*(exp(2*eta)+1));
00045
00046 double equ2 = 0.5*exp(eta)*sqrt(4.8e7-(pt*pt));
00047
00048 double equ3 = sqrt((equ1-equ2)*(equ1-equ2) + 4.9e7);
00049
00050 def = 0.007*(equ3-1.);
00051
00052 }
00053
00054
00055 m_eta = eta + def*charge;
00056
00057 }
00058
00059 return;
00060
00061 }
00062
00063 }