Hi,based on The questions about the induced current - #26 by XiCheng, I wrote a program to calculate the induced signal caused by alpha in air in the Gem detector.Here is some information about my code(attached below).
I used Ansys to build a single-layer Gem model with cathode (0 Volt) at the bottom, gem in the middle, and anode (1500 volt) at the top. The drift region is 3 mm and the induction region is 1 mm. In addition, SRIM was used to calculate the ionization data of alpha in air (“EXYZ_Helim_inAir.txt”," Helium_10keV-10MeV_in_Air.txt" ).
I want to simulate the ionization of alpha in the drift region, avalanche in the gem, then calculate the induced signal on the anode, and visualize the whole process using the driftView.But encountered the following problems.
1.I ’ m not sure the weighting field is calculated correctly because fieldView.PlotContourWeightingField ( ’ anode ', ’ e ’ ) and fieldView.PlotContour ( ’ e ’ ) ; the results are very similar.
2.I feel that TrackSrim and TrackSrim are very similar, so I use them separately. TrackTrim can output normally, but use TrackSrim to output ’ DriftLineRKF : : DriftLine : Cannot retrieve drift velocity at initial position (0.002369, -0.004027, -0.000000). ***Break ****segmentation violation '.
( a ) What are the possible reasons for TrackSrim to cause error 'DriftLineRKF: : DriftLine:Cannot retrieve drift velocity at initial position ’ ? How should I solve it ?
( b ) What are the advantages of TrackSrim and TrackSrim, I mean, how do I determine which one to choose ?
3.The driftline is very strange, unlike the alpha ionization trajectory.Is something wrong with the code below?
while (track.GetCluster(xc, yc, zc, tc, nc, ec, extra))
{
cout << "xc= " << xc << " yc= " << yc << " zc= " << zc << "nc= " << nc << '\n';
drift.SetIonSignalScalingFactor(nc);
drift.DriftIon(xc, yc, zc, tc);
drift.SetElectronSignalScalingFactor(nc);
drift.DriftElectron(xc, yc, zc, tc);
// double xe = 0., ye = 0., ze = 0., te = 0.;
// int status = 0;
// drift.GetEndPoint(xe, ye, ze, te, status);
// ze = -1.e-10;
// drift.DriftElectron(xe, ye, ze, te); // ye
}
4.On the basis of simulating alpha ionization, I want to simulate the avalanche of electrons in the gem, and then calculate the induction signal of the anode, how should I modify the original code?
5.The calculated induction signal seems to be only caused by electrons. If I want to calculate the induction signal caused by ions, what should I do ?
srim.zip (985.5 KB)
the file"EXYZ_Helim_inAir.txt" is too big to upload