ROOT logo
//#define __COMPILE__
//#ifdef __COMPILE__
#if !defined(__CINT__) || defined(__MAKECINT__)
//-- --- standard headers------------- 
#include <iostream.h>
#include <fstream.h>
//--------Root headers ---------------
#include <TSystem.h>
#include <TFile.h>
#include <TString.h>
#include <TStopwatch.h>
#include <TObject.h>
#include <TVector3.h>
#include <TTree.h>
#include <TObjArray>
#include <TParticle.h>
#include <TArray.h>
//----- AliRoot headers ---------------
#include "alles.h"
#include "AliRun.h"
#include "AliKalmanTrack.h"
#include "AliITStrackV2.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliV0vertex.h"
#include "AliV0vertexer.h"
#include "AliITSVertex.h"
#include "AliITSVertexer.h"
#include "AliITSVertexerTracks.h"
#include "AliD0Trigger.h"
#endif
//-------------------------------------
typedef struct {
  Int_t lab;
  Int_t pdg;
  Int_t mumlab;
  Int_t mumpdg;
  Float_t Vx,Vy,Vz;
  Float_t Px,Py,Pz;
} RECTRACK;

// field (T)
const Double_t kBz = 0.4;

// primary vertex
double primaryvertex[3]={0.,0.,0.};

//sec. vertex
double v2[3]={0,0,0};

// sigle track cuts
const Double_t kPtCut = 0.5;        // 0.5 GeV/c
const Double_t kd0Cut = 50.;        // 50  micron
const Double_t kd0CutHigh = 400.;   // 200 micron


//cuts for combined tracks
const Double_t cuts[7] = {0.005,     // 0.005 cuts[0] = lowest V0 cut  (cm)
			  0.800,     // 0.015 cuts[1] = highest V0 cut (cm)
			  0.012,     // 0.012 cuts[2] = inv. mass cut (diferense) (Gev/c)
			  0.8,       // 0.8   cuts[3] = min. cosine value for pointing angle
			  -5000,     // -5000 cuts[4] = d0d0
			  0,         // 0.8   cuts[5] = costhetastar
			  0.5};      // 0.5   cuts[6] = ptchild
//cut for distance of closest aprach
double cutDCA=0.05;   //0.05

// this function applies single track cuts
Bool_t TrkCuts(const AliITStrackV2& trk);

// this function creates TObjArrays with positive and negative tracks
void   SelectTracks(TTree& itsTree,
                      TObjArray& trksP,Int_t* itsEntryP,Int_t& nTrksP,
                      TObjArray& trksN,Int_t* itsEntryN,Int_t& nTrksN);

//void GetPrimaryVertex(int i,Char_t* path="./");

//void PtD0(Char_t* path="./");

Int_t iTrkP,iTrkN,itsEntries;
Char_t trksName[100],refsName[100];
Int_t nTrksP=0,nTrksN=0;
Int_t nD0=0;
int ev=0;
double mom[6];
int event[10000];
int index=0;
Bool_t isSignal;
Int_t nTotEv=0,nD0recSgn=0,nD0recBkgS=0,nD0recBkg=0,nD0rec1ev=0;
Int_t pdg[2],mum[2],mumlab[2];
RECTRACK rectrk;

void RunD0offline(Char_t* path="./",bool h=false,bool PtD0=false) {
    
  AliKalmanTrack::SetConvConst(100/0.299792458/kBz);
  
  // Open file with ITS tracks
  Char_t fnameTrack[1024];
  //sprintf(fnameTrack,"%s/AliITStracksV2.root",path);
  sprintf(fnameTrack,"%s/AliITStracksV2.root",path);
  TFile* itstrks = TFile::Open(fnameTrack);
  
  Char_t refFile[1024];
  //sprintf(fnameTrack,"%s/ITStracksRefFile.root",path);
  sprintf(refFile,"%s/ITStracksRefFile.root",path);
  TFile* itsrefs = TFile::Open(refFile);
  

  //the offline stuff
  // define the cuts for vertexing
  Double_t vtxcuts[]={33., // max. allowed chi2
		      0.0, // min. allowed negative daughter's impact param 
		      0.0, // min. allowed positive daughter's impact param 
		      1.0, // max. allowed DCA between the daughter tracks
		      -1.0, // min. allowed cosine of V0's pointing angle
		      0.0, // min. radius of the fiducial volume
		      2.9};// max. radius of the fiducial volume
  
  TH1F *h1 = new TH1F("h1","Transvers momentun of reconstructed D0",100,0,10);
  TH1F *h2 = new TH1F("h2","Transvers momentun of D0 with |Eta|<0.9",100,0,10);
  TH1F *h3 = new TH1F("h3","Eta reconstructed of D0",100,-5,5);
  TH1F *h4 = new TH1F("h4","Eta of D0",100,-5,5);
  
  Char_t falice[1024];
  sprintf(falice,"%s/galice.root",path);
  TFile *f = new TFile(falice);   
  gAlice=(AliRun*)f->Get("gAlice");
  int nEvent=gAlice->GetEventsPerRun();
  //int nEvent=20;
  cout<<"#Events: "<<nEvent<<endl;
  delete gAlice;

  const Char_t *name="AliD0offline";
  cerr<<'\n'<<name<<"...\n";
  gBenchmark->Start(name); 
  
  for(ev=0;ev<nEvent;ev++) {
    
    cout<<"\n Event: "<<ev<<endl;
    
    // tracks from ITS
    sprintf(trksName,"TreeT_ITS_%d",ev);
    TTree *itsTree=(TTree*)itstrks->Get(trksName);
    if(!itsTree) continue;
    itsEntries = (Int_t)itsTree->GetEntries();
    printf("+++\n+++ Number of tracks in ITS: %d\n+++\n\n",itsEntries);
    
    // tree from reference file
    
    sprintf(refsName,"Tree_Ref_%d",ev);
    TTree *refTree=(TTree*)itsrefs->Get(refsName);
    refTree->SetBranchAddress("rectracks",&rectrk);

    //Getting primary Vertex
    GetPrimaryVertex(ev,path);
    
    // count the total number of events
    nTotEv++;

    // call function which applies sigle track selection and
    // separetes positives and negatives
    TObjArray trksP(itsEntries/2);
    Int_t *itsEntryP = new Int_t[itsEntries];
    TObjArray trksN(itsEntries/2);
    Int_t *itsEntryN = new Int_t[itsEntries];
    SelectTracks(*itsTree,trksP,itsEntryP,nTrksP,trksN,itsEntryN,nTrksN); 
    
    cout<<"#pos: "<<nTrksP<<endl;
    cout<<"#neg: "<<nTrksN<<endl;
    
    // create the AliV0vertexer object
    AliV0vertexer *vertexer2 = new AliV0vertexer(vtxcuts);
    
    AliD0Trigger * D0 = new AliD0Trigger(cuts,kBz,primaryvertex);
    
    double ptP,alphaP,phiP,ptN,alphaN,phiN,dca;
    
    for(iTrkP=0; iTrkP<nTrksP; iTrkP++) {
      postrack = (AliITStrackV2*)trksP.At(iTrkP);

      // get info on tracks PDG and mothers PDG from reference file
      refTree->GetEvent(itsEntryP[iTrkP]);
      pdg[0] = rectrk.pdg;
      mum[0] = rectrk.mumpdg;
      mumlab[0] = rectrk.mumlab;

      for(iTrkN=0; iTrkN<nTrksN; iTrkN++) {
	negtrack = (AliITStrackV2*)trksN.At(iTrkN);

	// get info on tracks PDG and mothers PDG from reference file
	refTree->GetEvent(itsEntryN[iTrkN]);
	pdg[1] = rectrk.pdg;
	mum[1] = rectrk.mumpdg;
	mumlab[1] = rectrk.mumlab;

	D0->SetTracks(postrack,negtrack);

	// ----------- DCA MINIMIZATION ------------------
	//
	// find the DCA and propagate the tracks to the DCA 
	double dca = vertexer2->PropagateToDCA(negtrack,postrack);
	
	if(dca<cutDCA){
	  // define the AliV0vertex object
	  AliV0vertex *vertex2 = new AliV0vertex(*negtrack,*postrack);
	  // get position of the vertex
	  vertex2->GetXYZ(v2[0],v2[1],v2[2]);
	  delete vertex2;	
	  //if(D0->FindV0offline(v2) && D0->d0d0()){
	  if(D0->d0d0()){
	    D0->SetV0(v2);
	    D0->FindMomentaOffline();
	    if(D0->FindInvMass() && D0->CosThetaStar() && D0->PointingAngle() && D0->pTchild()){
	      nD0++;
	      event[index]=ev; index++;
	      if(h){
		h1->Fill(D0->Pt());
		h3->Fill(D0->Eta());
	      }
	      
	      if(mumlab[0]==mumlab[1] && TMath::Abs(mum[0])==421 && TMath::Abs(mum[1])==421) { 
		nD0recSgn++;
	      } 
	      else { 
		if(TMath::Abs(mum[0])==421 || TMath::Abs(mum[0])==411 ||
		   TMath::Abs(mum[1])==421 || TMath::Abs(mum[1])==411) {
		  nD0recBkgS++;
		} else {
		  nD0recBkg++;
		}  
	      }
	    }
	  } 
	}
      }
    } 
    
    //delete D0;
    //delete itstrks;
    //delete itsTree;
    //delete trksP;
    //delete itsEntryP;
    //delete trksN;
    //delete itsEntryN;
  }
  
  cout<<"\nMy #D0: "<<nD0<<"\n"<<endl;
  printf("\n+++\n+++ Total number of events: %d\n+++\n",nTotEv);
  printf("\n+++\n+++ Total number of D0 candidates:\n
                 +++    Sgn:   %d\n
                 +++    BkgS:  %d\n
                 +++    Bkg:   %d\n+++\n",nD0recSgn,nD0recBkgS,nD0recBkg);

  gBenchmark->Stop(name);
  gBenchmark->Show(name);
  
  if(h){
    if(!PtD0){
      TCanvas *c = new TCanvas("c","c",700,1000);
      c->Divide(1,2);
      c->cd(1);
      h1->Draw();
      pt = new TPaveText(7.3,0.4,11,1.8,"br");
      pt->SetFillColor(0);
      pt->SetBorderSize(1);
      pt->AddText("Cuts:");
      Char_t st[1024];
      sprintf(st,"First Pt:         %g",kPtCut);
      pt->AddText(st);
      sprintf(st,"d0 low:           %g",kd0Cut);
      pt->AddText(st);
      sprintf(st,"d0 high:          %g",kd0CutHigh);
      pt->AddText(st);
      sprintf(st,"V0 low:           %g",cuts[0]);
      pt->AddText(st);
      sprintf(st,"V0 high:          %g",cuts[1]);
      pt->AddText(st);
      sprintf(st,"InvMass Diff:     %g",cuts[2]);
      pt->AddText(st);
      sprintf(st,"cosPointingAngle: %g",cuts[3]);
      pt->AddText(st);
      sprintf(st,"d0d0:             %g",cuts[4]);
      pt->AddText(st);
      sprintf(st,"cosThetaStar:     %g",cuts[5]);
      pt->AddText(st);
      sprintf(st,"PtChild:          %g",cuts[6]);
      pt->AddText(st);
      sprintf(st,"DCA:              %g",cutDCA);
      pt->AddText(st);
      pt->Draw();
      c_1->Modified();
      c->cd();
      c->cd(2);
      h3->Draw();
    }
    if(PtD0){
      PtD0(path,h2,h4);
      TCanvas *c = new TCanvas("c","c",1000,700);
      c->Divide(2,2);
      c->cd(1);
      h1->Draw();
      pt = new TPaveText(7.3,0.4,11,1.8,"br");
      pt->SetFillColor(0);
      pt->SetBorderSize(1);
      pt->AddText("Cuts:");
      Char_t st[1024];
      sprintf(st,"First Pt:         %g",kPtCut);
      pt->AddText(st);
      sprintf(st,"d0 low:           %g",kd0Cut);
      pt->AddText(st);
      sprintf(st,"d0 high:          %g",kd0CutHigh);
      pt->AddText(st);
      sprintf(st,"V0 low:           %g",cuts[0]);
      pt->AddText(st);
      sprintf(st,"V0 high:          %g",cuts[1]);
      pt->AddText(st);
      sprintf(st,"InvMass Diff:     %g",cuts[2]);
      pt->AddText(st);
      sprintf(st,"cosPointAng: %g",cuts[3]);
      pt->AddText(st);
      sprintf(st,"d0d0:             %g",cuts[4]);
      pt->AddText(st);
      sprintf(st,"cosTheta*:     %g",cuts[5]);
      pt->AddText(st);
      sprintf(st,"PtChild:          %g",cuts[6]);
      pt->AddText(st);
      sprintf(st,"DCA:              %g",cutDCA);
      pt->AddText(st);
      pt->Draw();
      c_1->Modified();
      c->cd();
      c->cd(2);
      h3->Draw();
      c->cd(3);
      h2->Draw();
      c->cd(4);
      h4->Draw();
    }    
  }
  if(h){
    if(!PtD0){
      Char_t outName[1024];
      sprintf(outName,"%s/ReconstructedD0.root",path);
      TFile* outroot = new TFile(outName,"recreate");
      h1->Write();
      h3->Write();
      outroot->Close();
      delete outroot;
    }
  }
  if(PtD0){
    Char_t outName[1024];
    sprintf(outName,"%s/ReconstructedD0.root",path);
    TFile* outroot = new TFile(outName,"recreate");
    h1->Write();
    h2->Write();
    h3->Write();
    h4->Write();
    outroot->Close();
    delete outroot;
  }
  Char_t foutName[1024];
  sprintf(foutName,"%s/Cuts",path);
  ofstream fout(foutName);
  Char_t st2[1024];
  sprintf(st2,"First Pt:       %g",kPtCut);
  fout<<st2<<endl;
  sprintf(st2,"d0 low:         %g",kd0Cut);
  fout<<st2<<endl;
  sprintf(st2,"d0 high:        %g",kd0CutHigh);
  fout<<st2<<endl;
  sprintf(st2,"V0 low:         %g",cuts[0]);
  fout<<st2<<endl;
  sprintf(st2,"V0 high:        %g",cuts[1]);
  fout<<st2<<endl;
  sprintf(st2,"InvMass Diff:   %g",cuts[2]);
  fout<<st2<<endl;
  sprintf(st2,"cosPointAng:    %g",cuts[3]);
  fout<<st2<<endl;
  sprintf(st2,"d0d0:           %g",cuts[4]);
  fout<<st2<<endl;
  sprintf(st2,"cosTheta*:      %g",cuts[5]);
  fout<<st2<<endl;
  sprintf(st2,"PtChild:        %g",cuts[6]);
  fout<<st2<<endl;
  sprintf(st2,"DCA:            %g",cutDCA);
  fout<<st2<<endl;
  fout.close();

  Char_t fName[1024];
  sprintf(fName,"%s/Events",path);
  ofstream fevent(fName);
  for(int i=0;i<nD0;i++){fevent<<event[i]<<endl;}
  fevent.close();
}
//___________________________________________________________________________
void   SelectTracks(TTree& itsTree,
                    TObjArray& trksP,Int_t* itsEntryP,Int_t& nTrksP,
                    TObjArray& trksN,Int_t* itsEntryN,Int_t& nTrksN) {
//
// this function creates two TObjArrays with positive and negative tracks
//
  nTrksP=0,nTrksN=0;

 
  Int_t entr = (Int_t)itsTree.GetEntries();

  // trasfer tracks from tree to arrays
  for(Int_t i=0; i<entr; i++) {

    AliITStrackV2 *itstrack = new AliITStrackV2; 
    itsTree.SetBranchAddress("tracks",&itstrack);

    itsTree.GetEvent(i);

    // single track selection
    if(!TrkCuts(*itstrack)) { delete itstrack; continue; }

    if(itstrack->Get1Pt()>0.) { // negative track
      trksN.AddLast(itstrack);
      itsEntryN[nTrksN] = i;
      nTrksN++;
    } else {                    // positive track
      trksP.AddLast(itstrack);
      itsEntryP[nTrksP] = i;
      nTrksP++;
    }

  }

  return;
}
//____________________________________________________________________________
Bool_t TrkCuts(const AliITStrackV2& trk) {
// 
// this function tells if track passes some kinematical cuts  
//
  if(TMath::Abs(1./trk.Get1Pt()) < kPtCut)                return kFALSE;
  if(TMath::Abs(10000.*trk.GetD(primaryvertex[0],primaryvertex[1])) < kd0Cut) return kFALSE;
  //if(TMath::Abs(10000.*trk.GetD(primaryvertex[0],primaryvertex[1])) > kd0CutHigh) return kFALSE;

  return kTRUE;
}
//____________________________________________________________________________
void GetPrimaryVertex(int i,Char_t* path="./") {

  int event=i;

  Char_t falice[1024];
  sprintf(falice,"%s/galice.root",path);
  TFile * galice = new TFile(falice);
  
  TDirectory * curdir;  

  Char_t vname[20];
  galice->cd();
  
  sprintf(vname,"Vertex_%d",event);
  TArrayF o = 0;
  o.Set(3);
  AliHeader * header = 0;
  
  TTree * treeE = (TTree*)gDirectory->Get("TE");
  treeE->SetBranchAddress("Header",&header);
  treeE->GetEntry(event);
  AliGenEventHeader* genHeader = header->GenEventHeader();
  if(genHeader){
    genHeader->PrimaryVertex(o);
    primaryvertex[0] = (Double_t)o[0];
    primaryvertex[1] = (Double_t)o[1];
    primaryvertex[2] = (Double_t)o[2];
  }
  else{
    printf("Can't find Header");
  }
  delete header;
  delete galice;
}
//____________________________________________________________________________
PtD0(Char_t* path="./",TH1F * h1,TH1F * h4){
  
  Char_t falice[1024];
  sprintf(falice,"%s/galice.root",path);  
  TFile *f = new TFile(falice);
  gAlice=(AliRun*)f->Get("gAlice");
  
  TParticle *p;
  int nd0=0;
  int nkminus =0;
  int npipluss = 0;
  int nEvent=gAlice->GetEventsPerRun();
  
  for (Int_t i = 0; i <nEvent; i++) {
    cout<<"Event: "<<i<<endl;
    gAlice->GetEvent(i);
    Int_t nPart = gAlice->GetNtrack();
    for (Int_t iPart = 0; iPart < nPart; iPart++) {
      //cout<<"Particlenr.: "<<iPart<<endl;
      p = (TParticle*)gAlice->Particle(iPart);
      if (p->GetPdgCode()==421){
	if(fabs(p->Eta())<0.9) h1->Fill(p.Pt());
	h4->Fill(p.Eta());
	nd0++;
      }
      if (p->GetPdgCode()==-321){
	nkminus++;
      }
      if (p->GetPdgCode()==211){
	npipluss++;
      }
    }
  }
  delete gAlice;
}
 RunD0offline.C:1
 RunD0offline.C:2
 RunD0offline.C:3
 RunD0offline.C:4
 RunD0offline.C:5
 RunD0offline.C:6
 RunD0offline.C:7
 RunD0offline.C:8
 RunD0offline.C:9
 RunD0offline.C:10
 RunD0offline.C:11
 RunD0offline.C:12
 RunD0offline.C:13
 RunD0offline.C:14
 RunD0offline.C:15
 RunD0offline.C:16
 RunD0offline.C:17
 RunD0offline.C:18
 RunD0offline.C:19
 RunD0offline.C:20
 RunD0offline.C:21
 RunD0offline.C:22
 RunD0offline.C:23
 RunD0offline.C:24
 RunD0offline.C:25
 RunD0offline.C:26
 RunD0offline.C:27
 RunD0offline.C:28
 RunD0offline.C:29
 RunD0offline.C:30
 RunD0offline.C:31
 RunD0offline.C:32
 RunD0offline.C:33
 RunD0offline.C:34
 RunD0offline.C:35
 RunD0offline.C:36
 RunD0offline.C:37
 RunD0offline.C:38
 RunD0offline.C:39
 RunD0offline.C:40
 RunD0offline.C:41
 RunD0offline.C:42
 RunD0offline.C:43
 RunD0offline.C:44
 RunD0offline.C:45
 RunD0offline.C:46
 RunD0offline.C:47
 RunD0offline.C:48
 RunD0offline.C:49
 RunD0offline.C:50
 RunD0offline.C:51
 RunD0offline.C:52
 RunD0offline.C:53
 RunD0offline.C:54
 RunD0offline.C:55
 RunD0offline.C:56
 RunD0offline.C:57
 RunD0offline.C:58
 RunD0offline.C:59
 RunD0offline.C:60
 RunD0offline.C:61
 RunD0offline.C:62
 RunD0offline.C:63
 RunD0offline.C:64
 RunD0offline.C:65
 RunD0offline.C:66
 RunD0offline.C:67
 RunD0offline.C:68
 RunD0offline.C:69
 RunD0offline.C:70
 RunD0offline.C:71
 RunD0offline.C:72
 RunD0offline.C:73
 RunD0offline.C:74
 RunD0offline.C:75
 RunD0offline.C:76
 RunD0offline.C:77
 RunD0offline.C:78
 RunD0offline.C:79
 RunD0offline.C:80
 RunD0offline.C:81
 RunD0offline.C:82
 RunD0offline.C:83
 RunD0offline.C:84
 RunD0offline.C:85
 RunD0offline.C:86
 RunD0offline.C:87
 RunD0offline.C:88
 RunD0offline.C:89
 RunD0offline.C:90
 RunD0offline.C:91
 RunD0offline.C:92
 RunD0offline.C:93
 RunD0offline.C:94
 RunD0offline.C:95
 RunD0offline.C:96
 RunD0offline.C:97
 RunD0offline.C:98
 RunD0offline.C:99
 RunD0offline.C:100
 RunD0offline.C:101
 RunD0offline.C:102
 RunD0offline.C:103
 RunD0offline.C:104
 RunD0offline.C:105
 RunD0offline.C:106
 RunD0offline.C:107
 RunD0offline.C:108
 RunD0offline.C:109
 RunD0offline.C:110
 RunD0offline.C:111
 RunD0offline.C:112
 RunD0offline.C:113
 RunD0offline.C:114
 RunD0offline.C:115
 RunD0offline.C:116
 RunD0offline.C:117
 RunD0offline.C:118
 RunD0offline.C:119
 RunD0offline.C:120
 RunD0offline.C:121
 RunD0offline.C:122
 RunD0offline.C:123
 RunD0offline.C:124
 RunD0offline.C:125
 RunD0offline.C:126
 RunD0offline.C:127
 RunD0offline.C:128
 RunD0offline.C:129
 RunD0offline.C:130
 RunD0offline.C:131
 RunD0offline.C:132
 RunD0offline.C:133
 RunD0offline.C:134
 RunD0offline.C:135
 RunD0offline.C:136
 RunD0offline.C:137
 RunD0offline.C:138
 RunD0offline.C:139
 RunD0offline.C:140
 RunD0offline.C:141
 RunD0offline.C:142
 RunD0offline.C:143
 RunD0offline.C:144
 RunD0offline.C:145
 RunD0offline.C:146
 RunD0offline.C:147
 RunD0offline.C:148
 RunD0offline.C:149
 RunD0offline.C:150
 RunD0offline.C:151
 RunD0offline.C:152
 RunD0offline.C:153
 RunD0offline.C:154
 RunD0offline.C:155
 RunD0offline.C:156
 RunD0offline.C:157
 RunD0offline.C:158
 RunD0offline.C:159
 RunD0offline.C:160
 RunD0offline.C:161
 RunD0offline.C:162
 RunD0offline.C:163
 RunD0offline.C:164
 RunD0offline.C:165
 RunD0offline.C:166
 RunD0offline.C:167
 RunD0offline.C:168
 RunD0offline.C:169
 RunD0offline.C:170
 RunD0offline.C:171
 RunD0offline.C:172
 RunD0offline.C:173
 RunD0offline.C:174
 RunD0offline.C:175
 RunD0offline.C:176
 RunD0offline.C:177
 RunD0offline.C:178
 RunD0offline.C:179
 RunD0offline.C:180
 RunD0offline.C:181
 RunD0offline.C:182
 RunD0offline.C:183
 RunD0offline.C:184
 RunD0offline.C:185
 RunD0offline.C:186
 RunD0offline.C:187
 RunD0offline.C:188
 RunD0offline.C:189
 RunD0offline.C:190
 RunD0offline.C:191
 RunD0offline.C:192
 RunD0offline.C:193
 RunD0offline.C:194
 RunD0offline.C:195
 RunD0offline.C:196
 RunD0offline.C:197
 RunD0offline.C:198
 RunD0offline.C:199
 RunD0offline.C:200
 RunD0offline.C:201
 RunD0offline.C:202
 RunD0offline.C:203
 RunD0offline.C:204
 RunD0offline.C:205
 RunD0offline.C:206
 RunD0offline.C:207
 RunD0offline.C:208
 RunD0offline.C:209
 RunD0offline.C:210
 RunD0offline.C:211
 RunD0offline.C:212
 RunD0offline.C:213
 RunD0offline.C:214
 RunD0offline.C:215
 RunD0offline.C:216
 RunD0offline.C:217
 RunD0offline.C:218
 RunD0offline.C:219
 RunD0offline.C:220
 RunD0offline.C:221
 RunD0offline.C:222
 RunD0offline.C:223
 RunD0offline.C:224
 RunD0offline.C:225
 RunD0offline.C:226
 RunD0offline.C:227
 RunD0offline.C:228
 RunD0offline.C:229
 RunD0offline.C:230
 RunD0offline.C:231
 RunD0offline.C:232
 RunD0offline.C:233
 RunD0offline.C:234
 RunD0offline.C:235
 RunD0offline.C:236
 RunD0offline.C:237
 RunD0offline.C:238
 RunD0offline.C:239
 RunD0offline.C:240
 RunD0offline.C:241
 RunD0offline.C:242
 RunD0offline.C:243
 RunD0offline.C:244
 RunD0offline.C:245
 RunD0offline.C:246
 RunD0offline.C:247
 RunD0offline.C:248
 RunD0offline.C:249
 RunD0offline.C:250
 RunD0offline.C:251
 RunD0offline.C:252
 RunD0offline.C:253
 RunD0offline.C:254
 RunD0offline.C:255
 RunD0offline.C:256
 RunD0offline.C:257
 RunD0offline.C:258
 RunD0offline.C:259
 RunD0offline.C:260
 RunD0offline.C:261
 RunD0offline.C:262
 RunD0offline.C:263
 RunD0offline.C:264
 RunD0offline.C:265
 RunD0offline.C:266
 RunD0offline.C:267
 RunD0offline.C:268
 RunD0offline.C:269
 RunD0offline.C:270
 RunD0offline.C:271
 RunD0offline.C:272
 RunD0offline.C:273
 RunD0offline.C:274
 RunD0offline.C:275
 RunD0offline.C:276
 RunD0offline.C:277
 RunD0offline.C:278
 RunD0offline.C:279
 RunD0offline.C:280
 RunD0offline.C:281
 RunD0offline.C:282
 RunD0offline.C:283
 RunD0offline.C:284
 RunD0offline.C:285
 RunD0offline.C:286
 RunD0offline.C:287
 RunD0offline.C:288
 RunD0offline.C:289
 RunD0offline.C:290
 RunD0offline.C:291
 RunD0offline.C:292
 RunD0offline.C:293
 RunD0offline.C:294
 RunD0offline.C:295
 RunD0offline.C:296
 RunD0offline.C:297
 RunD0offline.C:298
 RunD0offline.C:299
 RunD0offline.C:300
 RunD0offline.C:301
 RunD0offline.C:302
 RunD0offline.C:303
 RunD0offline.C:304
 RunD0offline.C:305
 RunD0offline.C:306
 RunD0offline.C:307
 RunD0offline.C:308
 RunD0offline.C:309
 RunD0offline.C:310
 RunD0offline.C:311
 RunD0offline.C:312
 RunD0offline.C:313
 RunD0offline.C:314
 RunD0offline.C:315
 RunD0offline.C:316
 RunD0offline.C:317
 RunD0offline.C:318
 RunD0offline.C:319
 RunD0offline.C:320
 RunD0offline.C:321
 RunD0offline.C:322
 RunD0offline.C:323
 RunD0offline.C:324
 RunD0offline.C:325
 RunD0offline.C:326
 RunD0offline.C:327
 RunD0offline.C:328
 RunD0offline.C:329
 RunD0offline.C:330
 RunD0offline.C:331
 RunD0offline.C:332
 RunD0offline.C:333
 RunD0offline.C:334
 RunD0offline.C:335
 RunD0offline.C:336
 RunD0offline.C:337
 RunD0offline.C:338
 RunD0offline.C:339
 RunD0offline.C:340
 RunD0offline.C:341
 RunD0offline.C:342
 RunD0offline.C:343
 RunD0offline.C:344
 RunD0offline.C:345
 RunD0offline.C:346
 RunD0offline.C:347
 RunD0offline.C:348
 RunD0offline.C:349
 RunD0offline.C:350
 RunD0offline.C:351
 RunD0offline.C:352
 RunD0offline.C:353
 RunD0offline.C:354
 RunD0offline.C:355
 RunD0offline.C:356
 RunD0offline.C:357
 RunD0offline.C:358
 RunD0offline.C:359
 RunD0offline.C:360
 RunD0offline.C:361
 RunD0offline.C:362
 RunD0offline.C:363
 RunD0offline.C:364
 RunD0offline.C:365
 RunD0offline.C:366
 RunD0offline.C:367
 RunD0offline.C:368
 RunD0offline.C:369
 RunD0offline.C:370
 RunD0offline.C:371
 RunD0offline.C:372
 RunD0offline.C:373
 RunD0offline.C:374
 RunD0offline.C:375
 RunD0offline.C:376
 RunD0offline.C:377
 RunD0offline.C:378
 RunD0offline.C:379
 RunD0offline.C:380
 RunD0offline.C:381
 RunD0offline.C:382
 RunD0offline.C:383
 RunD0offline.C:384
 RunD0offline.C:385
 RunD0offline.C:386
 RunD0offline.C:387
 RunD0offline.C:388
 RunD0offline.C:389
 RunD0offline.C:390
 RunD0offline.C:391
 RunD0offline.C:392
 RunD0offline.C:393
 RunD0offline.C:394
 RunD0offline.C:395
 RunD0offline.C:396
 RunD0offline.C:397
 RunD0offline.C:398
 RunD0offline.C:399
 RunD0offline.C:400
 RunD0offline.C:401
 RunD0offline.C:402
 RunD0offline.C:403
 RunD0offline.C:404
 RunD0offline.C:405
 RunD0offline.C:406
 RunD0offline.C:407
 RunD0offline.C:408
 RunD0offline.C:409
 RunD0offline.C:410
 RunD0offline.C:411
 RunD0offline.C:412
 RunD0offline.C:413
 RunD0offline.C:414
 RunD0offline.C:415
 RunD0offline.C:416
 RunD0offline.C:417
 RunD0offline.C:418
 RunD0offline.C:419
 RunD0offline.C:420
 RunD0offline.C:421
 RunD0offline.C:422
 RunD0offline.C:423
 RunD0offline.C:424
 RunD0offline.C:425
 RunD0offline.C:426
 RunD0offline.C:427
 RunD0offline.C:428
 RunD0offline.C:429
 RunD0offline.C:430
 RunD0offline.C:431
 RunD0offline.C:432
 RunD0offline.C:433
 RunD0offline.C:434
 RunD0offline.C:435
 RunD0offline.C:436
 RunD0offline.C:437
 RunD0offline.C:438
 RunD0offline.C:439
 RunD0offline.C:440
 RunD0offline.C:441
 RunD0offline.C:442
 RunD0offline.C:443
 RunD0offline.C:444
 RunD0offline.C:445
 RunD0offline.C:446
 RunD0offline.C:447
 RunD0offline.C:448
 RunD0offline.C:449
 RunD0offline.C:450
 RunD0offline.C:451
 RunD0offline.C:452
 RunD0offline.C:453
 RunD0offline.C:454
 RunD0offline.C:455
 RunD0offline.C:456
 RunD0offline.C:457
 RunD0offline.C:458
 RunD0offline.C:459
 RunD0offline.C:460
 RunD0offline.C:461
 RunD0offline.C:462
 RunD0offline.C:463
 RunD0offline.C:464
 RunD0offline.C:465
 RunD0offline.C:466
 RunD0offline.C:467
 RunD0offline.C:468
 RunD0offline.C:469
 RunD0offline.C:470
 RunD0offline.C:471
 RunD0offline.C:472
 RunD0offline.C:473
 RunD0offline.C:474
 RunD0offline.C:475
 RunD0offline.C:476
 RunD0offline.C:477
 RunD0offline.C:478
 RunD0offline.C:479
 RunD0offline.C:480
 RunD0offline.C:481
 RunD0offline.C:482
 RunD0offline.C:483
 RunD0offline.C:484
 RunD0offline.C:485
 RunD0offline.C:486
 RunD0offline.C:487
 RunD0offline.C:488
 RunD0offline.C:489
 RunD0offline.C:490
 RunD0offline.C:491
 RunD0offline.C:492
 RunD0offline.C:493
 RunD0offline.C:494
 RunD0offline.C:495
 RunD0offline.C:496
 RunD0offline.C:497
 RunD0offline.C:498
 RunD0offline.C:499
 RunD0offline.C:500
 RunD0offline.C:501
 RunD0offline.C:502
 RunD0offline.C:503
 RunD0offline.C:504
 RunD0offline.C:505
 RunD0offline.C:506
 RunD0offline.C:507
 RunD0offline.C:508
 RunD0offline.C:509
 RunD0offline.C:510
 RunD0offline.C:511
 RunD0offline.C:512
 RunD0offline.C:513
 RunD0offline.C:514
 RunD0offline.C:515