ROOT logo
//*-- Author : Anar Rustamov
//*-- Modified : 24/11/2004 by V. Pechenov
//*-- Modified : 02/12/2004 by V. Pechenov

///////////////////////////////////////////////////////////////////////////
//
//  HMetaMatch2
//
//  Keep indexes of hits for one track, matching qualities, and
//  indexes of track objects (HSplineTrack, HKickTrackB,...).
//
//  Indexis of hits:
//    trkCandInd                      -  index of HTrkCand object
//                ----------- System=0 -----------------
//    rpcClstInd;                  -  index of HRpcCluster object
//    showerHitInd                    -  index of HShowerHit object
//                ----------- System=1 -----------------
//    tofHitInd                       -  index of HTofHit or HTofCluster object
//                ----------- RICH -----------------
//    richInd[RICH_TAB_SIZE]    -  arr.of indexes of HRichHit objects
//    richIPUInd[RICH_TAB_SIZE] -  arr.of indexes of HRichHitIPU objects
//
//    Arrais richInd and richIPUInd are sorted by matching quality
//    and can keep up to 3 ring indexes.
//
// Quality MDC SHOWER matching:
//   Xs,Ys - shower hit position in coordinate system of shower module
//   dXs,dYs - hit position errors (== HShowerHit::getSigmaX(), getSigmaY())
//   Xm,Ym - mdc segment cross point with shower module in coordinate system
//           of corresponding shower module
//   showerSigmaXOffset & showerSigmaYOffset - from HMetaMatchPar cont.
//   showerSigmaXMdc & showerSigmaYMdc - from HMetaMatchPar cont.
//   qualityShower =
//     sqrt[((Xs - Xm - showerSigmaXOffset)/sqrt(dXs^2 + showerSigmaXMdc^2))^2 +
//          ((Ys - Ym - showerSigmaYOffset)/sqrt(dYs^2 + showerSigmaYMdc^2))^2]
//
// Tof:
//   Xt,Yt - toh hit (or tof cluster position in coordinate system of tof module
//   Xm,Ym - mdc segment cross point with tof module in coordinate system
//           of corresponding tof module
//   tofSigmaXOffset, tofSigmaYOffset - from HMetaMatchPar cont.
//   tofSigmaX, tofSigmaY - from HMetaMatchPar cont.
//   qualityTof = sqrt[ ((Xt - Xm - tofSigmaXOffset)/tofSigmaX)^2 +
//                      ((Yt - Ym - tofSigmaYOffset)/tofSigmaY)^2 ]
//
///////////////////////////////////////////////////////////////////////////

#include "hmetamatch2.h"
#include "TMath.h"
#include "TBuffer.h"

using namespace std;

HMetaMatch2::HMetaMatch2() {
  sector           = -1;
  trkCandInd       = -1;
  ownIndex         = -1;
  setDefForRest();
}

HMetaMatch2::HMetaMatch2(Short_t sec, Int_t tkInd, Int_t ind) {
  sector           = sec;
  trkCandInd       = tkInd;
  ownIndex         = ind;
  setDefForRest();
}

void HMetaMatch2::setDefForRest(void) {
  nRichId    = 0;
  nRichIPUId = 0;
  nRpcClust  = 0;
  nShrHits   = 0;
  nTofHits   = 0;

  for(Int_t i = 0; i < META_TAB_SIZE; i++) {
    rpcClstInd[i]     = -1;
    shrHitInd[i]      = -1;
    tofClstInd[i]     = -1;
    tofHit1Ind[i]     = -1;
    tofHit2Ind[i]     = -1;

    rpcQuality[i]     = 0.f;
    rpcDX[i]          = 0.f;
    rpcDY[i]          = 0.f;

    shrQuality[i]     = 0.f;
    shrDX[i]          = 0.f;
    shrDY[i]          = 0.f;

    tofClstQuality[i] = 0.f;
    tofClstDX[i]      = 0.f;
    tofClstDY[i]      = 0.f;

    tofHit1Quality[i] = 0.f;
    tofHit1DX[i]      = 0.f;
    tofHit1DY[i]      = 0.f;

    tofHit2Quality[i] = 0.f;
    tofHit2DX[i]      = 0.f;
    tofHit2DY[i]      = 0.f;
 
 
    rkIndShower[i] = -1;
    rkIndTofCl[i]  = -1;
    rkIndTof1[i]   = -1;
    rkIndTof2[i]   = -1;
    rkIndRpc[i]    = -1;

    kfIndShower[i] = -1;
    kfIndTofCl[i]  = -1;
    kfIndTof1[i]   = -1;
    kfIndTof2[i]   = -1;
    kfIndRpc[i]    = -1;

    emcPath[i]     = -1; 
  }

  rungeKuttaInd = -1;

  for(Int_t i = 0; i < RICH_TAB_SIZE; i++) {
    richInd[i]    = -1;
    richIPUInd[i] = -1;
  }

  splineInd       = -1;
  //rungeKuttaInd   = -1;
  kalmanFilterInd = -1;
  flag            =  0;

  isFakeInner =kFALSE;
  isFakeOuter =kFALSE;

}

void HMetaMatch2::setRpcClst(UChar_t el,Short_t ind,Float_t ql,Float_t dx,Float_t dy) {
  if(el>nRpcClust) return;
  rpcClstInd[el] = ind;
  rpcQuality[el] = ql;
  rpcDX[el]      = dx;
  rpcDY[el]      = dy;
}

void HMetaMatch2::setShrHit(UChar_t el,Short_t ind,Float_t ql,Float_t dx,Float_t dy) {
  if(el>nShrHits) return;
  shrHitInd[el]  = ind;
  shrQuality[el] = ql;
  shrDX[el]      = dx;
  shrDY[el]      = dy;
}

void HMetaMatch2::setTofClst(UChar_t el,Short_t ind,Float_t ql,Float_t dx,Float_t dy) {
  if(el>nTofHits) return;
  tofClstInd[el]     = ind;
  tofClstQuality[el] = ql;
  tofClstDX[el]      = dx;
  tofClstDY[el]      = dy;
}

void HMetaMatch2::setTofHit1(UChar_t el,Short_t ind,Float_t ql,Float_t dx,Float_t dy) {
  if(el>nTofHits) return;
  tofHit1Ind[el]     = ind;
  tofHit1Quality[el] = ql;
  tofHit1DX[el]      = dx;
  tofHit1DY[el]      = dy;
}

void HMetaMatch2::setTofHit2(UChar_t el,Short_t ind,Float_t ql,Float_t dx,Float_t dy) {
  if(el>nTofHits) return;
  tofHit2Ind[el]     = ind;
  tofHit2Quality[el] = ql;
  tofHit2DX[el]      = dx;
  tofHit2DY[el]      = dy;
}

void HMetaMatch2::setRpcClstMMF(UChar_t nln,Short_t ind[],Float_t ql2[][3]) {
  // Filling function for HMetaMatchF2 class
  nRpcClust = nln<=META_TAB_SIZE ? nln : META_TAB_SIZE;
  for(UChar_t l=0;l<nRpcClust;l++) {
    rpcClstInd[l] = ind[l];
    rpcQuality[l] = TMath::Sqrt(ql2[l][0]);
    rpcDX[l]      = ql2[l][1];
    rpcDY[l]      = ql2[l][2];
  }
}

void HMetaMatch2::setShrHitMMF(UChar_t nln,Short_t ind[],Float_t ql2[][3]) {
  // Filling function for HMetaMatchF2 class
  nShrHits = nln<=META_TAB_SIZE ? nln : META_TAB_SIZE;
  for(UChar_t l=0;l<nShrHits;l++) {
    shrHitInd[l]  = ind[l];
    shrQuality[l] = TMath::Sqrt(ql2[l][0]);
    shrDX[l]      = ql2[l][1];
    shrDY[l]      = ql2[l][2];
  }
}

void HMetaMatch2::setEmcClstMMF(UChar_t nln,Short_t ind[],Float_t ql2[][4]) {
  // Filling function for HMetaMatchF2 class
  setEmcClusterFlag();
  nShrHits = nln<=META_TAB_SIZE ? nln : META_TAB_SIZE;
  for(UChar_t l=0;l<nShrHits;l++) {
    shrHitInd[l]  = ind[l];
    shrQuality[l] = TMath::Sqrt(ql2[l][0]);
    shrDX[l]      = ql2[l][1];
    shrDY[l]      = ql2[l][2];
    emcPath[l]    = ql2[l][3];
  }
}

