ROOT logo
#include "hmdcsizescells.h"

#include "hkaldafwire.h"
#include "hkalgeomtools.h"


//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////////////
//
// This class implements the deterministic annealing filter for
// wire hits. Competition between multiple wire hits on an MDC layer
// is allowed and the ambiguity on which side of the sense wire the
// particle passed by is taken into account.
// Also see doc for HKalIFilter.
//-----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////

ClassImp (HKalDafWire)

//  -----------------------------------
//  Ctors and Dtor
//  -----------------------------------

HKalDafWire::HKalDafWire(Int_t n, Int_t measDim, Int_t stateDim,
			 HMdcTrackGField *fMap, Double_t fpol)
    : HKalDafSingleWire(n, measDim, stateDim, fMap, fpol) {
}

//  -----------------------------------
//  Implementation of protected methods
//  -----------------------------------
Bool_t HKalDafWire::calcProjector(Int_t iSite) const {

    HKalTrackSite *site = getSite(iSite);
    if(!site) {
        return kFALSE;
    }

    TMatrixD fProj(getMeasDim(), getStateDim(Kalman::kLayCoord));
    fProj.Zero();
    fProj(0, kIdxY0) = 1.;

    site->setStateProjMat(Kalman::kFiltered, fProj, Kalman::kLayCoord);

    return kTRUE;
}

