ROOT logo
//*-- Created : 04/12/2009 by J.Markert
//*-- Modified : 26/02/2014 by I.Koenig
//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////////////
//
//  HStart2HitFSim
//
//  This class implements the hit finder for the Start2 detector in simulation.
//  Since there is no START in simulation only the start hit with the given
//  time resultion is generated to give realistic resultion of the TOF and RPC.
//
//  For background simulations of the Pion beam an active Start detector was
//  implemented. The GEANT hits are digitized and the fastest hit is stored
//  with the integrated energy loss and the track number.
//  If the primary vertex is in front of the Start detector, the start time is
//  scaled to the center of the target. The task selectes the mode usually by
//  detecting the catStartGeantRaw category in the input file. if one has a file
//  containing the start, but one wants to skip the part then setDoGeantHit(kFALSE)
//  can be selected.
//  
///////////////////////////////////////////////////////////////////////////////

#include "hades.h"
#include "hcategory.h"
#include "hcategorymanager.h"
#include "hiterator.h"
#include "hevent.h"
#include "hstart2hit.h"
#include "hstart2hitfsim.h"
#include "hstartdef.h"
#include "hgeantstart.h"
#include "hgeantkine.h"
#include "hruntimedb.h"
#include "hstart2geompar.h"
#include "hstart2digipar.h"
#include "hspecgeompar.h"
#include "hgeomvolume.h"

#include "TRandom.h"

#include <iomanip>
#include <iostream>

using namespace std;

ClassImp(HStart2HitFSim)
HStart2HitFSim* HStart2HitFSim::fHitFinder = NULL;
Bool_t          HStart2HitFSim::doGeantHit = kTRUE;
HStart2HitFSim::HStart2HitFSim(void)
   : HReconstructor()
{
   // default constructor
   fresolution    = 0.06;
   initVar();
}

HStart2HitFSim::HStart2HitFSim(const Text_t *name, const Text_t *title, Double_t resol)
   : HReconstructor(name, title)
{
   // constructor
   fresolution    = resol;
   initVar();
}

HStart2HitFSim::~HStart2HitFSim(void)
{
   // destructor
   if (iterGeantStart) delete iterGeantStart;
   clearCellobjects();
   cellobjects.clear();
}

void HStart2HitFSim::initVar(void)
{
  // sets variables in constructor
   fCatHit        = NULL;
   fCatGeantStart = NULL;
   iterGeantStart = NULL;
   fCatGeantKine  = NULL;
   fGeomPar       = NULL;
   fDigiPar       = NULL;
   fSpecGeomPar   = NULL;
   targetCenter.setXYZ(0.,0.,0.);
   fHitFinder     = this;
}

Bool_t HStart2HitFSim::init(void)
{
   // creates the Start2Hit category
   fCatHit = HCategoryManager::getCategory(catStart2Hit,2);
   if(!fCatHit) fCatHit = HCategoryManager::addCategory(catStart2Hit,"HStart2Hit",10,"Start",kFALSE);

   if(doGeantHit){
       // GEANT input data
       fCatGeantKine = HCategoryManager::getCategory(catGeantKine,2);
       fCatGeantStart = HCategoryManager::getCategory(catStartGeantRaw,2);
       if (fCatGeantKine && fCatGeantStart)
       {
	   iterGeantStart = (HIterator *)fCatGeantStart->MakeIterator("native");

	   return setParameterContainers();
       }
   }
   return kTRUE;
}

Bool_t HStart2HitFSim::reinit(void)
{
   if (fGeomPar && fGeomPar->hasChanged())
   {
      // working array with size constant over run time
      cellobjects.resize(fGeomPar->getMaxCells(), 0 );
   }
   if (fSpecGeomPar && fSpecGeomPar->hasChanged())
   {
      targetCenter.setXYZ(0.,0.,0.);
      Int_t numTargets=fSpecGeomPar->getNumTargets();
      HGeomVector* targets = new HGeomVector [numTargets];
      for(Int_t i=0;i<numTargets;i++)
      {
         HGeomVolume* targ = fSpecGeomPar->getTarget(i);
         if(!targ) {
	   Error("reinit","No target volume %i found",i);
           return kFALSE; 
         }
         targets[i] = targ->getTransform().getTransVector();
         Double_t zV1 = targ->getPoint(0)->getZ();
         Double_t zV2 = targ->getPoint(2)->getZ();
         targets[i].setZ(targets[i].getZ()+(zV1+zV2)/2.);
         Int_t t1 = i;
         for(Int_t t2=t1-1;t2>=0;t2--)
         {
            if(targets[t1].getZ()>targets[t2].getZ()) break;
            HGeomVector tmpVec(targets[t2]);
            targets[t2] = targets[t1];
            targets[t1] = tmpVec;
            t1 = t2;
         }  
      }
      targetCenter = targets[0];
      if (numTargets>1)
      {
         targetCenter += targets[numTargets-1];
         targetCenter*= 0.5;
      }
      delete [] targets;
   }
   return kTRUE;
}

Bool_t HStart2HitFSim::setParameterContainers(void)
{
   // get parameter containers for digitization for GEANT hits
   fGeomPar=(HStart2GeomPar*)gHades->getRuntimeDb()->getContainer("Start2GeomPar");
   if (!fGeomPar)
   {
      Error("setParameterContainers","No Start2GeomPar parameter container");
      return kFALSE;
   }
   fDigiPar    =(HStart2DigiPar *)gHades->getRuntimeDb()->getContainer("Start2DigiPar");
   if (!fDigiPar)
   {
      Error("setParameterContainers","No Start2DigiPar parameter container");
      return kFALSE;
   }
   fSpecGeomPar=(HSpecGeomPar*)gHades->getRuntimeDb()->getContainer("SpecGeomPar");
   if (!fSpecGeomPar)
   {
      Error("setParameterContainers","No SpecGeomPar parameter container");
      return kFALSE;
   }
   return kTRUE;
}

Int_t HStart2HitFSim::execute(void)
{
   // fills the HStartHit category

   if(!fCatHit) return 0;

   //--------------------------------------------------
   // decision sim or embedding : real taks will
   // create StartHit before sim task
   Bool_t exists = kFALSE;
   HStart2Hit* pHit = NULL;

   if(fCatHit->getEntries()<1){
       Int_t index=-1;
       pHit = HCategoryManager::newObject(pHit,fCatHit,index);
   } else {
       pHit = (HStart2Hit*) fCatHit->getObject(0);
       if(pHit) exists = kTRUE;
   }
   //--------------------------------------------------


   //--------------------------------------------------
   // find out if primaries are inserted in front of
   // the START : decision on vertex_z
   Bool_t doStartDigi = kFALSE;
   if(!exists&&doGeantHit&&fCatGeantKine&&fCatGeantStart) {
       HGeantKine* kine=0;
       Float_t vx,vy,vz;
       Float_t prim_vertexz=10000;
       for(Int_t i = 0; i < fCatGeantKine->getEntries();i++){
	   kine = HCategoryManager::getObject(kine,fCatGeantKine,i);
	   if(kine){
               if(kine->getParentTrack()>0) continue; // looking to primaries only
	       kine->getVertex(vx,vy,vz);
	       if(sqrt(vx*vx+vy*vy)>3000)   continue; // cosmic generator
	       if(vz<prim_vertexz) {
		   prim_vertexz = vz;
                   break;
	       }
	   }
       }
       if(prim_vertexz < -100) doStartDigi = kTRUE; // particle was inserted in front of target
   }
   //--------------------------------------------------

   //--------------------------------------------------
   // Fill the start hit
   Int_t   module    = 0;
   Int_t   strip     = 0;
   if (NULL != pHit) {
       Float_t res = gRandom->Gaus(0,fresolution);
       if(exists){
	   pHit->setResolution(res);
           pHit->setSimWidth(fresolution);

       } else {
	  if (!fCatGeantStart || !doStartDigi)   // doStartDigi will be kFALSE if doGeantHit=kFALSE
          {
	     pHit->setAddress(module, strip);
	     pHit->setTimeAndWidth(res, 1);
	     pHit->setResolution(res);
	     pHit->setSimWidth(fresolution);
	     pHit->setMultiplicity(1);
          } else digitize(pHit);
	  pHit->setFlag(kTRUE);
	  pHit->setCorrFlag(2);
          pHit->setIteration(2);
       }
   } else {
       Error("execute", "Can't get slot");
       return 0;
   }
   //--------------------------------------------------

   return 0;
}

void HStart2HitFSim::digitize(HStart2Hit* pHit)
{
   // digitizes GEANT START hits and fills the HStartHit category

   HGeantStart* pGeantStart = NULL;

   Int_t   gCell       = -1;
   Int_t   trackNumber = -1;
   Float_t eHit        = 0.F;
   Float_t xHit        = 0.F;
   Float_t yHit        = 0.F;
   Float_t tofHit      = 0.F;
   Float_t momHit      = 0.F;
   Float_t trackLength = 0.F;

   //loop over the HGeantStart objects and fill temporary working objects
   clearCellobjects();
   iterGeantStart->Reset();
   while ((pGeantStart=(HGeantStart*)iterGeantStart->Next())!=0)
   {  
      trackNumber = pGeantStart->getTrack();
      gCell = pGeantStart->getCell();
      if (gCell<0 || gCell>=fGeomPar->getMaxComponents())
      {
         Warning("HStart2Digitizer:execute","Start Geant cell address invalid: cell=%i",gCell);
         continue;
      }                     
      pGeantStart->getHit(eHit, xHit, yHit, tofHit, momHit, trackLength);
      Int_t cellInd = fGeomPar->getCellIndex(gCell, xHit, yHit);
      if (cellobjects[cellInd] == 0)
      { // first time we have to create the object
         cellobjects[cellInd] = new celldata;
      }
      celldata* cdata = cellobjects[cellInd];
      celltrack* celltr;
      // CASE I: no tracks in this cell yet
      if (cdata->ctracks.size()==0)
      {
      // create new object for this cell and add them to the list of tracks for this cell
      celltr = new celltrack;
      celltr->reset();
      cdata->ctracks.push_back(celltr);
      } else
      {
         // CASE II: this cell has already tracks
         // check if current track is already present in the list 
         for(UInt_t i=0;i<cdata->ctracks.size();i++)
         {
            celltr = cdata->ctracks[i];
            // CASE II a: the current track found in list
            if (celltr->gtrack == trackNumber) break;
         }
         // CASE II b: the current track is not in list yet
         if (celltr->gtrack != trackNumber)
         {
            celltr = new celltrack;
            celltr->reset();
            cdata->ctracks.push_back(celltr);
         }
      }
      if (tofHit < celltr->gtime)
      {
         celltr->gtime     = tofHit;
         celltr->gtrack    = trackNumber;
      }
      if (eHit > celltr->geloss)
      {
         celltr-> geloss = eHit;
      }
   } // end of HGeantStart loop

   Float_t time1    = 10000.f;
   Int_t   track    = -1;
   Int_t   module   = 0;
   Int_t   strip    = 0;
   Int_t   nMult    = 0;
   Float_t totEloss = 0.f;
   for(UInt_t i = 0; i < cellobjects.size(); i ++)
   {
      celldata* cdata = cellobjects[i];
      if (cdata && cdata->ctracks.size() > 0 )
      {
         // ------  sort by time  ----------------
         cdata->sortTime();
         celltrack* celltr = cdata->ctracks[0];
         // ------  time of fastest track    -----
         Float_t gtime = celltr->gtime;
         // ------  integrated energy loss  ------
         Float_t energy = celltr->geloss; 
         Float_t dt = gtime + fDigiPar->getDeltaTimeE();
         for (UInt_t k=1;k<cdata->ctracks.size();k++)
         {
            celltrack* celltr2 = cdata->ctracks[k];
            if (celltr2->gtime < dt)
            {
               energy += celltr2->geloss;
            }
         }
         // smear energy loss and require minimum energy loss
         Float_t energyS = gRandom->Gaus(energy,energy*fDigiPar->getSigmaE());
         if (gtime>0.f && energyS>fDigiPar->getMinEloss())
         {
            nMult++;
            // scale time to target center
            const HGeomVector* cellPos = fGeomPar->getLabPos(i);
            HGeantKine* pKine = HGeantKine::getPrimary(celltr->gtrack,(HLinearCategory*)fCatGeantKine);
            if (cellPos && pKine)
            {
               Float_t vx, vy, vz, cellz, dist;
               pKine->getVertex(vx,vy,vz);
               cellz = cellPos->getZ();
               if (vz < (cellz-0.1f))
               {
                  dist = cellz - vz;
                  gtime = (targetCenter.getZ()-vz) / dist * gtime;
               }
            }
            // smear time and find fastest hit
            Float_t time = gRandom->Gaus(gtime,fDigiPar->getSigmaT());
            if (time<time1)
            {
               strip    = i;
               time1    = time;
               totEloss = energyS;
               track    = celltr->gtrack;
            }
         } 
      }
   } // end loop cells

   if (nMult==0) time1 = fDigiPar->getTimeNoHit();
   pHit->setAddress(module, strip);
   pHit->setTimeAndWidth(time1,totEloss);
   pHit->setResolution(time1);
   pHit->setMultiplicity(nMult);
   pHit->setTrack(track);
}

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