TransportedMonopole.cxx

Go to the documentation of this file.
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     // std::abs accepts doubles and floats
00012     using std::abs;
00013     using std::cout;
00014     using std::endl;
00015     
00016     // Get undeflected eta value
00017     double eta=m_eta;
00018     
00019     // Use ChargeService to get particle's charge
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         // The equation is a little complicated - broken up
00042         // into 3 parts
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       // Replace member eta with deflected version
00055       m_eta = eta + def*charge;
00056       
00057     }
00058     
00059     return;
00060     
00061   }
00062   
00063 }

Generated on Fri Sep 21 13:00:10 2007 for AtlfastEvent by  doxygen 1.5.1