ROOT logo
//*-- AUTHOR : Vladimir Pechenov
//*-- Modified : 31.05.2001 by Vladimir Pechenov

//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////////////
//  HMdcSegSim
//
// This class is derived from HMdcSeg for simulated events.
// Additional data elements are following:
//   nTracks - the number of tracks in the list of tracks numbers
//   listTracks[5] - the list of tracks numbers (GEANT)
//   nTimes[5] - num. of drift times from each track in this segment hit
//     (not cells because one cell can have 2 drift times from 2 tracks)
//   Number of noise wires is kept in nTimes[4] and
//   if nTimes[4]>0 listTracks[4]=-99
// This information can be accessed via the functions:
//    Int_t getNTracks(void)
//    Int_t getTrack(const Int_t n)      0 <= n < getNTracks()
//    UChar_t getNTimes(const Int_t n)
//    Int_t   getNumNoiseWires(void)
//
// The list of tracks is sorted by flag "real track", matching flag and number of wires.
// The list of tracks is sorted after filling of HMdcSegSim container
// via function  void sortTrListByContr(void).
//
// Example of using getGoodTrack(...) function:
//  HMdcSegSim* innerSeg =...;
//  HMdcSegSim* outerSeg =...;
//  Int_t nWiresCut = 5; // 5 is default value
//  Int_t nGoodInnerTracks = innerSeg->getNNotFakeTracks();
//  for(Int_t i1=0;i1<nGoodInnerTracks;i1++) {
//    Int_t track = innerSeg->getGoodTrack(i1,outerSeg,nWiresCut);
//    if(track==0) {
//      fake!
//    } else if(track>0) {
//      good track!
//    } else { //<0
//      ...
//    }
//  }
// 
//
// Example of using getNextGoodTrack(...) function:
//  HMdcSegSim* innerSeg =...;
//  HMdcSegSim* outerSeg =...;
//  Int_t nWiresCut = 5; // 5 is default value
//  Int_t i1=0;
//  Int_t track;
//  while( (track=innerSeg->getNextGoodTrack(i1,outerSeg,nWiresCut)) >0) {
//    good track!
//  } 
//
///////////////////////////////////////////////////////////////////////////////

#include "hmdcsegsim.h"
#include "hades.h"
#include "hmdcdef.h"
#include "hmdccal1sim.h"
#include "hevent.h"
#include "hcategory.h"
#include "hmessagemgr.h"
#include "htool.h"

ClassImp(HMdcSegSim)

void HMdcSegSim::clear()
{
  // reset data members to default values
  clearSimInfo();
  HMdcSeg::Clear();
}

void HMdcSegSim::clearSimInfo(void) {
  // reset data members to default values
  status         = 0;
  nTracks        = 0;
  nNotFakeTracks = -1;
  ioSMatchStatus = -1;
  for(Int_t i=0;i<5;i++){
    listTracks[i]  = 0;
    nTimes[i]      = 0;
    nDigiTimes[i]  = 0;
    trackStatus[i] = 1;  // No metamatch flag any more!
  }
}

void HMdcSegSim::setNTracks(Int_t nTr, const Int_t* listTr,const UChar_t* nTm,const UChar_t* nDi) {
    // copies nTr track numbers from array listTr to
    // internal list of tracks array.

  if(nTr<=0) nTracks=-1;
  else {
    Int_t maxTr = (nTr<6) ? nTr:5;
    nTracks = 0;
    for(Int_t n=0; n<maxTr; n++) {
        listTracks[nTracks] = listTr[n];
        nTimes[nTracks]     = nTm[n];
        if(nDi != NULL) nDigiTimes[nTracks] =  nDi[n];
        nTracks++;
    }
  }
}

void HMdcSegSim::addTrack(Int_t track, UChar_t nTm,UChar_t nDi) {
  // add track info to internal list of tracks array.
  if(nTracks>=0 && nTracks < 5) {
    listTracks[nTracks] = track;
    nTimes[nTracks]     = nTm;
    nDigiTimes[nTracks] = nDi;
    nTracks++;
  }
}

Int_t HMdcSegSim::calcNTracks(void) {
    // calculate number of tracks which
    // contribute to the segment and fills the
    // list of tracks array. Needs the
    // event structure and Cal1Sim category
    // to deliver results.

  nTracks=0;
  HCategory *fCalCat=gHades->getCurrentEvent()->getCategory(catMdcCal1);
  if(!fCalCat) return -1;
  HLocation loc;
  loc.set(4,getSec(),0,0,0);
  Int_t seg=getIOSeg();
  Int_t tmpListTracks[96];
  Int_t nTimesTot=0;
  for(Int_t layer=0; layer<12; layer++) {
    Int_t nCells=getNCells(layer);
    if(nCells==0) continue;
    loc[1]=seg*2+layer/6;
    loc[2]=layer%6;
    for(Int_t n=0; n<nCells; n++) {
      UChar_t nCTimes=getSignId(layer,n);
      loc[3]=getCell(layer,n);
      HMdcCal1Sim *fCal1Sim=(HMdcCal1Sim*)fCalCat->getObject(loc);
      if(fCal1Sim)
      {
	  if(nCTimes&1) tmpListTracks[nTimesTot++]=fCal1Sim->getNTrack1();
	  if(nCTimes&2) tmpListTracks[nTimesTot++]=fCal1Sim->getNTrack2();
      } else Error("calcNTracks","Zero pointer received!");
    }
  }
  Short_t counter[96];
  listTracks[4]=-99;        // [4] - for noise wires
  nTimes[4]=0;              // ...
  for(Int_t n=0; n<nTimesTot; n++) {
    if(tmpListTracks[n]<0 &&
       tmpListTracks[n]!=gHades->getEmbeddingRealTrackId()) {
      nTimes[4]++;          // noise wires
      continue;
    } else if(tmpListTracks[n]>0 ||
	      tmpListTracks[n]==gHades->getEmbeddingRealTrackId()) {
      tmpListTracks[nTracks]=tmpListTracks[n];
      counter[nTracks]=1;
      for(Int_t m=n+1; m<nTimesTot; m++) {
        if(tmpListTracks[m] != tmpListTracks[nTracks]) continue;
        counter[nTracks]++;
        tmpListTracks[m]=0;
      }
      nTracks++;
    }
  }

  //Sorting:
  if(nTracks>0)
  {
      Int_t index[nTracks];
      if(nTracks>1) HTool::sort(nTracks,counter,index,kTRUE,kTRUE);  // sort: down, change counter array directly
      else index[0]=0;

      //Fill output:
      if(nTracks>4) nTracks=(nTimes[4]==0) ? 5:4;
      for(Int_t n=0; n<nTracks; n++) {
	  listTracks[n]=tmpListTracks[index[n]];
	  nTimes[n]=counter[n];
      }
  }
  return nTracks;
}

Int_t HMdcSegSim::getNumNoiseWires(void) const {
  for(Int_t n=0; n<5; n++) if(listTracks[n]==-99) return nTimes[n];
  return 0;
}

void HMdcSegSim::sortTrListByContr(void) {
  // Sorting track list "listTr" by "FakeContribution" flag.
  // After sorting tracks with "not Fake" status will be moved to top of arrays.
  nNotFakeTracks = 0;
  for(Int_t t=0;t<nTracks;t++) if( !isFakeContribution(t) ) {
    nNotFakeTracks++;
  }
  if(nTracks==1) return;
  Int_t nTimesSort[5];
  for(Int_t t=0;t<nTracks;t++) {
    nTimesSort[t] = nTimes[t];
    if(isFakeContribution(t)) continue;
    nTimesSort[t] <<= 16;
  }
  for(Int_t t1=0;t1<nTracks-1;t1++) {
    Int_t maxInd = t1;
    for(Int_t t2=t1+1;t2<nTracks;t2++) if(nTimesSort[t2] > nTimesSort[maxInd]) maxInd = t2;
    if(maxInd == t1) continue;
    nTimesSort[maxInd] = nTimesSort[t1];
    exchangeTrPos(t1,maxInd);
  }
}

void HMdcSegSim::exchangeTrPos(Int_t t1,Int_t t2) {
  Int_t   v1 = listTracks[t1];
  Short_t v2 = nTimes[t1];
  UChar_t v3 = nDigiTimes[t1];
  UChar_t v4 = trackStatus[t1];

  listTracks[t1]  = listTracks[t2];
  nTimes[t1]      = nTimes[t2];
  nDigiTimes[t1]  = nDigiTimes[t2];
  trackStatus[t1] = trackStatus[t2];

  listTracks[t2]  = v1;
  nTimes[t2]      = v2;
  nDigiTimes[t2]  = v3;
  trackStatus[t2] = v4;
}

void HMdcSegSim::print(void) {
    // prints the information about wires (number of wires,
    // track numbers and how often a track has been contributing
    // to the the segment) in segment to the screen.
  HMdcSeg::print();
  printf("  GEANT: %i tracks in segment",nTracks);
  if(nNotFakeTracks==0) printf(".  FAKE SEGMENT!\n");
  else  {
    if(nNotFakeTracks>=0 && nNotFakeTracks != nTracks) 
        printf(",  %i of them - fakes contribution.\n",nTracks-nNotFakeTracks);
  }
  
  for(Int_t n=0; n<5; n++) if(nTimes[n]>0) {
    printf("%6i(%2iw.",listTracks[n],nTimes[n]);
    if(listTracks[n] > 0) {
      printf(" from %2iw.)",nDigiTimes[n]);
      if((trackStatus[n]&254) == 254)      printf(" Ok.");  // No metamatch flag any more!
      else {
        if((trackStatus[n]&2)   == 0)      printf(" FakeContribution");
        else {
          if((trackStatus[n]&2)      == 0) printf(" FakeSegment");
          if((trackStatus[n]&4)      == 0) printf(" ClFnLevelTooHigh");
          if((trackStatus[n]&16)     == 0) printf(" SegNotRec");
          else if((trackStatus[n]&8) == 0) printf(" 1or2HitsNotRec");
          if((trackStatus[n]&32)     == 0) printf(" TrackNotRec");
          if((trackStatus[n]&64)     == 0) printf(" NoMeta");
          if((trackStatus[n]&128)    == 0) printf(" GEANT_Bug");
        }
      }
    }
    else if(listTracks[n] == -500) printf(") Embeded real track"); /*gHades->getEmbeddingRealTrackId() - not static*/
    else if(listTracks[n] ==  -99) printf(") Noised wires");
    else if(listTracks[n] ==   -9) printf(") GEANT bug wires");
    else                           printf(") Not known track number!");
    printf("\n");
  }
}

void HMdcSegSim::setTrackInf(const Int_t *lst,const Short_t *nTms,
                             const UChar_t *nDTms,const UChar_t *tSt) {
  for(Int_t i=0;i<5;i++) {
    listTracks[i]  = lst[i];
    nTimes[i]      = nTms[i]; 
    nDigiTimes[i]  = nDTms[i];
    trackStatus[i] = tSt[i];
  }
}

UChar_t HMdcSegSim::getTrackStatus(Int_t n) const {
  return indOk(n) ? trackStatus[n] : 0;
}

Int_t HMdcSegSim::getGoodTrack(Int_t i1,HMdcSegSim* outerSeg,Int_t nWiresCut) const {
  // Function return geant track number if track this->listTracks[i1] marked as real 
  // in inner and outer segments
  // and segments have at least nWiresCut wires from this track in each segment.
  // Otherwise -  return 0.
  // "this" object must be inner segment
  // "outerSeg" object must be corresponding (not any one!) outer segment
  if(getIOSeg() != 0) {
    Error("getGoodTrack","call this function for inner segment only!");
    return 0;
  }
  if(outerSeg == 0 || outerSeg->getIOSeg() != 1) {
    Error("getGoodTrack","Parameter outerSeg must be outer segment!");
    return 0;
  }
  if(i1<0 || i1>=nNotFakeTracks) return 0;
  if(outerSeg->nNotFakeTracks<1) return 0;
  if(nTimes[i1]<nWiresCut)       return 0;
  for(Int_t i2=0;i2<outerSeg->nNotFakeTracks;i2++) {
    if(listTracks[i1] != outerSeg->listTracks[i2]) continue;
    if(outerSeg->nTimes[i2]<nWiresCut)             continue;
    return listTracks[i1];
  }
  return 0;
}

Int_t HMdcSegSim::getNextGoodTrack(Int_t& i1,HMdcSegSim* outerSeg,Int_t nWiresCut) const {
  // Function searchs the good track (see. funct.getGoodTrack) starting from index i1.
  // Function return geant track number and track index(i1) if searching was successful
  // otherwise -  return 0.
  // "this" object must be inner segment
  // "outerSeg" object must be corresponding (not any one!) outer segment
  if(getIOSeg() != 0) {
    Error("getGoodTrack","call this function for inner segment only!");
    return 0;
  }
  if(outerSeg == 0 || outerSeg->getIOSeg() != 1) {
    Error("getGoodTrack","Parameter outerSeg must be outer segment!");
    return 0;
  }
  if(outerSeg->nNotFakeTracks<1) return 0;
  if(i1<0) i1=0;
  if(i1>=nNotFakeTracks) return 0;
  for(;i1<nNotFakeTracks;i1++) {
    if(nTimes[i1]<nWiresCut) continue;
    Int_t track = listTracks[i1];
    for(Int_t i2=0;i2<outerSeg->nNotFakeTracks;i2++) {
      if(track != outerSeg->listTracks[i2]) continue;
      if(outerSeg->nTimes[i2]<nWiresCut)             continue;
      i1++;
      return track;
    }
  }
  return 0;
}

Int_t HMdcSegSim::findTrack(Int_t geantNum,Int_t nDgTimes) const {
  // return index of geantTrack in listTracks[]
  // return -1 if there no such track
  for(Int_t n=0;n<nTracks;n++) if(geantNum == listTracks[n]) {
     if(nDgTimes==0 || nDgTimes == nDigiTimes[n]) return n;
   }
   return -1;
}
    
Int_t HMdcSegSim::getTrackIndex(Int_t tr) const {
  for(Int_t i=0;i<nTracks;i++) if(listTracks[i] == tr) return i;
  return -1;
}

Bool_t HMdcSegSim::resetFakeContributionFlag(void) {
  // For procedure of fake suppression only!
  // For track listTracks[0] only.
  if( !isFakeContribution(0) || nTimes[0] < 5 || nTimes[0]*2 <= getSumWires() ) return kFALSE;
  trackStatus[0] |= 2; // Not fake
  nNotFakeTracks++;
  return kTRUE;
}

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