I am trying to collect the signal produced by the proton in the proportional counter. The working gas is a mixture of He3 and Ar. The energy of the proton is between 0.6MeV and 0.8MeV. I used SRIM to generate the files under the corresponding conditions.
But there was a problem when I tried to collect the signal with AvalancheMC::AvalancheElectron()
to simulate the electron drift:
while (track.GetCluster(xc, yc, zc, tc, nce, eDepc, extra)) {
mc.SetElectronSignalScalingFactor(nce);
mc.AvalancheElectron(xc, yc, zc, tc, true);
}
But I can not get the ion signal. I tried using either ‘IonMobility_He+_He.txt’ or ‘IonMobility_Ar+_Ar.txt’ separately, but I don’t know if that’s true, because protons might ionize both He3 and Ar.
My Code:
Summary
#include <TApplication.h>
#include <TCanvas.h>
#include <TROOT.h>
#include "Garfield/AvalancheMC.hh"
#include "Garfield/ComponentAnalyticField.hh"
#include "Garfield/MediumMagboltz.hh"
#include "Garfield/Sensor.hh"
#include "Garfield/TrackSrim.hh"
#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace Garfield;
int main(int argc, char* argv[]) {
TApplication app("app", &argc, argv);
MediumMagboltz gas;
gas.LoadGasFile("helium3_625_ar_375_64atm_3000K.gas");
const std::string path = std::getenv("GARFIELD_INSTALL");
gas.LoadIonMobility(path + "/Data/IonMobility_He+_He.txt");
ComponentAnalyticField cmp;
cmp.SetMedium(&gas);
const double rWire = 1e-3;
const double rTube = 2.54 / 2;
const double vWire = 1000.;
const double vTube = 0.;
cmp.AddWire(0., 0., 2 * rWire, vWire, "s", 30.);
cmp.AddTube(rTube, vTube, 0, "t");
cmp.AddReadout("s");
Sensor sensor;
sensor.AddComponent(&cmp);
sensor.AddElectrode(&cmp, "s");
sensor.SetTimeWindow(-0.25, 0.5, 4000);
sensor.ClearSignal();
TrackSrim track;
track.SetSensor(&sensor);
track.ReadFile("proton_in_he3-argon(gas).txt");
track.SetKineticEnergy(0.65e6);
AvalancheMC mc;
mc.SetSensor(&sensor);
mc.EnableSignalCalculation();
TCanvas* cD = new TCanvas("cD", "", 600, 600);
ViewCell cellView;
ViewDrift driftView;
cellView.SetCanvas(cD);
cellView.SetComponent(&cmp);
driftView.SetCanvas(cD);
mc.EnablePlotting(&driftView);
track.EnablePlotting(&driftView);
int nc = 0, ne = 0, nce;
double eDepSum = 0;
double xc, yc, zc, tc, eDepc, extra;
const double rTrack = 0.3;
track.NewTrack(rTrack, rTrack, 0, 0, -1, 1, 0);
while (track.GetCluster(xc, yc, zc, tc, nce, eDepc, extra)) {
nc += 1;
ne += nce;
eDepSum += eDepc;
mc.SetElectronSignalScalingFactor(nce);
mc.AvalancheElectron(xc, yc, zc, tc, true);
// mc.SetHoleSignalScalingFactor(nce);
// mc.AvalancheHole(xc, yc, zc, tc, true);
}
printf("Cluster = %d, Total Count = %d, Energy Deposit = %.3f, W = %.3f\n", nc, ne, eDepSum, eDepSum / ne);
cD->Clear();
cellView.Plot2d();
driftView.Plot(true, false);
ViewSignal signalView;
sensor.IntegrateSignals();
signalView.SetSensor(&sensor);
signalView.PlotSignal("s", "tei");
app.Run(kTRUE);
return 0;
}
helium3_625_ar_375_64atm_3000K.txt (103.4 KB)
proton_in_he3-argon(gas).txt (6.1 KB)
My Result:
Related Topic: