CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
IonizationGar Class Reference

#include <IonizationGar.h>

+ Inheritance diagram for IonizationGar:

Public Member Functions

 IonizationGar ()
 
 ~IonizationGar ()
 
void init (unsigned int random, ICgemGeomSvc *geomSvc, double magConfig)
 
void setDebugging (bool debugging)
 
void setTrack (int particle, int charge, double p, double trkPosIn[], double trkPosOut[])
 
int getNumberIonE ()
 
double getEx (int nElec)
 
double getEy (int nElec)
 
double getEz (int nElec)
 
double getEt (int nElec)
 
- Public Member Functions inherited from Ionization
 Ionization ()
 
virtual ~Ionization ()
 
virtual void init (unsigned int random, ICgemGeomSvc *geomSvc, double magConfig)=0
 
virtual void setDebugging (bool debugging)=0
 
virtual void setTrack (int particle, int charge, double p, double trkPosIn[], double trkPosOut[])=0
 
virtual int getNumberIonE ()=0
 
virtual double getEx (int nElec)=0
 
virtual double getEy (int nElec)=0
 
virtual double getEz (int nElec)=0
 
virtual double getEt (int nElec)=0
 

Detailed Description

Definition at line 21 of file IonizationGar.h.

Constructor & Destructor Documentation

◆ IonizationGar()

IonizationGar::IonizationGar ( )

Definition at line 19 of file IonizationGar.cxx.

19 {
20}

◆ ~IonizationGar()

IonizationGar::~IonizationGar ( )

Definition at line 22 of file IonizationGar.cxx.

22 {
23 delete m_gas;
24 delete m_geo;
25 delete m_comp;
26 delete m_box;
27 delete m_sensor;
28}

Member Function Documentation

◆ getEt()

double IonizationGar::getEt ( int  nElec)
inlinevirtual

Implements Ionization.

Definition at line 40 of file IonizationGar.h.

40{return m_et[nElec];}

◆ getEx()

double IonizationGar::getEx ( int  nElec)
inlinevirtual

Implements Ionization.

Definition at line 37 of file IonizationGar.h.

37{return m_ex[nElec];}

◆ getEy()

double IonizationGar::getEy ( int  nElec)
inlinevirtual

Implements Ionization.

Definition at line 38 of file IonizationGar.h.

38{return m_ey[nElec];}

◆ getEz()

double IonizationGar::getEz ( int  nElec)
inlinevirtual

Implements Ionization.

Definition at line 39 of file IonizationGar.h.

39{return m_ez[nElec];}

◆ getNumberIonE()

int IonizationGar::getNumberIonE ( )
inlinevirtual

Implements Ionization.

Definition at line 36 of file IonizationGar.h.

36{return m_nIonE;}

◆ init()

void IonizationGar::init ( unsigned int  random,
ICgemGeomSvc geomSvc,
double  magConfig 
)
virtual

Implements Ionization.

Definition at line 30 of file IonizationGar.cxx.

30 {
31 m_random = random;
32 m_geomSvc = geomSvc;
33 m_magConfig = magConfig;
34
35 initGeoGas();
36
37 //TrackHeed*
38 m_track = new TrackHeed();
39 m_track->SetSensor(m_sensor);
40 if(m_debugging) m_track->EnableDebugging();
41 else m_track->DisableDebugging();
42 //m_track->EnableMagneticField();
43
44}

◆ setDebugging()

void IonizationGar::setDebugging ( bool  debugging)
inlinevirtual

Implements Ionization.

Definition at line 27 of file IonizationGar.h.

27{m_debugging = debugging;}

◆ setTrack()

void IonizationGar::setTrack ( int  particle,
int  charge,
double  p,
double  trkPosIn[],
double  trkPosOut[] 
)
virtual

Implements Ionization.

Definition at line 46 of file IonizationGar.cxx.

