Skip to content

Two-dimensional wire chambers

The class ComponentAnalyticField implements methods for computing the electrostatic potential and field for two-dimensional chambers consisting of thin wires and infinite equipotential planes or a tube (i.e. a cylindrical or polygonal pipe enclosing the wires). The wires are assumed to have infinite length, be oriented along the z-axis and have a diameter that is small compared to the distance to other electrodes. A description of the mathematical expressions and formalism can be found in this note.

As an example, we consider the multi-wire proportional chamber (MWPC) schematically depicted below, comprised of a row of anode wires with a spacing of 2 mm between two grounded parallel plates with a gap of 5 mm.

Schematic drawing

We start by creating a gas medium and setting it to be the active medium of the chamber.

MediumMagboltz gas("ar", 90., "ch4", 10.);
ComponentAnalyticField cmp;
cmp.SetMedium(&gas);

To describe the layout of the chamber, we first create the two equipotential planes, one at y = 0 and one at y = 5 mm (Garfield++ uses cm as length unit). For both planes the potential is set to 0 V.

const double gap = 0.5;
cmp.AddPlaneY( 0.,  0.);
cmp.AddPlaneY(gap,  0.);

The function AddPlaneY has an optional third argument of type std::string which defaults to an empty string. If this argument is non-empty, the charges corresponding to the weighting potential/field configuration for this electrode are computed such that the induced signal on the electrode can be calculated.

Next, we add the row of wires. Since the chamber has a repetitive structure (the layout is invariant with respect to a shift in x by the wire pitch), we only need to add one wire and request periodicity in x.

// Vertical coordinate of the wire centre (midway between the two planes).
const double yw = 0.5 * gap;
// Wire diameter [30 um].
const double dw = 30.e-4;
// Potential of the wires [V].
const double vw = 2650.;
cmp.AddWire(0., yw, dw, vw, "s");
// Set the periodic length.
const double pitch = 0.2;
cmp.SetPeriodicityX(pitch);

When adding the wire, we gave it a label ("s"), which will trigger the computation of the capacitance matrix corresponding to the weighting potential/field configuration for the wire.

Instead of using the minimal periodic length, we could also have added multiple explicit copies of the wire. This becomes necessary if we want to compute the signal on neighbouring wires.

To visualize the electrostatic potential, we make a plot of the isocontours using the class ViewField

ViewField fieldView(&cmp);
const double xmin = -2.5 * pitch;
const double xmax =  2.5 * pitch;
fieldView.SetArea(xmin, 0., xmax, gap);
fieldView.PlotContour();

and superimpose a plot of the chamber layout

ViewCell cellView;
cellView.SetCanvas(fieldView.GetCanvas());
cellView.SetComponent(&cmp);
cellView.SetArea(xmin, 0., xmax, gap);
cellView.Plot2d();

Isopotential contours

Source files

Additional examples can be found in the directory Examples/AnalyticField of the Garfield++ source tree.