refactor: proton

This commit is contained in:
liuyihui 2023-05-18 15:53:50 +08:00
parent d064f63be0
commit a2ec7bf56c
7 changed files with 72 additions and 2825 deletions

View File

@ -1,31 +0,0 @@
# -----------------------------------------------------------------
# Mobility of Ar+ ions in Ar measured for T=300 K
# Accuracy: 1 % below 250 and 3 % above
# Data from Hornbeck 51 + Beaty 68
# -----------------------------------------------------------------
0 1.53
8 1.53
10 1.53
12 1.53
15 1.52
20 1.51
25 1.49
30 1.47
40 1.44
50 1.41
60 1.38
80 1.32
100 1.27
120 1.22
150 1.16
200 1.06
250 0.99
300 0.95
400 0.85
500 0.78
600 0.72
800 0.63
1000 0.56
1200 0.51
1500 0.46
2000 0.40

View File

@ -1,23 +0,0 @@
# ------------------------------------------------------------
# Mobility of Ar+ ions in He measured at T=300 K
# Accuracy: < 7%
# Data from Ellis 1976
# ------------------------------------------------------------
5 20.8
10 21.3
15 21.5
20 21.6
25 21.4
30 21.2
35 20.9
40 20.6
45 20.0
50 19.6
60 18.7
70 18.0
80 17.1
90 16.4
100 15.7
110 15.2
120 14.6
130 14.3

File diff suppressed because it is too large Load Diff

View File

@ -1,361 +0,0 @@
0.000000e+00 0.000000e+00
1.000000e-03 0.000000e+00
2.000000e-03 0.000000e+00
3.000000e-03 0.000000e+00
4.000000e-03 0.000000e+00
5.000000e-03 0.000000e+00
6.000000e-03 0.000000e+00
7.000000e-03 1.999974e-03
8.000000e-03 1.100004e-02
9.000000e-03 2.999997e-02
1.000000e-02 5.799997e-02
1.100000e-02 9.099996e-02
1.200000e-02 1.270000e-01
1.300000e-02 1.620001e-01
1.400000e-02 1.940000e-01
1.500000e-02 2.230000e-01
1.600000e-02 2.460001e-01
1.700000e-02 2.640001e-01
1.800000e-02 2.760000e-01
1.900000e-02 2.840000e-01
2.000000e-02 2.860000e-01
2.100000e-02 2.850000e-01
2.200000e-02 2.790000e-01
2.300000e-02 2.710000e-01
2.400000e-02 2.610000e-01
2.500000e-02 2.490000e-01
2.600000e-02 2.350000e-01
2.700000e-02 2.210000e-01
2.800000e-02 2.060000e-01
2.900000e-02 1.910000e-01
3.000000e-02 1.760000e-01
3.100000e-02 1.620001e-01
3.200000e-02 1.480000e-01
3.300000e-02 1.330000e-01
3.400000e-02 1.180000e-01
3.500000e-02 1.040000e-01
3.600000e-02 9.000003e-02
3.700000e-02 7.700002e-02
3.800000e-02 6.500006e-02
3.900000e-02 5.400002e-02
4.000000e-02 4.299998e-02
4.100000e-02 3.299999e-02
4.200000e-02 2.400005e-02
4.300000e-02 1.600003e-02
4.400000e-02 8.000016e-03
4.500000e-02 1.000047e-03
4.600000e-02 -6.000042e-03
4.700000e-02 -1.199996e-02
4.800000e-02 -1.699996e-02
4.900000e-02 -2.199996e-02
5.000000e-02 -2.699995e-02
5.100000e-02 -3.100002e-02
5.200000e-02 -3.400004e-02
5.300000e-02 -3.699994e-02
5.400000e-02 -3.999996e-02
5.500000e-02 -4.199994e-02
5.600000e-02 -4.400003e-02
5.700000e-02 -4.600000e-02
5.800000e-02 -4.799998e-02
5.900000e-02 -4.900002e-02
6.000000e-02 -5.100000e-02
6.100000e-02 -5.200005e-02
6.200000e-02 -5.299997e-02
6.300000e-02 -5.400002e-02
6.400000e-02 -5.400002e-02
6.500000e-02 -5.499995e-02
6.600000e-02 -5.599999e-02
6.700000e-02 -5.700004e-02
6.800000e-02 -5.700004e-02
6.900000e-02 -5.799997e-02
7.000000e-02 -5.900002e-02
7.100000e-02 -5.900002e-02
7.200000e-02 -5.999994e-02
7.300000e-02 -5.999994e-02
7.400000e-02 -5.999994e-02
7.500000e-02 -6.099999e-02
7.600000e-02 -6.099999e-02
7.700000e-02 -6.099999e-02
7.800000e-02 -6.099999e-02
7.900000e-02 -6.099999e-02
8.000000e-02 -6.099999e-02
8.100000e-02 -6.099999e-02
8.200000e-02 -6.099999e-02
8.300000e-02 -6.099999e-02
8.400000e-02 -6.099999e-02
8.500000e-02 -6.099999e-02
8.600000e-02 -5.999994e-02
8.700000e-02 -5.999994e-02
8.800000e-02 -5.999994e-02
8.900000e-02 -5.900002e-02
9.000000e-02 -5.900002e-02
9.100000e-02 -5.799997e-02
9.200000e-02 -5.799997e-02
9.300000e-02 -5.700004e-02
9.400000e-02 -5.700004e-02
9.500000e-02 -5.599999e-02
9.600000e-02 -5.599999e-02
9.700000e-02 -5.499995e-02
9.800000e-02 -5.400002e-02
9.900000e-02 -5.400002e-02
1.000000e-01 -5.299997e-02
1.010000e-01 -5.299997e-02
1.020000e-01 -5.200005e-02
1.030000e-01 -5.100000e-02
1.040000e-01 -5.100000e-02
1.050000e-01 -4.999995e-02
1.060000e-01 -4.999995e-02
1.070000e-01 -4.900002e-02
1.080000e-01 -4.900002e-02
1.090000e-01 -4.799998e-02
1.100000e-01 -4.699993e-02
1.110000e-01 -4.699993e-02
1.120000e-01 -4.600000e-02
1.130000e-01 -4.600000e-02
1.140000e-01 -4.499996e-02
1.150000e-01 -4.499996e-02
1.160000e-01 -4.400003e-02
1.170000e-01 -4.299998e-02
1.180000e-01 -4.299998e-02
1.190000e-01 -4.199994e-02
1.200000e-01 -4.199994e-02
1.210000e-01 -4.100001e-02
1.220000e-01 -4.100001e-02
1.230000e-01 -3.999996e-02
1.240000e-01 -3.999996e-02
1.250000e-01 -3.900003e-02
1.260000e-01 -3.900003e-02
1.270000e-01 -3.799999e-02
1.280000e-01 -3.799999e-02
1.290000e-01 -3.699994e-02
1.300000e-01 -3.699994e-02
1.310000e-01 -3.699994e-02
1.320000e-01 -3.600001e-02
1.330000e-01 -3.600001e-02
1.340000e-01 -3.499997e-02
1.350000e-01 -3.499997e-02
1.360000e-01 -3.400004e-02
1.370000e-01 -3.400004e-02
1.380000e-01 -3.299999e-02
1.390000e-01 -3.299999e-02
1.400000e-01 -3.299999e-02
1.410000e-01 -3.199995e-02
1.420000e-01 -3.199995e-02
1.430000e-01 -3.100002e-02
1.440000e-01 -3.100002e-02
1.450000e-01 -2.999997e-02
1.460000e-01 -2.999997e-02
1.470000e-01 -2.999997e-02
1.480000e-01 -2.900004e-02
1.490000e-01 -2.900004e-02
1.500000e-01 -2.900004e-02
1.510000e-01 -2.800000e-02
1.520000e-01 -2.800000e-02
1.530000e-01 -2.699995e-02
1.540000e-01 -2.699995e-02
1.550000e-01 -2.699995e-02
1.560000e-01 -2.600002e-02
1.570000e-01 -2.600002e-02
1.580000e-01 -2.600002e-02
1.590000e-01 -2.499998e-02
1.600000e-01 -2.499998e-02
1.610000e-01 -2.499998e-02
1.620000e-01 -2.399993e-02
1.630000e-01 -2.399993e-02
1.640000e-01 -2.399993e-02
1.650000e-01 -2.300000e-02
1.660000e-01 -2.300000e-02
1.670000e-01 -2.300000e-02
1.680000e-01 -2.199996e-02
1.690000e-01 -2.199996e-02
1.700000e-01 -2.199996e-02
1.710000e-01 -2.100003e-02
1.720000e-01 -2.100003e-02
1.730000e-01 -2.100003e-02
1.740000e-01 -2.100003e-02
1.750000e-01 -1.999998e-02
1.760000e-01 -1.999998e-02
1.770000e-01 -1.999998e-02
1.780000e-01 -1.999998e-02
1.790000e-01 -1.899993e-02
1.800000e-01 -1.899993e-02
1.810000e-01 -1.899993e-02
1.820000e-01 -1.800001e-02
1.830000e-01 -1.800001e-02
1.840000e-01 -1.800001e-02
1.850000e-01 -1.800001e-02
1.860000e-01 -1.699996e-02
1.870000e-01 -1.699996e-02
1.880000e-01 -1.699996e-02
1.890000e-01 -1.699996e-02
1.900000e-01 -1.699996e-02
1.910000e-01 -1.600003e-02
1.920000e-01 -1.600003e-02
1.930000e-01 -1.600003e-02
1.940000e-01 -1.600003e-02
1.950000e-01 -1.499999e-02
1.960000e-01 -1.499999e-02
1.970000e-01 -1.499999e-02
1.980000e-01 -1.499999e-02
1.990000e-01 -1.499999e-02
2.000000e-01 -1.399994e-02
2.010000e-01 -1.399994e-02
2.020000e-01 -1.399994e-02
2.030000e-01 -1.399994e-02
2.040000e-01 -1.399994e-02
2.050000e-01 -1.300001e-02
2.060000e-01 -1.300001e-02
2.070000e-01 -1.300001e-02
2.080000e-01 -1.300001e-02
2.090000e-01 -1.300001e-02
2.100000e-01 -1.199996e-02
2.110000e-01 -1.199996e-02
2.120000e-01 -1.199996e-02
2.130000e-01 -1.199996e-02
2.140000e-01 -1.199996e-02
2.150000e-01 -1.100004e-02
2.160000e-01 -1.100004e-02
2.170000e-01 -1.100004e-02
2.180000e-01 -1.100004e-02
2.190000e-01 -1.100004e-02
2.200000e-01 -1.100004e-02
2.210000e-01 -9.999990e-03
2.220000e-01 -9.999990e-03
2.230000e-01 -9.999990e-03
2.240000e-01 -9.999990e-03
2.250000e-01 -9.999990e-03
2.260000e-01 -9.999990e-03
2.270000e-01 -8.999944e-03
2.280000e-01 -8.999944e-03
2.290000e-01 -8.999944e-03
2.300000e-01 -8.999944e-03
2.310000e-01 -8.999944e-03
2.320000e-01 -8.999944e-03
2.330000e-01 -8.999944e-03
2.340000e-01 -8.000016e-03
2.350000e-01 -8.000016e-03
2.360000e-01 -8.000016e-03
2.370000e-01 -8.000016e-03
2.380000e-01 -8.000016e-03
2.390000e-01 -8.000016e-03
2.400000e-01 -8.000016e-03
2.410000e-01 -8.000016e-03
2.420000e-01 -6.999969e-03
2.430000e-01 -6.999969e-03
2.440000e-01 -6.999969e-03
2.450000e-01 -6.999969e-03
2.460000e-01 -6.999969e-03
2.470000e-01 -6.999969e-03
2.480000e-01 -6.999969e-03
2.490000e-01 -6.999969e-03
2.500000e-01 -6.999969e-03
2.510000e-01 -6.000042e-03
2.520000e-01 -6.000042e-03
2.530000e-01 -6.000042e-03
2.540000e-01 -6.000042e-03
2.550000e-01 -6.000042e-03
2.560000e-01 -6.000042e-03
2.570000e-01 -6.000042e-03
2.580000e-01 -6.000042e-03
2.590000e-01 -6.000042e-03
2.600000e-01 -6.000042e-03
2.610000e-01 -4.999995e-03
2.620000e-01 -4.999995e-03
2.630000e-01 -4.999995e-03
2.640000e-01 -4.999995e-03
2.650000e-01 -4.999995e-03
2.660000e-01 -4.999995e-03
2.670000e-01 -4.999995e-03
2.680000e-01 -4.999995e-03
2.690000e-01 -4.999995e-03
2.700000e-01 -4.999995e-03
2.710000e-01 -4.999995e-03
2.720000e-01 -3.999949e-03
2.730000e-01 -3.999949e-03
2.740000e-01 -3.999949e-03
2.750000e-01 -3.999949e-03
2.760000e-01 -3.999949e-03
2.770000e-01 -3.999949e-03
2.780000e-01 -3.999949e-03
2.790000e-01 -3.999949e-03
2.800000e-01 -3.999949e-03
2.810000e-01 -3.999949e-03
2.820000e-01 -3.999949e-03
2.830000e-01 -3.999949e-03
2.840000e-01 -3.999949e-03
2.850000e-01 -3.999949e-03
2.860000e-01 -3.000021e-03
2.870000e-01 -3.000021e-03
2.880000e-01 -3.000021e-03
2.890000e-01 -3.000021e-03
2.900000e-01 -3.000021e-03
2.910000e-01 -3.000021e-03
2.920000e-01 -3.000021e-03
2.930000e-01 -3.000021e-03
2.940000e-01 -3.000021e-03
2.950000e-01 -3.000021e-03
2.960000e-01 -3.000021e-03
2.970000e-01 -3.000021e-03
2.980000e-01 -3.000021e-03
2.990000e-01 -3.000021e-03
3.000000e-01 -3.000021e-03
3.010000e-01 -3.000021e-03
3.020000e-01 -3.000021e-03
3.030000e-01 -1.999974e-03
3.040000e-01 -1.999974e-03
3.050000e-01 -1.999974e-03
3.060000e-01 -1.999974e-03
3.070000e-01 -1.999974e-03
3.080000e-01 -1.999974e-03
3.090000e-01 -1.999974e-03
3.100000e-01 -1.999974e-03
3.110000e-01 -1.999974e-03
3.120000e-01 -1.999974e-03
3.130000e-01 -1.999974e-03
3.140000e-01 -1.999974e-03
3.150000e-01 -1.999974e-03
3.160000e-01 -1.999974e-03
3.170000e-01 -1.999974e-03
3.180000e-01 -1.999974e-03
3.190000e-01 -1.999974e-03
3.200000e-01 -1.999974e-03
3.210000e-01 -1.999974e-03
3.220000e-01 -1.999974e-03
3.230000e-01 -1.999974e-03
3.240000e-01 -1.000047e-03
3.250000e-01 -1.000047e-03
3.260000e-01 -1.000047e-03
3.270000e-01 -1.000047e-03
3.280000e-01 -1.000047e-03
3.290000e-01 -1.000047e-03
3.300000e-01 -1.000047e-03
3.310000e-01 -1.000047e-03
3.320000e-01 -1.000047e-03
3.330000e-01 -1.000047e-03
3.340000e-01 -1.000047e-03
3.350000e-01 -1.000047e-03
3.360000e-01 -1.000047e-03
3.370000e-01 -1.000047e-03
3.380000e-01 -1.000047e-03
3.390000e-01 -1.000047e-03
3.400000e-01 -1.000047e-03
3.410000e-01 -1.000047e-03
3.420000e-01 -1.000047e-03
3.430000e-01 -1.000047e-03
3.440000e-01 -1.000047e-03
3.450000e-01 -1.000047e-03
3.460000e-01 -1.000047e-03
3.470000e-01 -1.000047e-03
3.480000e-01 -1.000047e-03
3.490000e-01 -1.000047e-03
3.500000e-01 -1.000047e-03
3.510000e-01 -1.000047e-03
3.520000e-01 -1.000047e-03
3.530000e-01 0.000000e+00
3.540000e-01 0.000000e+00
3.550000e-01 0.000000e+00
3.560000e-01 0.000000e+00
3.570000e-01 0.000000e+00
3.580000e-01 0.000000e+00
3.590000e-01 0.000000e+00
3.600000e-01 0.000000e+00