46 {
47 clear();
48 int nE = 0;
49
50 double x0 = 0., y0 = 0., z0 = 0., t0 = 0.;
51
52 // //the length of track segment.
53 // double d0 = sqrt(pow((trkPosOut[0]-trkPosIn[0]),2)+pow((trkPosOut[1]-trkPosIn[1]),2)+pow((trkPosOut[2]-trkPosIn[2]),2));
54 // double d1 = sqrt(pow((trkPosOut[0]-trkPosIn[0]),2)+pow((trkPosOut[1]-trkPosIn[1]),2));
55 // double trkL = d0;
56
57 // double lambda = acos(d1/d0);
58 // double theta = acos((trkPosOut[1]-trkPosIn[1])/d1);
59
60 // double dx0 = cos(lambda)*sin(theta)/10.0; // mm->cm
61 // double dy0 = cos(lambda)*cos(theta)/10.0; // mm->cm
62 // double dz0 = sin(lambda)/10.0; // mm->cm
63
64 double dx0 = (trkPosOut[0] - trkPosIn[0])/10.0; // cm
65 double dy0 = (trkPosOut[1] - trkPosIn[1])/10.0; // cm
66 double dz0 = (trkPosOut[2] - trkPosIn[2])/10.0; // cm
67 double trkL = sqrt(dx0*dx0 + dy0*dy0 + dz0*dz0);
68
69 // cout << "track segment: " << setw(15) << trkPosIn[0] << setw(15) << trkPosIn[1] << setw(15) << trkPosIn[2]
70 // << setw(15) << trkPosOut[0] << setw(15) << trkPosOut[1] << setw(15) << trkPosOut[2] << endl;
71 // cout << setw(15) << trkL << setw(15) << dx0 << setw(15) << dy0 << setw(15) << dz0 << endl;
72
73 double minX = 0. < dx0 ? 0. : dx0;
74 double maxX = 0. < dx0 ? dx0 : 0.;
75 double minY = 0. < dy0 ? 0. : dy0;
76 double maxY = 0. < dy0 ? dy0 : 0.;
77 double minZ = 0. < dz0 ? 0. : dz0;
78 double maxZ = 0. < dz0 ? dz0 : 0.;
79 if(maxX<=minX){
80 minX += -0.1;
81 maxX += 0.1;
82 }
83 if(maxY<=minY){
84 minY += -0.1;
85 maxY += 0.1;
86 }
87 if(maxZ<=minZ){
88 minZ += -0.1;
89 maxZ += 0.1;
90 }
91
92 string particleType = getParticle(particle, charge);
93
94 m_track->SetParticle(particleType);
95 m_track->SetMomentum(p*1.e9);
96 // m_sensor->SetArea(-0.5, 0, -0.5, 0.5, 0.5, 0.5);
97 m_sensor->SetArea(minX, minY, minZ, maxX, maxY, maxZ);
98 // cout << setw(15) << minX << setw(15) << maxX << setw(15) << minY << setw(15) << maxY
99 // << setw(15) << minZ << setw(15) << maxZ << endl;
100
101 // cout << "trkpos" << endl;
102 // cout << setw(15) << trkPosIn[0] << setw(15) << trkPosIn[1] << setw(15) << trkPosIn[2]
103 // << setw(15) << trkPosOut[0] << setw(15) << trkPosOut[1] << setw(15) << trkPosOut[2] << endl;
104
105 //cout<<"new Track"<<endl;
106 m_track->NewTrack(x0, y0, z0, t0, dx0, dy0, dz0);
107 //cout<<"after new Track"<<endl;
108 // m_track->NewTrack(0, 0, 0, t0, 0, 1, 0);
109 // cout << "particle: " << particleType << ", P = " << p << endl;
110 // cout << setw(15) << x0 << setw(15) << y0 << setw(15) << z0 << setw(15) << t0
111 // << setw(15) << dx0 << setw(15) << dy0 << setw(15) << dz0 << endl;
112
113 double xc = 0., yc = 0., zc = 0., tc = 0.; // cluster position
114 int nc = 0; // number of electrons
115 double ec = 0.; // energy
116 double extra = 0.; // not used
117 int nCluster = 0;
118
119 while(m_track->GetCluster(xc, yc, zc, tc, nc, ec, extra)){
120 // cout<<"nCluster="<<nCluster<<endl;
121 double length = sqrt(pow(xc,2)+pow(yc,2)+pow(zc,2));
122 // cout << "length = " << length << ", trkL = " << trkL << endl;
123 if(length>trkL){
124 cout << "overflow -------------------------" << endl;
125 continue;
126 }
127 // cout << setw(5) << nCluster << setw(15) << xc << setw(15) << yc << setw(15) << zc << setw(15) << nc << endl;
128 nCluster++;
129 for(int j = 0; j<nc; ++j) {
130 double xe, ye, ze, te;
131 double ee, dxe, dye, dze;
132 //cout <<" get e "<<j<<endl;
133 m_track->GetElectron(j, xe, ye, ze, te, ee, dxe, dye, dze); // unit: cm
134
135 // cout << setw(5) << nE << setw(15) << xe << setw(15) << ye << setw(15) << ze << setw(15) << te << endl;
136 m_ex.push_back(trkPosIn[0] + xe*10.0); // mm
137 m_ey.push_back(trkPosIn[1] + ye*10.0); // mm
138 m_ez.push_back(trkPosIn[2] + ze*10.0); // mm
139 m_et.push_back(te);
140 nE++;
141 }
142 }
143 m_nIonE = nE;
144 //delete m_track;
145}
double length

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