Bool_t HKalDafWire::calcVirtPlane(Int_t iSite) const {
    // Calculate virtual plane that will be aligned as follows:
    // One of the plane's axis points along the wire, the other one
    // from the point of closest approach (PCA) on the wire to the PCA
    // on the track.
    // The predicted track position will be the centre of the plane.
    // Using such a virtual plane will make the projection function and
    // projector matrix easy to calculate.

    HKalTrackSite *site = getSite(iSite);
    if(!site) {
	return kFALSE;
    }

    // Assume the track is a straight line in the vicinity of the current
    // track position.
    const TVectorD &predState = site->getStateVec(Kalman::kPredicted);
    TVector3 posAt;
    HKalTrackState::calcPosAtPlane(posAt, site->getHitMeasLayer(), predState);
    TVector3 dir;
    HKalTrackState::calcDir(dir, predState);

    TVector3 pos1 = posAt - dir;
    TVector3 pos2 = posAt + dir;

    // Number of competing hits.
    const Int_t nComp = site->getNcompetitors();

    // Left/right ambiguity.
    const Int_t nWires = nComp/2;

    for(Int_t iWire = 0; iWire < nWires; iWire++) {

	Int_t iHit = iWire*2;

	// Find the PCA to a segment defined by the wire endpoints.
	TVector3 wire1, wire2;
	site->getHitWirePts(wire1, wire2, iHit);

	Int_t iflag;
	Double_t length, mindist;
	TVector3 pcaTrack, pcaWire;

	// Find the PCA's on the wire and the track.
	HKalGeomTools::Track2ToLine(pcaTrack, pcaWire, iflag, mindist, length,
				    pos1, pos2, wire1, wire2);

	if(iflag == 1) {
	    if(getPrintWarn()) {
		Warning("calcVirtPlane()", "PCA is outside of wire");
	    }
	}
	if(iflag == 2) {
	    if(getPrintErr()) {
		Error("calcVirtPlane()", "Track parallel to wire.");
	    }
	    return kFALSE;
	}

	// Make virtual plane.
	// origin: current track position
	// u axis: along wire
	// v axis: from PCA on wire to PCA on track
	TVector3 u = (wire2 - wire1).Unit();
	TVector3 v = (pcaTrack - pcaWire).Unit();


	// Ensure v axis of virtual layer points in direction of positive y-axis
	// in the layer coordinate system.
	//const TVector3 &n = site->getHitMeasLayer().getNormal();   // gcc warning unused var

	HMdcSizesCells *fSizesCells = HMdcSizesCells::getExObject();
	HMdcSizesCellsLayer &fSizesCellsLayer =
	    (*fSizesCells)[site->getSector()][site->getModule()][site->getLayer()];
	const HGeomTransform &transRotLaySysRSec =
	    fSizesCellsLayer.getRotLaySysRSec(site->getCell());

	HGeomVector ygeom(0., 1., 0.);
	transRotLaySysRSec.transFrom(ygeom);

	TVector3 y(ygeom.getX(), ygeom.getY(), ygeom.getZ());

	if(y.Dot(v) < 0.) {
	    v = -1. * v;
	}

	// Repeating the above for all competitors of a site would result in
	// different virtual layers. Since the wires are parallel and the track
	// is approximately a straight line these layers would be parallel, i.e.
	// its axis u and v would be (anit-)parallel.
	// One common virtual layer is used for all of the measurement site's
	// competing hits. The centre point of this virtual plane will be the
	// predicted track position. The predicted position will usually be
	// located between the competing wires.
	//
	// When calculating the residual in the filter step the drift radii of
	// both wires will be projected onto this virtual layer.
	// Placing the virtual plane between the wires keeps the projection error
	// small, allows that a common, simple projection function and projector
	// matrix can be used for both competitors and avoids a bias towards one
	// of the two competing wires.
	//
	//
	//                              Axis v of common virtual plane is parallel to v1 and v2
	//                                   /
	//         |------------*----|------/----------|
	//      PCA for hit 1 -> *   |     /    cell 2 |
	//         |            / *  |    /            |
	//         |           /90 * |   /             |
	//Axis v for hit 1 -> /     *|  /              |
	//         |         /       * /    Wire 2     |
	//    -----|--------X--------|*-------X--------------> Measurement layer
	//         |      Wire 1     / *     /         |
	//         |                /|  *90 / <- Axis v for hit 2
	//         |               / |   * /           |
	//         |cell 1        /  |    * <- PCA for hit 2
	//         |-------------/---|-----*-----------|
	//                      /           * track

        // Left/right ambiguity of wire hits..
	site->setHitVirtPlane(pcaWire, u, v, iHit);
	site->setHitVirtPlane(pcaWire, u, v, iHit+1);
#if dafDebug > 2
    cout<<"Virtual plane for wire hit "<<iWire<<" of site "<<iSite<<endl;
    cout<<"Centre: "<<endl;
    posAt.Print();
    cout<<"Axis U: "<<endl;
    u.Print();
    cout<<"Axis V: "<<endl;
    v.Print();
#endif
    }
    return kTRUE;
}

//  --------------------------------
//  Implementation of public methods
//  --------------------------------

Bool_t HKalDafWire::calcMeasVecFromState(TVectorD &projMeasVec,
					 HKalTrackSite const* const site,
					 Kalman::kalFilterTypes stateType,
					 Kalman::coordSys sys) const {
#if kalDebug > 0
    Int_t mdim = getMeasDim();
    if(projMeasVec.GetNrows() != mdim) {
	Warning("calcMeasVecFromState()",
		Form("Dimension of measurement vector (%i) does not match that of function parameter (%i).",
		     mdim, projMeasVec.GetNrows()));
        projMeasVec.ResizeTo(mdim);
    }
#endif

    const TVectorD &sv = site->getStateVec(stateType, sys);

    if(sys == Kalman::kSecCoord) {
	// State vector is in sector coordinates.
	// The projection of the track state onto a measurement vector is
	// the insection of a straight line defined by the track position
	// and direction with the drift chamber cell.

	TVector3 posAt;
	//if(!HKalTrackState::calcPosAtPlane(posAt, site->getHitVirtPlane(iHit), sv)) {
        //?
	if(!HKalTrackState::calcPosAtPlane(posAt, site->getHitMeasLayer(), sv)) {
	    if(getPrintErr()) {
		Error("calcMeasVecFromState()",
		      "Could not extract position vector from track state.");
	    }
	    return kFALSE;
	}
	TVector3 dir;
        HKalTrackState::calcDir(dir, sv);

        // Determine sign of minimum distance.
        // The minimum distance is negative if the PCA of the track to the
        // sense wire and the origin of the coordinate system are on the same
        // side of the MDC layer.

        // Assume straight line for PCA calculation.
	TVector3 pos1 = posAt - dir;
        TVector3 pos2 = posAt + dir;
        // Wire end points.
        TVector3 wire1, wire2;
        Int_t iHit = getWireNr()*2;
        site->getHitWirePts(wire1, wire2, iHit);

        // PCAs on track and projected onto wire.
        TVector3 pcaTrack, pcaWire;
        // Error flag.
        Int_t Iflag = 0;
        // Distance between pca and wire.
        Double_t dist = 0.;
        // Arc length.
        Double_t length = 0.;
        HKalGeomTools::Track2ToLine(pcaTrack, pcaWire, Iflag, dist, length,
                                    pos1, pos2, wire1, wire2);

        if(site->getHitVirtPlane(iHit).getAxisV().Dot(pcaTrack - pcaWire) < 0.) {
            dist *= -1.;
        }

        projMeasVec(0) = dist;
    } else {
	// State vector is in virtual layer coordinates.
	// The second component corresponds to a drift radius.
	projMeasVec(0) = sv(kIdxY0);
    }
    return kTRUE;
}

Bool_t HKalDafWire::filter(Int_t iSite) {
    // Run the filter step in Kalman filter for a site.
    // Must be called after the prediction step.
    // Different Kalman filter equations are used as set by setFilterMethod().
    // iSite: index of site to filter

    HKalTrackSite *site = getSite(iSite);
    if(!site) {
	return kFALSE;
    }

    const Int_t nWires = site->getNcompetitors()/2;

    vector<TVectorD> states(nWires, TVectorD(getStateDim()));
    vector<TMatrixD> invCovs(nWires, TMatrixD(getStateDim(), getStateDim()));

    for(Int_t iWire = 0; iWire < nWires; iWire++) {
	// Each wire measurement has two hits assigned to it
        // (left and right from the wire).
        setWireNr(iWire);
        Int_t iHit = iWire*2;
	getSite(iSite)->transSecToVirtLay(Kalman::kPredicted, iHit,
					  (getFilterMethod() == Kalman::kKalUD));

	if(!calcEffMeasVec(iSite, iWire)) {
	    if(getPrintErr()) {
		Error("filter()",
		      Form("Could not calculate effective measurement for site %i.",
			   iSite));
	    }
	    return kFALSE;
	}

	switch(getFilterMethod()) {
	case Kalman::kKalConv:
	    filterConventional(iSite);
	    break;
	case Kalman::kKalJoseph:
	    filterJoseph(iSite);
	    break;
	case Kalman::kKalUD:
	    filterUD(iSite);
	    break;
	case Kalman::kKalSeq:
	    filterSequential(iSite);
	    break;
	case Kalman::kKalSwer:
	    filterSwerling(iSite);
	    break;
	default:
	    filterConventional(iSite);
	    break;
	}

	// Filtering wire hits is done in the coordinate system of the virtual
	// layer. Convert the results to sector system.
	site->transVirtLayToSec(Kalman::kFiltered, iHit,
				(getFilterMethod() == Kalman::kKalUD));

	states.at(iWire) = TVectorD(site->getStateVec(Kalman::kFiltered,
						      Kalman::kSecCoord));

	invCovs.at(iWire) = TMatrixD(TMatrixD::kInverted,
				     site->getStateCovMat(Kalman::kFiltered,
							  Kalman::kSecCoord));
    }

    // Calculate average state and covariance matrix.
    // C = (C1^{-1} + C2^{-1})^{-1}
    // sv = C * (C1^{-1} * sv1 + C2^{-1} * sv2)
    TMatrixD cov(getStateDim(), getStateDim());
    cov.Zero();
    for(UInt_t i = 0; i < invCovs.size(); i++) {
	cov += invCovs.at(i);
    }
    cov.Invert();
    site->setStateCovMat(Kalman::kFiltered, cov,
			 Kalman::kSecCoord);

    TVectorD state(getStateDim());
    state.Zero();
    for(UInt_t i = 0; i < states.size(); i++) {
	state += invCovs.at(i)*states.at(i);
    }
    state = cov*state;
    site->setStateVec(Kalman::kFiltered, state,
		      Kalman::kSecCoord);

    return kTRUE;
}