void HMetaMatch2::setTofClstMMF(UChar_t nln,Short_t ind[][3],Float_t ql2[][9]) {
  // Filling function for HMetaMatchF2 class
  nTofHits = nln<=META_TAB_SIZE ? nln : META_TAB_SIZE;
  for(UChar_t l=0;l<nTofHits;l++) {
    tofClstInd[l]     = ind[l][0];
    tofHit1Ind[l]     = ind[l][1];
    tofHit2Ind[l]     = ind[l][2];
    
    tofClstQuality[l] = TMath::Sqrt(ql2[l][0]);
    tofClstDX[l]      = ql2[l][1];
    tofClstDY[l]      = ql2[l][2];
    tofHit1Quality[l] = TMath::Sqrt(ql2[l][3]);
    tofHit1DX[l]      = ql2[l][4];
    tofHit1DY[l]      = ql2[l][5];
    tofHit2Quality[l] = TMath::Sqrt(ql2[l][6]);
    tofHit2DX[l]      = ql2[l][7];
    tofHit2DY[l]      = ql2[l][8];
  }
}
   


//void HMetaMatch2::setRungeKuttaInd(Int_t rktr) {
//  rungeKuttaInd=rktr;
//  if(rungeKuttaInd>=0) setRungeKuttaAccept();
//  else unsetRungeKuttaAccept();
//}


Int_t HMetaMatch2::getSystem(void) const               {
  // Return -1 - no meta m., 0 - rpc,shower, 1 - tof, 2-overlap rpc-tof
  Int_t sys = nRpcClust>0 || nShrHits>0 ? 1 : 0;
  if(nTofHits>0) sys |= 2;
  return sys-1;
}

void HMetaMatch2::print(void) {
  printf("HMetaMatch2:  %i sector, index of trkCand=%i  [index(quality)]\n",sector+1,trkCandInd);
  if(nRpcClust>0) {
    printf("  HRpcCluster's:");
    for(UChar_t n=0;n<nRpcClust;n++) {
      if(rpcClstInd[n]>=0) printf("  %i(%.3g)",rpcClstInd[n],rpcQuality[n]);
    }
    printf("\n");
  }
  if(nShrHits>0) {
    printf("  HShowerHit's:");
    for(UChar_t n=0;n<nShrHits;n++) {
      if(shrHitInd[n]>=0) printf("  %i(%.3g)",shrHitInd[n],shrQuality[n]);
    }
    printf("\n");
  }

  if(nTofHits>0) {
    for(UChar_t n=0;n<nTofHits;n++) {
      if(tofClstInd[n]>=0) {
        printf("  HTofCluster: %i(%.3g)",tofClstInd[n],tofClstQuality[n]);
        if(tofHit1Ind[n]>=0) printf("/Hit1=%i(%.3g)",tofHit1Ind[n],tofHit1Quality[n]);
        if(tofHit2Ind[n]>=0) printf("/Hit2=%i(%.3g)",tofHit2Ind[n],tofHit2Quality[n]);
        printf("\n");
      } else {
        if(tofHit1Ind[n]>=0) printf("  HTofHit1: %i(%.3g)",tofHit1Ind[n],tofHit1Quality[n]);
        if(tofHit2Ind[n]>=0) printf("  HTofHit2: %i(%.3g)",tofHit2Ind[n],tofHit2Quality[n]);
        printf("\n");
      }      
    }
  }
  if(nRichId>0) {
    printf("  richHitInd =");
    for(UChar_t n=0;n<nRichId;n++) printf(" %i",richInd[n]);
    printf("\n");
  }
  if(nRichIPUId>0) {
    printf("  richHitIPUInd =");
    for(UChar_t n=0;n<nRichIPUId;n++) printf("  %i",richIPUInd[n]);
    printf("\n");
  }
  if(splineInd>=0 || rungeKuttaInd>=0 || kalmanFilterInd>=0) {
    printf("  Tracks:");
    if(splineInd>=0)       printf("  splineInd=%i",splineInd);
    if(rungeKuttaInd>=0)   printf("  rungeKuttaInd=%i",rungeKuttaInd);
    if(kalmanFilterInd>=0) printf("  kalmanFilterInd=%i", kalmanFilterInd);
    printf("\n");
  } else printf("  No accepted tracks!\n");
}
void HMetaMatch2::Streamer(TBuffer &R__b)
{
   // Stream an object of class HMetaMatch2.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      TObject::Streamer(R__b);
      R__b >> trkCandInd;
      R__b >> ownIndex;
      R__b >> sector;
      R__b >> nRpcClust;
      R__b >> nShrHits;
      R__b >> nTofHits;
      R__b >> rungeKuttaInd;
      R__b.ReadStaticArray((short*)rkIndShower);
      R__b.ReadStaticArray((short*)rkIndTofCl);
      R__b.ReadStaticArray((short*)rkIndTof1);
      R__b.ReadStaticArray((short*)rkIndTof2);
      R__b.ReadStaticArray((short*)rkIndRpc);
      R__b >> kalmanFilterInd;
      R__b.ReadStaticArray((short*)kfIndShower);
      R__b.ReadStaticArray((short*)kfIndTofCl);
      R__b.ReadStaticArray((short*)kfIndTof1);
      R__b.ReadStaticArray((short*)kfIndTof2);
      R__b.ReadStaticArray((short*)kfIndRpc);
      R__b.ReadStaticArray((short*)rpcClstInd);
      R__b.ReadStaticArray((short*)shrHitInd);
      R__b.ReadStaticArray((short*)tofClstInd);
      R__b.ReadStaticArray((short*)tofHit1Ind);
      R__b.ReadStaticArray((short*)tofHit2Ind);
      R__b.ReadStaticArray((float*)rpcQuality);
      R__b.ReadStaticArray((float*)rpcDX);
      R__b.ReadStaticArray((float*)rpcDY);
      R__b.ReadStaticArray((float*)shrQuality);
      R__b.ReadStaticArray((float*)shrDX);
      R__b.ReadStaticArray((float*)shrDY);
      if(R__v>2) R__b.ReadStaticArray((float*)emcPath);
      R__b.ReadStaticArray((float*)tofClstQuality);
      R__b.ReadStaticArray((float*)tofClstDX);
      R__b.ReadStaticArray((float*)tofClstDY);
      R__b.ReadStaticArray((float*)tofHit1Quality);
      R__b.ReadStaticArray((float*)tofHit1DX);
      R__b.ReadStaticArray((float*)tofHit1DY);
      R__b.ReadStaticArray((float*)tofHit2Quality);
      R__b.ReadStaticArray((float*)tofHit2DX);
      R__b.ReadStaticArray((float*)tofHit2DY);
      R__b >> splineInd;
      R__b >> nRichId;
      R__b >> nRichIPUId;
      R__b.ReadStaticArray((int*)richInd);
      R__b.ReadStaticArray((int*)richIPUInd);
      R__b >> flag;
      R__b >> isFakeInner;
      R__b >> isFakeOuter;
      R__b.CheckByteCount(R__s, R__c, HMetaMatch2::IsA());
   } else {
      R__c = R__b.WriteVersion(HMetaMatch2::IsA(), kTRUE);
      TObject::Streamer(R__b);
      R__b << trkCandInd;
      R__b << ownIndex;
      R__b << sector;
      R__b << nRpcClust;
      R__b << nShrHits;
      R__b << nTofHits;
      R__b << rungeKuttaInd;
      R__b.WriteArray(rkIndShower, 3);
      R__b.WriteArray(rkIndTofCl, 3);
      R__b.WriteArray(rkIndTof1, 3);
      R__b.WriteArray(rkIndTof2, 3);
      R__b.WriteArray(rkIndRpc, 3);
      R__b << kalmanFilterInd;
      R__b.WriteArray(kfIndShower, 3);
      R__b.WriteArray(kfIndTofCl, 3);
      R__b.WriteArray(kfIndTof1, 3);
      R__b.WriteArray(kfIndTof2, 3);
      R__b.WriteArray(kfIndRpc, 3);
      R__b.WriteArray(rpcClstInd, 3);
      R__b.WriteArray(shrHitInd, 3);
      R__b.WriteArray(tofClstInd, 3);
      R__b.WriteArray(tofHit1Ind, 3);
      R__b.WriteArray(tofHit2Ind, 3);
      R__b.WriteArray(rpcQuality, 3);
      R__b.WriteArray(rpcDX, 3);
      R__b.WriteArray(rpcDY, 3);
      R__b.WriteArray(shrQuality, 3);
      R__b.WriteArray(shrDX, 3);
      R__b.WriteArray(shrDY, 3);
      R__b.WriteArray(emcPath, 3);
      R__b.WriteArray(tofClstQuality, 3);
      R__b.WriteArray(tofClstDX, 3);
      R__b.WriteArray(tofClstDY, 3);
      R__b.WriteArray(tofHit1Quality, 3);
      R__b.WriteArray(tofHit1DX, 3);
      R__b.WriteArray(tofHit1DY, 3);
      R__b.WriteArray(tofHit2Quality, 3);
      R__b.WriteArray(tofHit2DX, 3);
      R__b.WriteArray(tofHit2DY, 3);
      R__b << splineInd;
      R__b << nRichId;
      R__b << nRichIPUId;
      R__b.WriteArray(richInd, 3);
      R__b.WriteArray(richIPUInd, 3);
      R__b << flag;
      R__b << isFakeInner;
      R__b << isFakeOuter;
      R__b.SetByteCount(R__c, kTRUE);
   }
}

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