Hello!
The following pictures of the induction signal comes from Examples/Srim/trimsignal.C and Examples/DriftTube/mdt_gamma.C respectively. The former medium is Si and the signal is caused by the drift of electrons and holes. The signal curve are all negative.
The latter medium is gas and the signal is caused by electrons,the signal curve has a positive part and a negative part.

In my programme,the medium is air,the signal is caused by the negative ions. The signal I get is positive.
Here is the key code

``````AvalancheMC *avalMC = new AvalancheMC();
avalMC->SetSensor(&sensor);
avalMC->EnableSignalCalculation(true);
avalMC->UseWeightingPotential(true);
avalMC->DisableAvalancheSizeLimit();
avalMC->SetDistanceSteps(0.001);
xi1 = 5;
yi1 = 3;
zi1 = 5;
ti1 = 0;
for (int i = 0; i < 10; i++)
{
cout<<"  i====  "<<i<<endl;
avalMC->DriftNegativeIon(xi1, yi1, zi1, ti1);
}
``````

this is the driftline of the negative ion

So my question is, what does the positive and negative of signal mean? What determines the positive or negative of the signal? I think this is related to the positivity and negativity of particles which drift, but in fact it seems not to be the case.

The convention used in Garfield++ is that an electron (or another negatively charged particle) moving towards a readout electrode induces a negative current on this electrode. An ion/hole (or other positively charged particle) moving away from a readout electrode also induces a negative current on this electrode.

In the MDT example, the induced current is convoluted with a bipolar transfer function, which is why you see a positive “undershoot” in the signal.

@hschindl
In my case, the negative ions move towards the pixel electrode ,but I finally got a positive signal.
The medium is air and the electric field is uniform.When the electrons are attached by electronegative gas,the negative ions begin to drift toward the electrode.（I import the mobility of negative ion O2- ). So I don’t know why the signal is positive,Could you give me some advice？

@hschindl ,Is it because something wrong with avalMC.DriftNegativeIon() ?
The following codes are from AvalancheMC.cc

``````bool AvalancheMC::DriftElectron(const double x0, const double y0,
const double z0, const double t0) {
std::vector<std::pair<Point, Particle> > particles;
particles.emplace_back(std::make_pair(MakePoint(x0, y0, z0, t0),
Particle::Electron));
return TransportParticles(particles, true, false, false);
}
bool AvalancheMC::DriftHole(const double x0, const double y0, const double z0,
const double t0) {
std::vector<std::pair<Point, Particle> > particles;
particles.emplace_back(std::make_pair(MakePoint(x0, y0, z0, t0),
Particle::Hole));
return TransportParticles(particles, false, true, false);
}

bool AvalancheMC::DriftIon(const double x0, const double y0, const double z0,
const double t0) {
std::vector<std::pair<Point, Particle> > particles;
particles.emplace_back(std::make_pair(MakePoint(x0, y0, z0, t0),
Particle::Ion));
return TransportParticles(particles, false, true, false);
}

bool AvalancheMC::DriftNegativeIon(const double x0, const double y0,
const double z0, const double t0) {
std::vector<std::pair<Point, Particle> > particles;
particles.emplace_back(std::make_pair(MakePoint(x0, y0, z0, t0),
Particle::NegativeIon));
return TransportParticles(particles, false, true, false);
}
``````

Both negative ions and electrons are negatively charged particles, So I guess DriftNegativeIon( ) should return return TransportParticles( particles, true, false, false ) ; instead of return TransportParticles( particles, false, true, false ) ;
if I misunderstand, please correct me
No, it’s not that. But there was indeed another bug in `AvalancheMC` that caused the negative-ion signal to have the wrong polarity. Should be fixed now: