SND@LHC Software
Loading...
Searching...
No Matches
ShipBellField Class Reference

#include <ShipBellField.h>

Inheritance diagram for ShipBellField:
Collaboration diagram for ShipBellField:

Public Member Functions

 ShipBellField ()
 
 ShipBellField (const char *name, Double_t Bpeak, Double_t Zmiddle, Int_t fOrient=1, Double_t Btube=500.)
 
 ShipBellField (ShipFieldPar *fieldPar)
 
virtual ~ShipBellField ()
 
virtual Double_t GetBx (Double_t x, Double_t y, Double_t z)
 
virtual Double_t GetBy (Double_t x, Double_t y, Double_t z)
 
virtual Double_t GetBz (Double_t x, Double_t y, Double_t z)
 
void IncludeTarget (Double_t xy, Double_t z, Double_t l)
 
virtual void Print ()
 

Private Member Functions

 ClassDef (ShipBellField, 2)
 

Private Attributes

Double_t fPeak
 
Double_t fMiddle
 
Double_t fBtube
 
Int_t fOrient
 
Bool_t fInclTarget
 
Double_t targetXY
 
Double_t targetZ0
 
Double_t targetL
 

Detailed Description

Definition at line 27 of file ShipBellField.h.

Constructor & Destructor Documentation

◆ ShipBellField() [1/3]

ShipBellField::ShipBellField ( )

Default constructor

Definition at line 25 of file ShipBellField.cxx.

26 : FairField(),
27 fPeak(0.),
28 fMiddle(0.),
29 fBtube(0.)
30{
31 fType = 1;
32 fInclTarget=kFALSE;
33}
Double_t fMiddle
Double_t fBtube

◆ ShipBellField() [2/3]

ShipBellField::ShipBellField ( const char *  name,
Double_t  Bpeak,
Double_t  Zmiddle,
Int_t  fOrient = 1,
Double_t  Btube = 500. 
)

Standard constructor

Parameters
nameObject name
Bpeakpeak field..
Zmiddlemiddle of the magnet (global coordinates)
Btubelargest radius of the tube ellips (inside)

Definition at line 39 of file ShipBellField.cxx.

40 : FairField(name),
41 fPeak(Peak),
42 fMiddle(Middle),
43 fBtube(Btube)
44{
45 fType=1;
46 fInclTarget=kFALSE;
47 fOrient = orientation;
48 fBtube = Btube;
49}

◆ ShipBellField() [3/3]

ShipBellField::ShipBellField ( ShipFieldPar fieldPar)

Constructor from ShipFieldPar

Definition at line 55 of file ShipBellField.cxx.

56 : FairField(),
57 fPeak(0.),
58 fMiddle(0.),
59 fBtube(0.),
60 fInclTarget(kFALSE)
61{
62 if ( ! fieldPar ) {
63 cerr << "-W- ShipBellField::ShipBellField: empty parameter container!"
64 << endl;
65 fType=0;
66 }
67 else {
68 fPeak = fieldPar->GetPeak();
69 fMiddle = fieldPar->GetMiddle();
70 fBtube = fieldPar->GetBtube();
71 fType = fieldPar->GetType();
72 }
73}
Double_t GetMiddle() const
Double_t GetPeak() const
Int_t GetType() const
Double_t GetBtube() const

◆ ~ShipBellField()

ShipBellField::~ShipBellField ( )
virtual

Destructor

Definition at line 79 of file ShipBellField.cxx.

79{ }

Member Function Documentation

◆ ClassDef()

ShipBellField::ClassDef ( ShipBellField  ,
 
)
private

◆ GetBx()

Double_t ShipBellField::GetBx ( Double_t  x,
Double_t  y,
Double_t  z 
)
virtual

Get components of field at a given point

Parameters
x,y,zPoint coordinates [cm]

Definition at line 90 of file ShipBellField.cxx.