Bool_t HKalDafWire::propagate(Int_t iFromSite, Int_t iToSite) {
    // Propagates the track to the next measurement site and update
    // covariance matrices.
    //
    // iFromSite:  index of measurement site to start propagation from.
    // iToSite:    index of measurement site to propagate to.

    if(!propagateTrack(iFromSite, iToSite)) {
        return kFALSE;
    }

    if(!calcVirtPlane(iToSite)) {
	return kFALSE;
    }

    if(getFilterMethod() == Kalman::kKalUD) {
        propagateCovUD(iFromSite, iToSite);
    } else {
        propagateCovConv(iFromSite, iToSite);
    }

    return kTRUE;
}


void HKalDafWire::updateSites(const TObjArray &hits) {
    // Replace sites of the Kalman system with new hits.
    // hits: array with new measurement hits. Must be of class HKalMdcHit.

    for(Int_t i = 0; i < getNsites(); i++) {
        getSite(i)->clearHits();
        getSite(i)->setActive(kTRUE);
    }

    Int_t iHit  = 0;
    Int_t iSite = 0;

    while(iHit < hits.GetEntries() - 1) {
#if kalDebug > 0
        if(!hits.At(iHit)->InheritsFrom("HKalMdcHit")) {
	    Error("updateSites()",
		  Form("Object at index %i in hits array is of class %s. Expected class is HKalMdcHit.",
		       iHit, hits.At(iHit)->ClassName()));
            exit(1);
        }
#endif

        HKalMdcHit *hit     = (HKalMdcHit*)hits.At(iHit);
        HKalMdcHit *nexthit = (HKalMdcHit*)hits.At(iHit + 1);

        getSite(iSite)->addHit(hit);
	// Add second hit with "negative" drift time. The sign of the
	// drift time represents that.
        HKalMdcHit *hit2    = new HKalMdcHit(*hit);
        hit2->setDriftTime(hit->getDriftTime() * (-1.), hit->getDriftTimeErr());
        TVectorD hitVec2 = hit->getHitVec();
        hitVec2 *= -1.;
        hit2->setHitAndErr(hitVec2, hit->getErrVec());
        getSite(iSite)->addHit(hit2);
        Double_t w = hit->getWeight();
        hit ->setWeight(w / 2.);
        hit2->setWeight(w / 2.);

	if(!hit->areCompetitors(*hit, *nexthit)) {
            iSite++;
        }
        iHit++;
    }

    // Add last hit in array to a site.
    HKalMdcHit *lastHit = (HKalMdcHit*)hits.At(hits.GetEntries()-1);
    getSite(iSite)->addHit(lastHit);

    HKalMdcHit *hit2    = new HKalMdcHit(*lastHit);
    hit2->setDriftTime(lastHit->getDriftTime() * (-1.),
		       lastHit->getDriftTimeErr());
    Double_t w = lastHit->getWeight();
    lastHit->setWeight(w / 2.);
    hit2   ->setWeight(w / 2.);
    getSite(iSite)->addHit(hit2);
    iSite++;

    setNSites(iSite);
    setNHitsInTrack(hits.GetEntries() * 2);
#if kalDebug > 1
    cout<<"New track has "<<getNsites()<<" measurement sites."<<endl;
#endif
}
 hkaldafwire.cc:1
 hkaldafwire.cc:2
 hkaldafwire.cc:3
 hkaldafwire.cc:4
 hkaldafwire.cc:5
 hkaldafwire.cc:6
 hkaldafwire.cc:7
 hkaldafwire.cc:8
 hkaldafwire.cc:9
 hkaldafwire.cc:10
 hkaldafwire.cc:11
 hkaldafwire.cc:12
 hkaldafwire.cc:13
 hkaldafwire.cc:14
 hkaldafwire.cc:15
 hkaldafwire.cc:16
 hkaldafwire.cc:17
 hkaldafwire.cc:18
 hkaldafwire.cc:19
 hkaldafwire.cc:20
 hkaldafwire.cc:21
 hkaldafwire.cc:22
 hkaldafwire.cc:23
 hkaldafwire.cc:24
 hkaldafwire.cc:25
 hkaldafwire.cc:26
 hkaldafwire.cc:27
 hkaldafwire.cc:28
 hkaldafwire.cc:29
 hkaldafwire.cc:30
 hkaldafwire.cc:31
 hkaldafwire.cc:32
 hkaldafwire.cc:33
 hkaldafwire.cc:34
 hkaldafwire.cc:35
 hkaldafwire.cc:36
 hkaldafwire.cc:37
 hkaldafwire.cc:38
 hkaldafwire.cc:39
 hkaldafwire.cc:40
 hkaldafwire.cc:41
 hkaldafwire.cc:42
 hkaldafwire.cc:43
 hkaldafwire.cc:44
 hkaldafwire.cc:45
 hkaldafwire.cc:46
 hkaldafwire.cc:47
 hkaldafwire.cc:48
 hkaldafwire.cc:49
 hkaldafwire.cc:50
 hkaldafwire.cc:51
 hkaldafwire.cc:52
 hkaldafwire.cc:53
 hkaldafwire.cc:54
 hkaldafwire.cc:55
 hkaldafwire.cc:56
 hkaldafwire.cc:57
 hkaldafwire.cc:58
 hkaldafwire.cc:59
 hkaldafwire.cc:60
 hkaldafwire.cc:61
 hkaldafwire.cc:62
 hkaldafwire.cc:63
 hkaldafwire.cc:64
 hkaldafwire.cc:65
 hkaldafwire.cc:66
 hkaldafwire.cc:67
 hkaldafwire.cc:68
 hkaldafwire.cc:69
 hkaldafwire.cc:70
 hkaldafwire.cc:71
 hkaldafwire.cc:72
 hkaldafwire.cc:73
 hkaldafwire.cc:74
 hkaldafwire.cc:75
 hkaldafwire.cc:76
 hkaldafwire.cc:77
 hkaldafwire.cc:78
 hkaldafwire.cc:79
 hkaldafwire.cc:80
 hkaldafwire.cc:81
 hkaldafwire.cc:82
 hkaldafwire.cc:83
 hkaldafwire.cc:84
 hkaldafwire.cc:85
 hkaldafwire.cc:86
 hkaldafwire.cc:87
 hkaldafwire.cc:88
 hkaldafwire.cc:89
 hkaldafwire.cc:90
 hkaldafwire.cc:91
 hkaldafwire.cc:92
 hkaldafwire.cc:93
 hkaldafwire.cc:94
 hkaldafwire.cc:95
 hkaldafwire.cc:96
 hkaldafwire.cc:97
 hkaldafwire.cc:98
 hkaldafwire.cc:99
 hkaldafwire.cc:100
 hkaldafwire.cc:101
 hkaldafwire.cc:102
 hkaldafwire.cc:103
 hkaldafwire.cc:104
 hkaldafwire.cc:105
 hkaldafwire.cc:106
 hkaldafwire.cc:107
 hkaldafwire.cc:108
 hkaldafwire.cc:109
 hkaldafwire.cc:110
 hkaldafwire.cc:111
 hkaldafwire.cc:112
 hkaldafwire.cc:113
 hkaldafwire.cc:114
 hkaldafwire.cc:115
 hkaldafwire.cc:116
 hkaldafwire.cc:117
 hkaldafwire.cc:118
 hkaldafwire.cc:119
 hkaldafwire.cc:120
 hkaldafwire.cc:121
 hkaldafwire.cc:122
 hkaldafwire.cc:123
 hkaldafwire.cc:124
 hkaldafwire.cc:125
 hkaldafwire.cc:126
 hkaldafwire.cc:127
 hkaldafwire.cc:128
 hkaldafwire.cc:129
 hkaldafwire.cc:130
 hkaldafwire.cc:131
 hkaldafwire.cc:132
 hkaldafwire.cc:133
 hkaldafwire.cc:134
 hkaldafwire.cc:135
 hkaldafwire.cc:136
 hkaldafwire.cc:137
 hkaldafwire.cc:138
 hkaldafwire.cc:139
 hkaldafwire.cc:140
 hkaldafwire.cc:141
 hkaldafwire.cc:142
 hkaldafwire.cc:143
 hkaldafwire.cc:144
 hkaldafwire.cc:145
 hkaldafwire.cc:146
 hkaldafwire.cc:147
 hkaldafwire.cc:148
 hkaldafwire.cc:149
 hkaldafwire.cc:150
 hkaldafwire.cc:151
 hkaldafwire.cc:152
 hkaldafwire.cc:153
 hkaldafwire.cc:154
 hkaldafwire.cc:155
 hkaldafwire.cc:156
 hkaldafwire.cc:157
 hkaldafwire.cc:158
 hkaldafwire.cc:159
 hkaldafwire.cc:160
 hkaldafwire.cc:161
 hkaldafwire.cc:162
 hkaldafwire.cc:163
 hkaldafwire.cc:164
 hkaldafwire.cc:165
 hkaldafwire.cc:166
 hkaldafwire.cc:167
 hkaldafwire.cc:168
 hkaldafwire.cc:169
 hkaldafwire.cc:170
 hkaldafwire.cc:171
 hkaldafwire.cc:172
 hkaldafwire.cc:173
 hkaldafwire.cc:174
 hkaldafwire.cc:175
 hkaldafwire.cc:176
 hkaldafwire.cc:177
 hkaldafwire.cc:178
 hkaldafwire.cc:179
 hkaldafwire.cc:180
 hkaldafwire.cc:181
 hkaldafwire.cc:182
 hkaldafwire.cc:183
 hkaldafwire.cc:184
 hkaldafwire.cc:185
 hkaldafwire.cc:186
 hkaldafwire.cc:187
 hkaldafwire.cc:188
 hkaldafwire.cc:189
 hkaldafwire.cc:190
 hkaldafwire.cc:191
 hkaldafwire.cc:192
 hkaldafwire.cc:193
 hkaldafwire.cc:194
 hkaldafwire.cc:195
 hkaldafwire.cc:196
 hkaldafwire.cc:197
 hkaldafwire.cc:198
 hkaldafwire.cc:199
 hkaldafwire.cc:200
 hkaldafwire.cc:201
 hkaldafwire.cc:202
 hkaldafwire.cc:203
 hkaldafwire.cc:204
 hkaldafwire.cc:205
 hkaldafwire.cc:206
 hkaldafwire.cc:207
 hkaldafwire.cc:208
 hkaldafwire.cc:209
 hkaldafwire.cc:210
 hkaldafwire.cc:211
 hkaldafwire.cc:212
 hkaldafwire.cc:213
 hkaldafwire.cc:214
 hkaldafwire.cc:215
 hkaldafwire.cc:216
 hkaldafwire.cc:217
 hkaldafwire.cc:218
 hkaldafwire.cc:219
 hkaldafwire.cc:220
 hkaldafwire.cc:221
 hkaldafwire.cc:222
 hkaldafwire.cc:223
 hkaldafwire.cc:224
 hkaldafwire.cc:225
 hkaldafwire.cc:226
 hkaldafwire.cc:227
 hkaldafwire.cc:228
 hkaldafwire.cc:229
 hkaldafwire.cc:230
 hkaldafwire.cc:231
 hkaldafwire.cc:232
 hkaldafwire.cc:233
 hkaldafwire.cc:234
 hkaldafwire.cc:235
 hkaldafwire.cc:236
 hkaldafwire.cc:237
 hkaldafwire.cc:238
 hkaldafwire.cc:239
 hkaldafwire.cc:240
 hkaldafwire.cc:241
 hkaldafwire.cc:242
 hkaldafwire.cc:243
 hkaldafwire.cc:244
 hkaldafwire.cc:245
 hkaldafwire.cc:246
 hkaldafwire.cc:247
 hkaldafwire.cc:248
 hkaldafwire.cc:249
 hkaldafwire.cc:250
 hkaldafwire.cc:251
 hkaldafwire.cc:252
 hkaldafwire.cc:253
 hkaldafwire.cc:254
 hkaldafwire.cc:255
 hkaldafwire.cc:256
 hkaldafwire.cc:257
 hkaldafwire.cc:258
 hkaldafwire.cc:259
 hkaldafwire.cc:260
 hkaldafwire.cc:261
 hkaldafwire.cc:262
 hkaldafwire.cc:263
 hkaldafwire.cc:264
 hkaldafwire.cc:265
 hkaldafwire.cc:266
 hkaldafwire.cc:267
 hkaldafwire.cc:268
 hkaldafwire.cc:269
 hkaldafwire.cc:270
 hkaldafwire.cc:271
 hkaldafwire.cc:272
 hkaldafwire.cc:273
 hkaldafwire.cc:274
 hkaldafwire.cc:275
 hkaldafwire.cc:276
 hkaldafwire.cc:277
 hkaldafwire.cc:278
 hkaldafwire.cc:279
 hkaldafwire.cc:280
 hkaldafwire.cc:281
 hkaldafwire.cc:282
 hkaldafwire.cc:283
 hkaldafwire.cc:284
 hkaldafwire.cc:285
 hkaldafwire.cc:286
 hkaldafwire.cc:287
 hkaldafwire.cc:288
 hkaldafwire.cc:289
 hkaldafwire.cc:290
 hkaldafwire.cc:291
 hkaldafwire.cc:292
 hkaldafwire.cc:293
 hkaldafwire.cc:294
 hkaldafwire.cc:295
 hkaldafwire.cc:296
 hkaldafwire.cc:297
 hkaldafwire.cc:298
 hkaldafwire.cc:299
 hkaldafwire.cc:300
 hkaldafwire.cc:301
 hkaldafwire.cc:302
 hkaldafwire.cc:303
 hkaldafwire.cc:304
 hkaldafwire.cc:305
 hkaldafwire.cc:306
 hkaldafwire.cc:307
 hkaldafwire.cc:308
 hkaldafwire.cc:309
 hkaldafwire.cc:310
 hkaldafwire.cc:311
 hkaldafwire.cc:312
 hkaldafwire.cc:313
 hkaldafwire.cc:314
 hkaldafwire.cc:315
 hkaldafwire.cc:316
 hkaldafwire.cc:317
 hkaldafwire.cc:318
 hkaldafwire.cc:319
 hkaldafwire.cc:320
 hkaldafwire.cc:321
 hkaldafwire.cc:322
 hkaldafwire.cc:323
 hkaldafwire.cc:324
 hkaldafwire.cc:325
 hkaldafwire.cc:326
 hkaldafwire.cc:327
 hkaldafwire.cc:328
 hkaldafwire.cc:329
 hkaldafwire.cc:330
 hkaldafwire.cc:331
 hkaldafwire.cc:332
 hkaldafwire.cc:333
 hkaldafwire.cc:334
 hkaldafwire.cc:335
 hkaldafwire.cc:336
 hkaldafwire.cc:337
 hkaldafwire.cc:338
 hkaldafwire.cc:339
 hkaldafwire.cc:340
 hkaldafwire.cc:341
 hkaldafwire.cc:342
 hkaldafwire.cc:343
 hkaldafwire.cc:344
 hkaldafwire.cc:345
 hkaldafwire.cc:346
 hkaldafwire.cc:347
 hkaldafwire.cc:348
 hkaldafwire.cc:349
 hkaldafwire.cc:350
 hkaldafwire.cc:351
 hkaldafwire.cc:352
 hkaldafwire.cc:353
 hkaldafwire.cc:354
 hkaldafwire.cc:355
 hkaldafwire.cc:356
 hkaldafwire.cc:357
 hkaldafwire.cc:358
 hkaldafwire.cc:359
 hkaldafwire.cc:360
 hkaldafwire.cc:361
 hkaldafwire.cc:362
 hkaldafwire.cc:363
 hkaldafwire.cc:364
 hkaldafwire.cc:365
 hkaldafwire.cc:366
 hkaldafwire.cc:367
 hkaldafwire.cc:368
 hkaldafwire.cc:369
 hkaldafwire.cc:370
 hkaldafwire.cc:371
 hkaldafwire.cc:372
 hkaldafwire.cc:373
 hkaldafwire.cc:374
 hkaldafwire.cc:375
 hkaldafwire.cc:376
 hkaldafwire.cc:377
 hkaldafwire.cc:378
 hkaldafwire.cc:379
 hkaldafwire.cc:380
 hkaldafwire.cc:381
 hkaldafwire.cc:382
 hkaldafwire.cc:383
 hkaldafwire.cc:384
 hkaldafwire.cc:385
 hkaldafwire.cc:386
 hkaldafwire.cc:387
 hkaldafwire.cc:388
 hkaldafwire.cc:389
 hkaldafwire.cc:390
 hkaldafwire.cc:391
 hkaldafwire.cc:392
 hkaldafwire.cc:393
 hkaldafwire.cc:394
 hkaldafwire.cc:395
 hkaldafwire.cc:396
 hkaldafwire.cc:397
 hkaldafwire.cc:398
 hkaldafwire.cc:399
 hkaldafwire.cc:400
 hkaldafwire.cc:401
 hkaldafwire.cc:402
 hkaldafwire.cc:403
 hkaldafwire.cc:404
 hkaldafwire.cc:405
 hkaldafwire.cc:406
 hkaldafwire.cc:407
 hkaldafwire.cc:408
 hkaldafwire.cc:409
 hkaldafwire.cc:410
 hkaldafwire.cc:411
 hkaldafwire.cc:412
 hkaldafwire.cc:413
 hkaldafwire.cc:414
 hkaldafwire.cc:415
 hkaldafwire.cc:416
 hkaldafwire.cc:417
 hkaldafwire.cc:418
 hkaldafwire.cc:419
 hkaldafwire.cc:420
 hkaldafwire.cc:421
 hkaldafwire.cc:422
 hkaldafwire.cc:423
 hkaldafwire.cc:424
 hkaldafwire.cc:425
 hkaldafwire.cc:426
 hkaldafwire.cc:427
 hkaldafwire.cc:428
 hkaldafwire.cc:429
 hkaldafwire.cc:430
 hkaldafwire.cc:431
 hkaldafwire.cc:432
 hkaldafwire.cc:433
 hkaldafwire.cc:434
 hkaldafwire.cc:435
 hkaldafwire.cc:436
 hkaldafwire.cc:437