134
mdt_mt.C
View File

@ -1,134 +0,0 @@
#include <TApplication.h>
#include <TCanvas.h>
#include <TROOT.h>
#include "Garfield/ComponentAnalyticField.hh"
#include "Garfield/DriftLineRKF.hh"
#include "Garfield/MediumMagboltz.hh"
#include "Garfield/Sensor.hh"
#include "Garfield/TrackHeed.hh"
#include "Garfield/ViewCell.hh"
#include "Garfield/ViewDrift.hh"
#include "Garfield/ViewSignal.hh"
#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace Garfield;
int main(int argc, char* argv[]) {
TApplication app("app", &argc, argv);
// Make a gas medium.
MediumMagboltz gas;
gas.LoadGasFile("ar_93_co2_7_3bar.gas");
auto installdir = std::getenv("GARFIELD_INSTALL");
if (!installdir) {
std::cerr << "GARFIELD_INSTALL variable not set.\n";
return 1;
}
const std::string path = installdir;
gas.LoadIonMobility(path + "/share/Garfield/Data/IonMobility_Ar+_Ar.txt");
// Make a component with analytic electric field.
ComponentAnalyticField cmp;
cmp.SetMedium(&gas);
// Wire radius [cm]
const double rWire = 25.e-4;
// Outer radius of the tube [cm]
const double rTube = 0.71;
// Voltages
const double vWire = 2730.;
const double vTube = 0.;
// Add the wire in the centre.
cmp.AddWire(0, 0, 2 * rWire, vWire, "s");
// Add the tube.
cmp.AddTube(rTube, vTube, 0, "t");
// Request calculation of the weighting field.
cmp.AddReadout("s");
// Make a sensor.
Sensor sensor;
sensor.AddComponent(&cmp);
sensor.AddElectrode(&cmp, "s");
// Set the signal time window.
const double tstep = 0.5;
const double tmin = -0.5 * tstep;
const unsigned int nbins = 1000;
sensor.SetTimeWindow(tmin, tstep, nbins);
sensor.ClearSignal();
// Set up Heed.
TrackHeed track;
track.SetParticle("muon");
track.SetEnergy(170.e9);
track.SetSensor(&sensor);
TCanvas* cD = nullptr;
ViewCell cellView;
ViewDrift driftView;
constexpr bool plotDrift = true;
if (plotDrift) {
cD = new TCanvas("cD", "", 600, 600);
cellView.SetCanvas(cD);
cellView.SetComponent(&cmp);
driftView.SetCanvas(cD);
track.EnablePlotting(&driftView);
}
TCanvas* cS = nullptr;
ViewSignal signalView;
constexpr bool plotSignal = true;
if (plotSignal) {
cS = new TCanvas("cS", "", 600, 600);
signalView.SetCanvas(cS);
signalView.SetSensor(&sensor);
signalView.SetLabelY("signal [fC]");
}
const double rTrack = 0.3;
const double x0 = rTrack;
const double y0 = -sqrt(rTube * rTube - rTrack * rTrack);
const unsigned int nTracks = 1;
for (unsigned int j = 0; j < nTracks; ++j) {
sensor.ClearSignal();
std::vector<std::array<double, 4> > electrons;
track.NewTrack(x0, y0, 0, 0, 0, 1, 0);
for (const auto& cluster : track.GetClusters()) {
for (const auto& electron : cluster.electrons) {
electrons.push_back({electron.x, electron.y, electron.z, electron.t});
}
}
// Loop over the primary electrons along the track.
const std::size_t ne = electrons.size();
#pragma omp parallel for
for (size_t k = 0; k < ne; ++k) {
DriftLineRKF drift;
drift.SetSensor(&sensor);
drift.SetGainFluctuationsPolya(0., 20000., true);
// drift.EnableIonTail();
if (plotDrift) drift.EnablePlotting(&driftView);
const double xe = electrons[k][0];
const double ye = electrons[k][1];
const double ze = electrons[k][2];
const double te = electrons[k][3];
drift.DriftElectron(xe, ye, ze, te);
}
if (plotDrift) {
cD->Clear();
cellView.Plot2d();
constexpr bool twod = true;
constexpr bool drawaxis = false;
driftView.Plot(twod, drawaxis);
}
sensor.ConvoluteSignals();
int nt = 0;
if (!sensor.ComputeThresholdCrossings(-2., "s", nt)) continue;
if (plotSignal) signalView.PlotSignal("s");
}
app.Run(kTRUE);
}

View File

@ -16,6 +16,9 @@
#include <fstream>
#include <iostream>
#define f_PLOT 0
#define f_PRINT 1
using namespace Garfield;
const double rWire = 2e-3;
@ -24,7 +27,7 @@ const double vWire = 1900.;
const double vTube = 0.;
const double tStep = 1;
const int nbins = 20000;
const int nbins = 10000;
const int N = 1000;
bool readTransferFunction(Sensor& sensor) {
@ -70,20 +73,37 @@ double riseTime(Sensor& sensor) {
return 1.e-9 * (tr - tl) * tStep;
}
double rorate(double* x, double* y, double* z, double theta, int axis) {
if (axis == 0) {
double tmp = *y * cos(theta) - *z * sin(theta);
*z = *y * sin(theta) + *z * cos(theta);
*y = tmp;
} else if (axis == 1) {
double tmp = *x * cos(theta) - *z * sin(theta);
*z = *x * sin(theta) + *z * cos(theta);
*x = tmp;
} else {
double tmp = *x * cos(theta) - *y * sin(theta);
*y = *x * sin(theta) + *y * cos(theta);
*x = tmp;
void randPos(double* x, double* y) {
double a1 = 2 * M_PI * (rand() / (double)RAND_MAX);
double a2 = (rand() / (double)RAND_MAX) * rTube * 0.95;
*x = cos(a1) * a2 + rWire;
*y = sin(a1) * a2 + rWire;
}
void randDir(double* x, double* y, double* z) {
double a1 = 2 * M_PI * (rand() / (double)RAND_MAX);
double a2 = acos(2 * (rand() / (double)RAND_MAX) - 1);
*x = cos(a1) * cos(a2);
*y = sin(a1) * cos(a2);
*z = sin(a2);
}
std::tuple<int, double> driftElectron(TrackSrim track, DriftLineRKF drift) {
int nc, ne = 0;
double eDep = 0;
double xc, yc, zc, tc, eDepc, extra;
while (track.GetCluster(xc, yc, zc, tc, nc, eDepc, extra)) {
ne += nc;
eDep += eDepc;
drift.SetIonSignalScalingFactor(nc);
drift.DriftIon(xc, yc, zc, tc);
drift.SetElectronSignalScalingFactor(nc);
drift.DriftElectron(xc, yc, zc, tc);
}
return {ne, eDep};
}
int main(int argc, char* argv[]) {
@ -127,86 +147,60 @@ int main(int argc, char* argv[]) {
drift.EnableIonTail();
drift.EnableSignalCalculation();
// TCanvas* cD = new TCanvas("cD", "", 600, 600);
// ViewCell cellView;
// ViewDrift driftView;
// ViewSignal signalView;
#if f_PLOT
TCanvas* cD = new TCanvas("cD", "", 600, 600);
ViewCell cellView;
ViewDrift driftView;
ViewSignal signalView;
// cellView.SetCanvas(cD);
// cellView.SetComponent(&cmp);
// driftView.SetCanvas(cD);
// drift.EnablePlotting(&driftView);
// proton.EnablePlotting(&driftView);
// tritium.EnablePlotting(&driftView);
// alpha.EnablePlotting(&driftView);
cellView.SetCanvas(cD);
cellView.SetComponent(&cmp);
driftView.SetCanvas(cD);
drift.EnablePlotting(&driftView);
proton.EnablePlotting(&driftView);
tritium.EnablePlotting(&driftView);
alpha.EnablePlotting(&driftView);
#endif
int nc, ne, status;
double eDep;
double a1, a2, px, py, dx, dy, dz;
double xc, yc, zc, tc, eDepc, extra;
double ek, px, py, dx, dy, dz;
for (int i = 0; i < N; i++) {
ne = 0;
eDep = 0;
// driftView.Clear();
#if f_PLOT
driftView.Clear();
#endif
sensor.ClearSignal();
a1 = 2 * M_PI * (rand() / (double)RAND_MAX);
a2 = acos(2 * (rand() / (double)RAND_MAX) - 1);
randPos(&px, &py);
randDir(&dx, &dy, &dz);
ek = 0.6e6 * (rand() / (double)RAND_MAX) + 0.2e6;
dx = cos(a1) * cos(a2);
dy = sin(a1) * cos(a2);
dz = sin(a2);
a1 = 2 * M_PI * (rand() / (double)RAND_MAX);
a2 = (rand() / (double)RAND_MAX) * rTube * 0.95;
px = cos(a1) * a2 + rWire;
py = sin(a1) * a2 + rWire;
proton.SetKineticEnergy(0.6e6 * (rand() / (double)RAND_MAX) + 0.2e6);
proton.SetKineticEnergy(ek);
proton.NewTrack(px, py, 0, 0, dx, dy, dz);
while (proton.GetCluster(xc, yc, zc, tc, nc, eDepc, extra)) {
ne += nc;
eDep += eDepc;
drift.SetIonSignalScalingFactor(nc);
drift.DriftIon(xc, yc, zc, tc);
drift.SetElectronSignalScalingFactor(nc);
drift.DriftElectron(xc, yc, zc, tc);
}
auto [ne, eDep] = driftElectron(proton, drift);
// tritium.NewTrack(px, py, 0, 0, -dx, -dy, -dz);
// while (tritium.GetCluster(xc, yc, zc, tc, nc, eDepc, extra)) {
// ne += nc;
// eDep += eDepc;
// drift.SetIonSignalScalingFactor(nc);
// drift.DriftIon(xc, yc, zc, tc);
// drift.SetElectronSignalScalingFactor(nc);
// drift.DriftElectron(xc, yc, zc, tc);
// }
// alpha.NewTrack(rTrack, rTrack, 0, 0, -1, 1, 0);
// while (alpha.GetCluster(xc, yc, zc, tc, nc, eDepc, extra)) {
// drift.SetIonSignalScalingFactor(nc);
// drift.DriftIon(xc, yc, zc, tc);
// drift.SetElectronSignalScalingFactor(nc);
// drift.DriftElectron(xc, yc, zc, tc);
// }
// cD->Clear();
// cellView.Plot2d();
// driftView.Plot(true, false);
// cD->Update();
#if f_PLOT
cD->Clear();
cellView.Plot2d();
driftView.Plot(true, false);
cD->Update();
// // sensor.IntegrateSignals();
// sensor.ConvoluteSignals();
// signalView.SetSensor(&sensor);
// // signalView.PlotSignal("s", "tei");
// signalView.PlotSignal("s", "t");
// sensor.IntegrateSignals();
sensor.ConvoluteSignals();
signalView.SetSensor(&sensor);
// signalView.PlotSignal("s", "tei");
signalView.PlotSignal("s", "t");
#endif
#if f_PRINT > 1
printf("Position = (%.2f, %.2f), Ek = %.3f\n", px, py, ek);
printf("Total Count = %d, Energy Deposit = %.3f, W = %.3f\n", ne, eDep, eDep / ne);
#elif f_PRINT
std::cout << eDep << " " << riseTime(sensor) * 1e9 << std::endl;
// printf("Position = (%.2f, %.2f), ", px, py);
// printf("Total Count = %d, Energy Deposit = %.3f, W = %.3f\n", ne, eDep, eDep / ne);
#endif
}
app.Run(kTRUE);

File diff suppressed because it is too large Load Diff