90 {
91 if (fOrient==1){ return 0.;}
92 else {
93 Double_t zlocal=fabs(z-fMiddle)/100.; //zlocal: convert cm->m
94 //old Bell field from Wilfried Flegel
95 //Double_t bx= fPeak/(1.+pow(fabs(zlocal)/2.1,6.));
96 //new field based on simulation of Davide Tommasini (22/1/2015)
97
98 Double_t bx=0.;
99 //field in box 20 cm larger than inner tube.
100 if ( (fabs(x)<2.7*m) && (fabs(y)<fBtube+0.2*m)) {
101 if (zlocal<3.8) {
102 bx=0.14361*exp( -0.5 * pow((zlocal-0.45479E-01)/2.5046,2.));
103 }else if (zlocal<11.9) {
104 bx=0.19532-0.61512E-01*zlocal+0.68447E-02*pow(zlocal,2.)-0.25672E-03*pow(zlocal,3.);
105 }
106 bx=((fPeak/tesla)/0.14361)*bx*tesla;
107 }
108 // cout << "Bell GetBX " << x << ", " << y << ", " << z << ", Bx= " << bx << endl;
109 return bx;
110 }
111}
Double_t tesla
Double_t m

◆ GetBy()

Double_t ShipBellField::GetBy ( Double_t  x,
Double_t  y,
Double_t  z 
)
virtual

Definition at line 117 of file ShipBellField.cxx.

117 {
118 Double_t by = 0.;
119 if (fInclTarget && z < targetZ0+targetL && z > targetZ0){
120 // check if in target area
121 if (fabs(x)<targetXY && fabs(y)<targetXY) {by = 1*tesla;}
122 if (fabs(x)>2*targetXY && fabs(x)<3*targetXY && fabs(y)<targetXY) {by = -1*tesla;}
123 }
124 else if (fOrient==1){
125 Double_t zlocal=(z-fMiddle)/100.;
126 by= fPeak/(1.+pow(fabs(zlocal)/2.1,6.));
127 //cout << "Bell GetBY " << z << ", By= " << by << endl;
128 }
129 return by;
130
131}
Double_t targetZ0
Double_t targetXY

◆ GetBz()

Double_t ShipBellField::GetBz ( Double_t  x,
Double_t  y,
Double_t  z 
)
virtual

Definition at line 137 of file ShipBellField.cxx.

137 {
138 return 0.;
139}

◆ IncludeTarget()

void ShipBellField::IncludeTarget ( Double_t  xy,
Double_t  z,
Double_t  l 
)

Definition at line 83 of file ShipBellField.cxx.

◆ Print()

void ShipBellField::Print ( )
virtual

Screen output

Definition at line 145 of file ShipBellField.cxx.

145 {
146 cout << "======================================================" << endl;
147 cout << "---- " << fTitle << " : " << fName << endl;
148 cout << "----" << endl;
149 cout << "---- Field type : constant" << endl;
150 cout << "----" << endl;
151 cout << "---- Field regions : " << endl;
152 cout.precision(4);
153 cout << "======================================================" << endl;
154}

Member Data Documentation

◆ fBtube

Double_t ShipBellField::fBtube
private

Definition at line 71 of file ShipBellField.h.

◆ fInclTarget

Bool_t ShipBellField::fInclTarget
private

Definition at line 73 of file ShipBellField.h.

◆ fMiddle

Double_t ShipBellField::fMiddle
private

Definition at line 70 of file ShipBellField.h.

◆ fOrient

Int_t ShipBellField::fOrient
private

Definition at line 72 of file ShipBellField.h.

◆ fPeak

Double_t ShipBellField::fPeak
private

Field parameters

Definition at line 69 of file ShipBellField.h.

◆ targetL

Double_t ShipBellField::targetL
private

Definition at line 76 of file ShipBellField.h.

◆ targetXY

Double_t ShipBellField::targetXY
private

Definition at line 74 of file ShipBellField.h.

◆ targetZ0

Double_t ShipBellField::targetZ0
private

Definition at line 75 of file ShipBellField.h.


The documentation for this class was generated from the following files: